From 19b8f3b9263210d9154e7556446e903f84175519 Mon Sep 17 00:00:00 2001 From: dj3c1t Date: Fri, 30 Nov 2012 23:29:28 +0100 Subject: [PATCH] import mtweb.0.4.1 --- readme.txt | 107 + web/.htaccess | 7 + web/app/config.xml | 23 + web/app/data/impl/mw_mysql.php | 87 + web/app/data/impl/mw_xml.php | 180 + web/app/data/impl/xml/mw_xml_data.php | 105 + web/app/data/impl/xml/mw_xml_data_handler.php | 128 + .../data/modules/share/mw_data_check_instance.php | 12 + web/app/data/modules/share/mw_data_images.php | 28 + web/app/data/modules/share/mw_data_init.php | 18 + web/app/data/modules/share/mw_data_links.php | 99 + web/app/data/modules/share/mw_data_out_config.php | 29 + web/app/data/modules/share/mw_data_utils.php | 77 + web/app/data/modules/sql/mw_data_config.php | 64 + web/app/data/modules/sql/mw_data_users.php | 259 + web/app/data/modules/xml/mw_data_config.php | 106 + web/app/data/modules/xml/mw_data_users.php | 427 + web/app/data/mw_data.php | 8 + web/app/data/mw_sgbd.php | 109 + web/app/env/modules/mw_env_config.php | 114 + web/app/env/modules/mw_env_data.php | 15 + web/app/env/modules/mw_env_init.php | 65 + web/app/env/modules/mw_env_inputs.php | 42 + web/app/env/modules/mw_env_links.php | 23 + web/app/env/modules/mw_env_messages.php | 35 + web/app/env/modules/mw_env_out.php | 275 + web/app/env/modules/mw_env_plugins.php | 185 + web/app/env/modules/mw_env_run.php | 174 + web/app/env/modules/mw_env_urls.php | 47 + web/app/env/mw_env.php | 35 + web/app/init/0100_functions.php | 7 + web/app/init/0200_inputs.php | 60 + web/app/init/0300_data.php | 40 + web/app/init/0400_config.php | 18 + web/app/init/0500_users.php | 14 + web/app/init/0600_check_instance.php | 11 + web/app/init/0700_links.php | 10 + web/app/init/0800_init_plugins.php | 12 + web/app/init/0900_pre_run.php | 5 + web/app/main.php | 36 + web/app/mods/admin/config.php | 66 + web/app/mods/admin/index.php | 11 + web/app/mods/admin/plugins.php | 163 + web/app/mods/admin/users.php | 147 + web/app/mods/forms/contact.php | 72 + web/app/mods/index/index.php | 19 + web/app/mods/mw_mod.php | 12 + web/app/mods/reponses/html.php | 19 + web/app/mods/users/compte.php | 37 + web/app/mods/users/identification.php | 36 + web/app/mods/users/index.php | 11 + web/app/mods/users/infos.php | 73 + web/app/mw_plugin.php | 38 + web/config.php | 65 + web/content/data/.htaccess | 1 + web/content/data/mysql/mtweb.sql | 108 + web/content/data/xml/mw/action_status/.index | 1 + web/content/data/xml/mw/action_status/170.xml | 4 + web/content/data/xml/mw/action_status/171.xml | 4 + web/content/data/xml/mw/action_status/172.xml | 5 + web/content/data/xml/mw/action_status/173.xml | 4 + web/content/data/xml/mw/config/.index | 1 + web/content/data/xml/mw/config/1.xml | 3 + web/content/data/xml/mw/config/2.xml | 3 + web/content/data/xml/mw/config/21.xml | 3 + web/content/data/xml/mw/config/22.xml | 3 + web/content/data/xml/mw/config/34.xml | 3 + web/content/data/xml/mw/config/39.xml | 3 + web/content/data/xml/mw/config/40.xml | 3 + web/content/data/xml/mw/config/41.xml | 3 + web/content/data/xml/mw/config/55.xml | 3 + web/content/data/xml/mw/config/56.xml | 3 + web/content/data/xml/mw/config/57.xml | 3 + web/content/data/xml/mw/user_status/.index | 1 + web/content/data/xml/mw/user_status/1.xml | 4 + web/content/data/xml/mw/user_status/2.xml | 4 + web/content/data/xml/mw/users/.index | 1 + web/content/data/xml/mw/users/14.xml | 6 + web/index.php | 8 + web/libs/empty_class.php | 114 + web/libs/inputfilter.php | 315 + web/libs/ptitcaptcha.php | 127 + web/libs/sxml.php | 74 + web/libs/tiny_mce/langs/en.js | 170 + web/libs/tiny_mce/license.txt | 504 + web/libs/tiny_mce/plugins/advhr/css/advhr.css | 5 + web/libs/tiny_mce/plugins/advhr/editor_plugin.js | 1 + .../tiny_mce/plugins/advhr/editor_plugin_src.js | 57 + web/libs/tiny_mce/plugins/advhr/js/rule.js | 43 + web/libs/tiny_mce/plugins/advhr/langs/en_dlg.js | 5 + web/libs/tiny_mce/plugins/advhr/rule.htm | 57 + .../tiny_mce/plugins/advimage/css/advimage.css | 13 + .../tiny_mce/plugins/advimage/editor_plugin.js | 1 + .../tiny_mce/plugins/advimage/editor_plugin_src.js | 50 + web/libs/tiny_mce/plugins/advimage/image.htm | 232 + web/libs/tiny_mce/plugins/advimage/img/sample.gif | Bin 0 -> 1624 bytes web/libs/tiny_mce/plugins/advimage/js/image.js | 443 + web/libs/tiny_mce/plugins/advimage/langs/en_dlg.js | 43 + web/libs/tiny_mce/plugins/advlink/css/advlink.css | 8 + web/libs/tiny_mce/plugins/advlink/editor_plugin.js | 1 + .../tiny_mce/plugins/advlink/editor_plugin_src.js | 61 + web/libs/tiny_mce/plugins/advlink/js/advlink.js | 528 + web/libs/tiny_mce/plugins/advlink/langs/en_dlg.js | 52 + web/libs/tiny_mce/plugins/advlink/link.htm | 333 + web/libs/tiny_mce/plugins/advlist/editor_plugin.js | 1 + .../tiny_mce/plugins/advlist/editor_plugin_src.js | 154 + .../tiny_mce/plugins/autoresize/editor_plugin.js | 1 + .../plugins/autoresize/editor_plugin_src.js | 119 + .../tiny_mce/plugins/autosave/editor_plugin.js | 1 + .../tiny_mce/plugins/autosave/editor_plugin_src.js | 422 + web/libs/tiny_mce/plugins/autosave/langs/en.js | 4 + web/libs/tiny_mce/plugins/bbcode/editor_plugin.js | 1 + .../tiny_mce/plugins/bbcode/editor_plugin_src.js | 120 + .../tiny_mce/plugins/contextmenu/editor_plugin.js | 1 + .../plugins/contextmenu/editor_plugin_src.js | 147 + .../plugins/directionality/editor_plugin.js | 1 + .../plugins/directionality/editor_plugin_src.js | 82 + .../tiny_mce/plugins/emotions/editor_plugin.js | 1 + .../tiny_mce/plugins/emotions/editor_plugin_src.js | 43 + web/libs/tiny_mce/plugins/emotions/emotions.htm | 40 + .../tiny_mce/plugins/emotions/img/smiley-cool.gif | Bin 0 -> 354 bytes .../tiny_mce/plugins/emotions/img/smiley-cry.gif | Bin 0 -> 329 bytes .../plugins/emotions/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../plugins/emotions/img/smiley-foot-in-mouth.gif | Bin 0 -> 344 bytes .../tiny_mce/plugins/emotions/img/smiley-frown.gif | Bin 0 -> 340 bytes .../plugins/emotions/img/smiley-innocent.gif | Bin 0 -> 336 bytes .../tiny_mce/plugins/emotions/img/smiley-kiss.gif | Bin 0 -> 338 bytes .../plugins/emotions/img/smiley-laughing.gif | Bin 0 -> 344 bytes .../plugins/emotions/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emotions/img/smiley-sealed.gif | Bin 0 -> 325 bytes .../tiny_mce/plugins/emotions/img/smiley-smile.gif | Bin 0 -> 345 bytes .../plugins/emotions/img/smiley-surprised.gif | Bin 0 -> 342 bytes .../plugins/emotions/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../plugins/emotions/img/smiley-undecided.gif | Bin 0 -> 337 bytes .../tiny_mce/plugins/emotions/img/smiley-wink.gif | Bin 0 -> 351 bytes .../tiny_mce/plugins/emotions/img/smiley-yell.gif | Bin 0 -> 336 bytes web/libs/tiny_mce/plugins/emotions/js/emotions.js | 22 + web/libs/tiny_mce/plugins/emotions/langs/en_dlg.js | 20 + web/libs/tiny_mce/plugins/example/dialog.htm | 22 + web/libs/tiny_mce/plugins/example/editor_plugin.js | 1 + .../tiny_mce/plugins/example/editor_plugin_src.js | 84 + web/libs/tiny_mce/plugins/example/img/example.gif | Bin 0 -> 87 bytes web/libs/tiny_mce/plugins/example/js/dialog.js | 19 + web/libs/tiny_mce/plugins/example/langs/en.js | 3 + web/libs/tiny_mce/plugins/example/langs/en_dlg.js | 3 + .../tiny_mce/plugins/fullpage/css/fullpage.css | 182 + .../tiny_mce/plugins/fullpage/editor_plugin.js | 1 + .../tiny_mce/plugins/fullpage/editor_plugin_src.js | 153 + web/libs/tiny_mce/plugins/fullpage/fullpage.htm | 571 + web/libs/tiny_mce/plugins/fullpage/js/fullpage.js | 471 + web/libs/tiny_mce/plugins/fullpage/langs/en_dlg.js | 85 + .../tiny_mce/plugins/fullscreen/editor_plugin.js | 1 + .../plugins/fullscreen/editor_plugin_src.js | 151 + .../tiny_mce/plugins/fullscreen/fullscreen.htm | 109 + web/libs/tiny_mce/plugins/iespell/editor_plugin.js | 1 + .../tiny_mce/plugins/iespell/editor_plugin_src.js | 54 + .../tiny_mce/plugins/inlinepopups/editor_plugin.js | 1 + .../plugins/inlinepopups/editor_plugin_src.js | 635 + .../inlinepopups/skins/clearlooks2/img/alert.gif | Bin 0 -> 818 bytes .../inlinepopups/skins/clearlooks2/img/button.gif | Bin 0 -> 280 bytes .../inlinepopups/skins/clearlooks2/img/buttons.gif | Bin 0 -> 1195 bytes .../inlinepopups/skins/clearlooks2/img/confirm.gif | Bin 0 -> 915 bytes .../inlinepopups/skins/clearlooks2/img/corners.gif | Bin 0 -> 911 bytes .../skins/clearlooks2/img/horizontal.gif | Bin 0 -> 769 bytes .../skins/clearlooks2/img/vertical.gif | Bin 0 -> 92 bytes .../inlinepopups/skins/clearlooks2/window.css | 90 + .../tiny_mce/plugins/inlinepopups/template.htm | 387 + .../plugins/insertdatetime/editor_plugin.js | 1 + .../plugins/insertdatetime/editor_plugin_src.js | 83 + web/libs/tiny_mce/plugins/layer/editor_plugin.js | 1 + .../tiny_mce/plugins/layer/editor_plugin_src.js | 212 + .../tiny_mce/plugins/legacyoutput/editor_plugin.js | 1 + .../plugins/legacyoutput/editor_plugin_src.js | 136 + web/libs/tiny_mce/plugins/media/css/content.css | 6 + web/libs/tiny_mce/plugins/media/css/media.css | 16 + web/libs/tiny_mce/plugins/media/editor_plugin.js | 1 + .../tiny_mce/plugins/media/editor_plugin_src.js | 414 + web/libs/tiny_mce/plugins/media/img/flash.gif | Bin 0 -> 241 bytes web/libs/tiny_mce/plugins/media/img/flv_player.swf | Bin 0 -> 11668 bytes web/libs/tiny_mce/plugins/media/img/quicktime.gif | Bin 0 -> 303 bytes web/libs/tiny_mce/plugins/media/img/realmedia.gif | Bin 0 -> 439 bytes web/libs/tiny_mce/plugins/media/img/shockwave.gif | Bin 0 -> 387 bytes web/libs/tiny_mce/plugins/media/img/trans.gif | Bin 0 -> 43 bytes .../tiny_mce/plugins/media/img/windowsmedia.gif | Bin 0 -> 415 bytes web/libs/tiny_mce/plugins/media/js/embed.js | 73 + web/libs/tiny_mce/plugins/media/js/media.js | 630 + web/libs/tiny_mce/plugins/media/langs/en_dlg.js | 103 + web/libs/tiny_mce/plugins/media/media.htm | 817 ++ .../tiny_mce/plugins/nonbreaking/editor_plugin.js | 1 + .../plugins/nonbreaking/editor_plugin_src.js | 53 + .../tiny_mce/plugins/noneditable/editor_plugin.js | 1 + .../plugins/noneditable/editor_plugin_src.js | 90 + .../tiny_mce/plugins/pagebreak/css/content.css | 1 + .../tiny_mce/plugins/pagebreak/editor_plugin.js | 1 + .../plugins/pagebreak/editor_plugin_src.js | 77 + .../tiny_mce/plugins/pagebreak/img/pagebreak.gif | Bin 0 -> 325 bytes web/libs/tiny_mce/plugins/pagebreak/img/trans.gif | Bin 0 -> 43 bytes web/libs/tiny_mce/plugins/paste/editor_plugin.js | 1 + .../tiny_mce/plugins/paste/editor_plugin_src.js | 952 ++ web/libs/tiny_mce/plugins/paste/js/pastetext.js | 36 + web/libs/tiny_mce/plugins/paste/js/pasteword.js | 51 + web/libs/tiny_mce/plugins/paste/langs/en_dlg.js | 5 + web/libs/tiny_mce/plugins/paste/pastetext.htm | 27 + web/libs/tiny_mce/plugins/paste/pasteword.htm | 21 + web/libs/tiny_mce/plugins/preview/editor_plugin.js | 1 + .../tiny_mce/plugins/preview/editor_plugin_src.js | 53 + web/libs/tiny_mce/plugins/preview/example.html | 28 + .../tiny_mce/plugins/preview/jscripts/embed.js | 73 + web/libs/tiny_mce/plugins/preview/preview.html | 17 + web/libs/tiny_mce/plugins/print/editor_plugin.js | 1 + .../tiny_mce/plugins/print/editor_plugin_src.js | 34 + web/libs/tiny_mce/plugins/save/editor_plugin.js | 1 + .../tiny_mce/plugins/save/editor_plugin_src.js | 101 + .../plugins/searchreplace/css/searchreplace.css | 6 + .../plugins/searchreplace/editor_plugin.js | 1 + .../plugins/searchreplace/editor_plugin_src.js | 57 + .../plugins/searchreplace/js/searchreplace.js | 130 + .../tiny_mce/plugins/searchreplace/langs/en_dlg.js | 16 + .../plugins/searchreplace/searchreplace.htm | 99 + .../tiny_mce/plugins/spellchecker/css/content.css | 1 + .../tiny_mce/plugins/spellchecker/editor_plugin.js | 1 + .../plugins/spellchecker/editor_plugin_src.js | 417 + .../tiny_mce/plugins/spellchecker/img/wline.gif | Bin 0 -> 46 bytes web/libs/tiny_mce/plugins/style/css/props.css | 13 + web/libs/tiny_mce/plugins/style/editor_plugin.js | 1 + .../tiny_mce/plugins/style/editor_plugin_src.js | 55 + web/libs/tiny_mce/plugins/style/js/props.js | 641 + web/libs/tiny_mce/plugins/style/langs/en_dlg.js | 63 + web/libs/tiny_mce/plugins/style/props.htm | 723 + .../tiny_mce/plugins/tabfocus/editor_plugin.js | 1 + .../tiny_mce/plugins/tabfocus/editor_plugin_src.js | 112 + web/libs/tiny_mce/plugins/table/cell.htm | 178 + web/libs/tiny_mce/plugins/table/css/cell.css | 17 + web/libs/tiny_mce/plugins/table/css/row.css | 25 + web/libs/tiny_mce/plugins/table/css/table.css | 13 + web/libs/tiny_mce/plugins/table/editor_plugin.js | 1 + .../tiny_mce/plugins/table/editor_plugin_src.js | 1125 ++ web/libs/tiny_mce/plugins/table/js/cell.js | 286 + web/libs/tiny_mce/plugins/table/js/merge_cells.js | 27 + web/libs/tiny_mce/plugins/table/js/row.js | 237 + web/libs/tiny_mce/plugins/table/js/table.js | 449 + web/libs/tiny_mce/plugins/table/langs/en_dlg.js | 74 + web/libs/tiny_mce/plugins/table/merge_cells.htm | 32 + web/libs/tiny_mce/plugins/table/row.htm | 155 + web/libs/tiny_mce/plugins/table/table.htm | 187 + web/libs/tiny_mce/plugins/template/blank.htm | 12 + .../tiny_mce/plugins/template/css/template.css | 23 + .../tiny_mce/plugins/template/editor_plugin.js | 1 + .../tiny_mce/plugins/template/editor_plugin_src.js | 159 + web/libs/tiny_mce/plugins/template/js/template.js | 106 + web/libs/tiny_mce/plugins/template/langs/en_dlg.js | 15 + web/libs/tiny_mce/plugins/template/template.htm | 31 + .../plugins/tinybrowser/config_tinybrowser.php | 126 + .../tinybrowser/css/style_tinybrowser.css.php | 226 + .../tinybrowser/css/stylefull_tinybrowser.css | 34 + web/libs/tiny_mce/plugins/tinybrowser/edit.php | 537 + .../tiny_mce/plugins/tinybrowser/flexupload.swf | Bin 0 -> 272396 bytes .../plugins/tinybrowser/fns_tinybrowser.php | 431 + web/libs/tiny_mce/plugins/tinybrowser/folders.php | 273 + web/libs/tiny_mce/plugins/tinybrowser/img/asc.gif | Bin 0 -> 158 bytes web/libs/tiny_mce/plugins/tinybrowser/img/back.png | Bin 0 -> 221 bytes web/libs/tiny_mce/plugins/tinybrowser/img/desc.gif | Bin 0 -> 158 bytes .../tiny_mce/plugins/tinybrowser/img/preview.gif | Bin 0 -> 235 bytes .../tiny_mce/plugins/tinybrowser/img/rotate_ac.gif | Bin 0 -> 244 bytes .../tiny_mce/plugins/tinybrowser/img/rotate_c.gif | Bin 0 -> 241 bytes web/libs/tiny_mce/plugins/tinybrowser/img/tabs.gif | Bin 0 -> 1326 bytes .../tiny_mce/plugins/tinybrowser/js/swfobject.js | 8 + .../plugins/tinybrowser/js/tinybrowser.js.php | 79 + web/libs/tiny_mce/plugins/tinybrowser/langs/cs.php | 70 + web/libs/tiny_mce/plugins/tinybrowser/langs/da.php | 69 + web/libs/tiny_mce/plugins/tinybrowser/langs/de.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/en.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/es.php | 59 + web/libs/tiny_mce/plugins/tinybrowser/langs/fi.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/fr.php | 66 + web/libs/tiny_mce/plugins/tinybrowser/langs/hr.php | 59 + web/libs/tiny_mce/plugins/tinybrowser/langs/hu.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/it.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/lv.php | 59 + web/libs/tiny_mce/plugins/tinybrowser/langs/nl.php | 69 + web/libs/tiny_mce/plugins/tinybrowser/langs/pl.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/pt.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/ru.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/langs/sk.php | 59 + web/libs/tiny_mce/plugins/tinybrowser/langs/sv.php | 68 + .../tiny_mce/plugins/tinybrowser/langs/zh-cn.php | 68 + .../tiny_mce/plugins/tinybrowser/langs/zh-tw.php | 68 + web/libs/tiny_mce/plugins/tinybrowser/readme.txt | 430 + .../plugins/tinybrowser/tb_standalone.js.php | 14 + .../tiny_mce/plugins/tinybrowser/tb_tinymce.js.php | 40 + .../tiny_mce/plugins/tinybrowser/tinybrowser.php | 337 + web/libs/tiny_mce/plugins/tinybrowser/upload.php | 177 + .../tiny_mce/plugins/tinybrowser/upload_file.php | 40 + .../plugins/tinybrowser/upload_process.php | 99 + .../tiny_mce/plugins/visualchars/editor_plugin.js | 1 + .../plugins/visualchars/editor_plugin_src.js | 83 + .../tiny_mce/plugins/wordcount/editor_plugin.js | 1 + .../plugins/wordcount/editor_plugin_src.js | 98 + web/libs/tiny_mce/plugins/xhtmlxtras/abbr.htm | 141 + web/libs/tiny_mce/plugins/xhtmlxtras/acronym.htm | 141 + .../tiny_mce/plugins/xhtmlxtras/attributes.htm | 148 + web/libs/tiny_mce/plugins/xhtmlxtras/cite.htm | 141 + .../tiny_mce/plugins/xhtmlxtras/css/attributes.css | 11 + web/libs/tiny_mce/plugins/xhtmlxtras/css/popup.css | 9 + web/libs/tiny_mce/plugins/xhtmlxtras/del.htm | 161 + .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js | 1 + .../plugins/xhtmlxtras/editor_plugin_src.js | 132 + web/libs/tiny_mce/plugins/xhtmlxtras/ins.htm | 161 + web/libs/tiny_mce/plugins/xhtmlxtras/js/abbr.js | 28 + web/libs/tiny_mce/plugins/xhtmlxtras/js/acronym.js | 28 + .../tiny_mce/plugins/xhtmlxtras/js/attributes.js | 126 + web/libs/tiny_mce/plugins/xhtmlxtras/js/cite.js | 28 + web/libs/tiny_mce/plugins/xhtmlxtras/js/del.js | 63 + .../plugins/xhtmlxtras/js/element_common.js | 231 + web/libs/tiny_mce/plugins/xhtmlxtras/js/ins.js | 62 + .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js | 32 + web/libs/tiny_mce/themes/advanced/about.htm | 54 + web/libs/tiny_mce/themes/advanced/anchor.htm | 26 + web/libs/tiny_mce/themes/advanced/charmap.htm | 52 + web/libs/tiny_mce/themes/advanced/color_picker.htm | 73 + .../tiny_mce/themes/advanced/editor_template.js | 1 + .../themes/advanced/editor_template_src.js | 1217 ++ web/libs/tiny_mce/themes/advanced/image.htm | 80 + .../tiny_mce/themes/advanced/img/colorpicker.jpg | Bin 0 -> 3189 bytes web/libs/tiny_mce/themes/advanced/img/icons.gif | Bin 0 -> 11794 bytes web/libs/tiny_mce/themes/advanced/js/about.js | 72 + web/libs/tiny_mce/themes/advanced/js/anchor.js | 37 + web/libs/tiny_mce/themes/advanced/js/charmap.js | 335 + .../tiny_mce/themes/advanced/js/color_picker.js | 253 + web/libs/tiny_mce/themes/advanced/js/image.js | 245 + web/libs/tiny_mce/themes/advanced/js/link.js | 156 + .../tiny_mce/themes/advanced/js/source_editor.js | 62 + web/libs/tiny_mce/themes/advanced/langs/en.js | 62 + web/libs/tiny_mce/themes/advanced/langs/en_dlg.js | 51 + web/libs/tiny_mce/themes/advanced/link.htm | 58 + .../themes/advanced/skins/default/content.css | 36 + .../themes/advanced/skins/default/dialog.css | 117 + .../themes/advanced/skins/default/img/buttons.png | Bin 0 -> 3274 bytes .../themes/advanced/skins/default/img/items.gif | Bin 0 -> 70 bytes .../advanced/skins/default/img/menu_arrow.gif | Bin 0 -> 68 bytes .../advanced/skins/default/img/menu_check.gif | Bin 0 -> 70 bytes .../themes/advanced/skins/default/img/progress.gif | Bin 0 -> 1787 bytes .../themes/advanced/skins/default/img/tabs.gif | Bin 0 -> 1326 bytes .../tiny_mce/themes/advanced/skins/default/ui.css | 213 + .../themes/advanced/skins/o2k7/content.css | 36 + .../tiny_mce/themes/advanced/skins/o2k7/dialog.css | 116 + .../themes/advanced/skins/o2k7/img/button_bg.png | Bin 0 -> 5859 bytes .../advanced/skins/o2k7/img/button_bg_black.png | Bin 0 -> 3736 bytes .../advanced/skins/o2k7/img/button_bg_silver.png | Bin 0 -> 5358 bytes .../tiny_mce/themes/advanced/skins/o2k7/ui.css | 215 + .../themes/advanced/skins/o2k7/ui_black.css | 8 + .../themes/advanced/skins/o2k7/ui_silver.css | 5 + .../tiny_mce/themes/advanced/source_editor.htm | 25 + web/libs/tiny_mce/themes/simple/editor_template.js | 1 + .../tiny_mce/themes/simple/editor_template_src.js | 85 + web/libs/tiny_mce/themes/simple/img/icons.gif | Bin 0 -> 1440 bytes web/libs/tiny_mce/themes/simple/langs/en.js | 11 + .../themes/simple/skins/default/content.css | 25 + .../tiny_mce/themes/simple/skins/default/ui.css | 32 + .../tiny_mce/themes/simple/skins/o2k7/content.css | 17 + .../themes/simple/skins/o2k7/img/button_bg.png | Bin 0 -> 5102 bytes web/libs/tiny_mce/themes/simple/skins/o2k7/ui.css | 35 + web/libs/tiny_mce/tiny_mce.js | 1 + web/libs/tiny_mce/tiny_mce_popup.js | 5 + web/libs/tiny_mce/tiny_mce_src.js | 14170 +++++++++++++++++++ web/libs/tiny_mce/utils/editable_selects.js | 70 + web/libs/tiny_mce/utils/form_utils.js | 200 + web/libs/tiny_mce/utils/mctabs.js | 77 + web/libs/tiny_mce/utils/validate.js | 220 + web/out/dist/admin.php | 44 + web/out/dist/compte.php | 44 + web/out/dist/config.xml | 7 + web/out/dist/content.php | 5 + web/out/dist/css/actions/admin.css | 199 + web/out/dist/css/actions/admin_plugins.css | 32 + web/out/dist/css/actions/forms_contact.css | 32 + web/out/dist/css/actions/users.css | 1 + web/out/dist/css/colorbox.css | 92 + web/out/dist/css/colors.css | 324 + web/out/dist/css/footer.css | 12 + web/out/dist/css/general.css | 70 + web/out/dist/css/header.css | 11 + web/out/dist/css/main.css | 32 + web/out/dist/css/menu_top.css | 31 + web/out/dist/css/style.css | 34 + web/out/dist/css/tinymce.css | 3 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 384 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../css/ui-lightness/jquery-ui-1.8.12.custom.css | 578 + web/out/dist/functions.php | 80 + web/out/dist/html_reponse.php | 32 + web/out/dist/html_simple_reponse.php | 13 + web/out/dist/icons/add.gif | Bin 0 -> 83 bytes web/out/dist/icons/ajax-loader.gif | Bin 0 -> 723 bytes web/out/dist/icons/asc.gif | Bin 0 -> 58 bytes web/out/dist/icons/del.gif | Bin 0 -> 67 bytes web/out/dist/icons/desc.gif | Bin 0 -> 57 bytes web/out/dist/icons/edit.gif | Bin 0 -> 107 bytes web/out/dist/icons/list.gif | Bin 0 -> 80 bytes web/out/dist/images/colorbox/border.png | Bin 0 -> 112 bytes web/out/dist/images/colorbox/controls.png | Bin 0 -> 284 bytes .../images/colorbox/ie6/borderBottomCenter.png | Bin 0 -> 111 bytes .../dist/images/colorbox/ie6/borderBottomLeft.png | Bin 0 -> 215 bytes .../dist/images/colorbox/ie6/borderBottomRight.png | Bin 0 -> 217 bytes .../dist/images/colorbox/ie6/borderMiddleLeft.png | Bin 0 -> 108 bytes .../dist/images/colorbox/ie6/borderMiddleRight.png | Bin 0 -> 108 bytes .../dist/images/colorbox/ie6/borderTopCenter.png | Bin 0 -> 111 bytes web/out/dist/images/colorbox/ie6/borderTopLeft.png | Bin 0 -> 216 bytes .../dist/images/colorbox/ie6/borderTopRight.png | Bin 0 -> 214 bytes web/out/dist/images/colorbox/loading.gif | Bin 0 -> 723 bytes .../dist/images/colorbox/loading_background.png | Bin 0 -> 157 bytes web/out/dist/images/colorbox/overlay.png | Bin 0 -> 169 bytes web/out/dist/index.php | 53 + web/out/dist/js/actions/admin.js | 14 + web/out/dist/js/actions/users.js | 14 + web/out/dist/js/jquery-1.5.2.min.js | 16 + web/out/dist/js/jquery-ui-1.8.12.custom.min.js | 783 + web/out/dist/js/jquery.colorbox-min.js | 4 + web/out/dist/js/login.js | 5 + web/out/dist/js/md5.js | 405 + web/out/dist/js/menu.js | 29 + web/out/dist/layouts/admin.xml | 17 + web/out/dist/layouts/content.xml | 7 + web/out/dist/layouts/forms.xml | 10 + web/out/dist/layouts/index.xml | 6 + web/out/dist/layouts/reponses.xml | 11 + web/out/dist/layouts/users.xml | 9 + web/out/dist/views/admin/colonne.php | 7 + web/out/dist/views/admin/config.php | 113 + web/out/dist/views/admin/index.php | 1 + web/out/dist/views/admin/plugins/list.php | 44 + web/out/dist/views/admin/users/add.php | 39 + web/out/dist/views/admin/users/edit.php | 43 + web/out/dist/views/admin/users/list.php | 84 + web/out/dist/views/erreur.php | 10 + web/out/dist/views/footer.php | 19 + web/out/dist/views/forms/contact/index.php | 35 + web/out/dist/views/head.php | 41 + web/out/dist/views/header.php | 1 + web/out/dist/views/index/colonne.php | 0 web/out/dist/views/login.php | 37 + web/out/dist/views/messages.php | 9 + web/out/dist/views/navig.php | 16 + web/out/dist/views/redirect_javascript.php | 16 + web/out/dist/views/tinymce.init.js.php | 51 + web/out/dist/views/top_menu.php | 7 + web/out/dist/views/users/colonne.php | 0 web/out/dist/views/users/identification.php | 7 + web/out/dist/views/users/infos/edit.php | 33 + 461 files changed, 49263 insertions(+) create mode 100644 readme.txt create mode 100644 web/.htaccess create mode 100644 web/app/config.xml create mode 100644 web/app/data/impl/mw_mysql.php create mode 100644 web/app/data/impl/mw_xml.php create mode 100644 web/app/data/impl/xml/mw_xml_data.php create mode 100644 web/app/data/impl/xml/mw_xml_data_handler.php create mode 100644 web/app/data/modules/share/mw_data_check_instance.php create mode 100644 web/app/data/modules/share/mw_data_images.php create mode 100644 web/app/data/modules/share/mw_data_init.php create mode 100644 web/app/data/modules/share/mw_data_links.php create mode 100644 web/app/data/modules/share/mw_data_out_config.php create mode 100644 web/app/data/modules/share/mw_data_utils.php create mode 100644 web/app/data/modules/sql/mw_data_config.php create mode 100644 web/app/data/modules/sql/mw_data_users.php create mode 100644 web/app/data/modules/xml/mw_data_config.php create mode 100644 web/app/data/modules/xml/mw_data_users.php create mode 100644 web/app/data/mw_data.php create mode 100644 web/app/data/mw_sgbd.php create mode 100644 web/app/env/modules/mw_env_config.php create mode 100644 web/app/env/modules/mw_env_data.php create mode 100644 web/app/env/modules/mw_env_init.php create mode 100644 web/app/env/modules/mw_env_inputs.php create mode 100644 web/app/env/modules/mw_env_links.php create mode 100644 web/app/env/modules/mw_env_messages.php create mode 100644 web/app/env/modules/mw_env_out.php create mode 100644 web/app/env/modules/mw_env_plugins.php create mode 100644 web/app/env/modules/mw_env_run.php create mode 100644 web/app/env/modules/mw_env_urls.php create mode 100644 web/app/env/mw_env.php create mode 100644 web/app/init/0100_functions.php create mode 100644 web/app/init/0200_inputs.php create mode 100644 web/app/init/0300_data.php create mode 100644 web/app/init/0400_config.php create mode 100644 web/app/init/0500_users.php create mode 100644 web/app/init/0600_check_instance.php create mode 100644 web/app/init/0700_links.php create mode 100644 web/app/init/0800_init_plugins.php create mode 100644 web/app/init/0900_pre_run.php create mode 100644 web/app/main.php create mode 100644 web/app/mods/admin/config.php create mode 100644 web/app/mods/admin/index.php create mode 100644 web/app/mods/admin/plugins.php create mode 100644 web/app/mods/admin/users.php create mode 100644 web/app/mods/forms/contact.php create mode 100644 web/app/mods/index/index.php create mode 100644 web/app/mods/mw_mod.php create mode 100644 web/app/mods/reponses/html.php create mode 100644 web/app/mods/users/compte.php create mode 100644 web/app/mods/users/identification.php create mode 100644 web/app/mods/users/index.php create mode 100644 web/app/mods/users/infos.php create mode 100644 web/app/mw_plugin.php create mode 100644 web/config.php create mode 100644 web/content/data/.htaccess create mode 100644 web/content/data/mysql/mtweb.sql create mode 100644 web/content/data/xml/mw/action_status/.index create mode 100644 web/content/data/xml/mw/action_status/170.xml create mode 100644 web/content/data/xml/mw/action_status/171.xml create mode 100644 web/content/data/xml/mw/action_status/172.xml create mode 100644 web/content/data/xml/mw/action_status/173.xml create mode 100644 web/content/data/xml/mw/config/.index create mode 100644 web/content/data/xml/mw/config/1.xml create mode 100644 web/content/data/xml/mw/config/2.xml create mode 100644 web/content/data/xml/mw/config/21.xml create mode 100644 web/content/data/xml/mw/config/22.xml create mode 100644 web/content/data/xml/mw/config/34.xml create mode 100644 web/content/data/xml/mw/config/39.xml create mode 100644 web/content/data/xml/mw/config/40.xml create mode 100644 web/content/data/xml/mw/config/41.xml create mode 100644 web/content/data/xml/mw/config/55.xml create mode 100644 web/content/data/xml/mw/config/56.xml create mode 100644 web/content/data/xml/mw/config/57.xml create mode 100644 web/content/data/xml/mw/user_status/.index create mode 100644 web/content/data/xml/mw/user_status/1.xml create mode 100644 web/content/data/xml/mw/user_status/2.xml create mode 100644 web/content/data/xml/mw/users/.index create mode 100644 web/content/data/xml/mw/users/14.xml create mode 100644 web/index.php create mode 100644 web/libs/empty_class.php create mode 100644 web/libs/inputfilter.php create mode 100644 web/libs/ptitcaptcha.php create mode 100644 web/libs/sxml.php create mode 100644 web/libs/tiny_mce/langs/en.js create mode 100644 web/libs/tiny_mce/license.txt create mode 100644 web/libs/tiny_mce/plugins/advhr/css/advhr.css create mode 100644 web/libs/tiny_mce/plugins/advhr/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/advhr/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/advhr/js/rule.js create mode 100644 web/libs/tiny_mce/plugins/advhr/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/advhr/rule.htm create mode 100644 web/libs/tiny_mce/plugins/advimage/css/advimage.css create mode 100644 web/libs/tiny_mce/plugins/advimage/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/advimage/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/advimage/image.htm create mode 100644 web/libs/tiny_mce/plugins/advimage/img/sample.gif create mode 100644 web/libs/tiny_mce/plugins/advimage/js/image.js create mode 100644 web/libs/tiny_mce/plugins/advimage/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/advlink/css/advlink.css create mode 100644 web/libs/tiny_mce/plugins/advlink/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/advlink/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/advlink/js/advlink.js create mode 100644 web/libs/tiny_mce/plugins/advlink/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/advlink/link.htm create mode 100644 web/libs/tiny_mce/plugins/advlist/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/advlist/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/autoresize/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/autoresize/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/autosave/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/autosave/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/autosave/langs/en.js create mode 100644 web/libs/tiny_mce/plugins/bbcode/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/bbcode/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/contextmenu/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/contextmenu/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/directionality/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/directionality/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/emotions/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/emotions/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/emotions/emotions.htm create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-cool.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-cry.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-embarassed.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-frown.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-innocent.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-kiss.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-laughing.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-sealed.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-smile.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-surprised.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-undecided.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-wink.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/img/smiley-yell.gif create mode 100644 web/libs/tiny_mce/plugins/emotions/js/emotions.js create mode 100644 web/libs/tiny_mce/plugins/emotions/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/example/dialog.htm create mode 100644 web/libs/tiny_mce/plugins/example/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/example/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/example/img/example.gif create mode 100644 web/libs/tiny_mce/plugins/example/js/dialog.js create mode 100644 web/libs/tiny_mce/plugins/example/langs/en.js create mode 100644 web/libs/tiny_mce/plugins/example/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/fullpage/css/fullpage.css create mode 100644 web/libs/tiny_mce/plugins/fullpage/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/fullpage/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/fullpage/fullpage.htm create mode 100644 web/libs/tiny_mce/plugins/fullpage/js/fullpage.js create mode 100644 web/libs/tiny_mce/plugins/fullpage/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/fullscreen/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/fullscreen/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/fullscreen/fullscreen.htm create mode 100644 web/libs/tiny_mce/plugins/iespell/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/iespell/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css create mode 100644 web/libs/tiny_mce/plugins/inlinepopups/template.htm create mode 100644 web/libs/tiny_mce/plugins/insertdatetime/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/insertdatetime/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/layer/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/layer/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/legacyoutput/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/legacyoutput/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/media/css/content.css create mode 100644 web/libs/tiny_mce/plugins/media/css/media.css create mode 100644 web/libs/tiny_mce/plugins/media/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/media/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/media/img/flash.gif create mode 100644 web/libs/tiny_mce/plugins/media/img/flv_player.swf create mode 100644 web/libs/tiny_mce/plugins/media/img/quicktime.gif create mode 100644 web/libs/tiny_mce/plugins/media/img/realmedia.gif create mode 100644 web/libs/tiny_mce/plugins/media/img/shockwave.gif create mode 100644 web/libs/tiny_mce/plugins/media/img/trans.gif create mode 100644 web/libs/tiny_mce/plugins/media/img/windowsmedia.gif create mode 100644 web/libs/tiny_mce/plugins/media/js/embed.js create mode 100644 web/libs/tiny_mce/plugins/media/js/media.js create mode 100644 web/libs/tiny_mce/plugins/media/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/media/media.htm create mode 100644 web/libs/tiny_mce/plugins/nonbreaking/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/nonbreaking/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/noneditable/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/noneditable/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/pagebreak/css/content.css create mode 100644 web/libs/tiny_mce/plugins/pagebreak/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/pagebreak/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/pagebreak/img/pagebreak.gif create mode 100644 web/libs/tiny_mce/plugins/pagebreak/img/trans.gif create mode 100644 web/libs/tiny_mce/plugins/paste/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/paste/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/paste/js/pastetext.js create mode 100644 web/libs/tiny_mce/plugins/paste/js/pasteword.js create mode 100644 web/libs/tiny_mce/plugins/paste/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/paste/pastetext.htm create mode 100644 web/libs/tiny_mce/plugins/paste/pasteword.htm create mode 100644 web/libs/tiny_mce/plugins/preview/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/preview/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/preview/example.html create mode 100644 web/libs/tiny_mce/plugins/preview/jscripts/embed.js create mode 100644 web/libs/tiny_mce/plugins/preview/preview.html create mode 100644 web/libs/tiny_mce/plugins/print/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/print/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/save/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/save/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/searchreplace/css/searchreplace.css create mode 100644 web/libs/tiny_mce/plugins/searchreplace/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/searchreplace/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/searchreplace/js/searchreplace.js create mode 100644 web/libs/tiny_mce/plugins/searchreplace/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/searchreplace/searchreplace.htm create mode 100644 web/libs/tiny_mce/plugins/spellchecker/css/content.css create mode 100644 web/libs/tiny_mce/plugins/spellchecker/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/spellchecker/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/spellchecker/img/wline.gif create mode 100644 web/libs/tiny_mce/plugins/style/css/props.css create mode 100644 web/libs/tiny_mce/plugins/style/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/style/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/style/js/props.js create mode 100644 web/libs/tiny_mce/plugins/style/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/style/props.htm create mode 100644 web/libs/tiny_mce/plugins/tabfocus/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/tabfocus/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/table/cell.htm create mode 100644 web/libs/tiny_mce/plugins/table/css/cell.css create mode 100644 web/libs/tiny_mce/plugins/table/css/row.css create mode 100644 web/libs/tiny_mce/plugins/table/css/table.css create mode 100644 web/libs/tiny_mce/plugins/table/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/table/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/table/js/cell.js create mode 100644 web/libs/tiny_mce/plugins/table/js/merge_cells.js create mode 100644 web/libs/tiny_mce/plugins/table/js/row.js create mode 100644 web/libs/tiny_mce/plugins/table/js/table.js create mode 100644 web/libs/tiny_mce/plugins/table/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/table/merge_cells.htm create mode 100644 web/libs/tiny_mce/plugins/table/row.htm create mode 100644 web/libs/tiny_mce/plugins/table/table.htm create mode 100644 web/libs/tiny_mce/plugins/template/blank.htm create mode 100644 web/libs/tiny_mce/plugins/template/css/template.css create mode 100644 web/libs/tiny_mce/plugins/template/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/template/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/template/js/template.js create mode 100644 web/libs/tiny_mce/plugins/template/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/plugins/template/template.htm create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/config_tinybrowser.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/css/style_tinybrowser.css.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/css/stylefull_tinybrowser.css create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/edit.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/flexupload.swf create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/fns_tinybrowser.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/folders.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/img/asc.gif create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/img/back.png create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/img/desc.gif create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/img/preview.gif create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/img/rotate_ac.gif create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/img/rotate_c.gif create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/img/tabs.gif create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/js/swfobject.js create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/js/tinybrowser.js.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/cs.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/da.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/de.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/en.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/es.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/fi.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/fr.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/hr.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/hu.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/it.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/lv.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/nl.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/pl.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/pt.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/ru.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/sk.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/sv.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/zh-cn.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/langs/zh-tw.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/readme.txt create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/tb_standalone.js.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/tb_tinymce.js.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/tinybrowser.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/upload.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/upload_file.php create mode 100644 web/libs/tiny_mce/plugins/tinybrowser/upload_process.php create mode 100644 web/libs/tiny_mce/plugins/visualchars/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/visualchars/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/wordcount/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/wordcount/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/abbr.htm create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/acronym.htm create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/attributes.htm create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/cite.htm create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/css/attributes.css create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/css/popup.css create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/del.htm create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/ins.htm create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/js/abbr.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/js/acronym.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/js/attributes.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/js/cite.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/js/del.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/js/element_common.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/js/ins.js create mode 100644 web/libs/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/themes/advanced/about.htm create mode 100644 web/libs/tiny_mce/themes/advanced/anchor.htm create mode 100644 web/libs/tiny_mce/themes/advanced/charmap.htm create mode 100644 web/libs/tiny_mce/themes/advanced/color_picker.htm create mode 100644 web/libs/tiny_mce/themes/advanced/editor_template.js create mode 100644 web/libs/tiny_mce/themes/advanced/editor_template_src.js create mode 100644 web/libs/tiny_mce/themes/advanced/image.htm create mode 100644 web/libs/tiny_mce/themes/advanced/img/colorpicker.jpg create mode 100644 web/libs/tiny_mce/themes/advanced/img/icons.gif create mode 100644 web/libs/tiny_mce/themes/advanced/js/about.js create mode 100644 web/libs/tiny_mce/themes/advanced/js/anchor.js create mode 100644 web/libs/tiny_mce/themes/advanced/js/charmap.js create mode 100644 web/libs/tiny_mce/themes/advanced/js/color_picker.js create mode 100644 web/libs/tiny_mce/themes/advanced/js/image.js create mode 100644 web/libs/tiny_mce/themes/advanced/js/link.js create mode 100644 web/libs/tiny_mce/themes/advanced/js/source_editor.js create mode 100644 web/libs/tiny_mce/themes/advanced/langs/en.js create mode 100644 web/libs/tiny_mce/themes/advanced/langs/en_dlg.js create mode 100644 web/libs/tiny_mce/themes/advanced/link.htm create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/content.css create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/dialog.css create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/img/buttons.png create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/img/items.gif create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/img/menu_check.gif create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/img/progress.gif create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/img/tabs.gif create mode 100644 web/libs/tiny_mce/themes/advanced/skins/default/ui.css create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/content.css create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/dialog.css create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/ui.css create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_black.css create mode 100644 web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css create mode 100644 web/libs/tiny_mce/themes/advanced/source_editor.htm create mode 100644 web/libs/tiny_mce/themes/simple/editor_template.js create mode 100644 web/libs/tiny_mce/themes/simple/editor_template_src.js create mode 100644 web/libs/tiny_mce/themes/simple/img/icons.gif create mode 100644 web/libs/tiny_mce/themes/simple/langs/en.js create mode 100644 web/libs/tiny_mce/themes/simple/skins/default/content.css create mode 100644 web/libs/tiny_mce/themes/simple/skins/default/ui.css create mode 100644 web/libs/tiny_mce/themes/simple/skins/o2k7/content.css create mode 100644 web/libs/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png create mode 100644 web/libs/tiny_mce/themes/simple/skins/o2k7/ui.css create mode 100644 web/libs/tiny_mce/tiny_mce.js create mode 100644 web/libs/tiny_mce/tiny_mce_popup.js create mode 100644 web/libs/tiny_mce/tiny_mce_src.js create mode 100644 web/libs/tiny_mce/utils/editable_selects.js create mode 100644 web/libs/tiny_mce/utils/form_utils.js create mode 100644 web/libs/tiny_mce/utils/mctabs.js create mode 100644 web/libs/tiny_mce/utils/validate.js create mode 100644 web/out/dist/admin.php create mode 100644 web/out/dist/compte.php create mode 100644 web/out/dist/config.xml create mode 100644 web/out/dist/content.php create mode 100644 web/out/dist/css/actions/admin.css create mode 100644 web/out/dist/css/actions/admin_plugins.css create mode 100644 web/out/dist/css/actions/forms_contact.css create mode 100644 web/out/dist/css/actions/users.css create mode 100644 web/out/dist/css/colorbox.css create mode 100644 web/out/dist/css/colors.css create mode 100644 web/out/dist/css/footer.css create mode 100644 web/out/dist/css/general.css create mode 100644 web/out/dist/css/header.css create mode 100644 web/out/dist/css/main.css create mode 100644 web/out/dist/css/menu_top.css create mode 100644 web/out/dist/css/style.css create mode 100644 web/out/dist/css/tinymce.css create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 web/out/dist/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 web/out/dist/css/ui-lightness/jquery-ui-1.8.12.custom.css create mode 100644 web/out/dist/functions.php create mode 100644 web/out/dist/html_reponse.php create mode 100644 web/out/dist/html_simple_reponse.php create mode 100644 web/out/dist/icons/add.gif create mode 100644 web/out/dist/icons/ajax-loader.gif create mode 100644 web/out/dist/icons/asc.gif create mode 100644 web/out/dist/icons/del.gif create mode 100644 web/out/dist/icons/desc.gif create mode 100644 web/out/dist/icons/edit.gif create mode 100644 web/out/dist/icons/list.gif create mode 100644 web/out/dist/images/colorbox/border.png create mode 100644 web/out/dist/images/colorbox/controls.png create mode 100644 web/out/dist/images/colorbox/ie6/borderBottomCenter.png create mode 100644 web/out/dist/images/colorbox/ie6/borderBottomLeft.png create mode 100644 web/out/dist/images/colorbox/ie6/borderBottomRight.png create mode 100644 web/out/dist/images/colorbox/ie6/borderMiddleLeft.png create mode 100644 web/out/dist/images/colorbox/ie6/borderMiddleRight.png create mode 100644 web/out/dist/images/colorbox/ie6/borderTopCenter.png create mode 100644 web/out/dist/images/colorbox/ie6/borderTopLeft.png create mode 100644 web/out/dist/images/colorbox/ie6/borderTopRight.png create mode 100644 web/out/dist/images/colorbox/loading.gif create mode 100644 web/out/dist/images/colorbox/loading_background.png create mode 100644 web/out/dist/images/colorbox/overlay.png create mode 100644 web/out/dist/index.php create mode 100644 web/out/dist/js/actions/admin.js create mode 100644 web/out/dist/js/actions/users.js create mode 100644 web/out/dist/js/jquery-1.5.2.min.js create mode 100644 web/out/dist/js/jquery-ui-1.8.12.custom.min.js create mode 100644 web/out/dist/js/jquery.colorbox-min.js create mode 100644 web/out/dist/js/login.js create mode 100644 web/out/dist/js/md5.js create mode 100644 web/out/dist/js/menu.js create mode 100644 web/out/dist/layouts/admin.xml create mode 100644 web/out/dist/layouts/content.xml create mode 100644 web/out/dist/layouts/forms.xml create mode 100644 web/out/dist/layouts/index.xml create mode 100644 web/out/dist/layouts/reponses.xml create mode 100644 web/out/dist/layouts/users.xml create mode 100644 web/out/dist/views/admin/colonne.php create mode 100644 web/out/dist/views/admin/config.php create mode 100644 web/out/dist/views/admin/index.php create mode 100644 web/out/dist/views/admin/plugins/list.php create mode 100644 web/out/dist/views/admin/users/add.php create mode 100644 web/out/dist/views/admin/users/edit.php create mode 100644 web/out/dist/views/admin/users/list.php create mode 100644 web/out/dist/views/erreur.php create mode 100644 web/out/dist/views/footer.php create mode 100644 web/out/dist/views/forms/contact/index.php create mode 100644 web/out/dist/views/head.php create mode 100644 web/out/dist/views/header.php create mode 100644 web/out/dist/views/index/colonne.php create mode 100644 web/out/dist/views/login.php create mode 100644 web/out/dist/views/messages.php create mode 100644 web/out/dist/views/navig.php create mode 100644 web/out/dist/views/redirect_javascript.php create mode 100644 web/out/dist/views/tinymce.init.js.php create mode 100644 web/out/dist/views/top_menu.php create mode 100644 web/out/dist/views/users/colonne.php create mode 100644 web/out/dist/views/users/identification.php create mode 100644 web/out/dist/views/users/infos/edit.php diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..87d4bf6 --- /dev/null +++ b/readme.txt @@ -0,0 +1,107 @@ + + mtweb 0.4.1 + +copyright dj3c1t 2011 +programme en GNU/GPLv3 + + +mtweb est une base de programmation pour application web. + + +ce programme utilise, dans le dossier libs : + + - TinyMCE + http://tinymce.moxiecode.com/ + + - une classe Php sxml, tres utile, et trouvee ici : + http://www.shop24-7.info/32-0-simplexml-alternative-php4.html + + - Ptitcaptcha, une classe Php pour un captcha (anti-spam) + http://www.jpfox.fr/?post/2007/10/24/190-un-petit-captcha-en-php + + - InputFilter, une class Php pour filtrer les balises et les attributs + HTML dangereux dans les description des sources + http://www.phpclasses.org/inputfilter + +installation : +-------------- + +installation rapide : + + - l'archive mtweb.tar.gz contient un dossier "web" + - uploadez le contenu de ce dossier a la racine de votre site + - assurez-vous que Php a le droit d'ecrire dans le dossier "content" + (et dans ses fichiers et sous-dossiers) + +Par defaut, mtweb stocke ses donnees dans des fichiers XML. + +pour utilisez le stockage des donnees avec MySql : + + - importez les tables fournies dans le fichier "content/data/sql/mysql/mtweb.sql" + - puis dans le fichier "config.php" : + - commentez la partie relative aux donnees XML + - decommentez la partie relative aux donnees MySql + - adaptez les informations pour MySql avec vos parametres de connexion + +pour une premiere utilisation, vous pouvez vous identifier avec : + +login: admin +pass: adminpass + +pensez a changer le mot de passe + + +documentation : +--------------- + +Plus d'infos en ligne : +http://mtweb.dj3c1t.com + + +historique des modifications : +------------------------------ + +0.4.1 : +------- + +3 Janv 2012 + +la version 0.4, qui introduit les plugins, en contient trois +dans son repertoire "plugins". + +dans cette version, seule l'application principale est fournie. + +les plugins restent disponibles, mais via leur propre archive. + + +0.4 : +----- + +30 Dec 2011 + +version extraite de sourceML.0.13 + +ajout d'un systeme de plugins +l'appli gere aussi maintenant une arborescence de liens + +changement de methode pour les surcharges. le dossier "app/local" +disparait et le contenu du dossier "app/core" descent dans "app/" +les surcharges se font maintenant avec les plugins. + + +0.3.2 : +------- + +Utilisation d'un cache en RAM pour les donnees gerees en XML. + +0.3.1 : +------- + +Ajout d'un exemple d'application, pour un agenda en ligne. + +0.3 : +----- + +Cette version a ete extraite de la dernier version de sourceML (sourceML.0.10) + +marche avec Mysql ou XML diff --git a/web/.htaccess b/web/.htaccess new file mode 100644 index 0000000..7efd22b --- /dev/null +++ b/web/.htaccess @@ -0,0 +1,7 @@ +# ------------------------------------------------------------------------------------ +# le template par defaut de mtweb utilise les "short tags" php pour l'affichage, dans +# les fichiers php du dossier "out". Si ces "short tags" ne sont pas disponibles par +# defaut sur votre hebergement, essayez en decommentant la ligne suivante. +# ------------------------------------------------------------------------------------ + +# php_value short_open_tag On diff --git a/web/app/config.xml b/web/app/config.xml new file mode 100644 index 0000000..b862223 --- /dev/null +++ b/web/app/config.xml @@ -0,0 +1,23 @@ + + + + + #-- + + + + 1 + + + + e + id + user + status + from + start + alpha +
form
+
+ +
\ No newline at end of file diff --git a/web/app/data/impl/mw_mysql.php b/web/app/data/impl/mw_mysql.php new file mode 100644 index 0000000..22bd3ce --- /dev/null +++ b/web/app/data/impl/mw_mysql.php @@ -0,0 +1,87 @@ +EXTENTION_OK; } + + function mw_mysql($host, $base, $user, $password) + { $this->host = $host; + $this->base = $base; + $this->user = $user; + $this->password = $password; + $this->EXTENTION_OK = function_exists("mysql_connect"); + } + + function connect($host, $base, $user, $password) + { $this->link = @mysql_connect($host, $user, $password); + if(!$this->link) return null; + @mysql_query("SET NAMES 'utf8'"); + if($base) + { $connected = @mysql_select_db($base, $this->link); + if(!$connected) return null; + } + return true; + } + + function select_db($db_name) + { $this->base = $db_name; + if(!$this->link) + { if(!$this->connect($this->host, $this->base, $this->user, $this->password)) return null; + } + return $this->query("USE ".$db_name); + } + + function table_exists($table_name) + { $sql = "SHOW TABLES LIKE '".$table_name."'"; + $rst = $this->query($sql); + if(isset($rst)) + { $exists = false; + $v_rst = $this->fetch_assoc($rst); + if($v_rst) $exists = true; + $this->free_result($rst); + return $exists; + } + return null; + } + + function query($query_string) + { if(!$this->link) + { if(!$this->connect($this->host, $this->base, $this->user, $this->password)) return null; + } + $result = @mysql_query($query_string, $this->link); + if(!$result) return null; + return $result; + } + + function fetch_assoc($rst) + { if($rst && $this->link) return mysql_fetch_assoc($rst); + return null; + } + + function insert_id() + { if($this->link) return mysql_insert_id($this->link); + return null; + } + + function free_result($rst) + { if($rst && $this->link) return mysql_free_result($rst); + return null; + } + + function close() + { if($this->link) return mysql_close($this->link); + return null; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/impl/mw_xml.php b/web/app/data/impl/mw_xml.php new file mode 100644 index 0000000..b454cdd --- /dev/null +++ b/web/app/data/impl/mw_xml.php @@ -0,0 +1,180 @@ +init_xml_env($host, $base, $user, $password); + $this->EXTENTION_OK = true; + } + + function extention_ok(&$env) + { if($this->EXTENTION_OK) + { if + ( file_exists($env->app_file("data/impl/xml/mw_xml_data.php")) + && file_exists($env->app_file("data/impl/xml/mw_xml_data_handler.php")) + ) + { require $env->app_file("data/impl/xml/mw_xml_data.php"); + require $env->app_file("data/impl/xml/mw_xml_data_handler.php"); + if + ( class_exists("mw_xml_data") + && class_exists("mw_xml_data_handler") + ) + { $this->xml_data = new mw_xml_data($this->host, $this->base); + } + else $this->EXTENTION_OK = false; + } + else $this->EXTENTION_OK = false; + } + return $this->EXTENTION_OK; + } + + function init_xml_env($host, $base, $user, $password) + { $this->host = $host.($host && substr($host, -1) != "/" ? "/" : ""); + $this->base = $base.($base && substr($base, -1) != "/" ? "/" : ""); + $this->user = $user; + $this->password = $password; + $this->data_handlers = array(); + $this->last_data_handler = 0; + } + + function connect($host, $base, $user, $password) + { if($host.$base && is_dir($host.$base) && is_writable($host.$base)) + { $this->init_xml_env($host, $base, $user, $password); + $this->xml_data = new mw_xml_data($this->host, $this->base); + return true; + } + return null; + } + + function select_db($base) + { $this->base = $base.($base && substr($base, -1) != "/" ? "/" : ""); + return $this->connect($this->host, $this->base, $this->user, $this->password); + } + + function data_exists($data_path) + { return is_dir($this->host.$this->base.$data_path); + } + + function create_data($data_path) + { if(!is_dir($this->host.$this->base.$data_path)) @mkdir($this->host.$this->base.$data_path); + if(is_dir($this->host.$this->base.$data_path)) + { if($dh = $this->open_data($data_path, false)) + { $this->close_data($dh); + return true; + } + } + return null; + } + + function get_data($data_path, $data_id) + { $dh = ++$this->last_data_handler; + $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); + if($this->data_handlers[$dh]->open_data(false)) + { $res = $this->data_handlers[$dh]->get_data($data_id); + $this->close_data($dh); + return $res; + } + return null; + } + + function open_data($data_path, $FETCH = true) + { $dh = ++$this->last_data_handler; + $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); + if($this->data_handlers[$dh]->open_data($FETCH)) + { return $dh; + } + $this->close_data($dh); + return null; + } + + function fetch_data($dh) + { if(isset($this->data_handlers[$dh])) + { return $this->data_handlers[$dh]->fetch_assoc(); + } + return false; + } + + function add_data($data_path, $data) + { $dh = ++$this->last_data_handler; + $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); + if($this->data_handlers[$dh]->open_data(false)) + { $res = $this->data_handlers[$dh]->add_data($data); + if($res) $res = $this->last_index($dh); + $this->close_data($dh); + return $res; + } + return null; + } + + function last_index($dh) + { if(isset($this->data_handlers[$dh])) + { return $this->data_handlers[$dh]->last_index; + } + return null; + } + + function set_data($data_path, $data_id, $data) + { $dh = ++$this->last_data_handler; + $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); + if($this->data_handlers[$dh]->open_data(false)) + { $res = $this->data_handlers[$dh]->set_data($data_id.".xml", $data); + $this->close_data($dh); + return $res; + } + return null; + } + + function del_data($data_path, $data_id) + { $dh = ++$this->last_data_handler; + $this->data_handlers[$dh] = new mw_xml_data_handler($this->xml_data, $data_path); + if($this->data_handlers[$dh]->open_data(false)) + { $res = $this->data_handlers[$dh]->del_data($data_id.".xml"); + $this->close_data($dh); + return $res; + } + return null; + } + + function close_data($dh) + { if(isset($this->data_handlers[$dh])) + { $this->data_handlers[$dh]->close_data(); + unset($this->data_handlers[$dh]); + } + } + + function remove_data($data_path) + { $OK = strlen($data_path) > 0; + if($OK && is_dir($this->host.$this->base.$data_path) && is_writable($this->host.$this->base.$data_path)) + { $data_path .= substr($data_path, -1) == "/" ? "" : "/"; + if($dh = opendir($this->host.$this->base.$data_path)) + { while($OK && ($file = readdir($dh)) !== false) + { if(is_dir($this->host.$this->base.$data_path.$file)) + { if($file != "." && $file != "..") $OK = $this->remove_data($data_path.$file); + } + else $OK = @unlink($this->host.$this->base.$data_path.$file); + } + closedir($dh); + } + else $OK = null; + } + else $OK = null; + if($OK) @rmdir($this->host.$this->base.$data_path); + return $OK; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/impl/xml/mw_xml_data.php b/web/app/data/impl/xml/mw_xml_data.php new file mode 100644 index 0000000..628c0d2 --- /dev/null +++ b/web/app/data/impl/xml/mw_xml_data.php @@ -0,0 +1,105 @@ +host = $host.(substr($host, -1) != "/" ? "/" : ""); + $this->base = $base.(substr($base, -1) != "/" ? "/" : ""); + $this->cache = array(); + } + + function host() { return $this->host; } + function base() { return $this->base; } + + function use_cache() { return true; } + + function set_cache($data_name, $data, $data_id) + { if($this->use_cache()) + { $this->cache[$data_name] = $data; + $this->cache[$data_name]["id"] = $data_id; + } + } + + function get_data($data_path, $data_id) + { $data_name = $this->data_name($data_path, $data_id); + if(isset($this->cache[$data_name])) return $this->cache[$data_name]; + if($this->buffer = @file_get_contents($data_name)) + { if(($data = $this->parse_data()) !== false) + { $this->set_cache($data_name, $data, $data_id); + $data["id"] = $data_id; + return $data; + } + } + return false; + } + + function add_data($data_path, $data_id, $data) + { return $this->_set_data($data_path, $data_id, $data); + } + + function set_data($data_path, $data_id, $data) + { return $this->_set_data($data_path, $data_id, $data); + } + + function _set_data($data_path, $data_id, $data) + { if($fh = @fopen($this->data_name($data_path, $data_id), "w")) + { $this->buffer = $this->serialize_data($data); + if(@fwrite($fh, $this->buffer) !== false) + { @fclose($fh); + $this->buffer = null; + $data_name = $this->data_name($data_path, $data_id); + $this->set_cache($data_name, $data, $data_id); + return $data_id; + } + else + { @fclose($fh); + $this->buffer = null; + } + } + return null; + } + + function del_data($data_path, $data_id) + { $data_name = $this->data_name($data_path, $data_id); + if(isset($this->cache[$data_name])) unset($this->cache[$data_name]); + return @unlink($this->data_name($data_path, $data_id)); + } + + function data_name($data_path, $data_id) + { return $this->host.$this->base.$data_path.$data_id.".xml"; + } + + function parse_data() + { if(!isset($this->sxml)) $this->sxml = new sxml(); + $this->sxml->parse($this->buffer); + if(isset($this->sxml->data["tuple"][0])) + { $this->buffer = $this->sxml->data["tuple"][0]; + $v_rst = array(); + foreach($this->buffer["subs"] as $key => $value) + { $v_rst[$key] = $value[0]["data"]; + } + return $v_rst; + } + return false; + } + + function serialize_data($data) + { $this->buffer = "\n"; + foreach($data as $key => $value) + { if(isset($value)) $this->buffer .= " <".$key.">\n"; + } + $this->buffer .= "\n"; + return $this->buffer; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/impl/xml/mw_xml_data_handler.php b/web/app/data/impl/xml/mw_xml_data_handler.php new file mode 100644 index 0000000..fb9e267 --- /dev/null +++ b/web/app/data/impl/xml/mw_xml_data_handler.php @@ -0,0 +1,128 @@ +xml_data = $xml_data; + $this->data_path = $data_path.(substr($data_path, -1) != "/" ? "/" : ""); + } + + function get_data($data_id) + { if(file_exists($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_id.".xml")) + { return $this->xml_data->get_data($this->data_path, $data_id); + } + return false; + } + + function open_data($FETCH = true) + { clearstatcache(); + $INDEX_OK = false; + if($this->xml_data->host() && $this->xml_data->base() && $this->data_path) + { if(is_dir($this->xml_data->host().$this->xml_data->base().$this->data_path) && is_writable($this->xml_data->host().$this->xml_data->base().$this->data_path)) + { if(!file_exists($this->xml_data->host().$this->xml_data->base().$this->data_path.".index")) + { if($fh = @fopen($this->xml_data->host().$this->xml_data->base().$this->data_path.".index", "w+")) + { if(@fwrite($fh, "0")) + { $this->last_index = 0; + @fclose($fh); + $INDEX_OK = true; + } + else @fclose($fh); + } + } + else + { if(($this->buffer = @file_get_contents($this->xml_data->host().$this->xml_data->base().$this->data_path.".index")) !== false) + { if(preg_match("/^[0-9]+$/", $this->buffer)) + { $this->last_index = (int)$this->buffer; + $INDEX_OK = true; + } + } + } + } + } + if($INDEX_OK) + { if($FETCH) + { if($this->data_path_handler = @opendir($this->xml_data->host().$this->xml_data->base().$this->data_path)) + { return true; + } + else + { $this->close_data(); + return null; + } + } + else return true; + } + else + { $this->close_data(); + return null; + } + } + + function fetch_assoc() + { if($this->data_path_handler) + { $FORMAT_OK = false; + while(!$FORMAT_OK && ($data_file = @readdir($this->data_path_handler)) !== false) + { if(substr($data_file, 0, 1) != "." && substr($data_file, -4) == ".xml") $FORMAT_OK = true; + } + if($FORMAT_OK) return $this->xml_data->get_data($this->data_path, substr($data_file, 0, -4)); + } + return false; + } + + function add_data($data) + { $index = $this->inc_index(); + if(isset($index)) + { if(is_array($data)) return $this->xml_data->add_data($this->data_path, $index, $data); + } + return null; + } + + function inc_index() + { clearstatcache(); + if(isset($this->last_index)) + { $index = $this->last_index + 1; + if($fh = @fopen($this->xml_data->host().$this->xml_data->base().$this->data_path.".index", "w+")) + { if(@fwrite($fh, (string)$index)) + { $this->last_index = $index; + @fclose($fh); + return $index; + } + else @fclose($fh); + } + } + return null; + } + + function set_data($data_file, $data) + { if(preg_match("/^[0-9]+\.xml$/", $data_file)) + { if(is_writable($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_file)) + { if(is_array($data)) + { return $this->xml_data->set_data($this->data_path, substr($data_file, 0, -4), $data); + } + } + } + return null; + } + + function del_data($data_file) + { if(preg_match("/^[0-9]+\.xml$/", $data_file)) + { if(is_file($this->xml_data->host().$this->xml_data->base().$this->data_path.$data_file)) + { return $this->xml_data->del_data($this->data_path, substr($data_file, 0, -4)); + } + } + return null; + } + + function close_data() + { $this->data_path= null; + if($this->data_path_handler) @closedir($this->data_path_handler); + $this->last_index = null; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/share/mw_data_check_instance.php b/web/app/data/modules/share/mw_data_check_instance.php new file mode 100644 index 0000000..772a093 --- /dev/null +++ b/web/app/data/modules/share/mw_data_check_instance.php @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/web/app/data/modules/share/mw_data_images.php b/web/app/data/modules/share/mw_data_images.php new file mode 100644 index 0000000..01c1d71 --- /dev/null +++ b/web/app/data/modules/share/mw_data_images.php @@ -0,0 +1,28 @@ + $max_width || $img_infos[1] > $max_height) + { $r = $max_width / $img_infos[0]; + if($r * $img_infos[1] > $max_height) $r = $max_height / $img_infos[1]; + return array + ( "width" => floor($r * $img_infos[0]), + "height" => floor($r * $img_infos[1]) + ); + } + return array + ( "width" => $img_infos[0], + "height" => $img_infos[1] + ); + } + return false; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/share/mw_data_init.php b/web/app/data/modules/share/mw_data_init.php new file mode 100644 index 0000000..ae4df81 --- /dev/null +++ b/web/app/data/modules/share/mw_data_init.php @@ -0,0 +1,18 @@ +env; } + function sgbd() { return $this->sgbd; } + + function set_env(&$env) { $this->env = &$env; } + function set_sgbd(&$sgbd) { $this->sgbd = &$sgbd; } + + function table_prefix() { return false; } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/share/mw_data_links.php b/web/app/data/modules/share/mw_data_links.php new file mode 100644 index 0000000..7af65db --- /dev/null +++ b/web/app/data/modules/share/mw_data_links.php @@ -0,0 +1,99 @@ +links = array(); + return true; + } + + function load_link(&$links, $v_path, $url, $intitule = "", $position = 0) + { if($path_item = array_shift($v_path)) + { if(!isset($links[$path_item])) $links[$path_item] = array + ( "nom" => $path_item, + "url" => $v_path ? null : $url, + "intitule" => $v_path ? null : $intitule, + "subs" => array(), + "position" => 0 + ); + if($v_path) $this->load_link($links[$path_item]["subs"], $v_path, $url, $intitule, $position); + else + { $links[$path_item]["nom"] = $path_item; + $links[$path_item]["url"] = $url; + $links[$path_item]["intitule"] = $intitule; + $links[$path_item]["position"] = $position; + } + } + } + + function valid_link_path($path) + { $v_path = explode("/", $path); + $SYNTAX_OK = true; + foreach($v_path as $i => $path_item) + { if($path_item) + { if(!preg_match("/^[a-zA-Z]+[a-zA-Z0-9\-_\.]*$/", $path_item)) + { $SYNTAX_OK = false; + break; + } + } + else unset($v_path[$i]); + } + return $v_path && $SYNTAX_OK ? $v_path : false; + } + + function get_link($path = null) + { if(!isset($this->links)) $this->init_links(); + if($this->links !== false) + { if(!isset($path)) return $this->links; + if($v_path = $this->valid_link_path($path)) + { return $this->_get_link($this->links, $v_path); + } + } + return false; + } + + function _get_link($links, $v_path) + { if($path_item = array_shift($v_path)) + { if(isset($links[$path_item])) + { if($v_path) return $this->_get_link($links[$path_item]["subs"], $v_path); + else return $links[$path_item]; + } + else return false; + } + } + + function set_link($path, $url, $intitule = "", $position = 0) + { if(!isset($this->links)) $this->init_links(); + if($v_path = $this->valid_link_path($path)) + { $this->load_link($this->links, $v_path, $url, $intitule, $position); + $this->links = $this->ordonne_links($this->links); + } + } + + function ordonne_links($links) + { if(!is_array($links)) return false; + $values = array_values($links); + $maximum = count($values); + while($maximum > 0) + { $maximumTemporaire = 0; + for($i = 0; $i < $maximum - 1; $i++) + { if($values[$i]["position"] > $values[$i + 1]["position"]) + { $tmp = $values[$i]; + $values[$i] = $values[$i + 1]; + $values[$i + 1] = $tmp; + $maximumTemporaire = $i + 1; + } + } + $maximum = $maximumTemporaire; + } + $res = array(); + foreach($values as $value) { if($value["nom"]) $res[$value["nom"]] = $value; } + foreach($res as $nom => $sub) { if($sub["subs"]) $res[$nom]["subs"] = $this->ordonne_links($res[$nom]["subs"]); } + return $res; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/share/mw_data_out_config.php b/web/app/data/modules/share/mw_data_out_config.php new file mode 100644 index 0000000..bdd8ead --- /dev/null +++ b/web/app/data/modules/share/mw_data_out_config.php @@ -0,0 +1,29 @@ +env(); + $config = array(); + if($env->out_file_exists("config.xml")) + { if($this->buffer = file_get_contents($env->out_file("config.xml"))) + { if(!isset($this->sxml)) $this->sxml = new sxml(); + $this->sxml->parse($this->buffer); + $this->buffer = $this->sxml->data["config"][0]; + if($this->buffer["subs"]) foreach($this->buffer["subs"] as $key => $value) + { $config[$key] = array + ( "type" => $value[0]["attrs"]["type"], + "default" => $value[0]["attrs"]["default"], + "text" => $value[0]["data"] + ); + } + } + else $config = false; + } + return $config; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/share/mw_data_utils.php b/web/app/data/modules/share/mw_data_utils.php new file mode 100644 index 0000000..17ba22b --- /dev/null +++ b/web/app/data/modules/share/mw_data_utils.php @@ -0,0 +1,77 @@ + 0) + { $maximumTemporaire = 0; + for($i = 0; $i < $maximum; $i++) + { if($values[$i][$key] > $values[$i + 1][$key]) + { $tmp = $values[$i]; + $values[$i] = $values[$i + 1]; + $values[$i + 1] = $tmp; + $maximumTemporaire = $i + 1; + } + } + $maximum = $maximumTemporaire; + } + $res = array(); + foreach($values as $value) if($value["id"]) $res[$value["id"]] = $value; + return $res; + } + */ + + function ordonne($list, $key, $order = "ASC") + { $values = array_values($list); + $maximum = count($values); + while($maximum > 0) + { $maximumTemporaire = 0; + for($i = 0; $i < $maximum; $i++) + { if + ( ($order == "ASC" && $values[$i][$key] > $values[$i + 1][$key]) + || ($order == "DESC" && $values[$i][$key] < $values[$i + 1][$key]) + ) + { $tmp = $values[$i]; + $values[$i] = $values[$i + 1]; + $values[$i + 1] = $tmp; + $maximumTemporaire = $i + 1; + } + } + $maximum = $maximumTemporaire; + } + $res = array(); + foreach($values as $value) if($value["id"]) $res[$value["id"]] = $value; + return $res; + } + + function upload($image, $upload_dir) + { $file = ""; + $upload_dir .= $upload_dir && (substr($upload_dir, -1) != "/") ? "/" : ""; + if($_FILES) + { if(isset($_FILES[$image])) + { if($_FILES[$image]["error"] == UPLOAD_ERR_OK) + { if(move_uploaded_file($_FILES[$image]["tmp_name"], $upload_dir.$_FILES[$image]["name"])) + { $file = $_FILES[$image]["name"]; + } + else $file = false; + } + else if($_FILES[$image]["error"] != UPLOAD_ERR_NO_FILE) $file = false; + } + else $file = false; + } + return $file; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/sql/mw_data_config.php b/web/app/data/modules/sql/mw_data_config.php new file mode 100644 index 0000000..280f5c1 --- /dev/null +++ b/web/app/data/modules/sql/mw_data_config.php @@ -0,0 +1,64 @@ +sgbd(); + $value = false; + if(isset($key)) + { $sql = + "SELECT `value` FROM #--config" + ." WHERE `key`=".$this->eq($key); + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + if($v_rst = $sgbd->fetch_assoc($rst)) $value = $v_rst["value"]; + else $value = ""; + $sgbd->free_result($rst); + } + else + { $value = array(); + $sql = + "SELECT * FROM #--config"; + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + while($v_rst = $sgbd->fetch_assoc($rst)) $value[$v_rst["key"]] = $v_rst["value"]; + $sgbd->free_result($rst); + } + return $value; + } + + function config_exists($key) + { $sgbd = $this->sgbd(); + $exists = false; + $sql = "SELECT count(*) as n FROM #--config" + ." WHERE `key`=".$this->eq($key); + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + if($v_rst = $sgbd->fetch_assoc($rst)) $exists = $v_rst["n"]; + $sgbd->free_result($rst); + return $exists; + } + + function set_config($key, $value) + { $sgbd = $this->sgbd(); + if($this->config_exists($key)) $sql = + "UPDATE #--config" + ." SET `value`=".$this->eq($value) + ." WHERE `key`=".$this->eq($key); + else $sql = + "INSERT INTO #--config" + ." VALUES(NULL, ".$this->eq($key).", ".$this->eq($value).")"; + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + return true; + } + + function del_config($key) + { $sgbd = $this->sgbd(); + return $sgbd->query("DELETE FROM #--config WHERE `key`=".$this->eq($key)) ? true : false; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/sql/mw_data_users.php b/web/app/data/modules/sql/mw_data_users.php new file mode 100644 index 0000000..b144ad6 --- /dev/null +++ b/web/app/data/modules/sql/mw_data_users.php @@ -0,0 +1,259 @@ +sgbd(); + $env = $this->env(); + $users = array("list" => array(), "total" => 0); + $SELECT = "SELECT *"; + $FROM = " FROM #--users"; + $WHERE = ""; + $WHERE .= (isset($alpha) ? ($WHERE ? " AND" : " WHERE")." LEFT(login, 1)=".$this->eq($alpha) : ""); + $WHERE .= (isset($status) ? ($WHERE ? " AND" : " WHERE")." status=".$this->eq($status) : ""); + $LIMIT = ($env->config("max_list") ? " LIMIT ".$env->config("max_list")." OFFSET ".$start : ""); + $sql = "SELECT count(*) as n FROM(".$SELECT.$FROM.$WHERE.") res"; + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + if($v_rst = $sgbd->fetch_assoc($rst)) $users["total"] = $v_rst["n"]; + $sgbd->free_result($rst); + if($users["total"] > 0) + { $sql = "SELECT * FROM(".$SELECT.$FROM.$WHERE.$LIMIT.") res"; + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + while($v_rst = $sgbd->fetch_assoc($rst)) $users["list"][$v_rst["id"]] = $v_rst; + $sgbd->free_result($rst); + } + return $users; + } + + function user_by_id($id) + { $sgbd = $this->sgbd(); + $user = array(); + $sql = "SELECT * from #--users WHERE id=".$this->eq($id); + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + if($v_rst = $sgbd->fetch_assoc($rst)) $user = $v_rst; + $sgbd->free_result($rst); + return $user; + } + + function user($login) + { $sgbd = $this->sgbd(); + $user = array(); + $sql = "SELECT * from #--users WHERE login=".$this->eq($login); + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + if($v_rst = $sgbd->fetch_assoc($rst)) $user = $v_rst; + $sgbd->free_result($rst); + return $user; + } + + function user_exists($login) + { $sgbd = $this->sgbd(); + $EXISTS = 0; + $sql = "SELECT count(*) as n from #--users WHERE login=".$this->eq($login); + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + if($v_rst = $sgbd->fetch_assoc($rst)) $EXISTS = $v_rst["n"]; + $sgbd->free_result($rst); + return $EXISTS; + } + + function add_user($login, $password, $email, $status) + { $sgbd = $this->sgbd(); + $sql = + "INSERT INTO #--users(login, password, email, status) VALUES" + ."( ".$this->eq($login) + .", ".$this->eq($password) + .", ".$this->eq($email) + .", ".$status + .")"; + return $sgbd->query($sql); + } + + function set_user($id, $login, $password, $email, $status) + { $sgbd = $this->sgbd(); + $sql = + "UPDATE #--users SET" + ." login=".$this->eq($login) + .", password=".$this->eq($password) + .", email=".$this->eq($email) + .", status=".$status + ." WHERE id=".$id; + return $sgbd->query($sql); + } + + function del_user($login) + { $sgbd = $this->sgbd(); + $sql = "DELETE FROM #--users WHERE login=".$this->eq($login); + return $sgbd->query($sql); + } + + # ---------------------------------------------------------------------------------------- + # status + # + + function status() + { if(!isset($this->user_status)) return false; + return $this->user_status; + } + + function init_user_status($status = array()) + { $sgbd = $this->sgbd(); + $this->user_status = array(); + $sql = "SELECT * FROM #--user_status"; + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + while($v_rst = $sgbd->fetch_assoc($rst)) $this->user_status[$v_rst["id"]] = $v_rst; + $sgbd->free_result($rst); + return $this->user_status; + } + + function init_action_status($status = array()) + { if(!isset($this->user_status)) return false; + $sgbd = $this->sgbd(); + $this->action_status = array(); + $sql = "SELECT * FROM #--action_status"; + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + while($v_rst = $sgbd->fetch_assoc($rst)) $this->action_status[$v_rst["id"]] = $v_rst; + $sgbd->free_result($rst); + return $this->action_status; + } + + function get_user_status() + { $user = $this->get_session_user(); + if($user && isset($user["status"])) return $user["status"]; + return 0; + } + + function get_action_status($mod, $controller = "index", $action = "index", $set_status = array()) + { $sgbd = $this->sgbd(); + $status = array(); + $sql = + "SELECT action, id_status" + ." FROM #--action_status" + ." WHERE action=".$this->eq($mod) + ." OR action=".$this->eq($mod."/".$controller) + ." OR action=".$this->eq($mod."/".$controller."/".$action); + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + while($v_rst = $sgbd->fetch_assoc($rst)) + { if(!isset($status[$v_rst["action"]])) $status[$v_rst["action"]] = array(); + $status[$v_rst["action"]][$v_rst["id_status"]] = true; + } + $sgbd->free_result($rst); + return $status; + } + + function creation_default_status() + { $sgbd = $this->sgbd(); + $default_status = 0; + $sql = "SELECT id FROM #--user_status WHERE creation_default=1 LIMIT 0,1"; + $rst = $sgbd->query($sql); + if(!isset($rst)) return false; + if($v_rst = $sgbd->fetch_assoc($rst)) $default_status = $v_rst["id"]; + $sgbd->free_result($rst); + return $default_status; + } + + # ---------------------------------------------------------------------------------------- + # log in / out + # + + function login($login, $password) + { if(($user = $this->user($login)) !== false) + { if($this->password_ok($user, $password)) + { if(!$this->set_session($user)) $user = false; + } + else + { $this->clear_session(); + $user = array(); + } + } + return $user; + } + + function logout() + { return $this->clear_session(); + } + + function user_ok($user) + { return + strcmp(md5($user["password"].$_SESSION["id"]), $_SESSION["pass"]) == 0 + && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"]; + } + + function password_ok($user, $password) + { return + strcmp(md5($user["password"].$_SESSION["id"]), $password) == 0 + && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"]; + } + + # ---------------------------------------------------------------------------------------- + # session + # + + function load_session() + { session_start(); + if(!isset($_SESSION["id"])) $this->clear_session(); + if + ( $user = + ( isset($_COOKIE["user"]) || isset($_SESSION["user"]) ? + $this->user(isset($_COOKIE["user"]) ? $_COOKIE["user"] : $_SESSION["user"]) + : array() + ) + ) + { if(isset($_COOKIE["user"])) $this->set_session($user); + if(!$this->user_ok($user)) + { $this->clear_session(); + $user = array(); + } + } + $this->_user = $user; + return $user; + } + + function set_session($user) + { $_SESSION["user"] = $user["login"]; + $_SESSION["pass"] = md5($user["password"].$_SESSION["id"]); + $env = $this->env(); + return setcookie("user", $user["login"], time() + (60 * 60 * 24 * 7), $env->path("web")); + } + + function clear_session() + { unset($_SESSION["user"]); + unset($_SESSION["pass"]); + $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"]; + $_SESSION["id"] = md5(rand()); + $env = $this->env(); + return setcookie("user", "", 0, $env->path("web")); + } + + function get_session_user() { return $this->_user; } + + # ---------------------------------------------------------------------------------------- + # uploads + # + + function check_user_uploads_dir($user = null) + { $env = $this->env(); + $user_dir = $env->path("content")."uploads/".(isset($user) ? $user : $this->_user["id"]); + if(!file_exists($user_dir)) @mkdir($user_dir); + return file_exists($user_dir); + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/xml/mw_data_config.php b/web/app/data/modules/xml/mw_data_config.php new file mode 100644 index 0000000..98d4607 --- /dev/null +++ b/web/app/data/modules/xml/mw_data_config.php @@ -0,0 +1,106 @@ +sgbd(); + $value = false; + if($rst = $sgbd->open_data("config")) + { if(isset($key)) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if($v_rst["key"] == $key) + { $value = $v_rst["value"]; + } + } + else $value = null; + } + } + else + { $value = array(); + while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(is_array($v_rst)) foreach($v_rst as $key => $_value) + { $value[$key] = $_value; + break; + } + } + else $value = null; + } + } + $sgbd->close_data($rst); + } + if(!isset($value)) return false; + return $value; + } + + function config_exists($key) + { $sgbd = $this->sgbd(); + $exists = 0; + if($rst = $sgbd->open_data("config")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(isset($v_rst[$key])) $exists++; + } + else + { $exists = false; + break; + } + } + $sgbd->close_data($rst); + } + else $exists = false; + return $exists; + } + + function set_config($key, $value) + { $sgbd = $this->sgbd(); + $FOUND = false; + if($rst = $sgbd->open_data("config")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(array_key_exists($key, $v_rst)) + { $FOUND = $sgbd->set_data("config", $v_rst["id"], array($key => $value)); + break; + } + } + else + { $FOUND = null; + break; + } + } + $sgbd->close_data($rst); + } + else $FOUND = null; + if(isset($FOUND)) + { if($FOUND) return true; + else + { if($sgbd->add_data("config", array($key => $value))) return true; + } + } + return false; + } + + function del_config($key) + { $ids = array(); + $sgbd = $this->sgbd(); + if($rst = $sgbd->open_data("config")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(isset($v_rst[$key]) && isset($v_rst["id"])) + { $ids[] = $v_rst["id"]; + } + } + else $ids = false; + } + $sgbd->close_data($rst); + } + if($ids === false) return false; + foreach($ids as $id) if(!$sgbd->del_data("config", $id)) return false; + return true; + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/modules/xml/mw_data_users.php b/web/app/data/modules/xml/mw_data_users.php new file mode 100644 index 0000000..cc84872 --- /dev/null +++ b/web/app/data/modules/xml/mw_data_users.php @@ -0,0 +1,427 @@ +sgbd(); + $env = $this->env(); + $users = array("list" => array(), "total" => 0); + $res = array(); + if($rst = $sgbd->open_data("users")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(!isset($alpha) || (isset($v_rst["login"]) && strtolower(substr($v_rst["login"], 0, 1)) == strtolower($alpha))) + { if(!isset($status) || (isset($v_rst["status"]) && $v_rst["status"] == $status)) + { $res[$v_rst["id"]] = $v_rst; + $users["total"]++; + } + } + } + else + { $res = false; + break; + } + } + $sgbd->close_data($rst); + if($res !== false) + { $n = 0; + foreach($res as $id_user => $user) + { $n++; + if(!$env->config("max_list") || ($n > $start && $n <= ($start + $env->config("max_list")))) + { $users["list"][$user["id"]] = $user; + if(!isset($this->users)) $this->users = array(); + $this->users[$user["id"]] = $user; + } + } + } + else $users = false; + } + else $users = false; + return $users; + } + + function user_by_id($id) + { if(!isset($this->users)) $this->users = array(); + if(isset($this->users[$id])) return $this->users[$id]; + $sgbd = $this->sgbd(); + if(($user = $sgbd->get_data("users", $id)) !== false) + { $this->users[$id] = $user; + } + return $user; + } + + function user($login) + { $sgbd = $this->sgbd(); + $user = array(); + if($rst = $sgbd->open_data("users")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(isset($v_rst["login"]) && $v_rst["login"] == $login) + { $user = $v_rst; + break; + } + } + else $user = false; + } + $sgbd->close_data($rst); + } + else $user = false; + if($user !== false) + { if(!isset($this->users)) $this->users = array(); + $this->users[$user["id"]] = $user; + } + return $user; + } + + function user_exists($login) + { $sgbd = $this->sgbd(); + $EXISTS = 0; + if($rst = $sgbd->open_data("users")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(isset($v_rst["login"]) && $v_rst["login"] == $login) + { $EXISTS++; + } + } + else + { $EXISTS = false; + break; + } + } + $sgbd->close_data($rst); + } + else $EXISTS = false; + return $EXISTS; + } + + function add_user($login, $password, $email, $status) + { $sgbd = $this->sgbd(); + return $sgbd->add_data + ( "users", + array + ( "login" => $login, + "password" => $password, + "email" => $email, + "status" => $status + ) + ); + } + + function set_user($id, $login, $password, $email, $status) + { $sgbd = $this->sgbd(); + return $sgbd->set_data + ( "users", + $id, + array + ( "login" => $login, + "password" => $password, + "email" => $email, + "status" => $status + ) + ); + } + + function del_user($login) + { if(($user = $this->user($login)) !== false) + { $sgbd = $this->sgbd(); + return $sgbd->del_data("users", $user["id"]); + } + return false; + } + + # ---------------------------------------------------------------------------------------- + # status + # + + function status() + { if(!isset($this->user_status)) return false; + return $this->user_status; + } + + function init_user_status($status = array()) + { $sgbd = $this->sgbd(); + $this->user_status = array(); + if($rst = $sgbd->open_data("user_status")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { $this->user_status[$v_rst["id"]] = $v_rst; + } + else + { $this->user_status = false; + break; + } + } + $sgbd->close_data($rst); + } + else $this->user_status = false; + if($status && $this->user_status !== false) + { foreach($status as $new_user_status) + { $id_status = false; + foreach($this->user_status as $user_status) if($new_user_status["nom"] == $user_status["nom"]) + { $id_status = $user_status["id"]; + break; + } + if($id_status) + { $SAME = true; + foreach($new_user_status as $status_key => $status_value) + { if(!isset($this->user_status[$id_status][$status_key]) || $this->user_status[$id_status][$status_key] != $status_value) + { $SAME = false; break; + } + } + if(!$SAME) + { if($sgbd->set_data("user_status", $id_status, $new_user_status)) $this->user_status[$id_status] = $new_user_status; + else { $this->user_status = false; break; } + } + } + else + { if($id_status = $sgbd->add_data("user_status", $new_user_status)) $this->user_status[$id_status] = $new_user_status; + else { $this->user_status = false; break; } + } + } + } + return $this->user_status; + } + + function init_action_status($status = array()) + { if(!isset($this->user_status)) return false; + $sgbd = $this->sgbd(); + $this->action_status = array(); + if($rst = $sgbd->open_data("action_status")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { $this->action_status[$v_rst["id"]] = $v_rst; + } + else + { $this->action_status = false; + break; + } + } + $sgbd->close_data($rst); + } + else $this->action_status = false; + if($status && $this->action_status !== false) + { $STATUS_OK = true; + foreach($status as $id_new_action_status => $new_action_status) + { $FOUND = $new_action_status["id_status"] == "0"; + if(!$FOUND) foreach($this->user_status as $user_status) + { if($new_action_status["id_status"] == $user_status["nom"]) + { $FOUND = true; + $status[$id_new_action_status]["id_status"] = $user_status["id"]; + } + } + if(!$FOUND) + { $STATUS_OK = false; + break; + } + } + if($STATUS_OK) + { foreach($status as $new_action_status) + { $id_status = false; + foreach($this->action_status as $action_status) + { if + ( $new_action_status["action"] == $action_status["action"] + && $new_action_status["id_status"] == $action_status["id_status"] + ) + { $id_status = $action_status["id"]; + break; + } + } + if($id_status) + { $SAME = true; + foreach($new_action_status as $status_key => $status_value) + { if(!isset($this->action_status[$id_status][$status_key]) || $this->action_status[$id_status][$status_key] != $status_value) + { $SAME = false; break; + } + } + if(!$SAME) + { if($id_status = $sgbd->add_data("action_status", $new_action_status)) $this->action_status[$id_status] = $new_action_status; + else { $this->action_status = false; break; } + } + } + else + { if($id_status = $sgbd->add_data("action_status", $new_action_status)) $this->action_status[$id_status] = $new_action_status; + else { $this->action_status = false; break; } + } + } + } + else $this->action_status = false; + } + return $this->action_status; + } + + function get_user_status() + { $user = $this->get_session_user(); + if($user && isset($user["status"])) return $user["status"]; + return 0; + } + + function get_action_status($mod, $controller = "index", $action = "index", $set_status = array()) + { $sgbd = $this->sgbd(); + if($rst = $sgbd->open_data("action_status")) + { while($status !==false && $v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst) && isset($v_rst["action"]) && isset($v_rst["id_status"])) + { if + ( $v_rst["action"] == $mod + || $v_rst["action"] == $mod."/".$controller + || $v_rst["action"] == $mod."/".$controller."/".$action + ) + { if(!isset($status[$v_rst["action"]])) $status[$v_rst["action"]] = array(); + $status[$v_rst["action"]][$v_rst["id_status"]] = true; + } + } + else $status = false; + } + $sgbd->close_data($rst); + } + else $status = false; + if($status !== false) + { if($set_status) + { foreach($set_status as $new_action_status) + { $id_status = false; + foreach($status as $user_status) if($new_user_status["nom"] == $user_status["nom"]) + { $id_status = $user_status["id"]; + break; + } + if($id_status) + { $SAME = true; + foreach($new_user_status as $status_key => $status_value) + { if(!isset($status[$id_status][$status_key]) || $status[$id_status][$status_key] != $status_value) + { $SAME = false; break; + } + } + if(!$SAME) + { if($sgbd->set_data("user_status", $id_status, $new_user_status)) $status[$id_status] = $new_user_status; + else { $status = false; break; } + } + } + else + { if($id_status = $sgbd->add_data("user_status", $new_user_status)) $status[$id_status] = $new_user_status; + else { $status = false; break; } + } + } + } + } + return $status; + } + + function creation_default_status() + { $sgbd = $this->sgbd(); + $default_status = 0; + if($rst = $sgbd->open_data("user_status")) + { while($v_rst = $sgbd->fetch_data($rst)) + { if(isset($v_rst)) + { if(isset($v_rst["creation_default"]) && $v_rst["creation_default"] == 1) + { $default_status = $v_rst["id"]; + break; + } + } + else + { $default_status = false; + break; + } + } + $sgbd->close_data($rst); + } + else $default_status = false; + return $default_status; + } + + # ---------------------------------------------------------------------------------------- + # log in / out + # + + function login($login, $password) + { if(($user = $this->user($login)) !== false) + { if($this->password_ok($user, $password)) + { if(!$this->set_session($user)) $user = false; + } + else + { $this->clear_session(); + $user = array(); + } + } + return $user; + } + + function logout() + { return $this->clear_session(); + } + + function user_ok($user) + { return + strcmp(md5($user["password"].$_SESSION["id"]), $_SESSION["pass"]) == 0 + && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"]; + } + + function password_ok($user, $password) + { return + strcmp(md5($user["password"].$_SESSION["id"]), $password) == 0 + && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"]; + } + + # ---------------------------------------------------------------------------------------- + # session + # + + function load_session() + { session_start(); + if(!isset($_SESSION["id"])) $this->clear_session(); + if + ( $user = + ( isset($_COOKIE["user"]) || isset($_SESSION["user"]) ? + $this->user(isset($_COOKIE["user"]) ? $_COOKIE["user"] : $_SESSION["user"]) + : array() + ) + ) + { if(isset($_COOKIE["user"])) $this->set_session($user); + if(!$this->user_ok($user)) + { $this->clear_session(); + $user = array(); + } + } + $this->_user = $user; + return $user; + } + + function set_session($user) + { $_SESSION["user"] = $user["login"]; + $_SESSION["pass"] = md5($user["password"].$_SESSION["id"]); + $env = $this->env(); + return setcookie("user", $user["login"], time() + (60 * 60 * 24 * 7), $env->path("web")); + } + + function clear_session() + { unset($_SESSION["user"]); + unset($_SESSION["pass"]); + $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"]; + $_SESSION["id"] = md5(rand()); + $env = $this->env(); + return setcookie("user", "", 0, $env->path("web")); + } + + function get_session_user() { return $this->_user; } + + # ---------------------------------------------------------------------------------------- + # uploads + # + + function check_user_uploads_dir($user = null) + { $env = $this->env(); + $user_dir = $env->path("content")."uploads/".(isset($user) ? $user : $this->_user["id"]); + if(!file_exists($user_dir)) @mkdir($user_dir); + return file_exists($user_dir); + } + + } + +?> \ No newline at end of file diff --git a/web/app/data/mw_data.php b/web/app/data/mw_data.php new file mode 100644 index 0000000..c08fbb1 --- /dev/null +++ b/web/app/data/mw_data.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/web/app/data/mw_sgbd.php b/web/app/data/mw_sgbd.php new file mode 100644 index 0000000..432ff33 --- /dev/null +++ b/web/app/data/mw_sgbd.php @@ -0,0 +1,109 @@ +sgbd_impl = $sgbd_impl; + $this->env = $env; + } + + function extention_ok() { return $this->sgbd_impl->extention_ok($this->env); } + + function connect($host, $base, $user, $password) + { return $this->sgbd_impl->connect($host, $base, $user, $password); + } + + function select_db($db_name) + { return $this->sgbd_impl->select_db($db_name); + } + + # --------------------------------------------------------------------------------- + # SQL + # + + function table_exists($table_name) + { return $this->sgbd_impl->table_exists + ( ($prefix_codes = array_keys($this->env->bdd("table_prefix"))) ? + str_replace($prefix_codes, array_values($this->env->bdd("table_prefix")), $table_name) + : $table_name + ); + } + + function query($sql) + { return $this->sgbd_impl->query + ( ($prefix_codes = array_keys($this->env->bdd("table_prefix"))) ? + str_replace($prefix_codes, array_values($this->env->bdd("table_prefix")), $sql) + : $sql + ); + } + + function insert_id() + { return $this->sgbd_impl->insert_id(); + } + + function fetch_assoc($rst) + { return $this->sgbd_impl->fetch_assoc($rst); + } + + function free_result($rst) + { return $this->sgbd_impl->free_result($rst); + } + + function close() + { return $this->sgbd_impl->close(); + } + + # --------------------------------------------------------------------------------- + # XML + # + + function data_exists($data_path) + { return $this->sgbd_impl->data_exists($data_path); + } + + function create_data($data_path) + { return $this->sgbd_impl->create_data($data_path); + } + + function get_data($data_path, $data_id) + { return $this->sgbd_impl->get_data($data_path, $data_id); + } + + function open_data($data_path, $FETCH = true) + { return $this->sgbd_impl->open_data($data_path, $FETCH); + } + + function fetch_data($dh) + { return $this->sgbd_impl->fetch_data($dh); + } + + function add_data($data_path, $data) + { return $this->sgbd_impl->add_data($data_path, $data); + } + + function last_index($dh) + { return $this->sgbd_impl->last_index($dh); + } + + function set_data($data_path, $data_id, $data) + { return $this->sgbd_impl->set_data($data_path, $data_id, $data); + } + + function del_data($data_path, $data_id) + { return $this->sgbd_impl->del_data($data_path, $data_id); + } + + function close_data($dh) + { return $this->sgbd_impl->close_data($dh); + } + + function remove_data($data_path) + { return $this->sgbd_impl->remove_data($data_path); + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_config.php b/web/app/env/modules/mw_env_config.php new file mode 100644 index 0000000..4357b06 --- /dev/null +++ b/web/app/env/modules/mw_env_config.php @@ -0,0 +1,114 @@ +bdd = $bdd; + $this->bdd["table_prefix"] = array(); + $this->CONFIG = isset($CONFIG) ? $CONFIG : array(); + $this->PARAMS = array(); + $xml_parser = new sxml(); + $app_config_file = $this->path("app")."config.xml"; + if(file_exists($app_config_file)) + { $xml_parser->parse(file_get_contents($app_config_file)); + $app_config = $xml_parser->data["config"][0]; + if(isset($app_config["subs"]["params"])) + { foreach($app_config["subs"]["params"][0]["subs"] as $param_key => $param_elt) + { $this->PARAMS[$param_key] = $param_elt[0]["data"]; + } + } + if(isset($app_config["subs"]["config"])) + { foreach($app_config["subs"]["config"][0]["subs"] as $config_key => $config_elt) + { $this->CONFIG[$config_key] = $config_elt[0]["data"]; + } + } + if(isset($app_config["subs"]["bdd"][0]["subs"]["table_prefix_code"])) + { $this->add_table_prefix + ( array + ( $app_config["subs"]["bdd"][0]["subs"]["table_prefix_code"][0]["data"] => $bdd["table_prefix"] + ) + ); + } + } + if(($plugins = $this->plugins("ASC")) !== false) + { foreach($plugins as $plugin_name => $plugin) + { $app_config_file = $this->path("plugins").$plugin_name."/app/config.xml"; + if(file_exists($app_config_file) && $plugin["installed"] && $plugin["enabled"]) + { $xml_parser->parse(file_get_contents($app_config_file)); + $app_config = $xml_parser->data["config"][0]; + if(isset($app_config["subs"]["params"])) + { foreach($app_config["subs"]["params"][0]["subs"] as $param_key => $param_elt) + { $this->PARAMS[$param_key] = $param_elt[0]["data"]; + } + } + if(isset($app_config["subs"]["config"])) + { foreach($app_config["subs"]["config"][0]["subs"] as $config_key => $config_elt) + { $this->CONFIG[$config_key] = $config_elt[0]["data"]; + } + } + if(isset($app_config["subs"]["bdd"][0]["subs"]["table_prefix_code"])) + { $this->add_table_prefix + ( array + ( $app_config["subs"]["bdd"][0]["subs"]["table_prefix_code"][0]["data"] => $bdd["table_prefix"] + ) + ); + } + } + } + $this->init_additional_get_params(); + } + else $this->erreur("impossible de lire les fichiers de configuration pour les plugins", true); + } + else $this->erreur("impossible de trouver le fichier de configuration pour l'installation", true); + } + + function get_config_file() { return $this->config_file; } + function set_config_file($config_file) { $this->config_file = $config_file; } + + function get_PATHES() { return $this->PATHES; } + function path($name) + { if(isset($this->PATHES[$name])) return $this->PATHES[$name]; + return ""; + } + function set_PATHES($PATHES) + { foreach($PATHES as $path_name => $path_value) + { if($path_value && substr($path_value, -1) != "/") $PATHES[$path_name] .= "/"; + } + $this->PATHES = $PATHES; + } + + function get_PARAMS() { return $this->PARAMS; } + function param($name) { return $this->PARAMS[$name]; } + + function get_CONFIG() { return $this->CONFIG; } + function config($name) { return $this->CONFIG[$name]; } + function set_config($config) + { if(is_array($config)) + { foreach($config as $key => $value) $this->CONFIG[$key] = $value; + return true; + } + return false; + } + + function get_bdd() { return $this->bdd; } + function bdd($name) { return $this->bdd[$name]; } + function set_bdd($key, $value) { $this->bdd[$key] = $value; } + function add_table_prefix($table_prefix) + { if(is_array($table_prefix)) + { foreach($table_prefix as $prefix_code => $prefix) $this->bdd["table_prefix"][$prefix_code] = $prefix; + return true; + } + return false; + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_data.php b/web/app/env/modules/mw_env_data.php new file mode 100644 index 0000000..cc0e711 --- /dev/null +++ b/web/app/env/modules/mw_env_data.php @@ -0,0 +1,15 @@ +data = &$data; } + + function data() + { return $this->data; + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_init.php b/web/app/env/modules/mw_env_init.php new file mode 100644 index 0000000..8987f71 --- /dev/null +++ b/web/app/env/modules/mw_env_init.php @@ -0,0 +1,65 @@ +plugins()) !== false) + { foreach($plugins as $plugin_name => $plugin) + { $init_path = $this->path("plugins").$plugin_name."/app/init/"; + if + ( $plugin["installed"] + && $plugin["enabled"] + && file_exists($init_path) + && is_dir($init_path) + ) + { if($dh = opendir($init_path)) + { $files = array(); + while(($file = readdir($dh)) !== false) + { if + ( substr($file, 0, 1) != "." + && !is_dir($init_path.$file) + && strcmp(substr($file, -4), ".php") == 0 + && !isset($init_files[$file]) + ) $init_files[$file] = $init_path; + } + closedir($dh); + + } + else $this->erreur("impossible d'ouvrir le dossier init du plugin ".$plugin_name, true); + } + if($this->check_stop()) return; + } + $init_path = $this->path("app")."init/"; + if + ( file_exists($init_path) + && is_dir($init_path) + ) + { if($dh = opendir($init_path)) + { $files = array(); + while(($file = readdir($dh)) !== false) + { if + ( substr($file, 0, 1) != "." + && !is_dir($init_path.$file) + && strcmp(substr($file, -4), ".php") == 0 + ) $init_files[$file] = $init_path; + } + closedir($dh); + } + else $this->erreur("impossible d'ouvrir le dossier init du plugin ".$plugin_name, true); + } + } + if($this->check_stop()) return; + if($init_files) + { ksort($init_files); + foreach($init_files as $file => $init_path) + { require $init_path.$file; + if($this->check_stop()) return; + } + } + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_inputs.php b/web/app/env/modules/mw_env_inputs.php new file mode 100644 index 0000000..526285a --- /dev/null +++ b/web/app/env/modules/mw_env_inputs.php @@ -0,0 +1,42 @@ +path("libs")."inputfilter.php"; + $allowed_tags = array + ( "p", "span", "pre", "blockquote", "address", "hr", "br", + "img", + "strong", "em", "u", "i", "b", "s", + "a", + "ul", "ol", "li", + "h1", "h2", "h3", "h4", "h5", "h6" + ); + $allowed_attrs = array + ( "style", + "src", "alt", "width", "height", + "href", "title" + ); + $input_filter = new InputFilter($allowed_tags, $allowed_attrs); + $_POST = $input_filter->process($_POST); + } + if($_FILES) + { foreach($_FILES as $file_key => $file_infos) + { $v_name = explode(".", $file_infos["name"]); + $ext = strtolower($v_name[count($v_name) - 1]); + if + ( $ext != "png" + && $ext != "jpg" + && $ext != "jpeg" + && $ext != "gif" + ) unset($_FILES[$file_key]); + } + } + return true; + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_links.php b/web/app/env/modules/mw_env_links.php new file mode 100644 index 0000000..818ce44 --- /dev/null +++ b/web/app/env/modules/mw_env_links.php @@ -0,0 +1,23 @@ +data(); + return $data->init_links(); + } + + function get_link($path = null) + { $data = $this->data(); + return $data->get_link($path); + } + + function set_link($path, $url, $intitule = "", $position = 0) + { $data = $this->data(); + return $data->set_link($path, $url, $intitule, $position); + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_messages.php b/web/app/env/modules/mw_env_messages.php new file mode 100644 index 0000000..824b82f --- /dev/null +++ b/web/app/env/modules/mw_env_messages.php @@ -0,0 +1,35 @@ +set_etat("reponses/html/erreur", false); + $erreur = $this->out("erreur"); + if(!isset($erreur)) $erreur = array("messages" => array()); + $erreur["messages"][] = $message; + $this->set_out("erreur", $erreur); + } + } + + function message($message) + { $messages = $this->out("messages"); + if(!isset($messages)) $messages = array(); + $messages[] = $message; + $this->set_out("messages", $messages); + } + + function messages() + { $messages = $this->out("messages"); + if(isset($messages)) return $messages; + return array(); + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_out.php b/web/app/env/modules/mw_env_out.php new file mode 100644 index 0000000..17f1096 --- /dev/null +++ b/web/app/env/modules/mw_env_out.php @@ -0,0 +1,275 @@ +out[$key] = $value; return $value; } + function get_out() { return $this->out; } + function out($key) { return $this->out[$key]; } + + function out_pathes() + { $pathes = array(); + if($dh = opendir($this->path("out"))) + { while(($file = readdir($dh)) !== false) + { if(is_dir($this->path("out").$file) && substr($file, 0 ,1) != ".") $pathes[] = $file; + } + closedir($dh); + } + else $pathes = false; + return $pathes; + } + + function out_file_exists($file, $PRIORITE = "DESC") + { $out_file = $this->_out_file($file, $PRIORITE); + return $out_file ? true : false; + } + + function out_file($file, $PRIORITE = "DESC") + { $out_file = $this->_out_file($file, $PRIORITE); + return $out_file ? $out_file : $file; + } + + function _out_file($file, $PRIORITE = "DESC") + { $out_file = false; + if($PRIORITE == "ASC") + { $tmp_out_file = $this->path("out").$this->config("out").$file; + if($file && file_exists($tmp_out_file)) + { $out_file = $tmp_out_file; + } + if(!$out_file) + { $tmp_out_file = $this->path("out").$this->path("dist_out").$file; + if($file && file_exists($tmp_out_file)) + { $out_file = $tmp_out_file; + } + } + } + if($out_file) return $out_file; + if(($plugins = $this->plugins($PRIORITE)) !== false) + { foreach($plugins as $plugin_name => $plugin) + { $tmp_out_file = $this->path("plugins").$plugin_name."/out/".$this->config("out").$file; + if($file && $plugin["installed"] && $plugin["enabled"] && file_exists($tmp_out_file)) + { $out_file = $tmp_out_file; + break; + } + if(!$out_file) + { $tmp_out_file = $this->path("plugins").$plugin_name."/out/".$this->path("dist_out").$file; + if($file && $plugin["installed"] && $plugin["enabled"] && file_exists($tmp_out_file)) + { $out_file = $tmp_out_file; + break; + } + } + } + if($PRIORITE == "DESC" && !$out_file) + { $tmp_out_file = $this->path("out").$this->config("out").$file; + if($file && file_exists($tmp_out_file)) + { $out_file = $tmp_out_file; + } + if(!$out_file) + { $tmp_out_file = $this->path("out").$this->path("dist_out").$file; + if($file && file_exists($tmp_out_file)) + { $out_file = $tmp_out_file; + } + } + } + } + return $out_file; + } + + # --------------------------------------------------------------------------------- + # out config + # + + function set_out_config($out_config) + { $this->out_config = $out_config; + return $this->out_config; + } + + function get_out_config() { return isset($this->out_config) ? $this->out_config : array(); } + + function out_config($name) + { if(isset($this->out_config)) + { $CONFIG = $this->get_CONFIG(); + return isset($CONFIG["out_".$name]) ? $CONFIG["out_".$name] : $this->out_config[$name]["default"]; + } + return null; + } + + # --------------------------------------------------------------------------------- + # layouts + # + + function layout() { return $this->layout; } + + function render_layout($layout = null) + { if(!isset($layout)) $layout = $this->init_layout(); + if(($plugins = $this->plugins("ASC")) !== false) + { foreach($plugins as $plugin_name => $plugin) + { if($plugin["installed"] && $plugin["enabled"]) + { $FOUND = false; + $functions_file = $this->path("plugins").$plugin_name."/out/".$this->config("out")."functions.php"; + if(file_exists($functions_file)) + { $FOUND = true; + require $functions_file; + } + if(!$FOUND) + { $functions_file = $this->path("plugins").$plugin_name."/out/".$this->path("dist_out")."functions.php"; + if($plugin["installed"] && $plugin["enabled"] && file_exists($functions_file)) + { require $functions_file; + } + } + } + } + $FOUND = false; + $functions_file = $this->path("out").$this->config("out")."functions.php"; + if(file_exists($functions_file)) + { $FOUND = true; + require $functions_file; + } + if(!$FOUND) + { $functions_file = $this->path("out").$this->path("dist_out")."functions.php"; + if(file_exists($functions_file)) + { require $functions_file; + } + } + if($layout["page"]) + { if($this->out_file_exists($layout["page"])) require $this->out_file($layout["page"]); + } + elseif($layout["content"]) + { if($this->out_file_exists($layout["content"])) require $this->out_file($layout["content"]); + } + } + } + + function init_layout() + { $this->layout = array(); + $this->_init_layout("index"); + if(($mod = $this->etat("mod")) != "index") $this->_init_layout($mod); + return $this->get_layout(); + } + + function _init_layout($mod) + { if(($plugins = $this->plugins("ASC")) !== false) + { $layout_file = false; + $tmp_layout_file = $this->path("out").$this->config("out")."layouts/".$mod.".xml"; + if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file; + if(!$layout_file) + { $tmp_layout_file = $this->path("out").$this->path("dist_out")."layouts/".$mod.".xml"; + if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file; + } + if($layout_file) $this->load_layout($layout_file); + foreach($plugins as $plugin_name => $plugin) + { if($plugin["installed"] && $plugin["enabled"]) + { $layout_file = false; + $tmp_layout_file = $this->path("plugins").$plugin_name."/out/".$this->config("out")."layouts/".$mod.".xml"; + if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file; + if(!$layout_file) + { $tmp_layout_file = $this->path("plugins").$plugin_name."/out/".$this->path("dist_out")."layouts/".$mod.".xml"; + if(file_exists($tmp_layout_file)) $layout_file = $tmp_layout_file; + } + if($layout_file) $this->load_layout($layout_file); + } + } + } + } + + function load_layout($layout_file) + { if(file_exists($layout_file)) + { $xml_parser = new sxml(); + $xml_parser->parse(file_get_contents($layout_file)); + $layout = $xml_parser->data; + if(isset($layout["layout"][0]["subs"])) + { foreach($layout["layout"][0]["subs"] as $mod => $mod_node) + { if(!isset($this->layout[$mod])) + { $this->layout[$mod] = array + ( "page" => null, + "content" => null, + "controllers" => array() + ); + } + if(isset($mod_node[0]["attrs"]["page"])) $this->layout[$mod]["page"] = $mod_node[0]["attrs"]["page"]; + if(isset($mod_node[0]["attrs"]["content"])) $this->layout[$mod]["content"] = $mod_node[0]["attrs"]["content"]; + if(isset($mod_node[0]["subs"])) + { foreach($mod_node[0]["subs"] as $controller => $controller_node) + { if(!isset($this->layout[$mod]["controllers"][$controller])) + { $this->layout[$mod]["controllers"][$controller] = array + ( "page" => null, + "content" => null, + "actions" => array() + ); + } + if(isset($controller_node[0]["attrs"]["page"])) $this->layout[$mod]["controllers"][$controller]["page"] = $controller_node[0]["attrs"]["page"]; + if(isset($controller_node[0]["attrs"]["content"])) $this->layout[$mod]["controllers"][$controller]["content"] = $controller_node[0]["attrs"]["content"]; + if(isset($controller_node[0]["subs"])) + { foreach($controller_node[0]["subs"] as $action => $action_node) + { if(!isset($this->layout[$mod]["controllers"][$controller]["actions"][$action])) + { $this->layout[$mod]["controllers"][$controller]["actions"][$action] = array + ( "page" => null, + "content" => null + ); + } + if(isset($action_node[0]["attrs"]["page"])) $this->layout[$mod]["controllers"][$controller]["actions"][$action]["page"] = $action_node[0]["attrs"]["page"]; + if(isset($action_node[0]["attrs"]["content"])) $this->layout[$mod]["controllers"][$controller]["actions"][$action]["content"] = $action_node[0]["attrs"]["content"]; + } + } + } + } + } + } + } + return false; + } + + function get_layout() + { $mod = $this->etat("mod"); + $controller = $this->etat("controller"); + $action = $this->etat("action"); + $content = ""; + if(isset($this->layout[$mod]["controllers"][$controller]["actions"][$action]["content"])) + { $content = $this->layout[$mod]["controllers"][$controller]["actions"][$action]["content"]; + } + else + { if(isset($this->layout[$mod]["controllers"][$controller]["content"])) + { $content = $this->layout[$mod]["controllers"][$controller]["content"]; + } + else + { if(isset($this->layout[$mod]["content"])) + { $content = $this->layout[$mod]["content"]; + } + else + { if(isset($this->layout["index"]["content"])) + { $content = $this->layout["index"]["content"]; + } + } + } + } + $page = ""; + if(isset($this->layout[$mod]["controllers"][$controller]["actions"][$action]["page"])) + { $page = $this->layout[$mod]["controllers"][$controller]["actions"][$action]["page"]; + } + else + { if(isset($this->layout[$mod]["controllers"][$controller]["page"])) + { $page = $this->layout[$mod]["controllers"][$controller]["page"]; + } + else + { if(isset($this->layout[$mod]["page"])) + { $page = $this->layout[$mod]["page"]; + } + else + { if(isset($this->layout["index"]["page"])) + { $content = $this->layout["index"]["page"]; + } + } + } + } + return array + ( "page" => $page, + "content" => $content + ); + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_plugins.php b/web/app/env/modules/mw_env_plugins.php new file mode 100644 index 0000000..fc4925b --- /dev/null +++ b/web/app/env/modules/mw_env_plugins.php @@ -0,0 +1,185 @@ +init_plugins($PRIORITE); + if($PRIORITE == "ASC") return $this->plugins_asc; + if($PRIORITE == "DESC") return $this->plugins_desc; + return false; + } + + # --------------------------------------------------------------------------------- + # init + # + + function init_plugins($PRIORITE = "ASC") + { if(isset($this->plugins_asc) || isset($this->plugins_desc)) + { if($PRIORITE == "ASC") + { if(!isset($this->plugins_asc)) $this->plugins_asc = $this->ordonne_plugins($this->plugins_desc, $PRIORITE); + } + elseif($PRIORITE == "DESC") + { if(!isset($this->plugins_desc)) $this->plugins_desc = $this->ordonne_plugins($this->plugins_asc, $PRIORITE); + } + return; + } + $plugins = array(); + if(!class_exists("mw_plugin")) + { require $this->path("app")."mw_plugin.php"; + if(!class_exists("mw_plugin")) + { $plugins = false; + return; + } + } + if(file_exists($this->path("plugins"))) + { if($dh = opendir($this->path("plugins"))) + { $OK = true; + while($OK && ($plugin_name = readdir($dh)) !== false) + { if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("plugins").$plugin_name)) + { if(!isset($plugins[$plugin_name])) + { if(($plugin = $this->plugin_data($plugin_name)) !== false) + { $MAJ = false; + if(!isset($plugin["installed"]) || !isset($plugin["enabled"])) + { $plugin["installed"] = false; + $plugin["enabled"] = false; + $plugin["priorite"] = 0; + $MAJ = true; + } + if(!$plugin["installed"] && $plugin["enabled"]) { $plugin["enabled"] = false; $MAJ = true; } + if($MAJ) $OK = $this->set_plugin_data($plugin_name, $plugin); + if($OK) + { if(($plugin["impl"] = $this->plugin_impl($plugin_name)) !== false) + { $plugin["title"] = ($plugin_title = $this->plugin_call($plugin["impl"], "title")) ? $plugin_title : ""; + $plugin["description"] = ($plugin_description = $this->plugin_call($plugin["impl"], "description")) ? $plugin_description : ""; + $plugin["name"] = $plugin_name; + $plugins[$plugin_name] = $plugin; + } + } + } + else $OK = false; + } + } + if(!$OK) $plugins = false; + } + closedir($dh); + if($plugins !== false) + { if(file_exists($this->plugins_data_dir()) && is_dir($this->plugins_data_dir())) + { if($dh = opendir($this->plugins_data_dir())) + { $plugins_data_files = array(); + $OK = true; + while($OK && ($plugin_name = readdir($dh)) !== false) + { if(substr($plugin_name, 0 ,1) != "." && !is_dir($this->plugin_data_file($plugin_name))) + { if(!$plugins[$plugin_name]) $this->del_plugin_data($plugin_name); + } + if(!$OK) $plugins = false; + } + closedir($dh); + } + } + } + } + else $plugins = false; + } + if($plugins !== false) + { if($PRIORITE == "ASC") $this->plugins_asc = $this->ordonne_plugins($plugins, $PRIORITE); + elseif($PRIORITE == "DESC") $this->plugins_desc = $this->ordonne_plugins($plugins, $PRIORITE); + } + else + { $this->plugins_asc = false; + $this->plugins_desc = false; + } + } + + function ordonne_plugins($plugins, $PRIORITE = "ASC") + { $values = array_values($plugins); + $maximum = count($values); + while($maximum > 0) + { $maximumTemporaire = 0; + for($i = 0; $i < $maximum - 1; $i++) + { if + ( ($PRIORITE == "ASC" && $values[$i]["priorite"] > $values[$i + 1]["priorite"]) + || ($PRIORITE == "DESC" && $values[$i]["priorite"] < $values[$i + 1]["priorite"]) + ) + { $tmp = $values[$i]; + $values[$i] = $values[$i + 1]; + $values[$i + 1] = $tmp; + $maximumTemporaire = $i + 1; + } + } + $maximum = $maximumTemporaire; + } + $res = array(); + foreach($values as $value) if($value["name"]) $res[$value["name"]] = $value; + return $res; + } + + function plugin_call($impl, $method) { if(method_exists($impl, $method)) return $impl->$method($this); } + + # --------------------------------------------------------------------------------- + # impl + # + + function plugin_impl($plugin_name) + { $plugin = false; + if(file_exists($this->path("plugins"))) + { if(substr($plugin_name, 0 ,1) !== "." && is_dir($this->path("plugins").$plugin_name)) + { if(file_exists($this->path("plugins").$plugin_name."/".$plugin_name.".php")) + { require $this->path("plugins").$plugin_name."/".$plugin_name.".php"; + if(class_exists($plugin_name)) + { $plugin = new $plugin_name(); + } + } + } + } + return $plugin; + } + + # --------------------------------------------------------------------------------- + # data + # + + function plugins_data_dir() + { return $this->path("content")."data/plugins/"; + } + + function plugin_data_file($plugin_name) + { return $this->plugins_data_dir().$plugin_name; + } + + function plugin_data($plugin_name) + { $data_file = $this->plugin_data_file($plugin_name); + $data = array(); + if(file_exists($data_file)) + { if($content = file_get_contents($data_file)) + { $data = unserialize($content); + } + } + return $data; + } + + function set_plugin_data($plugin_name, $data) + { $data_file = $this->plugin_data_file($plugin_name); + $content = serialize($data); + $OK = false; + if($fh = fopen($data_file, "w")) + { if(fwrite($fh, $content) !== false) + { $OK = true; + } + fclose($fh); + } + return $OK; + } + + function del_plugin_data($plugin_name) + { $data_file = $this->plugin_data_file($plugin_name); + if(file_exists($data_file)) return @unlink($data_file); + return true; + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_run.php b/web/app/env/modules/mw_env_run.php new file mode 100644 index 0000000..ba47626 --- /dev/null +++ b/web/app/env/modules/mw_env_run.php @@ -0,0 +1,174 @@ +data(); + return $data->get_session_user(); + } + + function set_etat($etat, $valid_status = true) + { if(($this->etat = $this->valid_etat($etat)) !== false) + { if(!$valid_status || $this->status_ok($this->etat, false)) + { return $this->etat; + } + else $this->erreur("Vous n'avez pas le statut requis pour effectuer cette action"); + } + else $this->erreur("etat invalide"); + return false; + } + + function valid_etat($etat) + { $_etat = array(); + $_etat["mod"] = ""; + $_etat["controller"] = ""; + $_etat["action"] = ""; + if(is_array($etat)) + { $_etat["mod"] = isset($etat["mod"]) ? $etat["mod"] : ""; + $_etat["controller"] = isset($etat["controller"]) ? $etat["controller"] : ""; + $_etat["action"] = isset($etat["action"]) ? $etat["action"] : ""; + } + else + { $etat = explode("/", $etat); + foreach($etat as $etat_item) + { if($etat_item) + { if(!$_etat["mod"]) $_etat["mod"] = $etat_item; + else + { if(!$_etat["controller"]) $_etat["controller"] = $etat_item; + else + { if(!$_etat["action"]) $_etat["action"] = $etat_item; + break; + } + } + } + } + } + if(!$_etat["mod"]) + { $_etat["mod"] = "index"; + $_etat["controller"] = "index"; + $_etat["action"] = "index"; + } + else + { if(!$_etat["controller"]) + { $_etat["controller"] = "index"; + $_etat["action"] = "index"; + } + else + { if(!$_etat["action"]) $_etat["action"] = "index"; + } + } + if + ( is_array($_etat) + && count($_etat) == 3 + && isset($_etat["mod"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["mod"]) + && isset($_etat["controller"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["controller"]) + && isset($_etat["action"]) && preg_match("/^[a-zA-Z0-9_]+$/", $_etat["action"]) + ) return $_etat; + return false; + } + + function etat_is_valid() + { return $this->valid_etat($this->etat); + } + + function status_ok($etat, $CHECK_FORMAT = true) + { $OK = $this->config("default_allow"); + $data = $this->data(); + if($CHECK_FORMAT) $etat = $this->valid_etat($etat); + if($etat !== false) + { if(($user_status = $data->get_user_status()) !== false) + { if + ( ( $action_status = $data->get_action_status + ( $etat["mod"], + $etat["controller"], + $etat["action"] + ) + ) !== false + ) + { $action = $etat["mod"]."/".$etat["controller"]."/".$etat["action"]; + if(isset($action_status[$action])) + { $OK = $action_status[$action][0] || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]); + } + else + { $action = $etat["mod"]."/".$etat["controller"]; + if(isset($action_status[$action])) + { $OK = $action_status[$action][0] || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]); + } + else + { $action = $etat["mod"]; + if(isset($action_status[$action])) + { $OK = $action_status[$action][0] || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]); + } + } + } + } + else $this->erreur("Impossible de lire les status des actions en base"); + } + else $this->erreur("Impossible de lire le statut de l'utilisateur courant"); + } + else $this->erreur("etat invalide"); + return $OK; + } + + function run($etat, $valid_status = true, $params = array(), $method = "GET") + { if($this->set_etat($etat, $valid_status)) + { $controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php"; + if($this->app_file_exists($controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php", "DESC")) + { if(!class_exists("mw_mod")) require $this->app_file("mods/mw_mod.php"); + if(!class_exists($controller_class = "mw_".$this->etat("mod")."_".$this->etat("controller"))) + { require $this->app_file($controller_file, "DESC"); + } + if(class_exists($controller_class)) + { $controller = new $controller_class(); + $action_method = $this->etat("action"); + if(method_exists($controller, $action_method)) + { foreach($params as $key => $value) + { switch(strtolower($method)) + { case "get": $_GET[$this->param($key)] = $value; break; + case "post": $_POST[$key] = $value; break; + default: break; + } + } + if(($controller_validate = $controller->validate($this)) === true) + { if(($controller_prepare_inputs = $controller->prepare_inputs($this)) === true) + { $controller->$action_method($this); + } + else $this->erreur($controller_prepare_inputs); + } + else $this->erreur($controller_validate); + } + else $this->erreur("Impossible de trouver l'action ".$this->etat("action")); + } + else $this->erreur("Impossible d'instancier le controleur ".$this->etat("controller")); + } + else $this->erreur("Impossible de trouver le controleur ".$this->etat("controller")." pour le module ".$this->etat("mod")); + } + else $this->erreur("Impossible d'effectuer cette action"); + } + + function etat($name) { return $this->etat[$name]; } + + function check_stop() + { return $this->etat("mod") == "reponses"; + } + + function get_mod($mod_name) + { if($etat = $this->valid_etat($mod_name)) + { if($this->app_file_exists($controller_file = "mods/".$etat["mod"]."/".$etat["controller"].".php")) + { if(!class_exists("mw_mod")) require $this->app_file("mods/mw_mod.php"); + if(!class_exists($controller_class = "mw_".$etat["mod"]."_".$etat["controller"])) + { require $this->app_file($controller_file); + } + if(class_exists($controller_class)) + { return new $controller_class(); + } + } + } + return false; + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/modules/mw_env_urls.php b/web/app/env/modules/mw_env_urls.php new file mode 100644 index 0000000..4a8c08a --- /dev/null +++ b/web/app/env/modules/mw_env_urls.php @@ -0,0 +1,47 @@ +additional_get_params = array(); + $_params = $_SERVER["QUERY_STRING"]; + $v_params = explode("&", $_params); + foreach($v_params as $param) + { if($param) + { $key = strpos($param, "=") === false ? $param : substr($param, 0, strpos($param, "=")); + $value = strpos($param, "=") === false ? "" : substr($param, strpos($param, "=") + 1); + if(!$this->is_a_param($key)) $this->additional_get_params[$key] = $value; + } + } + } + + function is_a_param($key) + { foreach($this->get_PARAMS() as $_key => $_value) if(strcmp($key, $_value) == 0) return true; + return false; + } + + function url($action = "", $_params = array(), $script_name = "index.php") + { if($action) $_params["e"] = $action; + $get_params = ""; + if(isset($this->additional_get_params)) foreach($this->additional_get_params as $key => $value) $get_params .= ($get_params ? "&" : "?").$key."=".$value; + foreach($_params as $key => $value) $get_params .= ($get_params ? "&" : "?").$this->param($key)."=".$value; + return $this->path("web").$script_name.$get_params; + } + + function redirect($url, $message, $wait = 1) + { $this->set_etat("reponses/html/redirect_javascript", false); + $this->set_out + ( "redirect", + array + ( "url" => str_replace("&", "&", $url), + "message" => $message, + "wait" => $wait + ) + ); + } + + } + +?> \ No newline at end of file diff --git a/web/app/env/mw_env.php b/web/app/env/mw_env.php new file mode 100644 index 0000000..8350609 --- /dev/null +++ b/web/app/env/mw_env.php @@ -0,0 +1,35 @@ +_app_file($file, $PRIORITE); + return $app_file ? true : false; + } + + function app_file($file, $PRIORITE = "ASC") + { $app_file = $this->_app_file($file, $PRIORITE); + return $app_file ? $app_file : $file; + } + + function _app_file($file, $PRIORITE = "ASC") + { $app_file = false; + if($PRIORITE == "ASC" && file_exists($this->path("app").$file)) return $this->path("app").$file; + if(($plugins = $this->plugins($PRIORITE)) !== false) + { foreach($plugins as $plugin_name => $plugin) + { if($file && $plugin["installed"] && $plugin["enabled"] && file_exists($this->path("plugins").$plugin_name."/app/".$file)) + { $app_file = $this->path("plugins").$plugin_name."/app/".$file; + break; + } + } + if($PRIORITE == "DESC" && !$app_file) + { if(file_exists($this->path("app").$file)) $app_file = $this->path("app").$file; + } + } + return $app_file; + } + + } + +?> \ No newline at end of file diff --git a/web/app/init/0100_functions.php b/web/app/init/0100_functions.php new file mode 100644 index 0000000..06f135d --- /dev/null +++ b/web/app/init/0100_functions.php @@ -0,0 +1,7 @@ +\n".htmlentities(print_r($content, true))."\n\n"; + } + +?> \ No newline at end of file diff --git a/web/app/init/0200_inputs.php b/web/app/init/0200_inputs.php new file mode 100644 index 0000000..e8759d0 --- /dev/null +++ b/web/app/init/0200_inputs.php @@ -0,0 +1,60 @@ + $v) + { unset($process[$key][$k]); + if(is_array($v)) + { $process[$key][stripslashes($k)] = $v; + $process[] = &$process[$key][stripslashes($k)]; + } + else $process[$key][stripslashes($k)] = stripslashes($v); + } + } + unset($process); + } + + + + /* + * + * decommentez la fin du fichier pour activer le filtrage + * des inputs (ici POST et FILES) + * + + if($_POST) + { require $this->path("libs")."inputfilter.php"; + $allowed_tags = array + ( "p", "span", "pre", "blockquote", "address", "hr", "br", + "img", + "strong", "em", "u", "i", "b", "s", + "a", + "ul", "ol", "li", + "h1", "h2", "h3", "h4", "h5", "h6" + ); + $allowed_attrs = array + ( "style", + "src", "alt", "width", "height", + "href", "title" + ); + $input_filter = new InputFilter($allowed_tags, $allowed_attrs); + $_POST = $input_filter->process($_POST); + } + + if($_FILES) + { foreach($_FILES as $file_key => $file_infos) + { $v_name = explode(".", $file_infos["name"]); + $ext = strtolower($v_name[count($v_name) - 1]); + if + ( $ext != "png" + && $ext != "jpg" + && $ext != "jpeg" + && $ext != "gif" + ) unset($_FILES[$file_key]); + } + } + + */ + +?> \ No newline at end of file diff --git a/web/app/init/0300_data.php b/web/app/init/0300_data.php new file mode 100644 index 0000000..b4dc586 --- /dev/null +++ b/web/app/init/0300_data.php @@ -0,0 +1,40 @@ +app_file("data/mw_sgbd.php"); + require $this->app_file("data/mw_data.php"); + if($this->app_file_exists("data/impl/mw_".$this->bdd("sgbd").".php")) + { require $this->app_file("data/impl/mw_".$this->bdd("sgbd").".php"); + if(class_exists($sgbd_impl = "mw_".$this->bdd("sgbd"))) + { if(($plugins = $this->plugins("DESC")) !== false) + { $data = new mw_data(true); + foreach($plugins as $plugin_name => $plugin) + { if($plugin["installed"] && $plugin["enabled"]) + { $data->load_modules($this->path("plugins").$plugin_name."/app/", "data/modules/share/"); + $data->load_modules($this->path("plugins").$plugin_name."/app/", "data/modules/".($this->bdd("sgbd") == "xml" ? "xml" : "sql")."/"); + } + } + $data->load_modules($this->path("app"), "data/modules/share/"); + $data->load_modules($this->path("app"), "data/modules/".($this->bdd("sgbd") == "xml" ? "xml" : "sql")."/"); + $sgbd = new mw_sgbd + ( new $sgbd_impl + ( $this->bdd("host"), + $this->bdd("base"), + $this->bdd("user"), + $this->bdd("password") + ), + $this + ); + if($sgbd->extention_ok()) + { $data->set_sgbd($sgbd); + $data->set_env($this); + $this->set_data($data); + } + else $this->erreur("L'extention php ".$this->bdd("sgbd")." n'est pas installée", true); + } + else $this->erreur("Impossible de lire les plugins pour charger les modules de donnees"); + } + else $this->erreur("Impossible de trouver la classe d'implementation du sgbd ".$this->bdd("sgbd"), true); + } + else $this->erreur("Impossible de trouver le fichier d'implementation du sgbd ".$this->bdd("sgbd"), true); + +?> \ No newline at end of file diff --git a/web/app/init/0400_config.php b/web/app/init/0400_config.php new file mode 100644 index 0000000..7affb17 --- /dev/null +++ b/web/app/init/0400_config.php @@ -0,0 +1,18 @@ +config()) !== false) + { $this->set_config($config); + $start_action_params_config = $this->config("start_action_params") ? @unserialize($this->config("start_action_params")) : array(); + $out_config = $this->config("out"); + $out_config .= $out_config && substr($out_config, -1) != "/" ? "/" : ""; + $this->set_config + ( array + ( "out" => $out_config, + "start_action_params" => $start_action_params_config + ) + ); + if($this->set_out_config($data->out_config()) === false) $this->erreur("Impossible de lire la configuration du template"); + } + else $this->erreur("Impossible de lire la configuration", true); + +?> \ No newline at end of file diff --git a/web/app/init/0500_users.php b/web/app/init/0500_users.php new file mode 100644 index 0000000..409a7fb --- /dev/null +++ b/web/app/init/0500_users.php @@ -0,0 +1,14 @@ +load_session() !== false) + { if($data->init_user_status($this->config("user_status")) !== false) + { if($data->init_action_status($this->config("action_status")) !== false) + { + } + else $this->erreur("Impossible de charger les statuts des actions", true); + } + else $this->erreur("Impossible de charger les statuts des utilisateurs", true); + } + else $this->erreur("Impossible de charger la session", true); + +?> \ No newline at end of file diff --git a/web/app/init/0600_check_instance.php b/web/app/init/0600_check_instance.php new file mode 100644 index 0000000..82f60fa --- /dev/null +++ b/web/app/init/0600_check_instance.php @@ -0,0 +1,11 @@ +check_instance()) !== false) + { if($check_instance_return === true) + { + } + else $this->erreur($check_instance_return, true); + } + else $this->erreur("Impossible de verifier l'integrité de la base de donné", true); + +?> \ No newline at end of file diff --git a/web/app/init/0700_links.php b/web/app/init/0700_links.php new file mode 100644 index 0000000..36d5537 --- /dev/null +++ b/web/app/init/0700_links.php @@ -0,0 +1,10 @@ +init_links()) + { $this->set_link("admin/config", $this->url("admin/config"), "Configuration", 10); + $this->set_link("admin/users", $this->url("admin/users"), "Utilisateurs", 20); + $this->set_link("admin/plugins", $this->url("admin/plugins"), "Plugins", 30); + } + else $this->erreur("impossible de charger les liens", true); + +?> \ No newline at end of file diff --git a/web/app/init/0800_init_plugins.php b/web/app/init/0800_init_plugins.php new file mode 100644 index 0000000..afd3247 --- /dev/null +++ b/web/app/init/0800_init_plugins.php @@ -0,0 +1,12 @@ +plugins("DESC")) !== false) + { foreach($plugins as $plugin_name => $plugin) + { if($plugin["installed"] && $plugin["enabled"]) + { if(!$plugin["impl"]->init($this)) $this->erreur("erreur lors de l'initialisation du plugin ".$plugin_name, true); + } + } + } + else $this->erreur("erreur lors de l'initialisation des plugins", true); + +?> \ No newline at end of file diff --git a/web/app/init/0900_pre_run.php b/web/app/init/0900_pre_run.php new file mode 100644 index 0000000..dbcbaeb --- /dev/null +++ b/web/app/init/0900_pre_run.php @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/web/app/main.php b/web/app/main.php new file mode 100644 index 0000000..e6bfabe --- /dev/null +++ b/web/app/main.php @@ -0,0 +1,36 @@ +load_modules($PATHES["app"], "env/modules/"); + $env->set_config_file($config_file); + $env->set_PATHES($PATHES); + $env->init_plugins(); + $env->load_config($bdd, $CONFIG); + $env->init(); + $etat = ($etat === false ? false : ($etat ? $etat : (isset($_GET[$env->param("e")]) ? $_GET[$env->param("e")] : ""))); + if($etat !== false) $env->run($etat); + return $env; + } + else echo "
impossible de trouver le fichier env/mw_env.php
"; + } + else echo "
impossible de trouver le fichier ".$libs_path."empty_class.php
"; + } + else echo "
impossible de trouver le fichier ".$libs_path."sxml.php
"; + return false; + } + + function __mw_display($env) + { if($env->etat_is_valid()) $env->render_layout($env->init_layout()); + } + +?> \ No newline at end of file diff --git a/web/app/mods/admin/config.php b/web/app/mods/admin/config.php new file mode 100644 index 0000000..953f982 --- /dev/null +++ b/web/app/mods/admin/config.php @@ -0,0 +1,66 @@ +data(); + if(($CONFIG = $env->get_CONFIG()) !== false) + { if(!$CONFIG["out"]) $CONFIG["out"] = "dist"; + $env->set_out("config", $CONFIG); + if(($out_config = $env->get_out_config()) !== false) + { $env->set_out("out_config", $out_config); + if($env->set_out("out_pathes", $env->out_pathes()) !== false) + { if($_POST) + { $env->set_out("config", $_POST); + if(preg_match("/^[0-9]+$/", $_POST["max_list"])) + { if(!$_POST["contact_form"] || trim($_POST["email"])) + { $CONTINUE = true; + if($CONTINUE && $data->set_config("site_name", $_POST["site_name"])); + else $CONTINUE = false; + if($CONTINUE && $data->set_config("description", $_POST["description"])); + else $CONTINUE = false; + if($CONTINUE && $data->set_config("max_list", $_POST["max_list"])); + else $CONTINUE = false; + if($CONTINUE && $data->set_config("contact_form", $_POST["contact_form"] ? "1" : "0")); + else $CONTINUE = false; + if($CONTINUE && $data->set_config("email", $_POST["email"])); + else $CONTINUE = false; + if($CONTINUE && $data->set_config("captcha", $_POST["captcha"] ? "1" : "0")); + else $CONTINUE = false; + if($CONTINUE && $data->set_config("out", $_POST["out"])); + else $CONTINUE = false; + if($CONTINUE) + { foreach($out_config as $key => $values) + { if($data->set_config("out_".$key, isset($_POST["out_".$key]) ? $_POST["out_".$key] : "") === false) + { $CONTINUE = false; + break; + } + } + } + if($CONTINUE) $env->redirect + ( $env->url("admin/config"), + "la configuration a été enregistrée" + ); + else $env->erreur("Impossible d'enregistrer la configuration"); + } + else $env->message("merci de préciser un email pour le formulaire de contact"); + } + else $env->message("la taille maximum des listes doit être un nombre"); + } + } + else $env->erreur("Impossible de lire la liste des templates"); + } + else $env->erreur("Impossible de lire l configuration du templates"); + } + else $env->erreur("Impossible de lire la configuration"); + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/admin/index.php b/web/app/mods/admin/index.php new file mode 100644 index 0000000..5ef3ed7 --- /dev/null +++ b/web/app/mods/admin/index.php @@ -0,0 +1,11 @@ +run("admin/config"); + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/admin/plugins.php b/web/app/mods/admin/plugins.php new file mode 100644 index 0000000..fe804da --- /dev/null +++ b/web/app/mods/admin/plugins.php @@ -0,0 +1,163 @@ +plugins = $env->plugins("DESC")) === false) return "impossible de lire la liste des plugins"; + return true; + } + + function index(&$env) + { if($this->plugins !== false) + { if($_POST) + { $OK = true; + foreach($this->plugins as $plugin_name => $plugin) + { if(isset($_POST["priorite_".$plugin_name])) + { $this->plugins[$plugin_name]["priorite"] = $_POST["priorite_".$plugin_name]; + if(!preg_match("/^[0-9]+(\.[0-9]+)?$/", $_POST["priorite_".$plugin_name])) + { $env->message("les priorités des plugins doivent être des nombres"); + $OK = false; + break; + } + } + else $this->plugins[$plugin_name]["priorite"] = 0; + } + if($OK) + { foreach($this->plugins as $plugin_name => $plugin) + { $plugin_data = array + ( "installed" => $this->plugins[$plugin_name]["installed"], + "enabled" => $this->plugins[$plugin_name]["enabled"], + "priorite" => $this->plugins[$plugin_name]["priorite"] + ); + if(!$env->set_plugin_data($plugin_name, $plugin_data)) + { $env->erreur("impossible de mettre à jour la priorité du plugin ".$plugin_name); + $OK = false; + break; + } + } + if($OK) + { $env->redirect + ( $env->url("admin/plugins/index"), + "les priorités des plugins ont été enregistrées" + ); + } + } + } + $env->set_out("plugins", $this->plugins); + } + else $env->erreur("impossible de lire la liste des plugins"); + } + + function install(&$env) + { $plugin_name = $_GET[$env->param("id")]; + if(isset($this->plugins[$plugin_name])) + { $impl = $this->plugins[$plugin_name]["impl"]; + $res = $impl->install($env); + if($res === true) + { $plugin_data = array + ( "installed" => true, + "enabled" => false, + "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0 + ); + if($env->set_plugin_data($plugin_name, $plugin_data)) + { $env->redirect + ( $env->url("admin/plugins/index"), + "le plugin a été installé" + ); + } + else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name); + } + else $env->erreur("erreur lors de l'installation du plugin ".$plugin_name."
".$res); + } + else $env->erreur("impossible de trouver le plugin ".$plugin_name); + } + + function uninstall(&$env) + { $plugin_name = $_GET[$env->param("id")]; + if(isset($this->plugins[$plugin_name])) + { $impl = $this->plugins[$plugin_name]["impl"]; + $res= $impl->uninstall($env); + if($res === true) + { $plugin_data = array + ( "installed" => false, + "enabled" => false, + "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0 + ); + if($env->set_plugin_data($plugin_name, $plugin_data)) + { $env->redirect + ( $env->url("admin/plugins/index"), + "le plugin a été désinstallé" + ); + } + else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name); + } + else $env->erreur("erreur lors de la désinstallation du plugin ".$plugin_name."
".$res); + } + else $env->erreur("impossible de trouver le plugin ".$plugin_name); + } + + function enable(&$env) + { $plugin_name = $_GET[$env->param("id")]; + if(isset($this->plugins[$plugin_name])) + { if($this->plugins[$plugin_name]["installed"]) + { if(!$this->plugins[$plugin_name]["enabled"]) + { $impl = $this->plugins[$plugin_name]["impl"]; + $res = $impl->enable($env); + if($res === true) + { $plugin_data = array + ( "installed" => true, + "enabled" => true, + "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0 + ); + if($env->set_plugin_data($plugin_name, $plugin_data)) + { $env->redirect + ( $env->url("admin/plugins/index"), + "le plugin a été activé" + ); + } + else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name); + } + else $env->erreur("erreur lors de l'activation du plugin ".$plugin_name."
".$res); + } + else $env->erreur("le plugin ".$plugin_name." est déjà actif"); + } + else $env->erreur("le plugin ".$plugin_name." n'est pas installé"); + } + else $env->erreur("impossible de trouver le plugin ".$plugin_name); + } + + function disable(&$env) + { $plugin_name = $_GET[$env->param("id")]; + if(isset($this->plugins[$plugin_name])) + { if($this->plugins[$plugin_name]["installed"]) + { if($this->plugins[$plugin_name]["enabled"]) + { $impl = $this->plugins[$plugin_name]["impl"]; + $res = $impl->disable($env); + if($res === true) + { $plugin_data = array + ( "installed" => true, + "enabled" => false, + "priorite" => isset($this->plugins[$plugin_name]["priorite"]) ? $this->plugins[$plugin_name]["priorite"] : 0 + ); + if($env->set_plugin_data($plugin_name, $plugin_data)) + { $env->redirect + ( $env->url("admin/plugins/index"), + "le plugin a été désactivé" + ); + } + else $env->erreur("impossible de mettre à jour le statut du plugin ".$plugin_name); + } + else $env->erreur("erreur lors de la désactivation du plugin ".$plugin_name."
".$res); + } + else $env->erreur("le plugin ".$plugin_name." est déjà inactif"); + } + else $env->erreur("le plugin ".$plugin_name." n'est pas installé"); + } + else $env->erreur("impossible de trouver le plugin ".$plugin_name); + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/admin/users.php b/web/app/mods/admin/users.php new file mode 100644 index 0000000..f175fdc --- /dev/null +++ b/web/app/mods/admin/users.php @@ -0,0 +1,147 @@ +data(); + if(($this->status = $data->status()) === false) return "impossible de lire la liste des statuts"; + return true; + } + + function index(&$env) + { $data = $env->data(); + if + ( $env->set_out + ( "users", + $data->users + ( $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0, + $_GET[$env->param("alpha")], + $_GET[$env->param("status")] + ) + ) !== false + ) + { if($this->status) + { $env->set_out("status", $this->status); + } + else $env->erreur("impossible de lire la liste des status"); + } + else $env->erreur("impossible de lire la liste des utilisateurs"); + } + + function add(&$env) + { $data = $env->data(); + if($this->status) + { $env->set_out("status", $this->status); + $env->set_out("user", array("status" => $data->creation_default_status())); + if($_POST) + { $env->set_out("user", $_POST); + if($_POST["login"]) + { if(($exists = $data->user($_POST["login"])) !== false) + { if(!$exists) + { $VALID = true; + if(!$_POST["email"]) + { $env->message("merci de preciser un email"); + $VALID = false; + } + if(!$_POST["password"]) + { $env->message("merci de preciser un mot de passe"); + $VALID = false; + } + if($_POST["password"] != $_POST["password_confirm"]) + { $env->message("la confirmation du mot de passe est incorrecte"); + $VALID = false; + } + if($VALID) + { if + ( $data->add_user + ( $_POST["login"], + md5($_POST["password"]), + $_POST["email"], + $_POST["status"] + ) + ) + $env->redirect + ( $env->url("admin/users"), + "l'utilisateur ".$_POST["login"]." a été ajouté" + ); + else $env->erreur("Impossible d'ajouter l'utilisateur"); + } + } + else $env->message("ce login existe déjà"); + } + else $env->erreur("impossible de savoir si cet login existe déjà"); + } + else $env->message("merci de préciser un login"); + } + } + else $env->erreur("impossible de lire la liste des status"); + } + + function edit(&$env) + { $data = $env->data(); + if($this->status) + { $env->set_out("status", $this->status); + if($env->set_out("user", $data->user($_GET[$env->param("id")]))) + { if($_POST) + { $user = $env->out("user"); + $id = $user["id"]; + $login = $user["login"]; + $password = $user["password"]; + $_POST["login"] = $login; + $env->set_out("user", $_POST); + $VALID = true; + if(!$_POST["email"]) + { $env->message("merci de preciser un email"); + $VALID = false; + } + if(isset($_POST["change_password"]) && $_POST["change_password"]) + { if(!$_POST["password"]) + { $env->message("merci de preciser un mot de passe"); + $VALID = false; + } + if($_POST["password"] != $_POST["password_confirm"]) + { $env->message("la confirmation du mot de passe est incorrecte"); + $VALID = false; + } + } + if($VALID) + { if + ( $data->set_user + ( $id, + $login, + isset($_POST["change_password"]) && $_POST["change_password"] ? md5($_POST["password"]) : $password, + $_POST["email"], + $_POST["status"] + ) + ) + $env->redirect + ( $env->url("admin/users"), + "l'utilisateur ".$login." a été modifié" + ); + else $env->erreur("Impossible de mettre à jour l'utilisateur"); + } + } + } + else $env->erreur("Impossible de lire les informations de cet utilisateur"); + } + else $env->erreur("impossible de lire la liste des status"); + } + + function del(&$env) + { $data = $env->data(); + if($env->set_out("user", $data->user($_GET[$env->param("id")]))) + { $user = $env->out("user"); + if($data->del_user($_GET[$env->param("id")])) $env->redirect + ( $env->url("admin/users"), + "l'utilisateur ".$user["login"]." a été supprimé" + ); + else $env->erreur("Impossible de supprimer l'utilisateur"); + } + else $env->erreur("Impossible de lire les informations de cet utilisateur"); + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/forms/contact.php b/web/app/mods/forms/contact.php new file mode 100644 index 0000000..d0fcc50 --- /dev/null +++ b/web/app/mods/forms/contact.php @@ -0,0 +1,72 @@ +path("libs")."ptitcaptcha.php")) require $this->path("libs")."ptitcaptcha.php"; + + class mw_forms_contact extends mw_mod + { + + function validate(&$env) + { if($pages_view_mod = $env->get_mod("pages/view")) + { return $pages_view_mod->validate(&$env); + } + return true; + } + + function index(&$env) + { if($env->config("contact_form") && $env->config("email")) + { if($_POST) + { if + ( $this->send + ( $env, + $_POST["email"], + "[".$env->config("site_name")."] nouveau message", + $_POST["message"], + $env->config("email"), + $env->config("captcha") + ) + ) + { $env->redirect + ( $env->url("index"), + "Le message a été envoyé", + 2 + ); + } + } + } + else $env->run("index"); + } + + function send(&$env, $from, $titre, $message, $dest, $captcha) + { $env->set_out("ENVOYE", false); + if($captcha && !file_exists($env->path("libs")."ptitcaptcha.php")) + { $env->erreur("fichier du captcha introuvable"); + return false; + } + if(!$captcha || PtitCaptchaHelper::checkCaptcha()) + { if($from) + { if($dest) + { if + ( mail + ( $dest, + $titre, + $message, + "From: ".$from."\r\n" + ."Reply-To: ".$from."\r\n" + ) + ) + { $env->set_out("ENVOYE", true); + return true; + } + else $env->erreur("Erreur à l'envoi du mail"); + } + else $env->erreur("Impossible de trouver l'email du destinataire"); + } + else $env->message("merci de préciser un email"); + } + else $env->message("anti-spam incorrect"); + return false; + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/index/index.php b/web/app/mods/index/index.php new file mode 100644 index 0000000..9894853 --- /dev/null +++ b/web/app/mods/index/index.php @@ -0,0 +1,19 @@ +config("start_action"); + if($start_action) + { $start_action_params = $env->config("start_action_params"); + if($start_action_params && is_array($start_action_params)) + { foreach($start_action_params as $key => $value) $_GET[$key] = $value; + } + $env->run($start_action); + } + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/mw_mod.php b/web/app/mods/mw_mod.php new file mode 100644 index 0000000..cfba689 --- /dev/null +++ b/web/app/mods/mw_mod.php @@ -0,0 +1,12 @@ +prepare_inputs(); } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/reponses/html.php b/web/app/mods/reponses/html.php new file mode 100644 index 0000000..db13052 --- /dev/null +++ b/web/app/mods/reponses/html.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/web/app/mods/users/compte.php b/web/app/mods/users/compte.php new file mode 100644 index 0000000..7a6c022 --- /dev/null +++ b/web/app/mods/users/compte.php @@ -0,0 +1,37 @@ +validation_result = true; + $this->validate_status($env); + $this->validate_user($env); + return true; + } + + function validate_status(&$env) + { $data = $env->data(); + if(($this->status = $data->status()) !== false) $this->validation_result = true; + else $this->validation_result = "impossible de lire la liste des statuts"; + } + + function validate_user(&$env) + { if($this->user = $env->user()) $this->validation_result = true; + else $this->validation_result = "Vous devez être identifier pour accéder à cette page"; + } + + function index(&$env) + { if($this->validation_result === true) + { $env->run("users/infos"); + } + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/users/identification.php b/web/app/mods/users/identification.php new file mode 100644 index 0000000..36b6d2b --- /dev/null +++ b/web/app/mods/users/identification.php @@ -0,0 +1,36 @@ +user()) + { $data = $env->data(); + if($data->login(trim($_POST['login']), trim($_POST['pass']))) + { $env->redirect + ( isset($_POST["from"]) ? urldecode($_POST["from"]) : $this->env->url(), + "Vous êtes maintenant identifié en tant que ".$_POST['login'] + ); + } + else $env->message("Idantifiants incorrects"); + } + else $env->message("Vous êtes déjà identifié"); + } + + function logout(&$env) + { $data = $env->data(); + if($data->logout()) + { $env->redirect + ( $env->url(), + "Vous n'êtes plus identifié sur le site" + ); + } + else $env->message("Erreur lors de la deconnection. il se peut que vous soyez encore identifié"); + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/users/index.php b/web/app/mods/users/index.php new file mode 100644 index 0000000..3cd2462 --- /dev/null +++ b/web/app/mods/users/index.php @@ -0,0 +1,11 @@ +run("users/infos"); + } + + } + +?> \ No newline at end of file diff --git a/web/app/mods/users/infos.php b/web/app/mods/users/infos.php new file mode 100644 index 0000000..0b0e427 --- /dev/null +++ b/web/app/mods/users/infos.php @@ -0,0 +1,73 @@ +users_compte_mod = $env->get_mod("users/compte")) + { $this->users_compte_mod->validation_result = true; + $this->users_compte_mod->validate_status($env); + $this->users_compte_mod->validate_user($env); + return $this->users_compte_mod->validation_result; + } + return "impossible de trouver le module users/compte"; + } + + function index(&$env) + { $env->run("users/infos/edit"); + } + + function edit(&$env) + { if(isset($this->users_compte_mod->user) && $this->users_compte_mod->user !== false) + { $user = $this->users_compte_mod->user; + if($_POST) + { $data = $env->data(); + $VALID = true; + if($_POST["email"]) $user["email"] = $_POST["email"]; + else + { $env->message("merci de preciser un email"); + $VALID = false; + } + if($VALID && isset($_POST["change_password"]) && $_POST["change_password"]) + { if($_POST["password"]) + { if($_POST["password"] == $_POST["password_confirm"]) + { $user["password"] = md5($_POST["password"]); + } + else + { $env->message("la confirmation du mot de passe est incorrecte"); + $VALID = false; + } + } + else + { $env->message("merci de preciser un mot de passe"); + $VALID = false; + } + } + if($VALID) + { if + ( $data->set_user + ( $user["id"], + $user["login"], + $user["password"], + $user["email"], + $user["status"] + ) + ) + $env->redirect + ( $env->url("users/infos"), + "vos informations ont été modifiées" + ); + else $env->erreur("Impossible de mettre à jour l'utilisateur"); + } + } + $env->set_out("user", $user); + $env->set_out("status", $this->users_compte_mod->status); + } + else $env->erreur("Impossible de lire les informations de l'utilisateur"); + } + + } + +?> \ No newline at end of file diff --git a/web/app/mw_plugin.php b/web/app/mw_plugin.php new file mode 100644 index 0000000..eb91f9d --- /dev/null +++ b/web/app/mw_plugin.php @@ -0,0 +1,38 @@ + \ No newline at end of file diff --git a/web/config.php b/web/config.php new file mode 100644 index 0000000..4ac10a1 --- /dev/null +++ b/web/config.php @@ -0,0 +1,65 @@ +mtweb"; + +?> \ No newline at end of file diff --git a/web/content/data/.htaccess b/web/content/data/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/web/content/data/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/web/content/data/mysql/mtweb.sql b/web/content/data/mysql/mtweb.sql new file mode 100644 index 0000000..79d3c80 --- /dev/null +++ b/web/content/data/mysql/mtweb.sql @@ -0,0 +1,108 @@ +-- phpMyAdmin SQL Dump +-- version 3.3.2deb1 +-- http://www.phpmyadmin.net +-- +-- Serveur: localhost +-- Généré le : Dim 25 Décembre 2011 à 15:01 +-- Version du serveur: 5.1.41 +-- Version de PHP: 5.3.2-1ubuntu4.11 + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Base de données: `mtweb` +-- + +-- -------------------------------------------------------- + +-- +-- Structure de la table `mw_action_status` +-- + +CREATE TABLE IF NOT EXISTS `mw_action_status` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `action` varchar(255) NOT NULL, + `id_status` int(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; + +-- +-- Contenu de la table `mw_action_status` +-- + +INSERT INTO `mw_action_status` (`id`, `action`, `id_status`) VALUES +(1, 'admin', 1), +(2, 'users', 1), +(3, 'users', 2), +(4, 'users/identification', 0); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `mw_config` +-- + +CREATE TABLE IF NOT EXISTS `mw_config` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `key` varchar(255) NOT NULL, + `value` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; + +-- +-- Contenu de la table `mw_config` +-- + +INSERT INTO `mw_config` (`id`, `key`, `value`) VALUES +(1, 'site_name', 'mtweb'), +(2, 'max_list', '10'), +(3, 'description', ''), +(4, 'out', 'dist'), +(5, 'start_action', ''), +(6, 'contact_form', '0'), +(8, 'email', ''), +(9, 'captcha', '0'), +(16, 'start_action_params', ''); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `mw_users` +-- + +CREATE TABLE IF NOT EXISTS `mw_users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `login` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `status` int(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; + +-- +-- Contenu de la table `mw_users` +-- + +INSERT INTO `mw_users` (`id`, `login`, `password`, `email`, `status`) VALUES +(1, 'admin', '25e4ee4e9229397b6b17776bfceaf8e7', 'admin@domain.tld', 1); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `mw_user_status` +-- + +CREATE TABLE IF NOT EXISTS `mw_user_status` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `nom` varchar(255) NOT NULL, + `creation_default` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; + +-- +-- Contenu de la table `mw_user_status` +-- + +INSERT INTO `mw_user_status` (`id`, `nom`, `creation_default`) VALUES +(1, 'admin', 0), +(2, 'membre', 1); diff --git a/web/content/data/xml/mw/action_status/.index b/web/content/data/xml/mw/action_status/.index new file mode 100644 index 0000000..a6b4ce8 --- /dev/null +++ b/web/content/data/xml/mw/action_status/.index @@ -0,0 +1 @@ +176 \ No newline at end of file diff --git a/web/content/data/xml/mw/action_status/170.xml b/web/content/data/xml/mw/action_status/170.xml new file mode 100644 index 0000000..8e3fd22 --- /dev/null +++ b/web/content/data/xml/mw/action_status/170.xml @@ -0,0 +1,4 @@ + + + + diff --git a/web/content/data/xml/mw/action_status/171.xml b/web/content/data/xml/mw/action_status/171.xml new file mode 100644 index 0000000..c662bfd --- /dev/null +++ b/web/content/data/xml/mw/action_status/171.xml @@ -0,0 +1,4 @@ + + + + diff --git a/web/content/data/xml/mw/action_status/172.xml b/web/content/data/xml/mw/action_status/172.xml new file mode 100644 index 0000000..c8de13d --- /dev/null +++ b/web/content/data/xml/mw/action_status/172.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/web/content/data/xml/mw/action_status/173.xml b/web/content/data/xml/mw/action_status/173.xml new file mode 100644 index 0000000..d037f86 --- /dev/null +++ b/web/content/data/xml/mw/action_status/173.xml @@ -0,0 +1,4 @@ + + + + diff --git a/web/content/data/xml/mw/config/.index b/web/content/data/xml/mw/config/.index new file mode 100644 index 0000000..4800c7d --- /dev/null +++ b/web/content/data/xml/mw/config/.index @@ -0,0 +1 @@ +58 \ No newline at end of file diff --git a/web/content/data/xml/mw/config/1.xml b/web/content/data/xml/mw/config/1.xml new file mode 100644 index 0000000..9a787f9 --- /dev/null +++ b/web/content/data/xml/mw/config/1.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/2.xml b/web/content/data/xml/mw/config/2.xml new file mode 100644 index 0000000..a9b669e --- /dev/null +++ b/web/content/data/xml/mw/config/2.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/21.xml b/web/content/data/xml/mw/config/21.xml new file mode 100644 index 0000000..e12352f --- /dev/null +++ b/web/content/data/xml/mw/config/21.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/22.xml b/web/content/data/xml/mw/config/22.xml new file mode 100644 index 0000000..60f4932 --- /dev/null +++ b/web/content/data/xml/mw/config/22.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/34.xml b/web/content/data/xml/mw/config/34.xml new file mode 100644 index 0000000..7b34699 --- /dev/null +++ b/web/content/data/xml/mw/config/34.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/39.xml b/web/content/data/xml/mw/config/39.xml new file mode 100644 index 0000000..09ef208 --- /dev/null +++ b/web/content/data/xml/mw/config/39.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/40.xml b/web/content/data/xml/mw/config/40.xml new file mode 100644 index 0000000..449c69f --- /dev/null +++ b/web/content/data/xml/mw/config/40.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/41.xml b/web/content/data/xml/mw/config/41.xml new file mode 100644 index 0000000..7ffdb60 --- /dev/null +++ b/web/content/data/xml/mw/config/41.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/55.xml b/web/content/data/xml/mw/config/55.xml new file mode 100644 index 0000000..590e811 --- /dev/null +++ b/web/content/data/xml/mw/config/55.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/56.xml b/web/content/data/xml/mw/config/56.xml new file mode 100644 index 0000000..4120eef --- /dev/null +++ b/web/content/data/xml/mw/config/56.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/config/57.xml b/web/content/data/xml/mw/config/57.xml new file mode 100644 index 0000000..15e20ee --- /dev/null +++ b/web/content/data/xml/mw/config/57.xml @@ -0,0 +1,3 @@ + + + diff --git a/web/content/data/xml/mw/user_status/.index b/web/content/data/xml/mw/user_status/.index new file mode 100644 index 0000000..bf0d87a --- /dev/null +++ b/web/content/data/xml/mw/user_status/.index @@ -0,0 +1 @@ +4 \ No newline at end of file diff --git a/web/content/data/xml/mw/user_status/1.xml b/web/content/data/xml/mw/user_status/1.xml new file mode 100644 index 0000000..fa722e0 --- /dev/null +++ b/web/content/data/xml/mw/user_status/1.xml @@ -0,0 +1,4 @@ + + admin + 0 + \ No newline at end of file diff --git a/web/content/data/xml/mw/user_status/2.xml b/web/content/data/xml/mw/user_status/2.xml new file mode 100644 index 0000000..93bb41f --- /dev/null +++ b/web/content/data/xml/mw/user_status/2.xml @@ -0,0 +1,4 @@ + + + + diff --git a/web/content/data/xml/mw/users/.index b/web/content/data/xml/mw/users/.index new file mode 100644 index 0000000..da2d398 --- /dev/null +++ b/web/content/data/xml/mw/users/.index @@ -0,0 +1 @@ +14 \ No newline at end of file diff --git a/web/content/data/xml/mw/users/14.xml b/web/content/data/xml/mw/users/14.xml new file mode 100644 index 0000000..c69b833 --- /dev/null +++ b/web/content/data/xml/mw/users/14.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/web/index.php b/web/index.php new file mode 100644 index 0000000..1320ff3 --- /dev/null +++ b/web/index.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/web/libs/empty_class.php b/web/libs/empty_class.php new file mode 100644 index 0000000..72c5cd9 --- /dev/null +++ b/web/libs/empty_class.php @@ -0,0 +1,114 @@ +root_inst = $this; + else $this->root_inst = $root_inst; + } + + function load_modules($modules_path, $current_modules, $core_modules = null) + { $this->_load_modules($modules_path, $current_modules, $this->root_inst, true); + if(isset($core_modules) && $current_modules != $core_modules) + { $this->_load_modules($modules_path, $core_modules, $this->root_inst, true); + } + } + + function _load_modules($modules_path, $modules_path_suffixe, $root_inst, $recursif = false) + { if(file_exists($modules_path.$modules_path_suffixe) && $dh = opendir($modules_path.$modules_path_suffixe)) + { while(($file = readdir($dh)) !== false) + { if(is_dir($modules_path.$modules_path_suffixe.$file)) + { if($recursif && substr($file, 0, 1) != ".") + { $this->_load_modules($modules_path, $modules_path_suffixe.$file."/", $root_inst, $recursif); + } + } + elseif(strcasecmp(substr($file, -4), ".php") == 0) + { $this->load($modules_path.$modules_path_suffixe.$file, $root_inst); + } + } + closedir($dh); + } + } + + function load($module_file, $root_inst) + { if($module_file && file_exists($module_file)) + { $v_path = explode("/", $module_file); + $file = $v_path[count($v_path) - 1]; + if(strcasecmp(substr($file, -4), ".php") == 0) + { $class_name = substr($file, 0, -4); + if(!class_exists($class_name)) + { require_once $module_file; + if(version_compare(PHP_VERSION, '5.0.0', '>=')) + { if(class_exists($class_name) && !isset($this->modules[$class_name])) + { $this->modules[$class_name] = new $class_name($root_inst); + } + } + else + { if(class_exists($class_name)) + { aggregate($this, $class_name); + } + } + } + } + } + } + + function __call($method_name, $arguments) + { return $this->empty_class_call($this->root_inst, $method_name, $arguments); + } + + function empty_class_call($inst, $method_name, $arguments) + { $r = false; + $args = ""; + foreach($arguments as $i => $arg) $args .= ($args ? ", " : "")."\$arguments[".$i."]"; + if(isset($inst->modules)) foreach($inst->modules as $module_name => $module) + { if(method_exists($module, $method_name)) + { eval("\$r = \$module->".$method_name."(".$args.");"); + break; + } + else + { $r = $this->empty_class_call($module, $method_name, $arguments); + if($r !== false) break; + } + } + return $r; + } + + } + +?> \ No newline at end of file diff --git a/web/libs/inputfilter.php b/web/libs/inputfilter.php new file mode 100644 index 0000000..b023bc0 --- /dev/null +++ b/web/libs/inputfilter.php @@ -0,0 +1,315 @@ +tagsArray = (array) $tagsArray; + $this->attrArray = (array) $attrArray; + $this->tagsMethod = $tagsMethod; + $this->attrMethod = $attrMethod; + $this->xssAuto = $xssAuto; + } + + /** + * Method to be called by another php script. Processes for XSS and specified bad code. + * @access public + * @param Mixed $source - input string/array-of-string to be 'cleaned' + * @return String $source - 'cleaned' version of input parameter + */ + function process($source) { + // clean all elements in this array + if (is_array($source)) { + foreach($source as $key => $value) + // filter element for XSS and other 'bad' code etc. + if (is_string($value)) $source[$key] = $this->remove($this->decode($value)); + return $source; + // clean this string + } else if (is_string($source)) { + // filter source for XSS and other 'bad' code etc. + return $this->remove($this->decode($source)); + // return parameter as given + } else return $source; + } + + /** + * Internal method to iteratively remove all unwanted tags and attributes + * @access protected + * @param String $source - input string to be 'cleaned' + * @return String $source - 'cleaned' version of input parameter + */ + function remove($source) { + $loopCounter=0; + // provides nested-tag protection + while($source != $this->filterTags($source)) { + $source = $this->filterTags($source); + $loopCounter++; + } + return $source; + } + + /** + * Internal method to strip a string of certain tags + * @access protected + * @param String $source - input string to be 'cleaned' + * @return String $source - 'cleaned' version of input parameter + */ + function filterTags($source) { + // filter pass setup + $preTag = NULL; + $postTag = $source; + // find initial tag's position + $tagOpen_start = strpos($source, '<'); + // interate through string until no tags left + while($tagOpen_start !== FALSE) { + // process tag interatively + $preTag .= substr($postTag, 0, $tagOpen_start); + $postTag = substr($postTag, $tagOpen_start); + $fromTagOpen = substr($postTag, 1); + // end of tag + $tagOpen_end = strpos($fromTagOpen, '>'); + if ($tagOpen_end === false) break; + // next start of tag (for nested tag assessment) + $tagOpen_nested = strpos($fromTagOpen, '<'); + if (($tagOpen_nested !== false) && ($tagOpen_nested < $tagOpen_end)) { + $preTag .= substr($postTag, 0, ($tagOpen_nested+1)); + $postTag = substr($postTag, ($tagOpen_nested+1)); + $tagOpen_start = strpos($postTag, '<'); + continue; + } + $tagOpen_nested = (strpos($fromTagOpen, '<') + $tagOpen_start + 1); + $currentTag = substr($fromTagOpen, 0, $tagOpen_end); + $tagLength = strlen($currentTag); + if (!$tagOpen_end) { + $preTag .= $postTag; + $tagOpen_start = strpos($postTag, '<'); + } + // iterate through tag finding attribute pairs - setup + $tagLeft = $currentTag; + $attrSet = array(); + $currentSpace = strpos($tagLeft, ' '); + // is end tag + if (substr($currentTag, 0, 1) == "/") { + $isCloseTag = TRUE; + list($tagName) = explode(' ', $currentTag); + $tagName = substr($tagName, 1); + // is start tag + } else { + $isCloseTag = FALSE; + list($tagName) = explode(' ', $currentTag); + } + // excludes all "non-regular" tagnames OR no tagname OR remove if xssauto is on and tag is blacklisted + if ((!preg_match("/^[a-z][a-z0-9]*$/i",$tagName)) || (!$tagName) || ((in_array(strtolower($tagName), $this->tagBlacklist)) && ($this->xssAuto))) { + $postTag = substr($postTag, ($tagLength + 2)); + $tagOpen_start = strpos($postTag, '<'); + // don't append this tag + continue; + } + // this while is needed to support attribute values with spaces in! + while ($currentSpace !== FALSE) { + $fromSpace = substr($tagLeft, ($currentSpace+1)); + $nextSpace = strpos($fromSpace, ' '); + $openQuotes = strpos($fromSpace, '"'); + $closeQuotes = strpos(substr($fromSpace, ($openQuotes+1)), '"') + $openQuotes + 1; + // another equals exists + if (strpos($fromSpace, '=') !== FALSE) { + // opening and closing quotes exists + if (($openQuotes !== FALSE) && (strpos(substr($fromSpace, ($openQuotes+1)), '"') !== FALSE)) + $attr = substr($fromSpace, 0, ($closeQuotes+1)); + // one or neither exist + else $attr = substr($fromSpace, 0, $nextSpace); + // no more equals exist + } else $attr = substr($fromSpace, 0, $nextSpace); + // last attr pair + if (!$attr) $attr = $fromSpace; + // add to attribute pairs array + $attrSet[] = $attr; + // next inc + $tagLeft = substr($fromSpace, strlen($attr)); + $currentSpace = strpos($tagLeft, ' '); + } + // appears in array specified by user + $tagFound = in_array(strtolower($tagName), $this->tagsArray); + // remove this tag on condition + if ((!$tagFound && $this->tagsMethod) || ($tagFound && !$this->tagsMethod)) { + // reconstruct tag with allowed attributes + if (!$isCloseTag) { + $attrSet = $this->filterAttr($attrSet); + $preTag .= '<' . $tagName; + for ($i = 0; $i < count($attrSet); $i++) + $preTag .= ' ' . $attrSet[$i]; + // reformat single tags to XHTML + if (strpos($fromTagOpen, "'; + else $preTag .= ' />'; + // just the tagname + } else $preTag .= ''; + } + // find next tag's start + $postTag = substr($postTag, ($tagLength + 2)); + $tagOpen_start = strpos($postTag, '<'); + } + // append any code after end of tags + $preTag .= $postTag; + return $preTag; + } + + /** + * Internal method to strip a tag of certain attributes + * @access protected + * @param Array $attrSet + * @return Array $newSet + */ + function filterAttr($attrSet) { + $newSet = array(); + // process attributes + for ($i = 0; $i xssAuto) && ((in_array(strtolower($attrSubSet[0]), $this->attrBlacklist)) || (substr($attrSubSet[0], 0, 2) == 'on')))) + continue; + // xss attr value filtering + if ($attrSubSet[1]) { + // strips unicode, hex, etc + $attrSubSet[1] = str_replace('&#', '', $attrSubSet[1]); + // strip normal newline within attr value + $attrSubSet[1] = preg_replace('/\s+/', '', $attrSubSet[1]); + // strip double quotes + $attrSubSet[1] = str_replace('"', '', $attrSubSet[1]); + // [requested feature] convert single quotes from either side to doubles (Single quotes shouldn't be used to pad attr value) + if ((substr($attrSubSet[1], 0, 1) == "'") && (substr($attrSubSet[1], (strlen($attrSubSet[1]) - 1), 1) == "'")) + $attrSubSet[1] = substr($attrSubSet[1], 1, (strlen($attrSubSet[1]) - 2)); + // strip slashes + $attrSubSet[1] = stripslashes($attrSubSet[1]); + } + // auto strip attr's with "javascript: + if ( ((strpos(strtolower($attrSubSet[1]), 'expression') !== false) && (strtolower($attrSubSet[0]) == 'style')) || + (strpos(strtolower($attrSubSet[1]), 'javascript:') !== false) || + (strpos(strtolower($attrSubSet[1]), 'behaviour:') !== false) || + (strpos(strtolower($attrSubSet[1]), 'vbscript:') !== false) || + (strpos(strtolower($attrSubSet[1]), 'mocha:') !== false) || + (strpos(strtolower($attrSubSet[1]), 'livescript:') !== false) + ) continue; + + // if matches user defined array + $attrFound = in_array(strtolower($attrSubSet[0]), $this->attrArray); + // keep this attr on condition + if ((!$attrFound && $this->attrMethod) || ($attrFound && !$this->attrMethod)) { + // attr has value + if ($attrSubSet[1]) $newSet[] = $attrSubSet[0] . '="' . $attrSubSet[1] . '"'; + // attr has decimal zero as value + else if ($attrSubSet[1] == "0") $newSet[] = $attrSubSet[0] . '="0"'; + // reformat single attributes to XHTML + else $newSet[] = $attrSubSet[0] . '="' . $attrSubSet[0] . '"'; + } + } + return $newSet; + } + + /** + * Try to convert to plaintext + * @access protected + * @param String $source + * @return String $source + */ + function decode($source) { + // url decode +// $source = html_entity_decode($source, ENT_QUOTES, "ISO-8859-1"); + $source = html_entity_decode($source, ENT_QUOTES, "UTF-8"); + // convert decimal + $source = preg_replace('/&#(\d+);/me',"chr(\\1)", $source); // decimal notation + // convert hex + $source = preg_replace('/&#x([a-f0-9]+);/mei',"chr(0x\\1)", $source); // hex notation + return $source; + } + + /** + * Method to be called by another php script. Processes for SQL injection + * @access public + * @param Mixed $source - input string/array-of-string to be 'cleaned' + * @param Buffer $connection - An open MySQL connection + * @return String $source - 'cleaned' version of input parameter + */ + function safeSQL($source, &$connection) { + // clean all elements in this array + if (is_array($source)) { + foreach($source as $key => $value) + // filter element for SQL injection + if (is_string($value)) $source[$key] = $this->quoteSmart($this->decode($value), $connection); + return $source; + // clean this string + } else if (is_string($source)) { + // filter source for SQL injection + if (is_string($source)) return $this->quoteSmart($this->decode($source), $connection); + // return parameter as given + } else return $source; + } + + /** + * @author Chris Tobin + * @author Daniel Morris + * @access protected + * @param String $source + * @param Resource $connection - An open MySQL connection + * @return String $source + */ + function quoteSmart($source, &$connection) { + // strip slashes + if (get_magic_quotes_gpc()) $source = stripslashes($source); + // quote both numeric and text + $source = $this->escapeString($source, $connection); + return $source; + } + + /** + * @author Chris Tobin + * @author Daniel Morris + * @access protected + * @param String $source + * @param Resource $connection - An open MySQL connection + * @return String $source + */ + function escapeString($string, &$connection) { + // depreciated function + if (version_compare(phpversion(),"4.3.0", "<")) mysql_escape_string($string); + // current function + else mysql_real_escape_string($string); + return $string; + } +} + +?> \ No newline at end of file diff --git a/web/libs/ptitcaptcha.php b/web/libs/ptitcaptcha.php new file mode 100644 index 0000000..6e24126 --- /dev/null +++ b/web/libs/ptitcaptcha.php @@ -0,0 +1,127 @@ +\"???\""; + } + + /** + * Generate input tag (must be in a form) + * + * @return input tag + */ + function generateInputTags() + { + return ""; + } + + /** + * Check if user input is correct + * + * @return boolean (true=correct, false=incorrect) + */ + function checkCaptcha() + { + if( isset($_POST['ptitcaptcha_entry']) && + $_POST['ptitcaptcha_entry'] == PtitCaptchaHelper::_getDisplayText($_POST['ptitcaptcha_key'])) + { + return true; + } + return false; + } + + /** + * Internal function + * + * @param string $pck + * @return string + */ + function _getDisplayText($pck) // internal function + { + $src=md5(PTITCAPTCHA_ENTROPY.$pck); + $txt=""; + for($i=0;$i \ No newline at end of file diff --git a/web/libs/sxml.php b/web/libs/sxml.php new file mode 100644 index 0000000..78533f3 --- /dev/null +++ b/web/libs/sxml.php @@ -0,0 +1,74 @@ +parser, XML_OPTION_CASE_FOLDING, 0); + dans la fonction parse($data) pour la prise en compte de la casse + +- if($attribs) $this->data['attrs'] = $attribs; + dans la fonction tag_open pour la prise en compte des attributs + +*/ + +class sxml +{ + var $parser; + var $error_code; + var $error_string; + var $current_line; + var $current_column; + var $data; + var $datas; + function parse($data) + { +// $this->parser = xml_parser_create('UTF-8'); + $this->data = array(); + $this->datas = array(); + $this->parser = xml_parser_create(); + xml_set_object($this->parser, $this); + xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1); + xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); + xml_set_element_handler($this->parser, 'tag_open', 'tag_close'); + xml_set_character_data_handler($this->parser, 'cdata'); + if (!xml_parse($this->parser, $data)) + { + $this->data = array(); + $this->error_code = xml_get_error_code($this->parser); + $this->error_string = xml_error_string($this->error_code); + $this->current_line = xml_get_current_line_number($this->parser); + $this->current_column = xml_get_current_column_number($this->parser); + } + else + { + $this->data = $this->data['subs']; + } + xml_parser_free($this->parser); + } + + function tag_open($parser, $tag, $attribs) + { + $this->datas[] = &$this->data; + $this->data = &$this->data['subs'][$tag][]; + if($attribs) $this->data['attrs'] = $attribs; + + } + + function cdata($parser, $cdata) + { + @$this->data['data'] .= $cdata; + } + + function tag_close($parser, $tag) + { + $this->data =& $this->datas[count($this->datas)-1]; + array_pop($this->datas); + } +} + +?> \ No newline at end of file diff --git a/web/libs/tiny_mce/langs/en.js b/web/libs/tiny_mce/langs/en.js new file mode 100644 index 0000000..ea4a1b0 --- /dev/null +++ b/web/libs/tiny_mce/langs/en.js @@ -0,0 +1,170 @@ +tinyMCE.addI18n({en:{ +common:{ +edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?", +apply:"Apply", +insert:"Insert", +update:"Update", +cancel:"Cancel", +close:"Close", +browse:"Browse", +class_name:"Class", +not_set:"-- Not set --", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?", +clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.", +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.", +invalid_data:"Error: Invalid values entered, these are marked in red.", +more_colors:"More colors" +}, +contextmenu:{ +align:"Alignment", +left:"Left", +center:"Center", +right:"Right", +full:"Full" +}, +insertdatetime:{ +date_fmt:"%Y-%m-%d", +time_fmt:"%H:%M:%S", +insertdate_desc:"Insert date", +inserttime_desc:"Insert time", +months_long:"January,February,March,April,May,June,July,August,September,October,November,December", +months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", +day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday", +day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun" +}, +print:{ +print_desc:"Print" +}, +preview:{ +preview_desc:"Preview" +}, +directionality:{ +ltr_desc:"Direction left to right", +rtl_desc:"Direction right to left" +}, +layer:{ +insertlayer_desc:"Insert new layer", +forward_desc:"Move forward", +backward_desc:"Move backward", +absolute_desc:"Toggle absolute positioning", +content:"New layer..." +}, +save:{ +save_desc:"Save", +cancel_desc:"Cancel all changes" +}, +nonbreaking:{ +nonbreaking_desc:"Insert non-breaking space character" +}, +iespell:{ +iespell_desc:"Run spell checking", +download:"ieSpell not detected. Do you want to install it now?" +}, +advhr:{ +advhr_desc:"Horizontal rule" +}, +emotions:{ +emotions_desc:"Emotions" +}, +searchreplace:{ +search_desc:"Find", +replace_desc:"Find/Replace" +}, +advimage:{ +image_desc:"Insert/edit image" +}, +advlink:{ +link_desc:"Insert/edit link" +}, +xhtmlxtras:{ +cite_desc:"Citation", +abbr_desc:"Abbreviation", +acronym_desc:"Acronym", +del_desc:"Deletion", +ins_desc:"Insertion", +attribs_desc:"Insert/Edit Attributes" +}, +style:{ +desc:"Edit CSS Style" +}, +paste:{ +paste_text_desc:"Paste as Plain Text", +paste_word_desc:"Paste from Word", +selectall_desc:"Select All", +plaintext_mode_sticky:"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.", +plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode." +}, +paste_dlg:{ +text_title:"Use CTRL+V on your keyboard to paste the text into the window.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V on your keyboard to paste the text into the window." +}, +table:{ +desc:"Inserts a new table", +row_before_desc:"Insert row before", +row_after_desc:"Insert row after", +delete_row_desc:"Delete row", +col_before_desc:"Insert column before", +col_after_desc:"Insert column after", +delete_col_desc:"Remove column", +split_cells_desc:"Split merged table cells", +merge_cells_desc:"Merge table cells", +row_desc:"Table row properties", +cell_desc:"Table cell properties", +props_desc:"Table properties", +paste_row_before_desc:"Paste table row before", +paste_row_after_desc:"Paste table row after", +cut_row_desc:"Cut table row", +copy_row_desc:"Copy table row", +del:"Delete table", +row:"Row", +col:"Column", +cell:"Cell" +}, +autosave:{ +unload_msg:"The changes you made will be lost if you navigate away from this page.", +restore_content:"Restore auto-saved content.", +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?." +}, +fullscreen:{ +desc:"Toggle fullscreen mode" +}, +media:{ +desc:"Insert / edit embedded media", +edit:"Edit embedded media" +}, +fullpage:{ +desc:"Document properties" +}, +template:{ +desc:"Insert predefined template content" +}, +visualchars:{ +desc:"Visual control characters on/off." +}, +spellchecker:{ +desc:"Toggle spellchecker", +menu:"Spellchecker 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." +}, +pagebreak:{ +desc:"Insert page break." +}, +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" +}}}); \ No newline at end of file diff --git a/web/libs/tiny_mce/license.txt b/web/libs/tiny_mce/license.txt new file mode 100644 index 0000000..60d6d4c --- /dev/null +++ b/web/libs/tiny_mce/license.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/web/libs/tiny_mce/plugins/advhr/css/advhr.css b/web/libs/tiny_mce/plugins/advhr/css/advhr.css new file mode 100644 index 0000000..0e22834 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advhr/css/advhr.css @@ -0,0 +1,5 @@ +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/web/libs/tiny_mce/plugins/advhr/editor_plugin.js b/web/libs/tiny_mce/plugins/advhr/editor_plugin.js new file mode 100644 index 0000000..4d3b062 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advhr/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/advhr/editor_plugin_src.js b/web/libs/tiny_mce/plugins/advhr/editor_plugin_src.js new file mode 100644 index 0000000..0c652d3 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advhr/editor_plugin_src.js @@ -0,0 +1,57 @@ +/** + * 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/web/libs/tiny_mce/plugins/advhr/js/rule.js b/web/libs/tiny_mce/plugins/advhr/js/rule.js new file mode 100644 index 0000000..b6cbd66 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advhr/js/rule.js @@ -0,0 +1,43 @@ +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/web/libs/tiny_mce/plugins/advimage/css/advimage.css b/web/libs/tiny_mce/plugins/advimage/css/advimage.css new file mode 100644 index 0000000..0a6251a --- /dev/null +++ b/web/libs/tiny_mce/plugins/advimage/css/advimage.css @@ -0,0 +1,13 @@ +#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/web/libs/tiny_mce/plugins/advimage/editor_plugin.js b/web/libs/tiny_mce/plugins/advimage/editor_plugin.js new file mode 100644 index 0000000..4c7a9c3 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advimage/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/advimage/editor_plugin_src.js b/web/libs/tiny_mce/plugins/advimage/editor_plugin_src.js new file mode 100644 index 0000000..2625dd2 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advimage/editor_plugin_src.js @@ -0,0 +1,50 @@ +/** + * 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/web/libs/tiny_mce/plugins/advimage/image.htm b/web/libs/tiny_mce/plugins/advimage/image.htm new file mode 100644 index 0000000..79cff3f --- /dev/null +++ b/web/libs/tiny_mce/plugins/advimage/image.htm @@ -0,0 +1,232 @@ + + + + {#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/web/libs/tiny_mce/plugins/advimage/img/sample.gif b/web/libs/tiny_mce/plugins/advimage/img/sample.gif new file mode 100644 index 0000000000000000000000000000000000000000..53bf6890b507741c10910c9e2217ad8247b98e8d GIT binary patch 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(); + + tinyMCEPopup.resizeToInnerSize(); + this.fillClassList('class_list'); + this.fillFileList('src_list', 'tinyMCEImageList'); + this.fillFileList('over_list', 'tinyMCEImageList'); + this.fillFileList('out_list', 'tinyMCEImageList'); + 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, + 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 { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + 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 = 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, st, v, 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') { + dom.setStyle(img, 'border', ''); + + v = f.border.value; + if (v || v == '0') { + if (v == '0') + img.style.border = '0'; + else + img.style.border = v + 'px solid black'; + } + } + + // 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/web/libs/tiny_mce/plugins/advimage/langs/en_dlg.js b/web/libs/tiny_mce/plugins/advimage/langs/en_dlg.js new file mode 100644 index 0000000..f493d19 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advimage/langs/en_dlg.js @@ -0,0 +1,43 @@ +tinyMCE.addI18n('en.advimage_dlg',{ +tab_general:"General", +tab_appearance:"Appearance", +tab_advanced:"Advanced", +general:"General", +title:"Title", +preview:"Preview", +constrain_proportions:"Constrain proportions", +langdir:"Language direction", +langcode:"Language code", +long_desc:"Long description link", +style:"Style", +classes:"Classes", +ltr:"Left to right", +rtl:"Right to left", +id:"Id", +map:"Image map", +swap_image:"Swap image", +alt_image:"Alternative image", +mouseover:"for mouse over", +mouseout:"for mouse out", +misc:"Miscellaneous", +example_img:"Appearance preview 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.", +dialog_title:"Insert/edit image", +src:"Image URL", +alt:"Image description", +list:"Image list", +border:"Border", +dimensions:"Dimensions", +vspace:"Vertical space", +hspace:"Horizontal space", +align:"Alignment", +align_baseline:"Baseline", +align_top:"Top", +align_middle:"Middle", +align_bottom:"Bottom", +align_texttop:"Text top", +align_textbottom:"Text bottom", +align_left:"Left", +align_right:"Right", +image_list:"Image list" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/advlink/css/advlink.css b/web/libs/tiny_mce/plugins/advlink/css/advlink.css new file mode 100644 index 0000000..1436431 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlink/css/advlink.css @@ -0,0 +1,8 @@ +.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/web/libs/tiny_mce/plugins/advlink/editor_plugin.js b/web/libs/tiny_mce/plugins/advlink/editor_plugin.js new file mode 100644 index 0000000..983fe5a --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlink/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/advlink/editor_plugin_src.js b/web/libs/tiny_mce/plugins/advlink/editor_plugin_src.js new file mode 100644 index 0000000..14e46a7 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlink/editor_plugin_src.js @@ -0,0 +1,61 @@ +/** + * 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/web/libs/tiny_mce/plugins/advlink/js/advlink.js b/web/libs/tiny_mce/plugins/advlink/js/advlink.js new file mode 100644 index 0000000..b78e82f --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlink/js/advlink.js @@ -0,0 +1,528 @@ +/* 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('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href'); + document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href'); + 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; + + // 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 && 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'); + + // 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', inst.dom.getAttrib(elm, 'target')); + 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', inst.dom.getAttrib(elm, 'target'), 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'; + html += ''; + + for (i=0; i' + name + ''; + } + + 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) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + i = inst.selection.getBookmark(); + inst.dom.remove(elm, 1); + inst.selection.moveToBookmark(i); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (elm == null) { + inst.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", 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/web/libs/tiny_mce/plugins/advlink/langs/en_dlg.js b/web/libs/tiny_mce/plugins/advlink/langs/en_dlg.js new file mode 100644 index 0000000..c71ffbd --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlink/langs/en_dlg.js @@ -0,0 +1,52 @@ +tinyMCE.addI18n('en.advlink_dlg',{ +title:"Insert/edit link", +url:"Link URL", +target:"Target", +titlefield:"Title", +is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +list:"Link list", +general_tab:"General", +popup_tab:"Popup", +events_tab:"Events", +advanced_tab:"Advanced", +general_props:"General properties", +popup_props:"Popup properties", +event_props:"Events", +advanced_props:"Advanced properties", +popup_opts:"Options", +anchor_names:"Anchors", +target_same:"Open in this window / frame", +target_parent:"Open in parent window / frame", +target_top:"Open in top frame (replaces all frames)", +target_blank:"Open in new window", +popup:"Javascript popup", +popup_url:"Popup URL", +popup_name:"Window name", +popup_return:"Insert 'return false'", +popup_scrollbars:"Show scrollbars", +popup_statusbar:"Show status bar", +popup_toolbar:"Show toolbars", +popup_menubar:"Show menu bar", +popup_location:"Show location bar", +popup_resizable:"Make window resizable", +popup_dependent:"Dependent (Mozilla/Firefox only)", +popup_size:"Size", +popup_position:"Position (X/Y)", +id:"Id", +style:"Style", +classes:"Classes", +target_name:"Target name", +langdir:"Language direction", +target_langcode:"Target language", +langcode:"Language code", +encoding:"Target character encoding", +mime:"Target MIME type", +rel:"Relationship page to target", +rev:"Relationship target to page", +tabindex:"Tabindex", +accesskey:"Accesskey", +ltr:"Left to right", +rtl:"Right to left", +link_list:"Link list" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/advlink/link.htm b/web/libs/tiny_mce/plugins/advlink/link.htm new file mode 100644 index 0000000..876669c --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlink/link.htm @@ -0,0 +1,333 @@ + + + + {#advlink_dlg.title} + + + + + + + + +
+ + +
+
+
+ {#advlink_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ +
+
+
+ + + +
+
+ {#advlink_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
+ +
+
+ {#advlink_dlg.event_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/advlist/editor_plugin.js b/web/libs/tiny_mce/plugins/advlist/editor_plugin.js new file mode 100644 index 0000000..02d1697 --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlist/editor_plugin.js @@ -0,0 +1 @@ +(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")},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("_mce_style")}}}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle"}).setDisabled(1);a(f[d],function(k){k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});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/web/libs/tiny_mce/plugins/advlist/editor_plugin_src.js b/web/libs/tiny_mce/plugins/advlist/editor_plugin_src.js new file mode 100644 index 0000000..a61887a --- /dev/null +++ b/web/libs/tiny_mce/plugins/advlist/editor_plugin_src.js @@ -0,0 +1,154 @@ +/** + * 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"); + }, + + createControl: function(name, cm) { + var t = this, btn, format; + + 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 (t.editor.dom.getStyle(node, name) != value) { + state = false; + return false; + } + }); + + return state; + }; + + function applyListFormat() { + var list, ed = t.editor, dom = ed.dom, sel = ed.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)) + ed.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('_mce_style'); + } + } + }; + + btn = cm.createSplitButton(name, { + title : 'advanced.' + name + '_desc', + 'class' : 'mce_' + name, + onclick : function() { + applyListFormat(); + } + }); + + btn.onRenderMenu.add(function(btn, menu) { + menu.onShowMenu.add(function() { + var dom = t.editor.dom, list = dom.getParent(t.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); + } + }); + + menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + each(t[name], function(item) { + item.id = t.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/web/libs/tiny_mce/plugins/autoresize/editor_plugin.js b/web/libs/tiny_mce/plugins/autoresize/editor_plugin.js new file mode 100644 index 0000000..1676b15 --- /dev/null +++ b/web/libs/tiny_mce/plugins/autoresize/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;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.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)})}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/web/libs/tiny_mce/plugins/autoresize/editor_plugin_src.js b/web/libs/tiny_mce/plugins/autoresize/editor_plugin_src.js new file mode 100644 index 0000000..c260b7a --- /dev/null +++ b/web/libs/tiny_mce/plugins/autoresize/editor_plugin_src.js @@ -0,0 +1,119 @@ +/** + * 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; + + if (ed.getParam('fullscreen_is_enabled')) + return; + + /** + * This method gets executed each time the editor needs to resize. + */ + function resize() { + var d = ed.getDoc(), b = 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 ? b.scrollHeight : de.offsetHeight; + + // Don't make it smaller than the minimum height + if (myHeight > t.autoresize_min_height) + resizeHeight = myHeight; + + // Resize content element + DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); + + // if we're throbbing, we'll re-throb to match the new size + if (t.throbbing) { + ed.setProgressState(false); + ed.setProgressState(true); + } + }; + + t.editor = ed; + + // Define minimum height + t.autoresize_min_height = ed.getElement().offsetHeight; + + // 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)) { + // Things to do when the editor is ready + ed.onInit.add(function(ed, l) { + // Show throbber until content area is resized properly + ed.setProgressState(true); + t.throbbing = true; + + // Hide scrollbars + ed.getBody().style.overflowY = "hidden"; + }); + + ed.onLoadContent.add(function(ed, l) { + resize(); + + // Because the content area resizes when its content CSS loads, + // and we can't easily add a listener to its onload event, + // we'll just trigger a resize after a short loading period + setTimeout(function() { + resize(); + + // Disable throbber + ed.setProgressState(false); + t.throbbing = false; + }, 1250); + }); + } + + // 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); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/autosave/editor_plugin.js b/web/libs/tiny_mce/plugins/autosave/editor_plugin.js new file mode 100644 index 0000000..6e48540 --- /dev/null +++ b/web/libs/tiny_mce/plugins/autosave/editor_plugin.js @@ -0,0 +1 @@ +(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(){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();m.save("TinyMCE")},getItem:function(l){var m=i.getElement();m.load("TinyMCE");return m.getAttribute(l)},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,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},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() { + 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(); + userDataElement.save("TinyMCE"); + }, + + getItem : function(key) { + var userDataElement = ed.getElement(); + + userDataElement.load("TinyMCE"); + + return userDataElement.getAttribute(key); + }, + + 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; + + 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/web/libs/tiny_mce/plugins/autosave/langs/en.js b/web/libs/tiny_mce/plugins/autosave/langs/en.js new file mode 100644 index 0000000..fce6bd3 --- /dev/null +++ b/web/libs/tiny_mce/plugins/autosave/langs/en.js @@ -0,0 +1,4 @@ +tinyMCE.addI18n('en.autosave',{ +restore_content: "Restore auto-saved content", +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?" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/bbcode/editor_plugin.js b/web/libs/tiny_mce/plugins/bbcode/editor_plugin.js new file mode 100644 index 0000000..930fdff --- /dev/null +++ b/web/libs/tiny_mce/plugins/bbcode/editor_plugin.js @@ -0,0 +1 @@ +(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(/ /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/web/libs/tiny_mce/plugins/bbcode/editor_plugin_src.js b/web/libs/tiny_mce/plugins/bbcode/editor_plugin_src.js new file mode 100644 index 0000000..5586637 --- /dev/null +++ b/web/libs/tiny_mce/plugins/bbcode/editor_plugin_src.js @@ -0,0 +1,120 @@ +/** + * 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(/ /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/web/libs/tiny_mce/plugins/contextmenu/editor_plugin.js b/web/libs/tiny_mce/plugins/contextmenu/editor_plugin.js new file mode 100644 index 0000000..9749e51 --- /dev/null +++ b/web/libs/tiny_mce/plugins/contextmenu/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(d){var f=this,g;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(h,i){if(!i.ctrlKey){if(g){h.selection.setRng(g)}f._getMenu(h).showMenu(i.clientX,i.clientY);a.add(h.getDoc(),"click",function(j){e(h,j)});a.cancel(i)}});d.onRemove.add(function(){if(f._menu){f._menu.removeAll()}});function e(h,i){g=null;if(i&&i.button==2){g=h.selection.getRng();return}if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(h.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},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(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/web/libs/tiny_mce/plugins/contextmenu/editor_plugin_src.js new file mode 100644 index 0000000..13813a6 --- /dev/null +++ b/web/libs/tiny_mce/plugins/contextmenu/editor_plugin_src.js @@ -0,0 +1,147 @@ +/** + * 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, lastRng; + + t.editor = ed; + + /** + * 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); + + ed.onContextMenu.add(function(ed, e) { + if (!e.ctrlKey) { + // Restore the last selection since it was removed + if (lastRng) + ed.selection.setRng(lastRng); + + t._getMenu(ed).showMenu(e.clientX, e.clientY); + Event.add(ed.getDoc(), 'click', function(e) { + hide(ed, e); + }); + Event.cancel(e); + } + }); + + ed.onRemove.add(function() { + if (t._menu) + t._menu.removeAll(); + }); + + function hide(ed, e) { + lastRng = null; + + // Since the contextmenu event moves + // the selection we need to store it away + if (e && e.button == 2) { + lastRng = ed.selection.getRng(); + return; + } + + if (t._menu) { + t._menu.removeAll(); + t._menu.destroy(); + Event.remove(ed.getDoc(), 'click', hide); + } + }; + + ed.onMouseDown.add(hide); + ed.onKeyDown.add(hide); + }, + + /** + * 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, p1, p2; + + if (m) { + m.removeAll(); + m.destroy(); + } + + p1 = DOM.getPos(ed.getContentAreaContainer()); + p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('contextmenu', { + offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0), + offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0), + constrain : 1 + }); + + 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); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/directionality/editor_plugin.js b/web/libs/tiny_mce/plugins/directionality/editor_plugin.js new file mode 100644 index 0000000..bce8e73 --- /dev/null +++ b/web/libs/tiny_mce/plugins/directionality/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/directionality/editor_plugin_src.js b/web/libs/tiny_mce/plugins/directionality/editor_plugin_src.js new file mode 100644 index 0000000..4444959 --- /dev/null +++ b/web/libs/tiny_mce/plugins/directionality/editor_plugin_src.js @@ -0,0 +1,82 @@ +/** + * 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.Directionality', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + + ed.addCommand('mceDirectionLTR', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "ltr") + ed.dom.setAttrib(e, "dir", "ltr"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addCommand('mceDirectionRTL', function() { + var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); + + if (e) { + if (ed.dom.getAttrib(e, "dir") != "rtl") + ed.dom.setAttrib(e, "dir", "rtl"); + else + ed.dom.setAttrib(e, "dir", ""); + } + + ed.nodeChanged(); + }); + + ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'}); + ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'}); + + ed.onNodeChange.add(t._nodeChange, t); + }, + + getInfo : function() { + return { + longname : 'Directionality', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + _nodeChange : function(ed, cm, n) { + var dom = ed.dom, dir; + + n = dom.getParent(n, dom.isBlock); + if (!n) { + cm.setDisabled('ltr', 1); + cm.setDisabled('rtl', 1); + return; + } + + dir = dom.getAttrib(n, 'dir'); + cm.setActive('ltr', dir == "ltr"); + cm.setDisabled('ltr', 0); + cm.setActive('rtl', dir == "rtl"); + cm.setDisabled('rtl', 0); + } + }); + + // Register plugin + tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/emotions/editor_plugin.js b/web/libs/tiny_mce/plugins/emotions/editor_plugin.js new file mode 100644 index 0000000..dbdd8ff --- /dev/null +++ b/web/libs/tiny_mce/plugins/emotions/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/emotions/editor_plugin_src.js b/web/libs/tiny_mce/plugins/emotions/editor_plugin_src.js new file mode 100644 index 0000000..71d5416 --- /dev/null +++ b/web/libs/tiny_mce/plugins/emotions/editor_plugin_src.js @@ -0,0 +1,43 @@ +/** + * 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/web/libs/tiny_mce/plugins/emotions/emotions.htm b/web/libs/tiny_mce/plugins/emotions/emotions.htm new file mode 100644 index 0000000..55a1d72 --- /dev/null +++ b/web/libs/tiny_mce/plugins/emotions/emotions.htm @@ -0,0 +1,40 @@ + + + + {#emotions_dlg.title} + + + + +

+
{#emotions_dlg.title}:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{#emotions_dlg.cool}{#emotions_dlg.cry}{#emotions_dlg.embarassed}{#emotions_dlg.foot_in_mouth}
{#emotions_dlg.frown}{#emotions_dlg.innocent}{#emotions_dlg.kiss}{#emotions_dlg.laughing}
{#emotions_dlg.money_mouth}{#emotions_dlg.sealed}{#emotions_dlg.smile}{#emotions_dlg.surprised}
{#emotions_dlg.tongue-out}{#emotions_dlg.undecided}{#emotions_dlg.wink}{#emotions_dlg.yell}
+
+ + diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-cool.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-cool.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba90cc36fb0415d0273d1cd206bff63fd9c91fde GIT binary patch literal 354 zcmV-o0iFIwNk%w1VG;lm0Mr!#3ke00dJfFY%i+lrhK7V(RutUQJhPY;?(XfrsZKgL z7WLQ^zPO&zzav{)SL^9nBOw~z(=orMEH5uC-P_gr`uhCnASMa|$-iRw?m_(dUwU8) zq>Kx}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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-cry.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-cry.gif new file mode 100644 index 0000000000000000000000000000000000000000..74d897a4f6d22e814e2b054e98b8a75fb464b4be GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-embarassed.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-embarassed.gif new file mode 100644 index 0000000000000000000000000000000000000000..963a96b8a7593b1d8bcbab073abe5ee4e539dbf6 GIT binary patch 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>)kfFn;iS@Hvj+tA^8LW0018VEC2ui01^Na000Hm;3tYuX_jM3Mo7199TGt*Nf;R= zNmOPKwA8_2Q6MTDP6eT`I1VESVj-zGIG(JdB3U44kcdI@;AAq{Gv^^O%%ltj2GdB) z>vIL;d*~=0a|w1Bf^!cF9R~+vb94;_0}TxWlnMrlj2MuVoSYAreF`3(0|pHS8VLgr zi3bP_qZ;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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-innocent.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-innocent.gif new file mode 100644 index 0000000000000000000000000000000000000000..334d49e0e60f2997c9ba24071764f95d9e08a5cc GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-laughing.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-laughing.gif new file mode 100644 index 0000000000000000000000000000000000000000..1606c119e75678c4031f384e0d50849906e8f533 GIT binary patch literal 344 zcmV-e0jK^)Nk%w1VG;lm0MruzQauf>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-qyCjsu$J9F8}}lA^8LW0018VEC2ui01^Na000HT;3tYxX_jM37RWXX8&XUv=@{Oj zX@_Sxw3H&!kzgQ?2LvPOL=>Y5VxieY9+_+eqFEql6OKWXd3Ze8Ggf2Zln@U|mI9d9 zGm^(wVUTA5cYs-V1`2#+a})^z6chrF5`~8k5e6@pmkW`GeGw<069yTQaGnH)s0suV zR|pCd0ZtRCsjM9VB^L+~7X%f*zyuc%2p3=#ycf#L%McYo9|{Z&5D^#_78qL%3{WW( X7Xb)FP6z?UH6ODVz!ev-DIowmgll^P literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-smile.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-smile.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6a9e60d5ddd1243fbbf2197b4dc6cd9c1b58b93 GIT binary patch literal 345 zcmV-f0jB;(Nk%w1VG;lm0MrlwCJF+^#>SR<4C>Dj%C>6W(lWoQPVevT^YB^Fy&h6M z4YZgH{O~qtR1(Ci8T;lQ`uh6d*t-7xar*K{#Jrulo-Wtd*44u?{`oh#n;gQXGXDEo z_}UVAU=FH^0ssI2A^8LW0018VEC2ui01^Na000Hn;3tYuX_jM3Mn>j&nGr!MNh}v4 zNyxPjwA7*EKx`%q#$Vl9SM>N9ReH-cn1&^4jYXf0KotqjT;UWC94U(4-NtX4#i!%9}pHA2?&dg3>XLr r8Wuqx2Nnhn1xrT-4h9xbDb^GQ8V(K`1{C5o)#U;I0p5-K5CQ-@9%ySnDDC*4*{OcpiwransPVevTQacIr@mkQp zCf(06s)_=>r7UYx48o@u`uh6d*t-7rH~ji<`P&oj;5Wp)o!8ga`SV6TA_BIW5#ZWV z{`*+__>9}pJ}3JDSl85wB_3Jn)Q o9|so(4+|I^92g4^1{Y8%(iR3pP6ig=HPPY$`~mLZA3^{CJDB=?L;wH) literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..2075dc16058f1f17912167675ce5cfb9986fc71d GIT binary patch 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= literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-undecided.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-undecided.gif new file mode 100644 index 0000000000000000000000000000000000000000..bef7e257303f8243c89787e7a7f9955dd1f112e2 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-wink.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..9faf1aff8f4b28e02f4f414975fe1859c43b6b54 GIT binary patch literal 351 zcmV-l0igazNk%w1VG;lm0MrryC=CL}#>Sn03F^-g-qAA3wransPV?|t@9*x%vmQ`7 z4E*pcw3rOOq%3t@4*K#({N^40{c-yG`rz2Q!KfI-yq*61HrBop*VoqW<}&{JS@_x# zwwfH#!YTdnIsgCwA^8LW0018VEC2ui01^Na000Ht;3tYwX_jM3P6j6koH0o%Sun&A zMF+tYv=pL2IcOdp&qH&dG!P?+ArV0)J)O=Yk}%LD6Go&#@MJn3he8=)%%lWOM*#pN zEDD9iq9J$@90v~;83`GC4i0+{2OJ0pVtacF5E}yn8<`pmkCBv_pqZEtoPY-l0}P>= z3WE6cr`19U7DgF9{F}at6R35*Q5~ x2OgBy9tRx_7(pKh7zPvsOGgA01{hE&-4zBzP6id}HMp@0Krnzkbss_i06S`>cdh^c literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/emotions/img/smiley-yell.gif b/web/libs/tiny_mce/plugins/emotions/img/smiley-yell.gif new file mode 100644 index 0000000000000000000000000000000000000000..648e6e879123fe49beebbc1f3635141864a79a9c GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryG8O{K#>IbS7WCB_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 + + + {#example_dlg.title} + + + + + +
+

Here is a example dialog.

+

Selected text:

+

Custom arg:

+ +
+ + +
+
+ + + diff --git a/web/libs/tiny_mce/plugins/example/editor_plugin.js b/web/libs/tiny_mce/plugins/example/editor_plugin.js new file mode 100644 index 0000000..ec1f81e --- /dev/null +++ b/web/libs/tiny_mce/plugins/example/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/example/editor_plugin_src.js b/web/libs/tiny_mce/plugins/example/editor_plugin_src.js new file mode 100644 index 0000000..9a0e7da --- /dev/null +++ b/web/libs/tiny_mce/plugins/example/editor_plugin_src.js @@ -0,0 +1,84 @@ +/** + * 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/web/libs/tiny_mce/plugins/example/img/example.gif b/web/libs/tiny_mce/plugins/example/img/example.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ab5da4461113d2af579898528246fdbe52ecd00 GIT binary patch literal 87 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*pGzw+SQ`#f{}FJ-?!v#V)e mtsGNfpJeCKSAiOz**>0`XR2{OVa>-G_df0vaY/i);if(f&&f[1]){l=f[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(l){for(c=0,e=l.length;c",a);h.head=f.substring(0,a+1);j=f.indexOf("\n'}h.head+=d.getParam("fullpage_default_doctype",'');h.head+="\n\n\n"+d.getParam("fullpage_default_title","Untitled document")+"\n";if(g=d.getParam("fullpage_default_encoding")){h.head+='\n'}if(g=d.getParam("fullpage_default_font_family")){i+="font-family: "+g+";"}if(g=d.getParam("fullpage_default_font_size")){i+="font-size: "+g+";"}if(g=d.getParam("fullpage_default_text_color")){i+="color: "+g+";"}h.head+="\n\n";h.foot="\n\n"}},_getContent:function(a,c){var b=this;if(!c.source_view||!a.getParam("fullpage_hide_in_source_view")){c.content=tinymce.trim(b.head)+"\n"+tinymce.trim(c.content)+"\n"+tinymce.trim(b.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/fullpage/editor_plugin_src.js b/web/libs/tiny_mce/plugins/fullpage/editor_plugin_src.js new file mode 100644 index 0000000..a2c9df8 --- /dev/null +++ b/web/libs/tiny_mce/plugins/fullpage/editor_plugin_src.js @@ -0,0 +1,153 @@ +/** + * 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.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, + head_html : t.head + }); + }); + + // Register buttons + ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'}); + + ed.onBeforeSetContent.add(t._setContent, t); + ed.onSetContent.add(t._setBodyAttribs, 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 + + _setBodyAttribs : function(ed, o) { + var bdattr, i, len, kv, k, v, t, attr = this.head.match(/body(.*?)>/i); + + if (attr && attr[1]) { + bdattr = attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g); + + if (bdattr) { + for(i = 0, len = bdattr.length; i < len; i++) { + kv = bdattr[i].split('='); + k = kv[0].replace(/\s/,''); + v = kv[1]; + + if (v) { + v = v.replace(/^\s+/,'').replace(/\s+$/,''); + t = v.match(/^["'](.*)["']$/); + + if (t) + v = t[1]; + } else + v = k; + + ed.dom.setAttrib(ed.getBody(), 'style', v); + } + } + } + }, + + _createSerializer : function() { + return new tinymce.dom.Serializer({ + dom : this.editor.dom, + apply_source_formatting : true + }); + }, + + _setContent : function(ed, o) { + var t = this, sp, ep, c = o.content, v, st = ''; + + // 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' && t.head) + return; + + if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) + return; + + // Parse out head, body and footer + c = c.replace(/<(\/?)BODY/gi, '<$1body'); + sp = c.indexOf('', sp); + t.head = c.substring(0, sp + 1); + + ep = c.indexOf('\n'; + + t.head += ed.getParam('fullpage_default_doctype', ''); + t.head += '\n\n\n' + ed.getParam('fullpage_default_title', 'Untitled document') + '\n'; + + if (v = ed.getParam('fullpage_default_encoding')) + t.head += '\n'; + + if (v = ed.getParam('fullpage_default_font_family')) + st += 'font-family: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_font_size')) + st += 'font-size: ' + v + ';'; + + if (v = ed.getParam('fullpage_default_text_color')) + st += 'color: ' + v + ';'; + + t.head += '\n\n'; + t.foot = '\n\n'; + } + }, + + _getContent : function(ed, o) { + var t = this; + + if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) + o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot); + } + }); + + // Register plugin + tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/fullpage/fullpage.htm b/web/libs/tiny_mce/plugins/fullpage/fullpage.htm new file mode 100644 index 0000000..c32afaf --- /dev/null +++ b/web/libs/tiny_mce/plugins/fullpage/fullpage.htm @@ -0,0 +1,571 @@ + + + + {#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} + + + + + + + + + + +
+ + + + +
 
+
+
+ +
+ + +
+ {#fullpage_dlg.head_elements} + +
+
+
+ + +
+
+ + +
+
+
+ +
+
+ +
+ {#fullpage_dlg.meta_element} + + + + + + + + + + + + + + +
+ + +
+ +
+ {#fullpage_dlg.title_element} + + + + + + +
+ + +
+ +
+ {#fullpage_dlg.script_element} + + + +
+ +
+
+ + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+ +
+ +
+
+ + +
+ +
+ {#fullpage_dlg.style_element} + + + +
+ +
+
+ + + + + + + + + +
+
+ +
+ +
+
+ + +
+ +
+ {#fullpage_dlg.base_element} + + + + + + + + + + +
+ + +
+ + + +
+ {#fullpage_dlg.comment_element} + + + + +
+
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/fullpage/js/fullpage.js b/web/libs/tiny_mce/plugins/fullpage/js/fullpage.js new file mode 100644 index 0000000..a1bb719 --- /dev/null +++ b/web/libs/tiny_mce/plugins/fullpage/js/fullpage.js @@ -0,0 +1,471 @@ +/** + * fullpage.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 doc; + +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 defaultMediaTypes = + 'all=all,' + + 'screen=screen,' + + 'print=print,' + + 'tty=tty,' + + 'tv=tv,' + + 'projection=projection,' + + 'handheld=handheld,' + + 'braille=braille,' + + 'aural=aural'; + +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 init() { + var f = document.forms['fullpage'], el = f.elements, e, i, p, doctypes, encodings, mediaTypes, fonts, ed = tinyMCEPopup.editor, dom = tinyMCEPopup.dom, style; + + // Setup doctype select box + doctypes = ed.getParam("fullpage_doctypes", defaultDocTypes).split(','); + for (i=0; i 1) + addSelectValue(f, 'doctypes', p[0], p[1]); + } + + // Setup fonts select box + fonts = ed.getParam("fullpage_fonts", defaultFontNames).split(';'); + for (i=0; i 1) + addSelectValue(f, 'fontface', p[0], p[1]); + } + + // Setup fontsize select box + fonts = ed.getParam("fullpage_fontsizes", defaultFontSizes).split(','); + for (i=0; i 1) { + addSelectValue(f, 'element_style_media', p[0], p[1]); + addSelectValue(f, 'element_link_media', p[0], p[1]); + } + } + + // Setup encodings select box + encodings = ed.getParam("fullpage_encodings", defaultEncodings).split(','); + for (i=0; i 1) { + addSelectValue(f, 'docencoding', p[0], p[1]); + addSelectValue(f, 'element_script_charset', p[0], p[1]); + addSelectValue(f, 'element_link_charset', p[0], p[1]); + } + } + + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color'); + //document.getElementById('hover_color_pickcontainer').innerHTML = getColorPickerHTML('hover_color_pick','hover_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('link_href_pickcontainer').innerHTML = getBrowserHTML('link_href_browser','element_link_href','file','fullpage'); + document.getElementById('script_src_pickcontainer').innerHTML = getBrowserHTML('script_src_browser','element_script_src','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'; + + // Add iframe + dom.add(document.body, 'iframe', {id : 'documentIframe', src : 'javascript:""', style : {display : 'none'}}); + doc = dom.get('documentIframe').contentWindow.document; + h = tinyMCEPopup.getWindowArg('head_html'); + + // Preprocess the HTML disable scripts and urls + h = h.replace(/ + + + +
+ +
+ + + + + diff --git a/web/libs/tiny_mce/plugins/iespell/editor_plugin.js b/web/libs/tiny_mce/plugins/iespell/editor_plugin.js new file mode 100644 index 0000000..e9cba10 --- /dev/null +++ b/web/libs/tiny_mce/plugins/iespell/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/iespell/editor_plugin_src.js b/web/libs/tiny_mce/plugins/iespell/editor_plugin_src.js new file mode 100644 index 0000000..1b2bb98 --- /dev/null +++ b/web/libs/tiny_mce/plugins/iespell/editor_plugin_src.js @@ -0,0 +1,54 @@ +/** + * 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/web/libs/tiny_mce/plugins/inlinepopups/editor_plugin.js b/web/libs/tiny_mce/plugins/inlinepopups/editor_plugin.js new file mode 100644 index 0000000..07ea477 --- /dev/null +++ b/web/libs/tiny_mce/plugins/inlinepopups/editor_plugin.js @@ -0,0 +1 @@ +(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.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(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(r,j){var y=this,i,k="",q=y.editor,g=0,s=0,h,m,n,o,l,v,x;r=r||{};j=j||{};if(!r.inline){return y.parent(r,j)}if(!r.type){y.bookmark=q.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();r.width=parseInt(r.width||320);r.height=parseInt(r.height||240)+(tinymce.isIE?8:0);r.min_width=parseInt(r.min_width||150);r.min_height=parseInt(r.min_height||100);r.max_width=parseInt(r.max_width||2000);r.max_height=parseInt(r.max_height||2000);r.left=r.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(r.width/2)));r.top=r.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(r.height/2)));r.movable=r.resizable=true;j.mce_width=r.width;j.mce_height=r.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=r.auto_focus;y.features=r;y.params=j;y.onOpen.dispatch(y,r,j);if(r.type){k+=" mceModal";if(r.type){k+=" mce"+r.type.substring(0,1).toUpperCase()+r.type.substring(1)}r.resizable=false}if(r.statusbar){k+=" mceStatusbar"}if(r.resizable){k+=" mceResizable"}if(r.minimizable){k+=" mceMinimizable"}if(r.maximizable){k+=" mceMaximizable"}if(r.movable){k+=" mceMovable"}y._addAll(d.doc.body,["div",{id:i,"class":q.settings.inlinepopups_skin||"clearlooks2",style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},r.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_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:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!r.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;s+=d.get(i+"_top").clientHeight;s+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:r.top,left:r.left,width:r.width+g,height:r.height+s});x=r.url||r.file;if(x){if(tinymce.relaxedDomain){x+=(x.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}x=tinymce._addVer(x)}if(!r.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:r.width,height:r.height});d.setAttrib(i+"_ifr","src",x)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(r.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",r.content.replace("\n","
"))}n=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=y.windows[i];y.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){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 y._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return y._startDrag(i,t,u.className.substring(13))}}}}}});o=a.add(i,"click",function(f){var p=f.target;y.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":y.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":r.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});v=y.windows[i]={id:i,mousedown_func:n,click_func:o,element:new b(i,{blocker:1,container:q.getContainer()}),iframeElement:new b(i+"_ifr"),features:r,deltaWidth:g,deltaHeight:s};v.iframeElement.on("focus",function(){y.focus(i)});if(y.count==0&&y.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(y.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:y.zIndex-1}});d.show("mceModalBlocker")}else{d.setStyle("mceModalBlocker","z-index",y.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})}y.focus(i);y._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}y.count++;return v},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}},_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){i=m;f=m.zIndex}});if(i){h.focus(i.id)}}},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/web/libs/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/web/libs/tiny_mce/plugins/inlinepopups/editor_plugin_src.js new file mode 100644 index 0000000..e991683 --- /dev/null +++ b/web/libs/tiny_mce/plugins/inlinepopups/editor_plugin_src.js @@ -0,0 +1,635 @@ +/** + * 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; + + f = f || {}; + p = p || {}; + + // Run native windows + if (!f.inline) + return t.parent(f, p); + + // 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, 'class' : ed.settings.inlinepopups_skin || 'clearlooks2', 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'}], + ['span', {id : id + '_content'}], + ['div', {id : id + '_right', 'class' : 'mceRight'}] + ], + + ['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', '
')); + } + + // 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 == '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); + } + } + }); + + // 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 + } 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}); + + 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; + } + }, + + _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; + } + }); + + if (fw) + t.focus(fw.id); + } + }, + + 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/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif new file mode 100644 index 0000000000000000000000000000000000000000..94abd08763fffdaa0dd5c5afb470a97294f2b94d GIT binary patch literal 818 zcmV-21I_$LNk%w1VITk?0OkMyy?1uhZf>Is3*B5?sT&&Hqoc$;Jkrt6&k+&QHa5gV zL)l77I5;@fLqpYMWV+*+oUyj*ia`4%)P|vrSClaB!?EE7K$--(_XZ zOH0lO2-#9n!;Fik78a-!6wR}-yS%#378ch%J=j4(x@2V5*3{b0&C|=t(mFcQDJi8A z60bTsucxKY8XD3{O5bW~+gDfHP*AZbD54S)*gHGL#>A(co5`c08yg$Yzr7_TCCA9d zs-U0MFfhzxW4%d9s-K?K($LSkxy-Sz(7?Xdn3%wSe#oDmxL#e?qN1My0^C(q&nzt3 zjEvWFbJcly)5*uu)6w93eACp@*{!X#QBc56PRYv1%goBm&CA4*kj9vnyFxN00960|JK*lA^8LV00000EC2ui z03ZM$000O7fPaF6goTEOh>41ejE#5-A-Y zDMkRMg$FSdD>XGe76Lo4g8*}CUeivLI}B6rYIE)9Vh306CXDUKb=Dfx`}wT=u<6# zD$n)U&_b6YEgl901IUC4zyf`27&(S$$E;fb{Wx)wm4^u-0H zv*CdXLINn%=tH`+>C>qDxJcmTfS@*Z45S!AI|Ya#EOHOnP2`2|1;88Ju#tey5e=^) w9O1*fx%21Hn;(HtX3!cMK%gku&b_<$??7lEkM$&p`Sa-0r)T3DnWI1eJD_KQDgXcg literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif new file mode 100644 index 0000000000000000000000000000000000000000..e671094cb0eb210b756117f992cf5ca2caa698fd GIT binary patch literal 280 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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2a2ad454db194e428a7b9da40f62d5376a17428 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif new file mode 100644 index 0000000000000000000000000000000000000000..43a735f22c81d6d7d99c1ba9f034f38bfdd1a92b GIT binary patch literal 92 zcmZ?wbhEHb&D4o4FLHO9PR)B literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css b/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css new file mode 100644 index 0000000..5e6fd7d --- /dev/null +++ b/web/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css @@ -0,0 +1,90 @@ +/* Clearlooks 2 */ + +/* Reset */ +.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block} + +/* General */ +.clearlooks2 {position:absolute; direction:ltr} +.clearlooks2 .mceWrapper {position:static} +.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%} +.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)} +.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none} + +/* Top */ +.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px} +.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)} +.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)} +.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0} +.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold} +.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0} +.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px} +.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0} +.clearlooks2 .mceFocus .mceTop span {color:#FFF} + +/* Middle */ +.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0} +.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)} +.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0} +.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF} +.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)} + +/* Bottom */ +.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px} +.clearlooks2 .mceBottom {left:0; bottom:0; width:100%} +.clearlooks2 .mceBottom div {top:0} +.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px} +.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px} +.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0} +.clearlooks2 .mceBottom span {display:none} +.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px} +.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0} +.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px} +.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0} +.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px} + +/* Actions */ +.clearlooks2 a {width:29px; height:16px; top:3px;} +.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0} +.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0} +.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0} +.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0} +.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px} +.clearlooks2 .mceMovable .mceMove {display:block} +.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px} +.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px} +.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px} +.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} +.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px} +.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px} +.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px} + +/* Resize */ +.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px} +.clearlooks2 .mceResizable .mceResize {display:block} +.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none} +.clearlooks2 .mceMinimizable .mceMin {display:block} +.clearlooks2 .mceMaximizable .mceMax {display:block} +.clearlooks2 .mceMaximized .mceMed {display:block} +.clearlooks2 .mceMaximized .mceMax {display:none} +.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize} +.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize} +.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize} +.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;} +.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize} +.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize} +.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize} +.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize} + +/* Alert/Confirm */ +.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0} +.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px} +.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal} +.clearlooks2 a:hover {font-weight:bold;} +.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5} +.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px} +.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)} +.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px} +.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto} +.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)} \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/inlinepopups/template.htm b/web/libs/tiny_mce/plugins/inlinepopups/template.htm new file mode 100644 index 0000000..f9ec642 --- /dev/null +++ b/web/libs/tiny_mce/plugins/inlinepopups/template.htm @@ -0,0 +1,387 @@ + + + +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/web/libs/tiny_mce/plugins/insertdatetime/editor_plugin.js b/web/libs/tiny_mce/plugins/insertdatetime/editor_plugin.js new file mode 100644 index 0000000..938ce6b --- /dev/null +++ b/web/libs/tiny_mce/plugins/insertdatetime/editor_plugin.js @@ -0,0 +1 @@ +(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-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;fg[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/layer/editor_plugin_src.js b/web/libs/tiny_mce/plugins/layer/editor_plugin_src.js new file mode 100644 index 0000000..d5aa865 --- /dev/null +++ b/web/libs/tiny_mce/plugins/layer/editor_plugin_src.js @@ -0,0 +1,212 @@ +/** + * 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.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() { + if (tinymce.isIE) + ed.getDoc().execCommand('2D-Position', false, true); + }); + + 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|static)$/i.test(e.style.position)) { + if (s) + dom.addClass(e, 'mceItemVisualAid'); + else + dom.removeClass(e, 'mceItemVisualAid'); + } + }); + }, + + _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, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*')); + + ed.dom.add(ed.getBody(), 'div', { + style : { + position : 'absolute', + left : p.x, + top : (p.y > 20 ? p.y : 20), + width : 100, + height : 100 + }, + 'class' : 'mceItemVisualAid' + }, ed.selection.getContent() || ed.getLang('layer.content')); + }, + + _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'); + } 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.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/web/libs/tiny_mce/plugins/legacyoutput/editor_plugin.js b/web/libs/tiny_mce/plugins/legacyoutput/editor_plugin.js new file mode 100644 index 0000000..29d43c5 --- /dev/null +++ b/web/libs/tiny_mce/plugins/legacyoutput/editor_plugin.js @@ -0,0 +1 @@ +(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.serializer;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:"full"}},bold:{inline:"b"},italic:{inline:"i"},underline:{inline:"u"},strikethrough:{inline:"strike"},fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});d._setup();a.each("b,i,u,strike".split(","),function(f){var g=d.rules[f];if(!g){d.addRules(f)}});if(!d.rules.font){d.addRules("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.rules[f],g;if(h){a.each(h.attribs,function(j,i){if(i.name=="align"){g=true;return false}});if(!g){h.attribs.push({name:"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/web/libs/tiny_mce/plugins/legacyoutput/editor_plugin_src.js b/web/libs/tiny_mce/plugins/legacyoutput/editor_plugin_src.js new file mode 100644 index 0000000..e852da1 --- /dev/null +++ b/web/libs/tiny_mce/plugins/legacyoutput/editor_plugin_src.js @@ -0,0 +1,136 @@ +/** + * 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), + serializer = editor.serializer; + + // 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 : 'full'}}, + + // Change the basic formatting elements to use deprecated element types + bold : {inline : 'b'}, + italic : {inline : 'i'}, + underline : {inline : 'u'}, + strikethrough : {inline : 'strike'}, + + // 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', styles : {color : '%value'}}, + hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} + }); + + // Force parsing of the serializer rules + serializer._setup(); + + // Check that deprecated elements are allowed if not add them + tinymce.each('b,i,u,strike'.split(','), function(name) { + var rule = serializer.rules[name]; + + if (!rule) + serializer.addRules(name); + }); + + // Add font element if it's missing + if (!serializer.rules["font"]) + serializer.addRules("font[face|size|color|style]"); + + // Add the missing and depreacted align attribute for the serialization engine + tinymce.each(alignElements.split(','), function(name) { + var rule = serializer.rules[name], found; + + if (rule) { + tinymce.each(rule.attribs, function(name, attr) { + if (attr.name == 'align') { + found = true; + return false; + } + }); + + if (!found) + rule.attribs.push({name : '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); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/media/css/content.css b/web/libs/tiny_mce/plugins/media/css/content.css new file mode 100644 index 0000000..1bf6a75 --- /dev/null +++ b/web/libs/tiny_mce/plugins/media/css/content.css @@ -0,0 +1,6 @@ +.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {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);} diff --git a/web/libs/tiny_mce/plugins/media/css/media.css b/web/libs/tiny_mce/plugins/media/css/media.css new file mode 100644 index 0000000..2d08794 --- /dev/null +++ b/web/libs/tiny_mce/plugins/media/css/media.css @@ -0,0 +1,16 @@ +#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 { width: 240px } +#width, #height { width: 40px } +#src, #media_type { width: 250px } +#class { width: 120px } +#prev { margin: 0; border: 1px solid black; width: 380px; height: 230px; overflow: auto } +.panel_wrapper div.current { height: 390px; 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 } diff --git a/web/libs/tiny_mce/plugins/media/editor_plugin.js b/web/libs/tiny_mce/plugins/media/editor_plugin.js new file mode 100644 index 0000000..4bbe367 --- /dev/null +++ b/web/libs/tiny_mce/plugins/media/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.MediaPlugin",{init:function(b,c){var e=this;e.editor=b;e.url=c;function f(g){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(g.className)}b.onPreInit.add(function(){b.serializer.addRules("param[name|value|_mce_value]")});b.addCommand("mceMedia",function(){b.windowManager.open({file:c+"/media.htm",width:430+parseInt(b.getLang("media.delta_width",0)),height:470+parseInt(b.getLang("media.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("media",{title:"media.desc",cmd:"mceMedia"});b.onNodeChange.add(function(h,g,i){g.setActive("media",i.nodeName=="IMG"&&f(i))});b.onInit.add(function(){var g={mceItemFlash:"flash",mceItemShockWave:"shockwave",mceItemWindowsMedia:"windowsmedia",mceItemQuickTime:"quicktime",mceItemRealMedia:"realmedia"};b.selection.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.selection.onBeforeSetContent.add(e._objectsToSpans,e);if(b.settings.content_css!==false){b.dom.loadCSS(c+"/css/content.css")}if(b.theme&&b.theme.onResolveName){b.theme.onResolveName.add(function(h,i){if(i.name=="img"){a(g,function(l,j){if(b.dom.hasClass(i.node,j)){i.name=l;i.title=b.dom.getAttrib(i.node,"title");return false}})}})}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(i,h,j){if(j.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(j.className)){h.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});b.onBeforeSetContent.add(e._objectsToSpans,e);b.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.onPreProcess.add(function(g,i){var h=g.dom;if(i.set){e._spansToImgs(i.node);a(h.select("IMG",i.node),function(k){var j;if(f(k)){j=e._parse(k.title);h.setAttrib(k,"width",h.getAttrib(k,"width",j.width||100));h.setAttrib(k,"height",h.getAttrib(k,"height",j.height||100))}})}if(i.get){a(h.select("IMG",i.node),function(m){var l,j,k;if(g.getParam("media_use_script")){if(f(m)){m.className=m.className.replace(/mceItem/g,"mceTemp")}return}switch(m.className){case"mceItemFlash":l="d27cdb6e-ae6d-11cf-96b8-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="application/x-shockwave-flash";break;case"mceItemShockWave":l="166b1bca-3f9c-11cf-8075-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0";k="application/x-director";break;case"mceItemWindowsMedia":l=g.getParam("media_wmp6_compatible")?"05589fa1-c356-11ce-bf01-00aa0055595a":"6bf52a52-394a-11d3-b153-00c04f79faa6";j="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701";k="application/x-mplayer2";break;case"mceItemQuickTime":l="02bf25d5-8c17-4b23-bc80-d3488abddc6b";j="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0";k="video/quicktime";break;case"mceItemRealMedia":l="cfcdaa03-8be4-11cf-b84b-0020afbbccfa";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="audio/x-pn-realaudio-plugin";break}if(l){h.replace(e._buildObj({classid:l,codebase:j,type:k},m),m)}})}});b.onPostProcess.add(function(g,h){h.content=h.content.replace(/_mce_value=/g,"value=")});function d(g,h){h=new RegExp(h+'="([^"]+)"',"g").exec(g);return h?b.dom.decode(h[1]):""}b.onPostProcess.add(function(g,h){if(g.getParam("media_use_script")){h.content=h.content.replace(/]+>/g,function(j){var i=d(j,"class");if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(i)){at=e._parse(d(j,"title"));at.width=d(j,"width");at.height=d(j,"height");j=''; + } + + return im; + }); + } + }); + }, + + getInfo : function() { + return { + longname : 'Media', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + _objectsToSpans : function(ed, o) { + var t = this, h = o.content; + + h = h.replace(/]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) { + var o = t._parse(c); + + return '' + }); + + h = h.replace(/]*)>/gi, ''); + h = h.replace(/]*)\/?>/gi, ''); + h = h.replace(/]*)>/gi, ''); + h = h.replace(/<\/(object)([^>]*)>/gi, ''); + h = h.replace(/<\/embed>/gi, ''); + h = h.replace(/]*)>/gi, function(a, b) {return ''}); + h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam">'); + + o.content = h; + }, + + _buildObj : function(o, n) { + var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title), stc; + + stc = ed.getParam('media_strict', true) && o.type == 'application/x-shockwave-flash'; + + p.width = o.width = dom.getAttrib(n, 'width') || 100; + p.height = o.height = dom.getAttrib(n, 'height') || 100; + + if (p.src) + p.src = ed.convertURL(p.src, 'src', n); + + if (stc) { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + type : 'application/x-shockwave-flash', + data : p.src, + style : dom.getAttrib(n, 'style'), + width : o.width, + height : o.height + }); + } else { + ob = dom.create('span', { + id : p.id, + _mce_name : 'object', + classid : "clsid:" + o.classid, + style : dom.getAttrib(n, 'style'), + codebase : o.codebase, + width : o.width, + height : o.height + }); + } + + each (p, function(v, k) { + if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) { + // Use url instead of src in IE for Windows media + if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url) + k = 'url'; + + if (v) + dom.add(ob, 'span', {_mce_name : 'param', name : k, '_mce_value' : v}); + } + }); + + if (!stc) + dom.add(ob, 'span', tinymce.extend({_mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p)); + + return ob; + }, + + _spansToImgs : function(p) { + var t = this, dom = t.editor.dom, im, ci; + + each(dom.select('span', p), function(n) { + // Convert object into image + if (dom.getAttrib(n, 'class') == 'mceItemObject') { + ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, ''); + + switch (ci) { + case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'clsid:166b1bca-3f9c-11cf-8075-444553540000': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6': + case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95': + case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + + return; + } + + // Convert embed into image + if (dom.getAttrib(n, 'class') == 'mceItemEmbed') { + switch (dom.getAttrib(n, 'type')) { + case 'application/x-shockwave-flash': + dom.replace(t._createImg('mceItemFlash', n), n); + break; + + case 'application/x-director': + dom.replace(t._createImg('mceItemShockWave', n), n); + break; + + case 'application/x-mplayer2': + dom.replace(t._createImg('mceItemWindowsMedia', n), n); + break; + + case 'video/quicktime': + dom.replace(t._createImg('mceItemQuickTime', n), n); + break; + + case 'audio/x-pn-realaudio-plugin': + dom.replace(t._createImg('mceItemRealMedia', n), n); + break; + + default: + dom.replace(t._createImg('mceItemFlash', n), n); + } + } + }); + }, + + _createImg : function(cl, n) { + var im, dom = this.editor.dom, pa = {}, ti = '', args; + + args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality', 'data']; + + // Create image + im = dom.create('img', { + src : this.url + '/img/trans.gif', + width : dom.getAttrib(n, 'width') || 100, + height : dom.getAttrib(n, 'height') || 100, + style : dom.getAttrib(n, 'style'), + 'class' : cl + }); + + // Setup base parameters + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v) + pa[na] = v; + }); + + // Add optional parameters + each(dom.select('span', n), function(n) { + if (dom.hasClass(n, 'mceItemParam')) + pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_mce_value'); + }); + + // Use src not movie + if (pa.movie) { + pa.src = pa.movie; + delete pa.movie; + } + + // No src try data + if (!pa.src) { + pa.src = pa.data; + delete pa.data; + } + + // Merge with embed args + n = dom.select('.mceItemEmbed', n)[0]; + if (n) { + each(args, function(na) { + var v = dom.getAttrib(n, na); + + if (v && !pa[na]) + pa[na] = v; + }); + } + + delete pa.width; + delete pa.height; + + im.title = this._serialize(pa); + + return im; + }, + + _parse : function(s) { + return tinymce.util.JSON.parse('{' + s + '}'); + }, + + _serialize : function(o) { + return tinymce.util.JSON.serialize(o).replace(/[{}]/g, ''); + } + }); + + // Register plugin + tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/media/img/flash.gif b/web/libs/tiny_mce/plugins/media/img/flash.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb192e6ceda8d19ad8e7d08dd1cfde0aa72ead2a GIT binary patch literal 241 zcmVOzlLa+Za}7>m0&NpCfJ0FQc3~F7DE)S%o1)Qi1n@vxX46qnD4hRS-NE*Pw!4UvE=#^N( literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/media/img/flv_player.swf b/web/libs/tiny_mce/plugins/media/img/flv_player.swf new file mode 100644 index 0000000000000000000000000000000000000000..042c2ab969e98a6fdbe08848c4a73bd2c41de906 GIT binary patch literal 11668 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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/media/img/quicktime.gif b/web/libs/tiny_mce/plugins/media/img/quicktime.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b0499145b16138249f653a1a3f2c80230fb292c GIT binary patch literal 303 zcmV+~0nq+ONk%w1VGsZi0K^{vH>m7Qv+~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$^=JX7bb<~J01ZTA{q@86#&8&6~H`Ss{{?p%K!-p%L6P2TpFYz90?pD06UU# BbnE~C literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/media/img/realmedia.gif b/web/libs/tiny_mce/plugins/media/img/realmedia.gif new file mode 100644 index 0000000000000000000000000000000000000000..fdfe0b9ac05869ae845fdd828eaad97cc0c69dbc GIT binary patch literal 439 zcmV;o0Z9HwNk%w1VI=?(0K^{vQcz8xz}f&njBB06v9GQ`Jv%NdDHCI&z`wqZw$(Lw zuFTBL!Pe#<92tv>h)9OE1Xh}vnVEHSaeb-GByg#tqM_B*)YRkdSdqTuipLaF8n=^^LJP4|1^gGRdo_Rl+a*grZQ1hw@Zo1ikN$oB{QbRq&z?QIckdq1aE3;Fq_(WV>Kc7gjQtQh+9OrtFhn-)LUqD<|MOIl_!(Ed#pPRE;S)g;ew3>pd zn`Wa(lc2DGa)peFw3f88dp-|`@*)AXj;@(8hwDr|7Sxsp;&YxjN*Y{PBB!TIU|!b7Zgv0OaG5)&Kwi literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/media/img/trans.gif b/web/libs/tiny_mce/plugins/media/img/trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/media/img/windowsmedia.gif b/web/libs/tiny_mce/plugins/media/img/windowsmedia.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab50f2d887a0843b116ef598e5a005e5601d18d0 GIT binary patch literal 415 zcmV;Q0bu?|Nk%w1VGjTg0M$PL`E^qkEu+z?1&N?x_*pRg{rx~kg!#|I<>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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/media/js/embed.js b/web/libs/tiny_mce/plugins/media/js/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/web/libs/tiny_mce/plugins/media/js/embed.js @@ -0,0 +1,73 @@ +/** + * 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 init() { + var pl = "", f, val; + var type = "flash", fe, i; + + ed = tinyMCEPopup.editor; + + tinyMCEPopup.resizeToInnerSize(); + f = document.forms[0] + + fe = ed.selection.getNode(); + if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + pl = fe.title; + + switch (ed.dom.getAttrib(fe, 'class')) { + case 'mceItemFlash': + type = 'flash'; + break; + + case 'mceItemFlashVideo': + type = 'flv'; + break; + + case 'mceItemShockWave': + type = 'shockwave'; + break; + + case 'mceItemWindowsMedia': + type = 'wmp'; + break; + + case 'mceItemQuickTime': + type = 'qt'; + break; + + case 'mceItemRealMedia': + type = 'rmp'; + break; + } + + document.forms[0].insert.value = ed.getLang('update', 'Insert', true); + } + + document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); + document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var html = getMediaListHTML('medialist','src','media','media'); + if (html == "") + document.getElementById("linklistrow").style.display = 'none'; + else + document.getElementById("linklistcontainer").innerHTML = html; + + // Resize some elements + if (isVisible('filebrowser')) + document.getElementById('src').style.width = '230px'; + + // Setup form + if (pl != "") { + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + switch (type) { + case "flash": + setBool(pl, 'flash', 'play'); + setBool(pl, 'flash', 'loop'); + setBool(pl, 'flash', 'menu'); + setBool(pl, 'flash', 'swliveconnect'); + setStr(pl, 'flash', 'quality'); + setStr(pl, 'flash', 'scale'); + setStr(pl, 'flash', 'salign'); + setStr(pl, 'flash', 'wmode'); + setStr(pl, 'flash', 'base'); + setStr(pl, 'flash', 'flashvars'); + break; + + case "qt": + setBool(pl, 'qt', 'loop'); + setBool(pl, 'qt', 'autoplay'); + setBool(pl, 'qt', 'cache'); + setBool(pl, 'qt', 'controller'); + setBool(pl, 'qt', 'correction'); + setBool(pl, 'qt', 'enablejavascript'); + setBool(pl, 'qt', 'kioskmode'); + setBool(pl, 'qt', 'autohref'); + setBool(pl, 'qt', 'playeveryframe'); + setBool(pl, 'qt', 'tarsetcache'); + setStr(pl, 'qt', 'scale'); + setStr(pl, 'qt', 'starttime'); + setStr(pl, 'qt', 'endtime'); + setStr(pl, 'qt', 'tarset'); + setStr(pl, 'qt', 'qtsrcchokespeed'); + setStr(pl, 'qt', 'volume'); + setStr(pl, 'qt', 'qtsrc'); + break; + + case "shockwave": + setBool(pl, 'shockwave', 'sound'); + setBool(pl, 'shockwave', 'progress'); + setBool(pl, 'shockwave', 'autostart'); + setBool(pl, 'shockwave', 'swliveconnect'); + setStr(pl, 'shockwave', 'swvolume'); + setStr(pl, 'shockwave', 'swstretchstyle'); + setStr(pl, 'shockwave', 'swstretchhalign'); + setStr(pl, 'shockwave', 'swstretchvalign'); + break; + + case "wmp": + setBool(pl, 'wmp', 'autostart'); + setBool(pl, 'wmp', 'enabled'); + setBool(pl, 'wmp', 'enablecontextmenu'); + setBool(pl, 'wmp', 'fullscreen'); + setBool(pl, 'wmp', 'invokeurls'); + setBool(pl, 'wmp', 'mute'); + setBool(pl, 'wmp', 'stretchtofit'); + setBool(pl, 'wmp', 'windowlessvideo'); + setStr(pl, 'wmp', 'balance'); + setStr(pl, 'wmp', 'baseurl'); + setStr(pl, 'wmp', 'captioningid'); + setStr(pl, 'wmp', 'currentmarker'); + setStr(pl, 'wmp', 'currentposition'); + setStr(pl, 'wmp', 'defaultframe'); + setStr(pl, 'wmp', 'playcount'); + setStr(pl, 'wmp', 'rate'); + setStr(pl, 'wmp', 'uimode'); + setStr(pl, 'wmp', 'volume'); + break; + + case "rmp": + setBool(pl, 'rmp', 'autostart'); + setBool(pl, 'rmp', 'loop'); + setBool(pl, 'rmp', 'autogotourl'); + setBool(pl, 'rmp', 'center'); + setBool(pl, 'rmp', 'imagestatus'); + setBool(pl, 'rmp', 'maintainaspect'); + setBool(pl, 'rmp', 'nojava'); + setBool(pl, 'rmp', 'prefetch'); + setBool(pl, 'rmp', 'shuffle'); + setStr(pl, 'rmp', 'console'); + setStr(pl, 'rmp', 'controls'); + setStr(pl, 'rmp', 'numloop'); + setStr(pl, 'rmp', 'scriptcallbacks'); + break; + } + + setStr(pl, null, 'src'); + setStr(pl, null, 'id'); + setStr(pl, null, 'name'); + setStr(pl, null, 'vspace'); + setStr(pl, null, 'hspace'); + setStr(pl, null, 'bgcolor'); + setStr(pl, null, 'align'); + setStr(pl, null, 'width'); + setStr(pl, null, 'height'); + + if ((val = ed.dom.getAttrib(fe, "width")) != "") + pl.width = f.width.value = val; + + if ((val = ed.dom.getAttrib(fe, "height")) != "") + pl.height = f.height.value = val; + + oldWidth = pl.width ? parseInt(pl.width) : 0; + oldHeight = pl.height ? parseInt(pl.height) : 0; + } else + oldWidth = oldHeight = 0; + + selectByValue(f, 'media_type', type); + changedType(type); + updateColor('bgcolor_pick', 'bgcolor'); + + TinyMCE_EditableSelects.init(); + generatePreview(); +} + +function insertMedia() { + var fe, f = document.forms[0], h; + + tinyMCEPopup.restoreSelection(); + + if (!AutoValidator.validate(f)) { + tinyMCEPopup.alert(ed.getLang('invalid_data')); + return false; + } + + f.width.value = f.width.value == "" ? 100 : f.width.value; + f.height.value = f.height.value == "" ? 100 : f.height.value; + + fe = ed.selection.getNode(); + if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) { + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + fe.className = "mceItemFlash"; + break; + + case "flv": + fe.className = "mceItemFlashVideo"; + break; + + case "shockwave": + fe.className = "mceItemShockWave"; + break; + + case "qt": + fe.className = "mceItemQuickTime"; + break; + + case "wmp": + fe.className = "mceItemWindowsMedia"; + break; + + case "rmp": + fe.className = "mceItemRealMedia"; + break; + } + + if (fe.width != f.width.value || fe.height != f.height.value) + ed.execCommand('mceRepaint'); + + fe.title = serializeParameters(); + fe.width = f.width.value; + fe.height = f.height.value; + fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : ''); + fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : ''); + fe.align = f.align.options[f.align.selectedIndex].value; + } else { + h = ' 0) { + var html = ""; + + html += ''; + + return html; + } + + return ""; +} + +function getType(v) { + var fo, i, c, el, x, f = document.forms[0]; + + fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';'); + + // YouTube + if (v.match(/watch\?v=(.+)(.*)/)) { + f.width.value = '425'; + f.height.value = '350'; + f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1]; + return 'flash'; + } + + // Google video + if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) { + f.width.value = '425'; + f.height.value = '326'; + f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en'; + return 'flash'; + } + + for (i=0; i 0 ? s.substring(0, s.length - 1) : s; + + return s; +} + +function setBool(pl, p, n) { + if (typeof(pl[n]) == "undefined") + return; + + document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false'; +} + +function setStr(pl, p, n) { + var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n]; + + if (typeof(pl[n]) == "undefined") + return; + + if (e.type == "text") + e.value = pl[n]; + else + selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]); +} + +function getBool(p, n, d, tv, fv) { + var v = document.forms[0].elements[p + "_" + n].checked; + + tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; + fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; + + return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',"); +} + +function getStr(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + if (n == 'src') + v = tinyMCEPopup.editor.convertURL(v, 'src', null); + + return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',"); +} + +function getInt(p, n, d) { + var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; + var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; + + return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ","); +} + +function jsEncode(s) { + s = s.replace(new RegExp('\\\\', 'g'), '\\\\'); + s = s.replace(new RegExp('"', 'g'), '\\"'); + s = s.replace(new RegExp("'", 'g'), "\\'"); + + return s; +} + +function generatePreview(c) { + var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh; + + p.innerHTML = ''; + + nw = parseInt(f.width.value); + nh = parseInt(f.height.value); + + if (f.width.value != "" && f.height.value != "") { + if (f.constrain.checked) { + if (c == 'width' && oldWidth != 0) { + wp = nw / oldWidth; + nh = Math.round(wp * nh); + f.height.value = nh; + } else if (c == 'height' && oldHeight != 0) { + hp = nh / oldHeight; + nw = Math.round(hp * nw); + f.width.value = nw; + } + } + } + + if (f.width.value != "") + oldWidth = nw; + + if (f.height.value != "") + oldHeight = nh; + + // After constrain + pl = serializeParameters(); + + switch (f.media_type.options[f.media_type.selectedIndex].value) { + case "flash": + cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; + type = 'application/x-shockwave-flash'; + break; + + case "shockwave": + cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'; + codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; + type = 'application/x-director'; + break; + + case "qt": + cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; + codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; + type = 'video/quicktime'; + break; + + case "wmp": + cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'application/x-mplayer2'; + break; + + case "rmp": + cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; + codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; + type = 'audio/x-pn-realaudio-plugin'; + break; + } + + if (pl == '') { + p.innerHTML = ''; + return; + } + + pl = tinyMCEPopup.editor.plugins.media._parse(pl); + + if (!pl.src) { + p.innerHTML = ''; + return; + } + + pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src); + pl.width = !pl.width ? 100 : pl.width; + pl.height = !pl.height ? 100 : pl.height; + pl.id = !pl.id ? 'obj' : pl.id; + pl.name = !pl.name ? 'eobj' : pl.name; + pl.align = !pl.align ? '' : pl.align; + + // Avoid annoying warning about insecure items + if (!tinymce.isIE || document.location.protocol != 'https:') { + h += ''; + + for (n in pl) { + h += ''; + + // Add extra url parameter if it's an absolute URL + if (n == 'src' && pl[n].indexOf('://') != -1) + h += ''; + } + } + + h += ' + + + {#media_dlg.title} + + + + + + + + + +
+ + +
+
+
+ {#media_dlg.general} + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
 
+
+ + + + + + +
x   
+
+
+ +
+ {#media_dlg.preview} + +
+
+ +
+
+ {#media_dlg.advanced} + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
 
+
+
+ +
+ {#media_dlg.flash_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + + + + + + + +
+
+ +
+ {#media_dlg.flv_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+ +
+ {#media_dlg.qt_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+  
+ + + + + +
 
+
+
+ +
+ {#media_dlg.wmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+ +
+ {#media_dlg.rmp_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+   +
+
+ +
+ {#media_dlg.shockwave_options} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/nonbreaking/editor_plugin.js b/web/libs/tiny_mce/plugins/nonbreaking/editor_plugin.js new file mode 100644 index 0000000..eb40a6a --- /dev/null +++ b/web/libs/tiny_mce/plugins/nonbreaking/editor_plugin.js @@ -0,0 +1 @@ +(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(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},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/web/libs/tiny_mce/plugins/nonbreaking/editor_plugin_src.js b/web/libs/tiny_mce/plugins/nonbreaking/editor_plugin_src.js new file mode 100644 index 0000000..ca83ee2 --- /dev/null +++ b/web/libs/tiny_mce/plugins/nonbreaking/editor_plugin_src.js @@ -0,0 +1,53 @@ +/** + * 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 (tinymce.isIE && e.keyCode == 9) { + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + ed.execCommand('mceNonBreaking'); + tinymce.dom.Event.cancel(e); + } + }); + } + }, + + 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/web/libs/tiny_mce/plugins/noneditable/editor_plugin.js b/web/libs/tiny_mce/plugins/noneditable/editor_plugin.js new file mode 100644 index 0000000..9945cd8 --- /dev/null +++ b/web/libs/tiny_mce/plugins/noneditable/editor_plugin.js @@ -0,0 +1 @@ +(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},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}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/noneditable/editor_plugin_src.js b/web/libs/tiny_mce/plugins/noneditable/editor_plugin_src.js new file mode 100644 index 0000000..656c971 --- /dev/null +++ b/web/libs/tiny_mce/plugins/noneditable/editor_plugin_src.js @@ -0,0 +1,90 @@ +/** + * 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; + + tinymce.create('tinymce.plugins.NonEditablePlugin', { + init : function(ed, url) { + var t = this, editClass, nonEditClass; + + t.editor = ed; + editClass = ed.getParam("noneditable_editable_class", "mceEditable"); + nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable"); + + ed.onNodeChange.addToTop(function(ed, cm, n) { + var sc, ec; + + // Block if start or end is inside a non editable element + sc = ed.dom.getParent(ed.selection.getStart(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + ec = ed.dom.getParent(ed.selection.getEnd(), function(n) { + return ed.dom.hasClass(n, nonEditClass); + }); + + // Block or unblock + if (sc || ec) { + t._setDisabled(1); + return false; + } else + t._setDisabled(0); + }); + }, + + 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 + }; + }, + + _block : function(ed, e) { + var k = e.keyCode; + + // Don't block arrow keys, pg up/down, and F1-F12 + if ((k > 32 && k < 41) || (k > 111 && k < 124)) + return; + + return Event.cancel(e); + }, + + _setDisabled : function(s) { + var t = this, ed = t.editor; + + tinymce.each(ed.controlManager.controls, function(c) { + c.setDisabled(s); + }); + + if (s !== t.disabled) { + if (s) { + ed.onKeyDown.addToTop(t._block); + ed.onKeyPress.addToTop(t._block); + ed.onKeyUp.addToTop(t._block); + ed.onPaste.addToTop(t._block); + } else { + ed.onKeyDown.remove(t._block); + ed.onKeyPress.remove(t._block); + ed.onKeyUp.remove(t._block); + ed.onPaste.remove(t._block); + } + + t.disabled = s; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/pagebreak/css/content.css b/web/libs/tiny_mce/plugins/pagebreak/css/content.css new file mode 100644 index 0000000..c949d58 --- /dev/null +++ b/web/libs/tiny_mce/plugins/pagebreak/css/content.css @@ -0,0 +1 @@ +.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/web/libs/tiny_mce/plugins/pagebreak/editor_plugin.js b/web/libs/tiny_mce/plugins/pagebreak/editor_plugin.js new file mode 100644 index 0000000..a212f69 --- /dev/null +++ b/web/libs/tiny_mce/plugins/pagebreak/editor_plugin.js @@ -0,0 +1 @@ +(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.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}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/web/libs/tiny_mce/plugins/pagebreak/editor_plugin_src.js b/web/libs/tiny_mce/plugins/pagebreak/editor_plugin_src.js new file mode 100644 index 0000000..4e1eb0a --- /dev/null +++ b/web/libs/tiny_mce/plugins/pagebreak/editor_plugin_src.js @@ -0,0 +1,77 @@ +/** + * 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.settings.content_css !== false) + ed.dom.loadCSS(url + "/css/content.css"); + + 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/web/libs/tiny_mce/plugins/pagebreak/img/pagebreak.gif b/web/libs/tiny_mce/plugins/pagebreak/img/pagebreak.gif new file mode 100644 index 0000000000000000000000000000000000000000..acdf4085f3068c4c0a1d6855f4b80dae8bac3068 GIT binary patch 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&_ literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/pagebreak/img/trans.gif b/web/libs/tiny_mce/plugins/pagebreak/img/trans.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/paste/editor_plugin.js b/web/libs/tiny_mce/plugins/paste/editor_plugin.js new file mode 100644 index 0000000..3785ab2 --- /dev/null +++ b/web/libs/tiny_mce/plugins/paste/editor_plugin.js @@ -0,0 +1 @@ +(function(){var c=tinymce.each,d=null,a={paste_auto_cleanup_on_paste: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_text_use_dialog:false,paste_text_sticky:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(e,f){return e.getParam(f,a[f])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(e,f){var g=this;g.editor=e;g.url=f;g.onPreProcess=new tinymce.util.Dispatcher(g);g.onPostProcess=new tinymce.util.Dispatcher(g);g.onPreProcess.add(g._preProcess);g.onPostProcess.add(g._postProcess);g.onPreProcess.add(function(j,k){e.execCallback("paste_preprocess",j,k)});g.onPostProcess.add(function(j,k){e.execCallback("paste_postprocess",j,k)});e.pasteAsPlainText=false;function i(l,j){var k=e.dom;g.onPreProcess.dispatch(g,l);l.node=k.create("div",0,l.content);g.onPostProcess.dispatch(g,l);l.content=e.serializer.serialize(l.node,{getInner:1});if((!j)&&(e.pasteAsPlainText)){g._insertPlainText(e,k,l.content);if(!b(e,"paste_text_sticky")){e.pasteAsPlainText=false;e.controlManager.setActive("pastetext",false)}}else{if(/<(p|h[1-6]|ul|ol)/.test(l.content)){g._insertBlockContent(e,k,l.content)}else{g._insert(l.content)}}}e.addCommand("mceInsertClipboardContent",function(j,k){i(k,true)});if(!b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(k,j){var l=tinymce.util.Cookie;e.pasteAsPlainText=!e.pasteAsPlainText;e.controlManager.setActive("pastetext",e.pasteAsPlainText);if((e.pasteAsPlainText)&&(!l.get("tinymcePasteText"))){if(b(e,"paste_text_sticky")){e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}else{e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}if(!b(e,"paste_text_notifyalways")){l.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}e.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});e.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function h(s){var m,q,k,l=e.selection,p=e.dom,r=e.getBody(),j;if(e.pasteAsPlainText&&(s.clipboardData||p.doc.dataTransfer)){s.preventDefault();i({content:(s.clipboardData||p.doc.dataTransfer).getData("Text")},true);return}if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},'\uFEFF
');if(r!=e.getDoc().body){j=p.getPos(e.selection.getStart(),r).y}else{j=r.scrollTop}p.setStyles(m,{position:"absolute",left:-10000,top:j,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){k=p.doc.body.createTextRange();k.moveToElementText(m);k.execCommand("Paste");p.remove(m);if(m.innerHTML==="\uFEFF"){e.execCommand("mcePasteWord");s.preventDefault();return}i({content:m.innerHTML});return tinymce.dom.Event.cancel(s)}else{function o(n){n.preventDefault()}p.bind(e.getDoc(),"mousedown",o);p.bind(e.getDoc(),"keydown",o);q=e.selection.getRng();m=m.firstChild;k=e.getDoc().createRange();k.setStart(m,0);k.setEnd(m,1);l.setRng(k);window.setTimeout(function(){var t="",n=p.select("div.mcePaste");c(n,function(v){var u=v.firstChild;if(u&&u.nodeName=="DIV"&&u.style.marginTop&&u.style.backgroundColor){p.remove(u,1)}c(p.select("div.mcePaste",v),function(w){p.remove(w,1)});c(p.select("span.Apple-style-span",v),function(w){p.remove(w,1)});c(p.select("br[_mce_bogus]",v),function(w){p.remove(w)});t+=v.innerHTML});c(n,function(u){p.remove(u)});if(q){l.setRng(q)}i({content:t});p.unbind(e.getDoc(),"mousedown",o);p.unbind(e.getDoc(),"keydown",o)},0)}}if(b(e,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){e.onKeyDown.add(function(j,k){if(((tinymce.isMac?k.metaKey:k.ctrlKey)&&k.keyCode==86)||(k.shiftKey&&k.keyCode==45)){h(k)}})}else{e.onPaste.addToTop(function(j,k){return h(k)})}}if(b(e,"paste_block_drop")){e.onInit.add(function(){e.dom.bind(e.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(j){j.preventDefault();j.stopPropagation();return false})})}g._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(i,f){var l=this.editor,k=f.content,q=tinymce.grep,p=tinymce.explode,g=tinymce.trim,m,j;function e(h){c(h,function(o){if(o.constructor==RegExp){k=k.replace(o,"")}else{k=k.replace(o[0],o[1])}})}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(k)||f.wordContent){f.wordContent=true;e([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(l,"paste_convert_headers_to_strong")){k=k.replace(/

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

$1

")}if(b(l,"paste_convert_middot_lists")){e([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"]])}e([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{m=k.length;k=k.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(m!=k.length);if(b(l,"paste_retain_style_properties").replace(/^none$/i,"").length==0){k=k.replace(/<\/?span[^>]*>/gi,"")}else{e([[/([\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(u,h,t){var v=[],o=0,r=p(g(t).replace(/"/gi,"'"),";");c(r,function(s){var w,y,z=p(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":v[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":v[o++]="text-align:"+y;return;case"vert-align":v[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":v[o++]="color:"+y;return;case"mso-background":case"mso-highlight":v[o++]="background:"+y;return;case"mso-default-height":v[o++]="min-height:"+x(y);return;case"mso-default-width":v[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":v[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){v[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){v[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}v[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+v.join(";")+'"'}else{return h}}]])}}if(b(l,"paste_convert_headers_to_strong")){e([[/]*>/gi,"

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

"]])}j=b(l,"paste_strip_class_attributes");if(j!=="none"){function n(r,o){if(j==="all"){return""}var h=q(p(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(s){return(/^(?!mso)/i.test(s))});return h.length?' class="'+h.join(" ")+'"':""}k=k.replace(/ class="([^"]+)"/gi,n);k=k.replace(/ class=(\w+)/gi,n)}if(b(l,"paste_remove_spans")){k=k.replace(/<\/?span[^>]*>/gi,"")}f.content=k},_postProcess:function(h,j){var g=this,f=g.editor,i=f.dom,e;if(j.wordContent){c(i.select("a",j.node),function(k){if(!k.href||k.href.indexOf("#_Toc")!=-1){i.remove(k,1)}});if(b(f,"paste_convert_middot_lists")){g._convertLists(h,j)}e=b(f,"paste_retain_style_properties");if((tinymce.is(e,"string"))&&(e!=="all")&&(e!=="*")){e=tinymce.explode(e.replace(/^none$/i,""));c(i.select("*",j.node),function(n){var o={},l=0,m,p,k;if(e){for(m=0;m0){i.setStyles(n,o)}else{if(n.nodeName=="SPAN"&&!n.className){i.remove(n,true)}}})}}if(b(f,"paste_remove_styles")||(b(f,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(i.select("*[style]",j.node),function(k){k.removeAttribute("style");k.removeAttribute("_mce_style")})}else{if(tinymce.isWebKit){c(i.select("*",j.node),function(k){k.removeAttribute("_mce_style")})}}},_convertLists:function(h,f){var j=h.editor.dom,i,m,e=-1,g,n=[],l,k;c(j.select("p",f.node),function(u){var r,v="",t,s,o,q;for(r=u.firstChild;r&&r.nodeType==3;r=r.nextSibling){v+=r.nodeValue}v=u.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(v)){t="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(v)){t="ol"}if(t){g=parseFloat(u.style.marginLeft||0);if(g>e){n.push(g)}if(!i||t!=l){i=j.create(t);j.insertAfter(i,u)}else{if(g>e){i=m.appendChild(j.create(t))}else{if(g]*>/gi,"");if(t=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){j.remove(w)}else{if(/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){j.remove(w)}}});s=u.innerHTML;if(t=="ul"){s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/,"")}else{s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}m=i.appendChild(j.create("li",0,s));j.remove(u);e=g;l=t}else{i=e=0}});k=f.node.innerHTML;if(k.indexOf("__MCE_ITEM__")!=-1){f.node.innerHTML=k.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(l,h,m){var f,j,g=l.selection,q,n,e,o,i,k="mce_marker";function p(t){var s;if(tinymce.isIE){s=l.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(false);s.select()}else{g.select(t,1);g.collapse(false)}}this._insert('',1);j=h.get(k);f=h.getParent(j,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(f&&!/TD|TH/.test(f.nodeName)){j=h.split(f,j);c(h.create("div",0,m).childNodes,function(r){q=j.parentNode.insertBefore(r.cloneNode(true),j)});p(q)}else{h.setOuterHTML(j,m);g.select(l.getBody(),1);g.collapse(0)}while(n=h.get(k)){h.remove(n)}n=g.getStart();e=h.getViewPort(l.getWin());o=l.dom.getPos(n).y;i=n.clientHeight;if(oe.y+e.h){l.getDoc().body.scrollTop=o0)){if(!d){d=("34,quot,38,amp,39,apos,60,lt,62,gt,"+j.serializer.settings.entities).split(",")}if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?: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," "],[/&(#\d+|[a-z0-9]{1,10});/gi,function(i,h){if(h.charAt(0)==="#"){return String.fromCharCode(h.slice(1))}else{return((i=y(d,h))>0)?String.fromCharCode(d[i-1]):" "}}],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.encode(v);if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"
"]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"

"],[/\n/g,"
"]])}}if((l=v.indexOf("

"))!=-1){k=v.lastIndexOf("

");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+' ');window.setTimeout(function(){var h=x.get("_plain_text_marker"),B,i,A,w;s.select(h,false);z.execCommand("Delete",false,null);h=null;B=s.getStart();i=x.getViewPort(n);A=x.getPos(B).y;w=B.clientHeight;if((Ai.y+i.h)){z.body.scrollTop=A

]*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 + ]); + } + + 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, "

"] + ]); + } + + // 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 (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('_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('_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]\s*\u00a0*/.test(val)) + type = 'ul'; + + // Detect ordered lists 1., a. or ixv. + if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.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' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html)) + dom.remove(span); + else if (/^[\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]\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, ''); + }, + + /** + * This method will split the current block parent and insert the contents inside the split position. + * This logic can be improved so text nodes at the start/end remain in the start/end block elements + */ + _insertBlockContent : function(ed, dom, content) { + var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker'; + + function select(n) { + var r; + + if (tinymce.isIE) { + r = ed.getDoc().body.createTextRange(); + r.moveToElementText(n); + r.collapse(false); + r.select(); + } else { + sel.select(n, 1); + sel.collapse(false); + } + } + + // Insert a marker for the caret position + this._insert('', 1); + marker = dom.get(markerId); + parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td'); + + // If it's a parent block but not a table cell + if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) { + // Split parent block + marker = dom.split(parentBlock, marker); + + // Insert nodes before the marker + each(dom.create('div', 0, content).childNodes, function(n) { + last = marker.parentNode.insertBefore(n.cloneNode(true), marker); + }); + + // Move caret after marker + select(last); + } else { + dom.setOuterHTML(marker, content); + sel.select(ed.getBody(), 1); + sel.collapse(0); + } + + // Remove marker if it's left + while (elm = dom.get(markerId)) + dom.remove(elm); + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(ed.getWin()); + y = ed.dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if (y < vp.y || y + elmHeight > vp.y + vp.h) + ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25; + }, + + /** + * 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); + + // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents + ed.execCommand(tinymce.isGecko ? 'insertHTML' : '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(ed, dom, h) { + var i, len, pos, rpos, node, breakElms, before, after, + w = ed.getWin(), + d = ed.getDoc(), + sel = ed.selection, + is = tinymce.is, + inArray = tinymce.inArray, + linebr = getParam(ed, "paste_text_linebreaktype"), + rl = getParam(ed, "paste_text_replacements"); + + function process(items) { + each(items, function(v) { + if (v.constructor == RegExp) + h = h.replace(v, ""); + else + h = h.replace(v[0], v[1]); + }); + }; + + if ((typeof(h) === "string") && (h.length > 0)) { + if (!entities) + entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(","); + + // 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(h)) { + 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*) + [ + // HTML entity + /&(#\d+|[a-z0-9]{1,10});/gi, + + // Replace with actual character + function(e, s) { + if (s.charAt(0) === "#") { + return String.fromCharCode(s.slice(1)); + } + else { + return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " "; + } + } + ], + [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars. + [/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks + /^\s+|\s+$/g // Trim the front & back + ]); + + h = dom.encode(h); + + // Delete any highlighted text before pasting + if (!sel.isCollapsed()) { + d.execCommand("Delete", false, null); + } + + // Perform default or custom replacements + if (is(rl, "array") || (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") { + process([ + [/\n+/g, " "] + ]); + } + else if (linebr == "br") { + process([ + [/\n/g, "
"] + ]); + } + else { + process([ + /^\s+|\s+$/g, + [/\n\n/g, "

"], + [/\n/g, "
"] + ]); + } + + // This next piece of code handles the situation where we're pasting more than one paragraph of plain + // text, and we are pasting the content into the middle of a block node in the editor. The block + // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining). + // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the + // pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between + // "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and + // now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the + // plain text take the same style as the existing paragraph.) + if ((pos = h.indexOf("

")) != -1) { + rpos = h.lastIndexOf("

"); + node = sel.getNode(); + breakElms = []; // Get list of elements to break + + do { + if (node.nodeType == 1) { + // Don't break tables and break at body + if (node.nodeName == "TD" || node.nodeName == "BODY") { + break; + } + + breakElms[breakElms.length] = node; + } + } while (node = node.parentNode); + + // Are we in the middle of a block node? + if (breakElms.length > 0) { + before = h.substring(0, pos); + after = ""; + + for (i=0, len=breakElms.length; i"; + after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">"; + } + + if (pos == rpos) { + h = before + after + h.substring(pos+7); + } + else { + h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7); + } + } + } + + // Insert content at the caret, plus add a marker for repositioning the caret + ed.execCommand("mceInsertRawHTML", false, h + ' '); + + // Reposition the caret to the marker, which was placed immediately after the inserted content. + // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers. + // The second part of the code scrolls the content up if the caret is positioned off-screen. + // This is only necessary for WebKit browsers, but it doesn't hurt to use for all. + window.setTimeout(function() { + var marker = dom.get('_plain_text_marker'), + elm, vp, y, elmHeight; + + sel.select(marker, false); + d.execCommand("Delete", false, null); + marker = null; + + // Get element, position and height + elm = sel.getStart(); + vp = dom.getViewPort(w); + y = dom.getPos(elm).y; + elmHeight = elm.clientHeight; + + // Is element within viewport if not then scroll it into view + if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) { + d.body.scrollTop = y < vp.y ? y : y - vp.h + 25; + } + }, 0); + } + }, + + /** + * 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/web/libs/tiny_mce/plugins/paste/js/pastetext.js b/web/libs/tiny_mce/plugins/paste/js/pastetext.js new file mode 100644 index 0000000..c524f9e --- /dev/null +++ b/web/libs/tiny_mce/plugins/paste/js/pastetext.js @@ -0,0 +1,36 @@ +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/web/libs/tiny_mce/plugins/paste/js/pasteword.js b/web/libs/tiny_mce/plugins/paste/js/pasteword.js new file mode 100644 index 0000000..a52731c --- /dev/null +++ b/web/libs/tiny_mce/plugins/paste/js/pasteword.js @@ -0,0 +1,51 @@ +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/web/libs/tiny_mce/plugins/paste/langs/en_dlg.js b/web/libs/tiny_mce/plugins/paste/langs/en_dlg.js new file mode 100644 index 0000000..eeac778 --- /dev/null +++ b/web/libs/tiny_mce/plugins/paste/langs/en_dlg.js @@ -0,0 +1,5 @@ +tinyMCE.addI18n('en.paste_dlg',{ +text_title:"Use CTRL+V on your keyboard to paste the text into the window.", +text_linebreaks:"Keep linebreaks", +word_title:"Use CTRL+V on your keyboard to paste the text into the window." +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/paste/pastetext.htm b/web/libs/tiny_mce/plugins/paste/pastetext.htm new file mode 100644 index 0000000..b655945 --- /dev/null +++ b/web/libs/tiny_mce/plugins/paste/pastetext.htm @@ -0,0 +1,27 @@ + + + {#paste.paste_text_desc} + + + + +
+
{#paste.paste_text_desc}
+ +
+ +
+ +
+ +
{#paste_dlg.text_title}
+ + + +
+ + +
+
+ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/paste/pasteword.htm b/web/libs/tiny_mce/plugins/paste/pasteword.htm new file mode 100644 index 0000000..0f6bb41 --- /dev/null +++ b/web/libs/tiny_mce/plugins/paste/pasteword.htm @@ -0,0 +1,21 @@ + + + {#paste.paste_word_desc} + + + + +
+
{#paste.paste_word_desc}
+ +
{#paste_dlg.word_title}
+ +
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/preview/editor_plugin.js b/web/libs/tiny_mce/plugins/preview/editor_plugin.js new file mode 100644 index 0000000..507909c --- /dev/null +++ b/web/libs/tiny_mce/plugins/preview/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/preview/editor_plugin_src.js b/web/libs/tiny_mce/plugins/preview/editor_plugin_src.js new file mode 100644 index 0000000..80f00f0 --- /dev/null +++ b/web/libs/tiny_mce/plugins/preview/editor_plugin_src.js @@ -0,0 +1,53 @@ +/** + * 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/web/libs/tiny_mce/plugins/preview/example.html b/web/libs/tiny_mce/plugins/preview/example.html new file mode 100644 index 0000000..b2c3d90 --- /dev/null +++ b/web/libs/tiny_mce/plugins/preview/example.html @@ -0,0 +1,28 @@ + + + + + +Example of a custom preview page + + + +Editor contents:
+
+ +
+ + + diff --git a/web/libs/tiny_mce/plugins/preview/jscripts/embed.js b/web/libs/tiny_mce/plugins/preview/jscripts/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/web/libs/tiny_mce/plugins/preview/jscripts/embed.js @@ -0,0 +1,73 @@ +/** + * 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 += ' + + + + + +{#preview.preview_desc} + + + + + diff --git a/web/libs/tiny_mce/plugins/print/editor_plugin.js b/web/libs/tiny_mce/plugins/print/editor_plugin.js new file mode 100644 index 0000000..b5b3a55 --- /dev/null +++ b/web/libs/tiny_mce/plugins/print/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/print/editor_plugin_src.js b/web/libs/tiny_mce/plugins/print/editor_plugin_src.js new file mode 100644 index 0000000..3933fe6 --- /dev/null +++ b/web/libs/tiny_mce/plugins/print/editor_plugin_src.js @@ -0,0 +1,34 @@ +/** + * 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/web/libs/tiny_mce/plugins/save/editor_plugin.js b/web/libs/tiny_mce/plugins/save/editor_plugin.js new file mode 100644 index 0000000..8e93996 --- /dev/null +++ b/web/libs/tiny_mce/plugins/save/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/save/editor_plugin_src.js b/web/libs/tiny_mce/plugins/save/editor_plugin_src.js new file mode 100644 index 0000000..f5a3de8 --- /dev/null +++ b/web/libs/tiny_mce/plugins/save/editor_plugin_src.js @@ -0,0 +1,101 @@ +/** + * 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/web/libs/tiny_mce/plugins/searchreplace/css/searchreplace.css b/web/libs/tiny_mce/plugins/searchreplace/css/searchreplace.css new file mode 100644 index 0000000..ecdf58c --- /dev/null +++ b/web/libs/tiny_mce/plugins/searchreplace/css/searchreplace.css @@ -0,0 +1,6 @@ +.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/web/libs/tiny_mce/plugins/searchreplace/editor_plugin.js b/web/libs/tiny_mce/plugins/searchreplace/editor_plugin.js new file mode 100644 index 0000000..cd9c985 --- /dev/null +++ b/web/libs/tiny_mce/plugins/searchreplace/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){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/web/libs/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/web/libs/tiny_mce/plugins/searchreplace/editor_plugin_src.js new file mode 100644 index 0000000..1433a06 --- /dev/null +++ b/web/libs/tiny_mce/plugins/searchreplace/editor_plugin_src.js @@ -0,0 +1,57 @@ +/** + * 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) { + 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/web/libs/tiny_mce/plugins/searchreplace/js/searchreplace.js b/web/libs/tiny_mce/plugins/searchreplace/js/searchreplace.js new file mode 100644 index 0000000..c0a6243 --- /dev/null +++ b/web/libs/tiny_mce/plugins/searchreplace/js/searchreplace.js @@ -0,0 +1,130 @@ +tinyMCEPopup.requireLangPack(); + +var SearchReplaceDialog = { + init : function(ed) { + var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); + + this.switchMode(m); + + f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); + + // Focus input field + f[m + '_panel_searchstring'].focus(); + }, + + 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 (s == '') + return; + + function fix() { + // Correct Firefox graphics glitches + r = se.getRng().cloneRange(); + ed.getDoc().execCommand('SelectAll', false, null); + se.setRng(r); + }; + + function replace() { + if (tinymce.isIE) + ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE + else + ed.getDoc().execCommand('InsertHTML', false, rs); + }; + + // 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) { + 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) { + 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/web/libs/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/web/libs/tiny_mce/plugins/searchreplace/langs/en_dlg.js new file mode 100644 index 0000000..370959a --- /dev/null +++ b/web/libs/tiny_mce/plugins/searchreplace/langs/en_dlg.js @@ -0,0 +1,16 @@ +tinyMCE.addI18n('en.searchreplace_dlg',{ +searchnext_desc:"Find again", +notfound:"The search has been completed. The search string could not be found.", +search_title:"Find", +replace_title:"Find/Replace", +allreplaced:"All occurrences of the search string were replaced.", +findwhat:"Find what", +replacewith:"Replace with", +direction:"Direction", +up:"Up", +down:"Down", +mcase:"Match case", +findnext:"Find next", +replace:"Replace", +replaceall:"Replace all" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/searchreplace/searchreplace.htm b/web/libs/tiny_mce/plugins/searchreplace/searchreplace.htm new file mode 100644 index 0000000..d0424cf --- /dev/null +++ b/web/libs/tiny_mce/plugins/searchreplace/searchreplace.htm @@ -0,0 +1,99 @@ + + + + {#searchreplace_dlg.replace_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + +
+ + + + + + + + +
+
+ + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+ + + + + +
+
+
+ +
+ +
+ + + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/spellchecker/css/content.css b/web/libs/tiny_mce/plugins/spellchecker/css/content.css new file mode 100644 index 0000000..24efa02 --- /dev/null +++ b/web/libs/tiny_mce/plugins/spellchecker/css/content.css @@ -0,0 +1 @@ +.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;} diff --git a/web/libs/tiny_mce/plugins/spellchecker/editor_plugin.js b/web/libs/tiny_mce/plugins/spellchecker/editor_plugin.js new file mode 100644 index 0000000..a9ec3b9 --- /dev/null +++ b/web/libs/tiny_mce/plugins/spellchecker/editor_plugin.js @@ -0,0 +1 @@ +(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()}});e.onInit.add(function(){if(e.settings.content_css!==false){e.dom.loadCSS(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(){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$1$2');q=q.replace(g,'$1$2');j.replace(j.create("span",{"class":"mceItemHidden"},q),r)}}});l.moveToBookmark(m)},_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){l=b.getPos(h.getContentAreaContainer());d=h.controlManager.createDropMenu("spellcheckermenu",{offset_x:l.x,offset_y:l.y,"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)}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()});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/web/libs/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/web/libs/tiny_mce/plugins/spellchecker/editor_plugin_src.js new file mode 100644 index 0000000..d8680ba --- /dev/null +++ b/web/libs/tiny_mce/plugins/spellchecker/editor_plugin_src.js @@ -0,0 +1,417 @@ +/** + * 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(); + }); + + ed.onInit.add(function() { + if (ed.settings.content_css !== false) + ed.dom.loadCSS(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() { + 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$1$2'); + v = v.replace(r3, '$1$2'); + + dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n); + } + } + }); + + se.moveToBookmark(b); + }, + + _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) { + p1 = DOM.getPos(ed.getContentAreaContainer()); + //p2 = DOM.getPos(ed.getContainer()); + + m = ed.controlManager.createDropMenu('spellcheckermenu', { + offset_x : p1.x, + offset_y : p1.y, + '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); + + 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(); + }); + + 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/web/libs/tiny_mce/plugins/spellchecker/img/wline.gif b/web/libs/tiny_mce/plugins/spellchecker/img/wline.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d0a4dbca03cc13177a359a5f175dda819fdf464 GIT binary patch literal 46 ycmZ?wbhEHbWMN=tXkcXcqowu#|9{1wEQ|~cj0`#qKmd|qU}ANVOOs?}um%7FLkRf* literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/style/css/props.css b/web/libs/tiny_mce/plugins/style/css/props.css new file mode 100644 index 0000000..eb1f264 --- /dev/null +++ b/web/libs/tiny_mce/plugins/style/css/props.css @@ -0,0 +1,13 @@ +#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_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/web/libs/tiny_mce/plugins/style/editor_plugin.js b/web/libs/tiny_mce/plugins/style/editor_plugin.js new file mode 100644 index 0000000..cab2153 --- /dev/null +++ b/web/libs/tiny_mce/plugins/style/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});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/web/libs/tiny_mce/plugins/style/editor_plugin_src.js b/web/libs/tiny_mce/plugins/style/editor_plugin_src.js new file mode 100644 index 0000000..5f7755f --- /dev/null +++ b/web/libs/tiny_mce/plugins/style/editor_plugin_src.js @@ -0,0 +1,55 @@ +/** + * 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() { + ed.windowManager.open({ + file : url + '/props.htm', + width : 480 + parseInt(ed.getLang('style.delta_width', 0)), + height : 320 + parseInt(ed.getLang('style.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + style_text : ed.selection.getNode().style.cssText + }); + }); + + 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); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/style/js/props.js b/web/libs/tiny_mce/plugins/style/js/props.js new file mode 100644 index 0000000..a8dd93d --- /dev/null +++ b/web/libs/tiny_mce/plugins/style/js/props.js @@ -0,0 +1,641 @@ +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 init() { + var ce = document.getElementById('container'), h; + + ce.style.cssText = tinyMCEPopup.getWindowArg('style_text'); + + 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'); + + // 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)); + + if (tinymce.isGecko) + selectByValue(f, 'box_float', ce.style.cssFloat, true, true); + else + selectByValue(f, 'box_float', 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; + + if (tinymce.isGecko) + 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); +} + +tinyMCEPopup.onInit.add(init); diff --git a/web/libs/tiny_mce/plugins/style/langs/en_dlg.js b/web/libs/tiny_mce/plugins/style/langs/en_dlg.js new file mode 100644 index 0000000..5026313 --- /dev/null +++ b/web/libs/tiny_mce/plugins/style/langs/en_dlg.js @@ -0,0 +1,63 @@ +tinyMCE.addI18n('en.style_dlg',{ +title:"Edit CSS Style", +apply:"Apply", +text_tab:"Text", +background_tab:"Background", +block_tab:"Block", +box_tab:"Box", +border_tab:"Border", +list_tab:"List", +positioning_tab:"Positioning", +text_props:"Text", +text_font:"Font", +text_size:"Size", +text_weight:"Weight", +text_style:"Style", +text_variant:"Variant", +text_lineheight:"Line height", +text_case:"Case", +text_color:"Color", +text_decoration:"Decoration", +text_overline:"overline", +text_underline:"underline", +text_striketrough:"strikethrough", +text_blink:"blink", +text_none:"none", +background_color:"Background color", +background_image:"Background image", +background_repeat:"Repeat", +background_attachment:"Attachment", +background_hpos:"Horizontal position", +background_vpos:"Vertical position", +block_wordspacing:"Word spacing", +block_letterspacing:"Letter spacing", +block_vertical_alignment:"Vertical alignment", +block_text_align:"Text align", +block_text_indent:"Text indent", +block_whitespace:"Whitespace", +block_display:"Display", +box_width:"Width", +box_height:"Height", +box_float:"Float", +box_clear:"Clear", +padding:"Padding", +same:"Same for all", +top:"Top", +right:"Right", +bottom:"Bottom", +left:"Left", +margin:"Margin", +style:"Style", +width:"Width", +height:"Height", +color:"Color", +list_type:"Type", +bullet_image:"Bullet image", +position:"Position", +positioning_type:"Type", +visibility:"Visibility", +zindex:"Z-index", +overflow:"Overflow", +placement:"Placement", +clip:"Clip" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/style/props.htm b/web/libs/tiny_mce/plugins/style/props.htm new file mode 100644 index 0000000..549ed04 --- /dev/null +++ b/web/libs/tiny_mce/plugins/style/props.htm @@ -0,0 +1,723 @@ + + + + {#style_dlg.title} + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
 
+
+ +
+ + + +
+ + + + + + +
+ +  
+
+ +
+ + + + + +
 
+
{#style_dlg.text_decoration} + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
 
+
+ + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + +
+ + + + + + +
 
+
   
+ + + + + + +
 
+
   
+
+
+ {#style_dlg.padding} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+
+ +
+
+ {#style_dlg.margin} + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+ + + + + + +
 
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  {#style_dlg.style} {#style_dlg.width} {#style_dlg.color}
      
{#style_dlg.top}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.right}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.bottom}   + + + + + + +
 
+
  + + + + + +
 
+
{#style_dlg.left}   + + + + + + +
 
+
  + + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
   
+ + + + + + +
 
+
   
+ + + + + + +
 
+
   
+ +
+
+ {#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/web/libs/tiny_mce/plugins/tabfocus/editor_plugin.js b/web/libs/tiny_mce/plugins/tabfocus/editor_plugin.js new file mode 100644 index 0000000..27d2440 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tabfocus/editor_plugin.js @@ -0,0 +1 @@ +(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(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m=0;m--){if(n[m].type!="hidden"){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(l=tinymce.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){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)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},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/web/libs/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/web/libs/tiny_mce/plugins/tabfocus/editor_plugin_src.js new file mode 100644 index 0000000..c2be2f4 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tabfocus/editor_plugin_src.js @@ -0,0 +1,112 @@ +/** + * 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) { + f = DOM.getParent(ed.id, 'form'); + el = f.elements; + + if (f) { + 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 (el[i].type != 'hidden') + return el[i]; + } + } else { + for (i = x - 1; i >= 0; i--) { + if (el[i].type != 'hidden') + 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 (ed = tinymce.get(el.id || el.name)) + ed.focus(); + else + window.setTimeout(function() {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); + + ed.onInit.add(function() { + each(DOM.select('a:first,a:last', ed.getContainer()), function(n) { + Event.add(n, 'focus', function() {ed.focus();}); + }); + }); + }, + + 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); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/table/cell.htm b/web/libs/tiny_mce/plugins/table/cell.htm new file mode 100644 index 0000000..d243e1d --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/cell.htm @@ -0,0 +1,178 @@ + + + + {#table_dlg.cell_title} + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/table/css/cell.css b/web/libs/tiny_mce/plugins/table/css/cell.css new file mode 100644 index 0000000..a067ecd --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/css/cell.css @@ -0,0 +1,17 @@ +/* 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/web/libs/tiny_mce/plugins/table/css/row.css b/web/libs/tiny_mce/plugins/table/css/row.css new file mode 100644 index 0000000..1f7755d --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/css/row.css @@ -0,0 +1,25 @@ +/* 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/web/libs/tiny_mce/plugins/table/css/table.css b/web/libs/tiny_mce/plugins/table/css/table.css new file mode 100644 index 0000000..d11c3f6 --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/css/table.css @@ -0,0 +1,13 @@ +/* CSS file for table dialog in the table plugin */ + +.panel_wrapper div.current { + height: 245px; +} + +.advfield { + width: 200px; +} + +#class { + width: 150px; +} diff --git a/web/libs/tiny_mce/plugins/table/editor_plugin.js b/web/libs/tiny_mce/plugins/table/editor_plugin.js new file mode 100644 index 0000000..266d7d5 --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/editor_plugin.js @@ -0,0 +1 @@ +(function(b){var c=b.each;function a(F,E,I){var e,J,B,n;r();n=E.getParent(I.getStart(),"th,td");if(n){J=D(n);B=G();n=v(J.x,J.y)}function w(L,K){L=L.cloneNode(K);L.removeAttribute("id");return L}function r(){var K=0;e=[];c(["thead","tbody","tfoot"],function(L){var M=E.select(L+" tr",F);c(M,function(N,O){O+=K;c(E.select("td,th",N),function(U,P){var Q,R,S,T;if(e[O]){while(e[O][P]){P++}}S=g(U,"rowspan");T=g(U,"colspan");for(R=O;R'}return false}},"childNodes");K=w(K,false);K.rowSpan=K.colSpan=1;if(L){K.appendChild(L)}else{if(!b.isIE){K.innerHTML='
'}}return K}function p(){var K=E.createRng();c(E.select("tr",F),function(L){if(L.cells.length==0){E.remove(L)}});if(E.select("tr",F).length==0){K.setStartAfter(F);K.setEndAfter(F);I.setRng(K);E.remove(F);return}c(E.select("thead,tbody,tfoot",F),function(L){if(L.rows.length==0){E.remove(L)}});r();row=e[Math.min(e.length-1,J.y)];if(row){I.select(row[Math.min(row.length-1,J.x)].elm,true);I.collapse(true)}}function s(Q,O,S,P){var N,L,K,M,R;N=e[O][Q].elm.parentNode;for(K=1;K<=S;K++){N=E.getNext(N,"tr");if(N){for(L=Q;L>=0;L--){R=e[O+K][L].elm;if(R.parentNode==N){for(M=1;M<=P;M++){E.insertAfter(d(R),R)}break}}if(L==-1){for(M=1;M<=P;M++){N.insertBefore(d(N.cells[0]),N.cells[0])}}}}}function A(){c(e,function(K,L){c(K,function(N,M){var Q,P,R,O;if(h(N)){N=N.elm;Q=g(N,"colspan");P=g(N,"rowspan");if(Q>1||P>1){N.colSpan=N.rowSpan=1;for(O=0;O1){P.rowSpan=rowSpan+1;continue}}else{if(K>0&&e[K-1][O]){S=e[K-1][O].elm;rowSpan=g(S,"rowspan");if(rowSpan>1){S.rowSpan=rowSpan+1;continue}}}L=d(P);L.colSpan=P.colSpan;R.appendChild(L);M=P}}if(R.hasChildNodes()){if(!N){E.insertAfter(R,Q)}else{Q.parentNode.insertBefore(R,Q)}}}function f(L){var M,K;c(e,function(N,O){c(N,function(Q,P){if(h(Q)){M=P;if(L){return false}}});if(L){return !M}});c(e,function(Q,R){var N=Q[M].elm,O,P;if(N!=K){P=g(N,"colspan");O=g(N,"rowspan");if(P==1){if(!L){E.insertAfter(d(N),N);s(M,R,O-1,P)}else{N.parentNode.insertBefore(d(N),N);s(M,R,O-1,P)}}else{N.colSpan++}K=N}})}function m(){var K=[];c(e,function(L,M){c(L,function(O,N){if(h(O)&&b.inArray(K,N)===-1){c(e,function(R){var P=R[N].elm,Q;Q=g(P,"colspan");if(Q>1){P.colSpan=Q-1}else{E.remove(P)}});K.push(N)}})});p()}function l(){var L;function K(O){var N,P,M;N=E.getNext(O,"tr");c(O.cells,function(Q){var R=g(Q,"rowspan");if(R>1){Q.rowSpan=R-1;P=D(Q);s(P.x,P.y,1,1)}});P=D(O.cells[0]);c(e[P.y],function(Q){var R;Q=Q.elm;if(Q!=M){R=g(Q,"rowspan");if(R<=1){E.remove(Q)}else{Q.rowSpan=R-1}M=Q}})}L=j();c(L.reverse(),function(M){K(M)});p()}function C(){var K=j();E.remove(K);p();return K}function H(){var K=j();c(K,function(M,L){K[L]=w(M,true)});return K}function z(M,L){var N=j(),K=N[L?0:N.length-1],O=K.cells.length;c(e,function(Q){var P;O=0;c(Q,function(S,R){if(S.real){O+=S.colspan}if(S.elm.parentNode==K){P=1}});if(P){return false}});if(!L){M.reverse()}c(M,function(R){var Q=R.cells.length,P;for(i=0;iL){L=P}if(O>K){K=O}if(Q.real){S=Q.colspan-1;R=Q.rowspan-1;if(S){if(P+S>L){L=P+S}}if(R){if(O+R>K){K=O+R}}}}})});return{x:L,y:K}}function t(Q){var N,M,S,R,L,K,O,P;B=D(Q);if(J&&B){N=Math.min(J.x,B.x);M=Math.min(J.y,B.y);S=Math.max(J.x,B.x);R=Math.max(J.y,B.y);L=S;K=R;for(y=M;y<=K;y++){Q=e[y][N];if(!Q.real){if(N-(Q.colspan-1)L){L=x+O}}if(P){if(y+P>K){K=y+P}}}}}E.removeClass(E.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=M;y<=K;y++){for(x=N;x<=L;x++){E.addClass(e[y][x].elm,"mceSelected")}}}}b.extend(this,{deleteTable:q,split:A,merge:o,insertRow:k,insertCol:f,deleteCols:m,deleteRows:l,cutRows:C,copyRows:H,pasteRows:z,getPos:D,setStartCell:u,setEndCell:t})}b.create("tinymce.plugins.TablePlugin",{init:function(e,f){var d,j;function h(m){var l=e.selection,k=e.dom.getParent(m||l.getNode(),"table");if(k){return new a(k,e.dom,l)}}function g(){e.getBody().style.webkitUserSelect="";e.dom.removeClass(e.dom.select("td.mceSelected,th.mceSelected"),"mceSelected")}c([["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(k){e.addButton(k[0],{title:k[1],cmd:k[2],ui:k[3]})});if(!b.isIE){e.onClick.add(function(k,l){l=l.target;if(l.nodeName==="TABLE"){k.selection.select(l)}})}e.onNodeChange.add(function(l,k,o){var m;o=l.selection.getStart();m=l.dom.getParent(o,"td,th,caption");k.setActive("table",o.nodeName==="TABLE"||!!m);if(m&&m.nodeName==="CAPTION"){m=0}k.setDisabled("delete_table",!m);k.setDisabled("delete_col",!m);k.setDisabled("delete_table",!m);k.setDisabled("delete_row",!m);k.setDisabled("col_after",!m);k.setDisabled("col_before",!m);k.setDisabled("row_after",!m);k.setDisabled("row_before",!m);k.setDisabled("row_props",!m);k.setDisabled("cell_props",!m);k.setDisabled("split_cells",!m);k.setDisabled("merge_cells",!m)});e.onInit.add(function(l){var k,o,p=l.dom,m;d=l.windowManager;l.onMouseDown.add(function(q,r){if(r.button!=2){g();o=p.getParent(r.target,"td,th");k=p.getParent(o,"table")}});p.bind(l.getDoc(),"mouseover",function(t){var r,q,s=t.target;if(o&&(m||s!=o)&&(s.nodeName=="TD"||s.nodeName=="TH")){q=p.getParent(s,"table");if(q==k){if(!m){m=h(q);m.setStartCell(o);l.getBody().style.webkitUserSelect="none"}m.setEndCell(s)}r=l.selection.getSel();if(r.removeAllRanges){r.removeAllRanges()}else{r.empty()}t.preventDefault()}});l.onMouseUp.add(function(z,A){var r,t=z.selection,B,C=t.getSel(),q,u,s,w;if(o){if(m){z.getBody().style.webkitUserSelect=""}function v(D,F){var E=new b.dom.TreeWalker(D,D);do{if(D.nodeType==3&&b.trim(D.nodeValue).length!=0){if(F){r.setStart(D,0)}else{r.setEnd(D,D.nodeValue.length)}return}if(D.nodeName=="BR"){if(F){r.setStartBefore(D)}else{r.setEndBefore(D)}return}}while(D=(F?E.next():E.prev()))}B=p.select("td.mceSelected,th.mceSelected");if(B.length>0){r=p.createRng();u=B[0];w=B[B.length-1];v(u,1);q=new b.dom.TreeWalker(u,p.getParent(B[0],"table"));do{if(u.nodeName=="TD"||u.nodeName=="TH"){if(!p.hasClass(u,"mceSelected")){break}s=u}}while(u=q.next());v(s);t.setRng(r)}z.nodeChanged();o=m=k=null}});l.onKeyUp.add(function(q,r){g()});if(l&&l.plugins.contextmenu){l.plugins.contextmenu.onContextMenu.add(function(s,q,u){var v,t=l.selection,r=t.getNode()||l.getBody();if(l.dom.getParent(u,"td")||l.dom.getParent(u,"th")||l.dom.select("td.mceSelected,th.mceSelected").length){q.removeAll();if(r.nodeName=="A"&&!l.dom.getAttrib(r,"name")){q.add({title:"advanced.link_desc",icon:"link",cmd:l.plugins.advlink?"mceAdvLink":"mceLink",ui:true});q.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});q.addSeparator()}if(r.nodeName=="IMG"&&r.className.indexOf("mceItem")==-1){q.add({title:"advanced.image_desc",icon:"image",cmd:l.plugins.advimage?"mceAdvImage":"mceImage",ui:true});q.addSeparator()}q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});q.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});q.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});q.addSeparator();v=q.addMenu({title:"table.cell"});v.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});v.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});v.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});v=q.addMenu({title:"table.row"});v.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});v.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});v.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});v.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});v.addSeparator();v.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});v.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});v.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!j);v.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!j);v=q.addMenu({title:"table.col"});v.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});v.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});v.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!b.isIE){function n(){var q;for(q=l.getBody().lastChild;q&&q.nodeType==3&&!q.nodeValue.length;q=q.previousSibling){}if(q&&q.nodeName=="TABLE"){l.dom.add(l.getBody(),"p",null,'
')}}if(b.isGecko){l.onKeyDown.add(function(r,t){var q,s,u=r.dom;if(t.keyCode==37||t.keyCode==38){q=r.selection.getRng();s=u.getParent(q.startContainer,"table");if(s&&r.getBody().firstChild==s){if(isAtStart(q,s)){q=u.createRng();q.setStartBefore(s);q.setEndBefore(s);r.selection.setRng(q);t.preventDefault()}}}})}l.onKeyUp.add(n);l.onSetContent.add(n);l.onVisualAid.add(n);l.onPreProcess.add(function(q,s){var r=s.node.lastChild;if(r&&r.childNodes.length==1&&r.firstChild.nodeName=="BR"){q.dom.remove(r)}});n()}});c({mceTableSplitCells:function(k){k.split()},mceTableMergeCells:function(l){var m,n,k;k=e.dom.getParent(e.selection.getNode(),"th,td");if(k){m=k.rowSpan;n=k.colSpan}if(!e.dom.select("td.mceSelected,th.mceSelected").length){d.open({url:f+"/merge_cells.htm",width:240+parseInt(e.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(e.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:m,cols:n,onaction:function(o){l.merge(k,o.cols,o.rows)},plugin_url:f})}else{l.merge()}},mceTableInsertRowBefore:function(k){k.insertRow(true)},mceTableInsertRowAfter:function(k){k.insertRow()},mceTableInsertColBefore:function(k){k.insertCol(true)},mceTableInsertColAfter:function(k){k.insertCol()},mceTableDeleteCol:function(k){k.deleteCols()},mceTableDeleteRow:function(k){k.deleteRows()},mceTableCutRow:function(k){j=k.cutRows()},mceTableCopyRow:function(k){j=k.copyRows()},mceTablePasteRowBefore:function(k){k.pasteRows(j,true)},mceTablePasteRowAfter:function(k){k.pasteRows(j)},mceTableDelete:function(k){k.deleteTable()}},function(l,k){e.addCommand(k,function(){var m=h();if(m){l(m);e.execCommand("mceRepaint");g()}})});c({mceInsertTable:function(k){d.open({url:f+"/table.htm",width:400+parseInt(e.getLang("table.table_delta_width",0)),height:320+parseInt(e.getLang("table.table_delta_height",0)),inline:1},{plugin_url:f,action:k?k.action:0})},mceTableRowProps:function(){d.open({url:f+"/row.htm",width:400+parseInt(e.getLang("table.rowprops_delta_width",0)),height:295+parseInt(e.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:f})},mceTableCellProps:function(){d.open({url:f+"/cell.htm",width:400+parseInt(e.getLang("table.cellprops_delta_width",0)),height:295+parseInt(e.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:f})}},function(l,k){e.addCommand(k,function(m,n){l(n)})})}});b.PluginManager.add("table",b.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/table/editor_plugin_src.js b/web/libs/tiny_mce/plugins/table/editor_plugin_src.js new file mode 100644 index 0000000..c2f307f --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/editor_plugin_src.js @@ -0,0 +1,1125 @@ +/** + * 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; + + /** + * 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 getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1); + }; + + function isCellSelected(cell) { + return 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); + cell.rowSpan = 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) { + cell.colSpan = cell.rowSpan = 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; + + // 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 { + // 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; + startCell.colSpan = (endX - startX) + 1; + 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++) { + cell = grid[y][x].elm; + + if (cell != startCell) { + // Move children to startCell + children = tinymce.grep(cell.childNodes); + each(children, function(node, i) { + // Jump over last BR element + if (node.nodeName != 'BR' || i != children.length - 1) + startCell.appendChild(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; + + // 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 = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + 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) { + otherCell.rowSpan = rowSpan + 1; + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell) + 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 = row[posX].elm, rowSpan, colSpan; + + 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 + cell.colSpan++; + + 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) + 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) { + 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 + 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; + + // 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]; + cell.colSpan = 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); + }); + }; + + 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++) + 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; + + 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 = ''; + ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); + }; + + // 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); + }); + } + + // 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); + } + + // Remove current selection + sel = ed.selection.getSel(); + + if (sel.removeAllRanges) + sel.removeAllRanges(); + else + sel.empty(); + + 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]; + + 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(); + }); + + // 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'}); + }); + } + + // 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 + if (!tinymce.isIE) { + 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') + ed.dom.add(ed.getBody(), 'p', null, '
'); + }; + + // 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.childNodes.length == 1 && last.firstChild.nodeName == 'BR') + ed.dom.remove(last); + }); + + fixTableCaretPos(); + } + }); + + // 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); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/table/js/cell.js b/web/libs/tiny_mce/plugins/table/js/cell.js new file mode 100644 index 0000000..b5fc1fd --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/js/cell.js @@ -0,0 +1,286 @@ +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]; + + 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; + } + + ed.execCommand('mceBeginUndoLevel'); + + 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 "all": + var rows = tableElm.getElementsByTagName("tr"); + + 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; + } + + inst.execCommand('mceBeginUndoLevel'); + + 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") { + inst.execCommand('mceBeginUndoLevel'); + + dom.setAttrib(elm, 'cellPadding', cellpadding, true); + dom.setAttrib(elm, 'cellSpacing', cellspacing, true); + dom.setAttrib(elm, 'border', 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 = border == "" ? "1px" : 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'); + + // 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[_mce_new]'), function(node) { + var td = dom.select('td', node); + + inst.selection.select(td[0], true); + inst.selection.collapse(); + + dom.setAttrib(node, '_mce_new', ''); + }); + + inst.addVisual(); + inst.execCommand('mceEndUndoLevel'); + + 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"); + + 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 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 != "" && formObj.bordercolor.value != "") + st['border-width'] = formObj.border.value + "px"; + + 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'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px"; + } + + 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/web/libs/tiny_mce/plugins/table/langs/en_dlg.js b/web/libs/tiny_mce/plugins/table/langs/en_dlg.js new file mode 100644 index 0000000..000332a --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/langs/en_dlg.js @@ -0,0 +1,74 @@ +tinyMCE.addI18n('en.table_dlg',{ +general_tab:"General", +advanced_tab:"Advanced", +general_props:"General properties", +advanced_props:"Advanced properties", +rowtype:"Row in table part", +title:"Insert/Modify table", +width:"Width", +height:"Height", +cols:"Cols", +rows:"Rows", +cellspacing:"Cellspacing", +cellpadding:"Cellpadding", +border:"Border", +align:"Alignment", +align_default:"Default", +align_left:"Left", +align_right:"Right", +align_middle:"Center", +row_title:"Table row properties", +cell_title:"Table cell properties", +cell_type:"Cell type", +valign:"Vertical alignment", +align_top:"Top", +align_bottom:"Bottom", +bordercolor:"Border color", +bgcolor:"Background color", +merge_cells_title:"Merge table cells", +id:"Id", +style:"Style", +langdir:"Language direction", +langcode:"Language code", +mime:"Target MIME type", +ltr:"Left to right", +rtl:"Right to left", +bgimage:"Background image", +summary:"Summary", +td:"Data", +th:"Header", +cell_cell:"Update current cell", +cell_row:"Update all cells in row", +cell_all:"Update all cells in table", +row_row:"Update current row", +row_odd:"Update odd rows in table", +row_even:"Update even rows in table", +row_all:"Update all rows in table", +thead:"Table Head", +tbody:"Table Body", +tfoot:"Table Foot", +scope:"Scope", +rowgroup:"Row Group", +colgroup:"Col Group", +col_limit:"You've exceeded the maximum number of columns of {$cols}.", +row_limit:"You've exceeded the maximum number of rows of {$rows}.", +cell_limit:"You've exceeded the maximum number of cells of {$cells}.", +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.", +caption:"Table caption", +frame:"Frame", +frame_none:"none", +frame_groups:"groups", +frame_rows:"rows", +frame_cols:"cols", +frame_all:"all", +rules:"Rules", +rules_void:"void", +rules_above:"above", +rules_below:"below", +rules_hsides:"hsides", +rules_lhs:"lhs", +rules_rhs:"rhs", +rules_vsides:"vsides", +rules_box:"box", +rules_border:"border" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/table/merge_cells.htm b/web/libs/tiny_mce/plugins/table/merge_cells.htm new file mode 100644 index 0000000..9736ed8 --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/merge_cells.htm @@ -0,0 +1,32 @@ + + + + {#table_dlg.merge_cells_title} + + + + + + +
+
+ {#table_dlg.merge_cells_title} + + + + + + + + + +
{#table_dlg.cols}:
{#table_dlg.rows}:
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/table/row.htm b/web/libs/tiny_mce/plugins/table/row.htm new file mode 100644 index 0000000..092e6c8 --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/row.htm @@ -0,0 +1,155 @@ + + + + {#table_dlg.row_title} + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+
+ +
+ + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/table/table.htm b/web/libs/tiny_mce/plugins/table/table.htm new file mode 100644 index 0000000..f269039 --- /dev/null +++ b/web/libs/tiny_mce/plugins/table/table.htm @@ -0,0 +1,187 @@ + + + + {#table_dlg.title} + + + + + + + + + +
+ + +
+
+
+ {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+
+ {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
 
+
+ +
+ +
+ +
+ + + + + +
 
+
+ + + + + +
 
+
+
+
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/template/blank.htm b/web/libs/tiny_mce/plugins/template/blank.htm new file mode 100644 index 0000000..ecde53f --- /dev/null +++ b/web/libs/tiny_mce/plugins/template/blank.htm @@ -0,0 +1,12 @@ + + + blank_page + + + + + + + diff --git a/web/libs/tiny_mce/plugins/template/css/template.css b/web/libs/tiny_mce/plugins/template/css/template.css new file mode 100644 index 0000000..2d23a49 --- /dev/null +++ b/web/libs/tiny_mce/plugins/template/css/template.css @@ -0,0 +1,23 @@ +#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/web/libs/tiny_mce/plugins/template/editor_plugin.js b/web/libs/tiny_mce/plugins/template/editor_plugin.js new file mode 100644 index 0000000..ebe3c27 --- /dev/null +++ b/web/libs/tiny_mce/plugins/template/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/template/js/template.js b/web/libs/tiny_mce/plugins/template/js/template.js new file mode 100644 index 0000000..24045d7 --- /dev/null +++ b/web/libs/tiny_mce/plugins/template/js/template.js @@ -0,0 +1,106 @@ +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 + + {#template_dlg.title} + + + + + +
+
+
{#template_dlg.desc}
+
+ +
+
+
+
+ {#template_dlg.preview} + +
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/tinybrowser/config_tinybrowser.php b/web/libs/tiny_mce/plugins/tinybrowser/config_tinybrowser.php new file mode 100644 index 0000000..7a54e23 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/config_tinybrowser.php @@ -0,0 +1,126 @@ +. +*/ + +// switch off error handling, to use custom handler +error_reporting(0); + +// set script time out higher, to help with thumbnail generation +set_time_limit(240); + +$tinybrowser = array(); + +// Session control and security check - to enable please uncomment +if(isset($_GET['sessidpass'])) session_id($_GET['sessidpass']); // workaround for Flash session bug +session_start(); +$tinybrowser['sessioncheck'] = 'upload_dir'; //name of session variable to check + +// Random string used to secure Flash upload if session control not enabled - be sure to change! +$tinybrowser['obfuscate'] = 'yeah'; + +// Set default language (ISO 639-1 code) +$tinybrowser['language'] = 'fr'; + +// Set the integration type (TinyMCE is default) +$tinybrowser['integration'] = 'tinymce'; // Possible values: 'tinymce', 'fckeditor' + +// Default is rtrim($_SERVER['DOCUMENT_ROOT'],'/') (suitable when using absolute paths, but can be set to '' if using relative paths) +$tinybrowser['docroot'] = rtrim($_SERVER['DOCUMENT_ROOT'],'/'); +//$tinybrowser['docroot'] = ''; + +// Folder permissions for Unix servers only +$tinybrowser['unixpermissions'] = 0777; + +// File upload paths (set to absolute by default) + +$tinybrowser['path']['image'] = $_SESSION["upload_dir"].'/images/'; // Image files location - also creates a '_thumbs' subdirectory within this path to hold the image thumbnails +$tinybrowser['path']['media'] = $_SESSION["upload_dir"].'/media/'; // Media files location +$tinybrowser['path']['file'] = $_SESSION["upload_dir"].'/files/'; // Other files location + +/* +$tinybrowser['path']['image'] = $pz_user_dir."/images/"; $tinybrowser['path']['media'] = $pz_user_dir."/media"; $tinybrowser['path']['file'] = $pz_user_dir."/files"; +*/ + +// File link paths - these are the paths that get passed back to TinyMCE or your application (set to equal the upload path by default) +$tinybrowser['link']['image'] = $tinybrowser['path']['image']; // Image links +$tinybrowser['link']['media'] = $tinybrowser['path']['media']; // Media links +$tinybrowser['link']['file'] = $tinybrowser['path']['file']; // Other file links + +// File upload size limit (0 is unlimited) +$tinybrowser['maxsize']['image'] = 0; // Image file maximum size +$tinybrowser['maxsize']['media'] = 0; // Media file maximum size +$tinybrowser['maxsize']['file'] = 0; // Other file maximum size + +// Image automatic resize on upload (0 is no resize) +$tinybrowser['imageresize']['width'] = 0; +$tinybrowser['imageresize']['height'] = 0; + +// Image thumbnail source (set to 'path' by default - shouldn't need changing) +$tinybrowser['thumbsrc'] = 'path'; // Possible values: path, link + +// Image thumbnail size in pixels +$tinybrowser['thumbsize'] = 80; + +// Image and thumbnail quality, higher is better (1 to 99) +$tinybrowser['imagequality'] = 80; // only used when resizing or rotating +$tinybrowser['thumbquality'] = 80; + +// Date format, as per php date function +$tinybrowser['dateformat'] = 'd/m/Y H:i'; + +// Permitted file extensions +$tinybrowser['filetype']['image'] = '*.jpg, *.jpeg, *.gif, *.png'; // Image file types +$tinybrowser['filetype']['media'] = '*.swf, *.dcr, *.mov, *.qt, *.mpg, *.mp3, *.mp4, *.mpeg, *.avi, *.wmv, *.wm, *.asf, *.asx, *.wmx, *.wvx, *.rm, *.ra, *.ram'; // Media file types +$tinybrowser['filetype']['file'] = '*.*'; // Other file types + +// Prohibited file extensions +$tinybrowser['prohibited'] = array('php','php3','php4','php5','phtml','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg','cgi', 'sh', 'py','asa','asax','config','com','inc'); + +// Default file sort +$tinybrowser['order']['by'] = 'name'; // Possible values: name, size, type, modified +$tinybrowser['order']['type'] = 'asc'; // Possible values: asc, desc + +// Default image view method +$tinybrowser['view']['image'] = 'thumb'; // Possible values: thumb, detail + +// File Pagination - split results into pages (0 is none) +$tinybrowser['pagination'] = 0; + +// TinyMCE dialog.css file location, relative to tinybrowser.php (can be set to absolute link) +$tinybrowser['tinymcecss'] = '../../themes/advanced/skins/default/dialog.css'; + +// TinyBrowser pop-up window size +$tinybrowser['window']['width'] = 770; +$tinybrowser['window']['height'] = 480; + +// Assign Permissions for Upload, Edit, Delete & Folders +$tinybrowser['allowupload'] = true; +$tinybrowser['allowedit'] = true; +$tinybrowser['allowdelete'] = true; +$tinybrowser['allowfolders'] = true; + +// Clean filenames on upload +$tinybrowser['cleanfilename'] = true; + +// Set default action for edit page +$tinybrowser['defaultaction'] = 'delete'; // Possible values: delete, rename, move + +// Set delay for file process script, only required if server response is slow +$tinybrowser['delayprocess'] = 0; // Value in seconds +?> diff --git a/web/libs/tiny_mce/plugins/tinybrowser/css/style_tinybrowser.css.php b/web/libs/tiny_mce/plugins/tinybrowser/css/style_tinybrowser.css.php new file mode 100644 index 0000000..9e7bb13 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/css/style_tinybrowser.css.php @@ -0,0 +1,226 @@ + +html { +overflow: -moz-scrollbars-vertical !important; +} +.panel_wrapper div.currentmod { +display:block; +width:100%; +overflow-x:hidden; +} +.tabs li.right { +float:right; +margin:0; +} +.tabs span { +font-size: 10px; +} +fieldset { +padding-bottom: 10px; +} +form { +margin: 0; +padding: 0; +font-size: 11px; +} +form.custom select, form.custom input { +margin: 0 7px 0 0; +padding: 0; +} +form.custom input { +height: 14px; +padding: 2px 0 0 2px; +} +form.custom select { +margin-top: 1px; +padding: 0; +} +form.custom label { +margin-right: 2px; +} +.del { +margin: 0; +padding: 0; +border: none; +width: 13px !important; /* for IE */ +height: 13px !important; /* for IE */ +vertical-align: middle; +} +.rad { +margin: 0; +padding: 0; +margin-left: 2px !important; +border: none; +background: none; +vertical-align: middle; +} +img { +vertical-align: middle !important; +} +button { +vertical-align: top; +font-size: 11px; +background-color: #d5d5d5; +border: 1px solid #666666; +padding: 1px 2px; +} +*+html button { padding: 0; } /*IE7+ */ +* html button { padding: 0; } /*IE6- */ +button:hover { +background-color:#8cca83; +cursor: hand; +} +button.edit:hover { +background-color:#ff9999; +} +.tabularwrapper { +margin: 5px; +} +table.browse { +clear: both; +width: 100%; +border: 1px solid #b7babc; +border-right: 0; +border-collapse: collapse; +overflow: hidden; +} +table.browse th, table.browse td { +font-size: 10px; +text-align: left; +padding: 0 7px; +color: #0b333c; +border-right: 1px solid #b7babc; +line-height: 22px; +} +table.browse th { +background-image: url(../img/back.png); +background-repeat: repeat-x; +background-position: bottom left; +border-bottom: 1px solid #b7babc; +} +table.browse th a { +color: #0b333c; +display: block; +width: 100%; +text-decoration: none; +background-repeat: no-repeat; +background-position: center right; +background-image: none; +} +table.browse th a.asc { +background-image: url(../img/asc.gif); +} +table.browse th a.desc { +background-image: url(../img/desc.gif); +} +table.browse tr.r0 td { + background-color: #FFFFFF; +} +table.browse tr.r1 td { + background-color: #f5f5f5; +} +table.browse tr.over td, table.browse th.over { +background-color: #b2e1ff; +background-image: none; +} +.img-browser { +margin: 5px; +border: 1px solid #e2e2e2; +float: left; +clear: none; +text-align: center; +height: px; +width: px; +font-size: px; +} +*+html .img-browser { width: px; } /*IE7+ */ +* html .img-browser { width: px; } /*IE6- */ +.img-browser img { +border: 0; +vertical-align: middle; +margin-top: -20px; +} +*+html .img-browser img { margin-top: 0; } /*IE7+ */ +* html .img-browser img { margin-top: 0; } /*IE6- */ +.img-browser a { +display: block; +width: 100%; +height: 100%; +text-decoration: none; +} +.img-browser a:hover { +background-color: #b2e1ff; +} +.filename { +font-family: Tahoma,Arial,Helvetica,sans-serif; +clear:both; +font-size: 11px; +line-height: 13px; +overflow: hidden; +width: px; +height: 28px; +margin-top: -6px; +padding-left: 3px; +} +a.imghover { +padding-left: 22px; +display: block; +position: relative; +z-index: 30; +background-image: url(../img/preview.gif); +background-repeat: no-repeat; +background-position: 0 4px; +} +a.imghover img { +position: absolute; +z-index: 31; +background-color: #fff; +padding: 4px; +border: 1px solid #888888; +display: none; +} +a.imghover:hover img { +top: -5px; +left: 140px; +display: block; +} +.pushleft { +padding: 4px 5px; +float: left; +text-align: left; +} +.pushright { +padding: 4px 5px; +float: right; +text-align: right; +} +a { +outline: none; +border: 0; +} +.alertsuccess, .alertfailure, .alertinfo { +position: relative; +clear: both; +margin: 0 auto; +padding: 4px 4px 4px 4px; +width: 98%; +text-align: center; +border-style: solid; +border-width: 1px; +} +.alertsuccess { +border-color: #00C000; +background-color: #BBFFBB; +} +.alertfailure { +border-color: #CC0000; +background-color: #FFBBBB; +} +.alertinfo { +border-color: #1133DD; +background-color: #AACCFF; +} + diff --git a/web/libs/tiny_mce/plugins/tinybrowser/css/stylefull_tinybrowser.css b/web/libs/tiny_mce/plugins/tinybrowser/css/stylefull_tinybrowser.css new file mode 100644 index 0000000..e66c8f5 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/css/stylefull_tinybrowser.css @@ -0,0 +1,34 @@ +/* Generic */ +body { +font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; +background:#F0F0EE; +padding:0; +margin:8px 8px 0 8px; +} + +html {background:#F0F0EE;} +textarea {resize:none;outline:none;} +a:link, a:visited {color:black;} +a:hover {color:#2B6FB6;} + +/* Forms */ +fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +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;} + +/* 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;} diff --git a/web/libs/tiny_mce/plugins/tinybrowser/edit.php b/web/libs/tiny_mce/plugins/tinybrowser/edit.php new file mode 100644 index 0000000..d804eb2 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/edit.php @@ -0,0 +1,537 @@ + array(), + 'message' => array() +); +$deleteqty = 0; +$renameqty = 0; +$resizeqty = 0; +$rotateqty = 0; +$moveqty = 0; +$errorqty = 0; + +// Set when rotating images to force thumbnail refresh +$imagerefresh =''; + +// Delete any checked files +if(isset($_POST['deletefile'])) + { + foreach($_POST['deletefile'] as $delthis => $val) + { + $delthisfile = $tinybrowser['docroot'].$editpath.$_POST['actionfile'][$delthis]; + if (file_exists($delthisfile) && unlink($delthisfile)) $deleteqty++; else $errorqty++; + if($typenow=='image') + { + $delthisthumb = $tinybrowser['docroot'].$editpath.'_thumbs/_'.$_POST['actionfile'][$delthis]; + if (file_exists($delthisthumb)) unlink($delthisthumb); + } + } + } + +// Rename any files with changed name +if(isset($_POST['renamefile'])) + { + foreach($_POST['renamefile'] as $namethis => $newname) + { + if($_POST['actionfile'][$namethis] != $newname.$_POST['renameext'][$namethis]) + { + $namethisfilefrom = $tinybrowser['docroot'].$editpath.$_POST['actionfile'][$namethis]; + $namethisfileto = $tinybrowser['docroot'].$editpath.clean_filename($newname.$_POST['renameext'][$namethis]); + if (file_exists($namethisfilefrom) && rename($namethisfilefrom,$namethisfileto)) $renameqty++; else $errorqty++; + if($typenow=='image') + { + $namethisthumbfrom = $tinybrowser['docroot'].$editpath.'_thumbs/_'.$_POST['actionfile'][$namethis]; + $namethisthumbto = $tinybrowser['docroot'].$editpath.'_thumbs/_'.clean_filename($newname.$_POST['renameext'][$namethis]); + if (file_exists($namethisthumbfrom)) rename($namethisthumbfrom,$namethisthumbto); + } + } + } + } + +// Move any checked files +if(isset($_POST['movefile'])) + { + foreach($_POST['movefile'] as $movethis => $val) + { + $movethisfile = $tinybrowser['docroot'].$editpath.$_POST['actionfile'][$movethis]; + $movefiledest = $tinybrowser['docroot'].$destfolder.$_POST['actionfile'][$movethis]; + if (!file_exists($movefiledest) && file_exists($movethisfile) && copy($movethisfile,$movefiledest)) + { + $moveqty++; + unlink($movethisfile); + if($typenow=='image') + { + $movethisthumb = $tinybrowser['docroot'].$editpath.'_thumbs/_'.$_POST['actionfile'][$movethis]; + $movethumbdest = $tinybrowser['docroot'].$destfolder.'_thumbs/_'.$_POST['actionfile'][$movethis]; + if (file_exists($movethisthumb) && copy($movethisthumb,$movethumbdest)) unlink($movethisthumb); + } + } + else $errorqty++; + } + } + +// Resize any files with new size +if(isset($_POST['resizefile'])) + { + foreach($_POST['resizefile'] as $sizethis => $newsize) + { + $newsize = intval($newsize); + if($newsize) + { + // detect silly sizes + if($newsize > $tinybrowser['thumbsize']) + { + // do image resize + $targetimg = $tinybrowser['docroot'].$editpath.$_POST['actionfile'][$sizethis]; + if (file_exists($targetimg)) + { + $mime = getimagesize($targetimg); + if($_POST['resizetype'][$sizethis]=='width') + { + $rw = $newsize; + $rh = $mime[1]; + } + else + { + $rw = $mime[0]; + $rh = $newsize; + } + $im = convert_image($targetimg,$mime['mime']); + resizeimage($im,$rw,$rh,$targetimg,$tinybrowser['imagequality'],$mime['mime']); + imagedestroy($im); + $resizeqty++; + } + else $errorqty++; + } + else $errorqty++; + } + } + } + +// Rotate any selected files +if(isset($_POST['rotatefile'])) + { + $imagerefresh = '?refresh='.uniqid(''); + foreach($_POST['rotatefile'] as $rotatethis => $direction) + { + if($direction != 'none') + { + $targetimg = $tinybrowser['docroot'].$editpath.$_POST['actionfile'][$rotatethis]; + if (file_exists($targetimg)) + { + // rotate image + if($direction == 'clock') $degree=270; else $degree=90; + $mime = getimagesize($targetimg); + $im = convert_image($targetimg,$mime['mime']); + + // additional processing for png / gif transparencies (credit to Dirk Bohl) + if($mime['mime'] == 'image/x-png' || $mime['mime'] == 'image/png') + { + imagealphablending($newim, false); + imagesavealpha($newim, true); + } + elseif($mime['mime'] == 'image/gif') + { + $originaltransparentcolor = imagecolortransparent( $im ); + if($originaltransparentcolor >= 0 && $originaltransparentcolor < imagecolorstotal( $im )) + { + $transparentcolor = imagecolorsforindex( $im, $originaltransparentcolor ); + $newtransparentcolor = imagecolorallocate($newim,$transparentcolor['red'],$transparentcolor['green'],$transparentcolor['blue']); + imagefill( $newim, 0, 0, $newtransparentcolor ); + imagecolortransparent( $newim, $newtransparentcolor ); + } + } + $newim = imagerotate($im, $degree, 0); + imagedestroy($im); + + if($mime['mime'] == 'image/pjpeg' || $mime['mime'] == 'image/jpeg') + imagejpeg ($newim,$targetimg,$tinybrowser['imagequality']); + elseif($mime['mime'] == 'image/x-png' || $mime['mime'] == 'image/png') + imagepng ($newim,$targetimg,substr($tinybrowser['imagequality'],0,1)); + elseif($mime['mime'] == 'image/gif') + imagegif ($newim,$targetimg); + imagedestroy($newim); + $rotateqty++; + + // delete and recreate thumbnail image + $targetthumb = $tinybrowser['docroot'].$editpath.'_thumbs/_'.$_POST['actionfile'][$rotatethis]; + if (file_exists($targetthumb)) unlink($targetthumb); + $mime = getimagesize($targetimg); + $im = convert_image($targetimg,$mime['mime']); + resizeimage($im,$tinybrowser['thumbsize'],$tinybrowser['thumbsize'],$targetthumb,$tinybrowser['thumbquality'],$mime['mime']); + imagedestroy($im); + } + else $errorqty++; + } + } + } + +// Read directory contents and populate $file array +$dh = opendir($tinybrowser['docroot'].$editpath); +$file = array(); +while (($filename = readdir($dh)) !== false) + { + // get file extension + $nameparts = explode('.',$filename); + $ext = end($nameparts); + + // filter directories and prohibited file types + if($filename != '.' && $filename != '..' && !is_dir($tinybrowser['docroot'].$editpath.$filename) && !in_array($ext, $tinybrowser['prohibited']) && ($typenow == 'file' || strpos(strtolower($tinybrowser['filetype'][$typenow]),strtolower($ext)))) + { + // search file name if search term entered + if($findnow) $exists = strpos(strtolower($filename),strtolower($findnow)); + + // assign file details to array, for all files or those that match search + if(!$findnow || ($findnow && $exists !== false)) + { + $file['name'][] = $filename; + $file['sortname'][] = strtolower($filename); + $file['modified'][] = filemtime($tinybrowser['docroot'].$editpath.$filename); + $file['size'][] = filesize($tinybrowser['docroot'].$editpath.$filename); + + // image specific info or general + if($typenow=='image' && $imginfo = getimagesize($tinybrowser['docroot'].$editpath.$filename)) + { + $file['width'][] = $imginfo[0]; + $file['height'][] = $imginfo[1]; + $file['dimensions'][] = $imginfo[0] + $imginfo[1]; + $file['type'][] = $imginfo['mime']; + } + else + { + $file['width'][] = 'N/A'; + $file['height'][] = 'N/A'; + $file['dimensions'][] = 'N/A'; + $file['type'][] = returnMIMEType($filename); + } + } + } + } +closedir($dh); + +// Assign directory structure to array +$editdirs=array(); +dirtree($editdirs,$tinybrowser['filetype'][$typenow],$tinybrowser['docroot'],$tinybrowser['path'][$typenow]); + +// generate alert if files deleted +if($deleteqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGDELETE, $deleteqty); + } +// generate alert if files renamed +elseif($renameqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGRENAME, $renameqty); + } +// generate alert if files renamed +elseif($moveqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGMOVE, $moveqty); + } +// generate alert if images resized +elseif($resizeqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGRESIZE, $resizeqty); + } +// generate alert if images rotated +elseif($rotateqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGROTATE, $rotateqty); + } + +// generate alert if file errors encountered +if($errorqty>0) + { + $notify['type'][]='failure'; + $notify['message'][]=sprintf(TB_MSGEDITERR, $errorqty); + } + +// determine sort order +$sortorder = ($sorttypenow == 'asc' ? SORT_ASC : SORT_DESC); +$num_of_files = (isset($file['name']) ? count($file['name']) : 0); + +if($num_of_files>0) + { + // sort files by selected order + sortfileorder($sortbynow,$sortorder,$file); + } + +// determine pagination +if($tinybrowser['pagination']>0) + { + $showpagestart = ($showpagenow ? ($_REQUEST['showpage']*$tinybrowser['pagination'])-$tinybrowser['pagination'] : 0); + $showpageend = $showpagestart+$tinybrowser['pagination']; + if($showpageend>$num_of_files) $showpageend = $num_of_files; + } +else + { + $showpagestart = 0; + $showpageend = $num_of_files; + } +?> + + + +TinyBrowser :: <?php echo TB_EDIT; ?> + + + + + + + +0) alert($notify); +form_open('foldertab',false,'edit.php','?type='.$typenow.$passfeid); +?> +
+
    +
  • +
  • + +
  • +
  • 1) + { + ?>
  • +
+
+ +
+
+
+ + +
+0) + { + $pagelimit = ceil($num_of_files/$tinybrowser['pagination'])+1; + $page = array(); + for($i=1;$i<$pagelimit;$i++) + { + $page[] = array($i,TB_PAGE.' '.$i); + } + if($i>2) form_select($page,'showpage',SHOW,$showpagenow,true); + } +?>
+ + + + +'; + if($typenow=='image') echo ''; + else echo ''; + echo '' + .'\n"; + } + +echo "
>>>
' .truncate_text($file['name'][$i],30).''.truncate_text($file['name'][$i],30).''.bytestostring($file['size'][$i],1).''.$file['type'][$i].''; + form_hidden_input('actionfile['.$i.']',$file['name'][$i]); + switch($actionnow) + { + case 'delete': + echo ''; + break; + case 'rename': + // get file extension + $nameparts = explode('.',$file['name'][$i]); + $ext = end($nameparts); + form_hidden_input('renameext['.$i.']',$ext); + form_text_input('renamefile['.$i.']',false,basename($file['name'][$i],$ext),30,120); echo $ext; + break; + case 'resize': + form_text_input('resizefile['.$i.']',false,'',4,4); form_select($selectresize,'resizetype['.$i.']',false,'',false); + break; + case 'rotate': + echo ''.TB_ROTATECW.''.TB_ROTATECCW.''.TB_NONE.''; + break; + case 'move': + echo ''; + break; + default: + // do nothing + } + echo "
\n".'
'; +if($tinybrowser['allowdelete'] || $tinybrowser['allowedit']) + { + form_hidden_input('sortby',$sortbynow); + form_hidden_input('sorttype',$sorttypenow); + form_hidden_input('find',$findnow); + form_hidden_input('showpage',$showpagenow); + form_hidden_input('action',$actionnow); + form_submit_button('commit',$actionhead.' '.TB_FILES,'edit'); + } +?> +
+ + diff --git a/web/libs/tiny_mce/plugins/tinybrowser/flexupload.swf b/web/libs/tiny_mce/plugins/tinybrowser/flexupload.swf new file mode 100644 index 0000000000000000000000000000000000000000..4ee5a2ebf4dbae0d6b2358246eb82cc3bc501076 GIT binary patch literal 272396 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�X!YAxNs`iosbn9Sb-b^|5O%#&l=#D# z(g?EbQ%0Ph9GMNmklA5Uk<~)A>N)m$(ZCQ&6MtNYIyTSf9@$G`Nz?-NuPW#ZMct!{ z@tEz21_@;=VWBOdk;(RY&_6=SVB@tQe?-iQ?GxutXOs|)1l@v66R2-lPF7REeK<{?6i7)tSwpC z+H^I2>8ubg=V^yF8#&Z6BDmzcB1oNdM=ocpF!nz3t^{9}N{&rW@D&ZrX*;oqwg$&q z{{zi84DMvdoF94C`&a9L`5XHw*t`-J7-gabVMJPPN!yH)VIz4HTOJw#h0ydPaIZZ;4YY(%9Fd8{WpR+p>Yf!%FDtNs_8>r zjE(!8#3gL{(7gh7oHQ*Z+`);1UW7B27ndT+@o22>SUeSb0S-!?27pnhr|XjxnGfKK zdCYNpH2qQ5)q@wLLROyG?n2((M8bkrb(MCb7)ygRZOK-p!aC~PD)a`QjvKRIJs3+n za&^^0r5phdHGrIJL|P~X=e^T#C-3_HXw|Hsc34sB@v4z$dQoZ!tzlwlFjLY;!zXm@ z_H`}=){QCIB!Q@ym1XwIs1&kk>_zAZ`XUXl_Eks;-;i^|lz6gzjN^j?C}@8q`&Iu_ z%ml>4wAu^gKu+}ISeXyA#F?QjA_W}0;S4~`n@64w)?=iRCt!c=wMJ{iVwa8T5H9Cx z$H%+OA=88{vv7$@At5ZGd=?=R)2UFt#O|yvLSajATb(L#Am<${yS+6T_hGu0jgS@6 zC5lFb2oKvPpkNoHGr$ua6-GjIWL-UuM;gNk2*A0HCA9!g0K8;ltGc?s7zIuTbv8hs zA%cb)gg#9SAdU6{3jE}H+=A#L-uy@CN$=DzO9-u97S8N>mDdRYcc{b1O?LLy&*_`HNz68uW51Qo<)I#5FotTB&N zxf+&`@3kNjugts{OS7}E%p7qR<4Wk8aT(~+isnKL2So%$vjXZ%^aW=nD6}!G96pNA z=Q_p&+Vl!QJPwMea#Z($G$EfCQvARJsJDw&^B; zM%PU26+MB=Zxd5O{uuM#=K!Bw)@;WaDv@r6_E}n}ty&4LDVB%jiSoyLU}OQAr^kvymLe z9m9GKhW0aB(#Q$aj=S)WKyqz7<0)|^BR7v64jFs-^;aAo zOkN4^2dzUl&rD(q=;+YaBdf&qSR@tR(yO=UyI{&kw5V4#SYRlA^GHYl_~t7xKPl*y zm%&Z<6@^o-qJt^Y7VkeP_Uxv$D`#zlb}Fs@;dFdvk`|6eL>Z_=HS|Mg&fvkAT?GKF z8=m&g(A-(_41xmf4DB9tSYBo<9If@Lak+;F?-ucbpw3ILdobRKP(sTFsUo9nA(set z6}DXv1r8+ZGq3G0yqgNbrKDQgHP%;|!x30Rlq|%fwQd0RqjyS2Yp@fD)1V&IH92exU(GdC976OI(_AFavA?am=({WX|Qt;5x1b;f*>M zuCC2lNA}o8nm5X_b)~D{4h^BnAUrusXnb?*F^WFz5UUlDdMTU1 zlgJ28ng)Dx>|gcP6g<{3ff|c3BaR{kHkng%2p9ldD{i$8nGbUFQ3nw z_=4JXq5erQQTBdGSCS@KzSRV3OT8h_7jn|OIze?4uZH1tM36WN=5hvp7G=qZ39_&o zfDgVt3#^QB3hmnv_$6uMH-eKGp*h5H!^aYOhviT-!;cKEy$q9{Rr5xgeda7?&y-6r zSUN{~n~hFpg4a5&?Z1+1b{iVYyJq91*(Gqq2Alz6D7M!`G`X%3Asqqvg_sP?7W>#_ z%Q!O~lGlKs&Lqb$$p9E$S4qorcDy0Qq=2L)CcilImGya>hx=_y;-t`zEWKDuc?Q!w z!2~K&fns50UE}oX3Mz6>t+*uT5rO0-pRgz{OB@vA=@|r@_=*VP&7Mk^CBg`QZ_Jay zoQx*EiW87TH^A!J1I{N`P=7g?MowKq}&z&BuFAZ@)pI|nkp1hZ#kzfv3= z8k;OjQc(lh%VNJ_5I!cUVGdUm(0FQGxymGkSs)lt$`)K56nDeH!(QbDum3|4|F~rC zE1V4j^l&Ugk1H>GG!Y*e(H_^r9k^r0Udg-WXbW^aw6nHMV&TZd-%@K;pK~p)m}?;J zDD5oDEl_r6&!_DQ_enzNP2dmC_ziMC;sdrlyKvg@B5PTk5t|Ue68^bg^hVro=5O8R z%V55a1H0u+@#ybtE{K5rHiwfBeq^K2)JNTX%!WKIAzE=MltVc%pbKLJ-WYS&}_AgFx@2}ph}6Mi80=!8@?hJ5!f3R z%SUdFRM_n@1J(iJV{&3r;YluWTd2}Tml!~_B+dz&fXNG5+$CIgTV|unH0GHPy^Fro z)kvz1Dto0EcJ7?MP;67pJ(B2<#D&P#S3ygRc*lXV>AMLymHX4dx~5bgAr@_Uj>WVJ zPkc+8{$+8-^+A5ryY%`2Of_4w#GXQ8$t;FRv5#ldF)2YNLI?Uk1iO|gjSL64reBU^4_5J*D=q&`Bx@F`(iR9)rZ#vhP zmbs!ddt14#w8|~c^}fM9pUEmxuxJUI@CMIE{BcD6a|m`F@^d4uI4bU3S02leRCaMI zT{P?J^hNS|s;5NjG7=os#o(d-!BDu1l+Z~3Du{Qjf+_wK*{-rgUlsUr`ev3u{)uK7RQA2Y;-N zp?DNK_5t}6FA|}zBNnflGc%K)3N?5N(t-?m19&bXvl`7V$^>;tU!PwgJjA+J?Ac=( z$z7B0ji}w-+w<$qluJE@Y~I+8StZO!BIKeViMjCT0A}x@ZqEgmNpP8b+cbeCIw3sL z^co(Gk^v~lLt_R@Jm_+xYqR;9X>Zt0ZFtuA%3;P3>n&Vw^ zFkfL&tT6cqG%$0M?CBcvS0i&S)5|{j3K3@30@k@?t-Ps&l01cS4QYgfIZnhs~nugS_vuGBU9$)7RiKT2Lo;>=LqzdBCBNiSukId z#4=({%{it^6j51PYi;WxYJteoUxTc$eBrkO+Ue3Ek;ZwUaivsZ2<_a8WNoS!&#<{B zHk8A^%l`CW|F-fs_d+2USdcdTR3NG2-k(-IQi=M+%U1f|`B+UI#E1sg#gqlA7 zLs|Lx)Dx;r)>3qt=-Y81=X;KduKg6+C58-ol-R0zc(sO=OhJfi&Q-zjnR*Ud&Fps(x5y(<1uF7~Fdl5~$v>Vo2 zCVR@pDK{vkAMnWTT$$2HOXq&j*s9s8ngddF(7L6K4(*+f^);%fIWo-JDrz;18l9Z;S|pti7ewrveSeVGD&u?Z+u(<>Ra~(&z7jp%^etw8Kg)zgRO0iZSoI_6 z4>QQBs@Txl%tn&ahUia=rwxw_1wT0Am>S&@3$-Ta`~J3=ofIODY)dK_&oU>8g;~$s z)6MT)EyO{QKBjw;z3ILp>Om?jev5-+6WcRDGkjwZme_Oz3lD}0jHTT$W>hy!Jbf+cKxv&8MCcSf3tSbx^J#^N$(WVCz345D{Ql<_b`S{5*wvtQS<&2TX*MU2*Bf%d z)+I8jk8pp-kcsxjEB!ZOi5tA{!$R8DUp8ygT^{5$PpFs>r{CN2iav=HEj4sccpm~R z7#WD$Y<3a>#t0b`w;E9|dgQ5I$VfhaZ8Oo5X&8F%Y)D1Qv^%87M3%p%LcW7zvb@8L zEKZ!-zsYbX%l&BNr?o&WFH47kHTe}@<3!KncX*&Xqa zV|5S}Has{dozyLila@ls8#78W|C^d{(JiPndrfHp;3wk-288bN(9np`E(eBDERpCn(hfH5gP z4c1$QW#|4FPJn`(isMN|EexI0Y&Np4URh_rqKN&*HGb{T%S^yWWK0OshxEBN7Kot9vh*j#B|vE+SEg28QY_< zms-_=8%Ze3$>V5d0XC%kF^TWyW$(m$4)I|1ML^8?n+g78lK$YTt!by#^p#|zf2#@k z`9gIo^uxa^Qc{dSqtC%|gt`Am(8nC!v zgrT0sXj?BIGq7imn8x~>E59Qy9-^LwcBZ%SyVif8~Y&BzfIeB+v-h9z!a=j;NNg{3B^ zJr-&)!ls9x8Ca9gsMT2yR+PTX&*rJC&K5Qc6qMSk`2M?}MN>f*F6+$;rb(OvqJI6S zIrh+$(Gosko9lBHRTvf*qST*76bI5yg4@Cu0TLX^7NVu(oYz$W5jmG5Xn6V1yA>Dg`qH{43)C^1r!kRjQ+yJr`NdD0Z9}oG!an`$m!19;=U-S9 ztdMj6Xlj;&i-{X4HByh(Nn@L0Fe-2*5{lBkN5x6~{HwZWl+-YtrlRa0e)?XTwH3vC zatGkxH|))|<0k*?j~_glpDRrc3i3*j30avy$MWH;+YVE?97Fn>v^_Au9_jRqIzcp!WkrmZ<1H`i`Wcg@N`B^6h|k40(z*zr~yHPUNu7A4!Sv zGQImK-Q-hAnrA0`T@wx4Lctmvb`ihwP?}w=;jEpFNspcTAb4v*WyEZV$OTq1s*~R< zbd{(0_NW(iLbtC5B+?Ytgag?LU!&X`@^TQmD4?Ztv@TIe*`vZZToS4c6JDe6$_Z*e zsHmDGNR;)mq8@+phWSZjCp`J1>`0#CoI+9P^^1R~gMs$TFU=HWXBa7;3buDbgQq0! zEun8IVxuXirh(TQcg}?_o~8w{suKlTx-D;%S2~2k0%?2@n)9D~Rbf#Eo%;;nL_H5h z7(!1gO@V%xwUxvg(XeMK4RDZF;1BP9=IItQWD_$1J55_d8iNiy?DhihrHP6dSOj9x zbj(?eoY9#AWmG~Gsmd~P;zJ70dBJlqsdYul96(# ztQs1g%u`?`Uy%fuq?Wa?FMtH?%jM3j(Dmlb_caMvDo_pHly%wH`<~%+G_B2Jf)3%c z*XESh_*Ao>)dVkj)C$`Q(axN(=n{;@*q}Fjwm#E<>P?BQ8g*q52eBx!;8jz^jPufL z#!9GNVd_kf-Bk%k!ef-~BAx+%RO4Ewr=V#dAeIzOM0n=H*)= zlUR<8;b=NpF{mJ!nsQaZ-=r%82CpkVBjr*-=})3Xn&Z7Tv4=G|p{kqHKjSxucBr( zey<#6U=kHBO5-Ey@DX~Z2}_0DrLqMSpYLKQUFjgeogcO;uL?3hZKdnaDV1iaIH}3q zsC7jsxLN(Ahu3QVyrR+)kVflIdtL8Xsd4Dp53X(V`Z{Gz3NEqOcdu<{PGR&K?7cvK z11la-5lyf!V`gA-oW$%Y;WG%%NY-#4ltH1oZ1>K!ozP3g0Qr6%$K`%Tzt3sug%Je9 zC@k^}wepYAiyg|>378hNf@}(^7ZLV&G@^()Rx$L6A<-;simE;fAD?I0Yu*7X0vK=4 zb1e9K+6oY->aG|fV|fGq%^xY=Vzvt>Dfjx1U_WiV{&Q*vpSr-p*IuC-#=i%4x$fhJTsr1 zdmj2N55hQPv37qtcCO1^RoY)>y5nAxVF69G=LeJ6DS*ZF!0%!R&0*KSC`9{s^EwF> zW|GR&URb+=%{4-$26@k6YzZB+dJW4#kG5G)E?T}!Rg^$m^mN zA-mc`EQYJTd3A6BTjQqqG|K=ZA5Ni_C?C7zNLDOp(?k2Ih>{i{0X^gpQMk%=b(_p& zIWF!a)sp(KYzOCicUVivUuX5Z&<@||1)X(w;ISi2~vqY7X z>~<8^o18UEFF-}9WUZX3WJz)FBaa7>L)C)N9hr3{qFG+@U#8}sXM`UV6}LV-*c$gF z(e?2y)e9uqhprN3PjZO$jL2vPDNr;g#^=1&03L`N*RW^I{sDy&#= zuXRrv+ezXmppigKBv0_=?Q4;lCk8TuQH&U25Yp-60jxBfdchRk#mg8YvS4&l0KE#f zllOFPJr@6_0Whl)MgwKDb!soR11DYATElnPXrps-pk>ih(_hhn8db!3dE+{; zr%J>&0V3 zm)K~<>b>Pj@DqL~rwQYS|KRRw4>{|~u?&AN} z=Z=mBUfzTB#v%0n@aW*Me$;H#k5k_u6aU0ABKtzwpofQvoVT_@dk{UWpUYY~7&gJ} z`e@mH5ef8Hh$ejbk74-t_>XG;`1p@%ANcr>YVr8xKZa%27ynR(BJuj(Ve`4w*#8)| z;dY#ViMA_-j0V9rD?}4ATTdIi+wM_)@8IKlT8q`4hxeo1+H-g7s9tNG4@x zI3B+$L~|=!Cr3y1{ib`|gdVzEPiy-hHugVUmeF`7q~QcO44j(fIc4jXI3(6)V}BcJ z=H;P*-0j`^QKG)HQ{QS9q3-d)5ggn7+K2T$XeCxVX&x*d>@WJmrGuTF7*1ZShxa-D z5Cq%y$j|GrgC<#s7K_97Tzp%grcCD%Aj|OAu!l#@w5DI45*hXV?WD4bSQd)MA=$+N zONHSHleHocosijaqEhE(s4L|7WdZR3(x93#TYdqC2U6;JObHq1KsYArdkZ`|CXpI;$m&QTC4O?coYfS1Y^O>U!2i%E|Jv>LkrUo?-w0H8WEx7{w z2QKfU6~#8udn4jg3XCE@l#!JgQ$m(&?`()n1*d}mbxXEUzeF4q(Kk_s6f`E@V8osU z9QCy@QXadrb+2ovw0CfFTz9t*KG}Bc?<1 za+Et74hJ#!x?7Sg&ovJYc3rr7+~cS4!HmXoALdma1EH)mK%#}q8a2~e#W3e7bW7$S zU6@fhaF}GoFE~wFFYxrKUf>ERw~uNcy4!GkZRrs+OG#S?dvIYk>lxkOA(yT{Ycy@? zr8&h(`_1}MQpMrmMEY7%Iep~H2zhPkvOFc|G~9??uRT3O`WWrC(I*OV`GX9li$WP< zWQ~Ifx(`8TXu|1=wcFSSeC03!TN3;av0S$=;@WcyJ7e(!qXqg8JXmuTBCQ zXdWEKTNtpNzlrV9H?hSe<_ireA?LhXup1Zyj0uWU4q@8_@f-)EP50;+Sk29|Jk;Q|L z@*-Q-y&dVBG+Q*p9G0kLyP^w;t=j%peK+BfH}klQmql#1cHE5bG>(p&mbmC`X?RiE ztnVBg)m_Tv)hg6>;4HdWi4#iA`m-iu$8w4t_Zm0kIXa`wrvTcX9_(%x(L>p`H|~)> z4XLPa9vtCXQFF%@+G7o&+hpJ$Bu);u0g@${p`X~UBLGRT4R?Cr!41mf?J|nBMsTz8 zaxv$)Tq8sPkogdEzjZ3vn6w5I0oEUL#Hs$(N*AdE(o7(in}UlQNu`?Wsv(#)vz6CW zmI$3;W|wL9m~fHPcSC6Q>khP!#5xxUUY(Iz3;H_<;#<21$Mrbv{RCiHC$-%K`<;u| zKZdnT9Ksob6FQ>k)iFHJaRLAdh7C&qLK0g9U=z%J&DHjwi<1fGq`uS|Ugg8(rnDGt zoPxG1C^b&Is?x>>+gA!77CIrp<6A2WAO8NE0FnR`N^kYTA_V4@oL(~ z(&SnkF5r*6D|_sn(%ruVi8`gvwN%umZrsYVR`*5<0y{KPOZhPlo z>*N@_O>Ik`i7CpX4pTHT>S|W2(AbY3G@sUw;{F8vz%g)#!=B{31I~MDzy1j<+wRHU zeiBX&E3#Oacy#bd0#c6r3wb{t0X(f8*RzH*(i~TYB|NG(x1MHM@kP+lS+b0i664rY z04s?-81c#8((b`0RX_xY)xUR*l;t(ai<&7wG{h|!$a65 zHH5kG!-GQrDM|TDz z5>XqOfuS$JuDO=UE6avZhYn{~gn zzXbo{0YGanjoUc+DBAB+}JT838;e<7idN|n`+C@@Px<>&i^leVrw-8Ss3pJXV+}ko&)8LsY6dO&0^F)A* za&HNUx|O*wMKJ!P|Hn=La`CXSaItWnkx2;c6Gyde=zXz`m#oYH3Z$Pv^0#)Bqzp`; zz)`qv8R_p9x$KJ*`2TpZ-Ct~vm)WE5bl5#ov5hWKT8Y)Oq%hg^84hO8=ugu}^SOSU zm^DfIMXlQ$JvHGQFOdJ53Vo#6@9fZ!PU%s#JezyL1J))bC)30B3KAg>eFcF+v!s}#)KUL5bdempPb4C&5i|P zNn0a~0z|J+kzBJ-9YR!WAX8A&bwU&qmcehOc+qh$r_c@WPHWKXUoE^_gyaEX`O-jy z!pBoEpLh#@srVD2c7-FOGvln&(BZ(t0|q*zn5i)zC?`jfRF;UfyO%43&1td z=m`)>(sv!P4LNbU`tY;Y8pAov_Q_Tm{lg;VCkioVio_LM%%MxOKqID#v?p}^rjAEoCNck4mn#qVh@Z=(5O2o zr`W;l-+%ya*-WH+GDWv0>GP%P>Jj;IKnQ(UZ;}C&@@$0Hf9s4L&|sG+*!?`@i`bKL zlEb@iUeR^q5E|z#!7w!YQV->nhJn@uPMR92(1F>J9tq)0|5q*5WfTRbAUCLWPk zN{UCg z_D9}T+i#7#v8M-n^(8&3&#Z8d7jMhrtD!jY{CUHTdfgOWjznmw}}^q(P2 zGqWfnBY%Mk?0{s5_XJo-NB;88rm7Bv_XiK`L>C`oZY=j93v7lWs@d8I+ ztMV+roC;PiztIqp&mmuZ$Op`XUoQv!m8gybdq)zV4{VVgEc6nmWYv|Jjt~P#pijVF zH}1Djr$Hh>g^R8=XkDVxX&S$QmKXhYpPU8aU#tXw(<7mu0nf?y*uMxcHOc%Xe43JS z20W$UsW$+kC^(akSYJFMuQ0(2w($1i+tm~xgo4eTl%Ee$xbxX%+HKl~LG_(4YT!?Vxdpv*6e%rA51mpOBtJLU@G)Q!>k=o@)PzLIzg2M2#ny9_Fv6F@5aU&(PLxv(+ZPOG9JETy-Sev9T3UCMkV^A^wO2-e~&w!8q-Pn%7W@-KChvcd9BH z78wIU=1Vv~@=9U96ho%Pyour|{t>8LM_etHCfk>;j3egrn}b<5!;DLWpl&ZY^{gm;7JdYnQ= zPgv!>(9@?F@Xut3f(vyC5GOo7! z)%LhdEk^vxvnxd9%wyw%H1m%Mirdg%I8HCoO)>d*M)3_R=w$SAc?S9lo3#W;$aA&2 zRDfEJAa_LOsg{uSkei@Sc-2rjQUQs_^2Br-k0-ViDTl<%hTd*TfI02#W~C2W>P2!x zzTVsz_d4fz32-u4W)q2xQ6Ip4n#5Pq z6|xMpL9e!atweD$;dGf6P^xlS;*EFw!Bnh_Eno9W^N2H&>OCuT;6*#)EfpGyWevSI z5k*t9qSiF6Z3<>w$SzpoEhpI-qG$58qy#cV;~>HQ1`5hI0BH(ZDBj-a`5QtOE0yeT zTvGx`!CSL=niqN-AUz-bQ@Cmc7zkEceIiE?Kc#TqZ1_mmIfwHRu@NbKRdzYTyU8oV zW!`9W5CJ}jv3qy#-pLCTV_P_~E1#Rr*U5N4VDXypiK#*!VxBPNH#fgXRMsDSkIzda zpKfyu|FM-qC*sIGXAUecx+>dAZH!2dAL*PZ(vok7&sa96;3`e#%0@tVJ!y9+K3isk zX>3Y`)9ZOJw#7+W*_bz)WyQ9WHa-5>t!UglEx9x+1X@U0?P{(V_sija9d6o54& z`o3$Szwt;;sTb@JpRMCbZcMD>^-NE$Gk(_N^AeDLrM9Nr8E`<4o<+q#Zbz+5}otbxHe%F_JsUW zWa$~9L->X@2}R>Kad}d{Kw-IVUcAZL@?F+1%Xh7X^yW#kd9Y8+tGq&)xxJ!#mo0`V zvdxt+MQ@dmY&jxA%GHSQP1a^)91%Ui58JKRKCZ``jlKF&oct9hNRal7|2$8H#+V|4 z>%KqPAyR7Si+FbQnuZR^tn?5gcXN6oAP)wKBk!z!Ia+wKaJKZX1YaLVk;^27av6`b zcrErT^b8H*ba7E$ZGJxHZ@$v8DxE&Nw$*HWTx-^aQY?%6gti|F`t*d@NKGhTixF+15!#!Rl!Xh}dpn(rOFhfn}&U(?-7tuSz^fDcNJMGexr}B3@Za zgY`2Qq*1b)7X0kSsrGHa-$!tzp_c-JErj7LHEWwCWJS^2A?E=`*XyF^Sh4_Hg0aR~ zg_R}(H(XIuR^-i6)>7n_(bMF{S=H0DjhENeA8~s|Fd{}s%N^ycRsrXT4}dV*jxAZQ z1-@8Av@C|y)#9Cdi+AoXe&aVT-g&Ti=gz{NCAi^YxBukMx5Lja{%n1FTC5SX!v4k=t&3KvZlD-g@ptQ8*b>6(UAO74*FLy@{o1GK0N?a6h?uoGbI2A zgCgk*RJ7nSNu|hSOJ%7H9X6qzl0y1JL|ev3!h{yvgFNcRixCjmLYa#Qx0IgvyZ!|d zvVkX@aCnNxZcC~*C38+j8Tp7iUA^EIj~^e_w(14e@vNOrL~Mb)R9_dz*m>C+lbNOp zlP#2UV{opYC)wQR&<~bIJ_k6G2E2^IqCpo!81&6Ty3owy7)}S0z>A?ztfJrV)`lG* z1Em|We8kB}PL<$22cI^)mo0kt)s)CKETY*w^v^mD$SdQbcW*WH_hGnhT=X6+dJh*z z6O1kiu!)&GMB(ws6YPyYflfNRm+0#TLq=P8F`=6;AW^r`NgT{Z8kVBd8dHdS2UF zUoF754rDc~aZ{9<+kw(c=C>ow#Z5n#tsYNLWvg~q49d}zjRmJ(1Wt#Uz$UXK+LHus z22~-^Qw_>FmH-1vwaIM)28@P%e1hKba33#uFDD5=q>d-!*Z?lRH5kMESiK9Q8<6)j zB4CiY!s$Ol16uEs#&%gm{Rv2lyG4<6lOBf8CHWy5Lo!@h47wTCaAqHVX?2Dg+X>it z@Mp2(WzNwOESMbnz2U^#KLH$~v6a^pzT9cAyLf({?dbl|xHm9E*;fCebro#EG!3Vt z#mmcNTONYNt1B)BTME6v!d=+)678)PP$;A2p8DUS>T-__E2=Q2*tyDLII z^Q0OE8m@k&ntHcN>r%W$5nP!4DA&G zlUL63X*;Dw=x1^vfJ7q!Y68c%LWQ)g=G52T+08etv;ekS5@y4Y6lzEcuG3hwwy*A zrWhqNq^=~r12k$#Cc_oWs6zrSm9~chkkGSgKH{D=j?TCP)TE~XHeYF;dsXx^ROL3S zoz}1lRDZP%v_8|=Ubou5s~gUmXBk#im+Snw=^fdIkd< zang;>iKsIIb4ruEnI)H5#mGR?FW%TcJZaw8_p4!e4nbK~PjNGDI7S}cts>(!Bb7N9 zG(^sRBii6h2^#@A*}My@1ahQ{i7Q=Q0asdxl;_yUEYEWdCsd9x>xmkz#a{R(N%C}x zv0O^5L*@-hUxutd7g`J5Le!I*(0f7xAWeb=UitL?LDQ|Frv1TDNhxz3w$Ni3It$sF zdUQ8eM>46ZN^Mw(gPt7izPS&7tME__&`bKnuYTO?dj28N<{Knx%!bSvSg=+6QR{#A z-ReDD{QDb=`+n|X><`c2cBVcA>+r z@Pb~Asyn+MS0RrxHs0OGYCyH&W!jm-VWY+4t@>^QDB81DKg@t6rs%5Zy)1ka*TrFL zavml=+uNn~+r0_;Yv%8KIh+x{Dr6_vr;T^FT0_fU?9X1kM#QV+24&(mZ{cL@Os5N;$7Taq@=cCwOd_4t%A~Kt6Ocs18zFZtJgp`Vt^$=po1* z<3M10e99_7scv6&yyeLU{m*S?_A5fjGgmjPR$C5AopvD6iMioOCg zsGp)~V*aBV5h?CRXRGazT)hQQo6pwcXxMpcXunLNO6Le;_gx?6o=yO z9-Kn4aMR!a&Yf@W%qFvwcaq7TIr5zIoZZzh{*&}*|4ne@n(z65Ho7JQKhz?Cm4k6t--s1=u%eFfQ+Dt zG9BWZcao#+_OEOLC|nG6gdgYzB#nk?zxdaRV39@6vC=X9ybl*-QeCMS)>77O6HaHV zVwG@U>2XL$>8@+Pp8j!+FWL@w-hQ33TB3a~EZ_(?mfG??br4Bb&mAt1HO-~bs-qG) zvVp1>568UJL!4RuA@YLRzGhjWq0{Q~%DCt!Qw5rulc_UL%pi)IYJ6}xZSlnC>e^S` ziw=lCuDdGLN=iFVDmB$jBf_(`R-tN$@p3hkHS*?)4@-fYB`p{Jge#DYxf=|*j0XObHGhfy)`Dsy?7IXx!50cW#)>2zwmPuafZPf0UJ7^*0Go_J%Py)PZ~HS&@+uU#`F=&z!+>ukHp9 zbWOaM)66sh#?nXJRH`4@gVQ76$%u%rWKj{b2_26np9bh5<*O?Se@CN zS)JJz@O|-Au_w3XF$CFd-j^rOb-hS(bxxq5;Rw@*kYKfQ=0tBXdowKQiBKe~fBtfW z{}~>*M%~(o!{vJpqPZ~gkJBYo4RMN$UwYxB$;mb^&8SqoZHdAt%WCsqGZc2I{59=V zdDTvrB;mwqZ?r!1=oFMv8>6OqAQ7$4rxflw_=gu~JfrOGgMyK4qEFNN9C(oaC8;v1 zZw?vvl^j(?pk+j}1T9Xmj^uGaVRxtI|M| z^K;F2VPk|`u|08qk;Ol-uFT#EA5LfCp*{{}+~ATY>-@;t0lWh{Y6yPyywz2+ql=c9?ST=W-W`qH9bBbmym1N zA{J_n4V*vDnOKF<`+tNE8BqM4eVNiJpnO<2Ger&GmoG?&BUxQ+3QsSl{4upG!$0|( zGf`2Q7fmo8t!ByoZ*oO#JSL?~XgeKY*`uJLxAKGM)Id+5+m?~>d7zmN4pX>YJe4>PQ5V*U2-1u`%A_!sZCjknB6 z5A|$o{cQyAg2&7F1>2GR4_9n!+xUKcV(6J*?;qg8=sP>CPcQg8mACEK)7yjn{RQrQ zqn=>ai6_&Er*_uk8U5);gXw-Nfo(SdF>?Vidx5YePq4|v6XnE{#l+Ji%kg%5zL=dr z*p_GLuqQb3@Kt8wNh#~DH0v&#^|)StI?Z4@&1l-JHNW3hK+Hlw%t0V*(=&A36AU}? zM4WXupLIuWIKADHU(}f2ZzG`=I_L?mJABQ~x-%Qhd)qdgzS5t*GMpA`&VL_j3Y+ol zoA(8ytv_kCy_vMV*}1&LIUi?3hRbn(d%^plZ|Gty9awMu32hzBx(;?(elru$n?TLD&~>u*YvOy~43yuyNNdwFAMLnW~UjmTxEt`TJyal$|CV>{rKc?xnl~EoYam%@XbY6sI|ew|4Kp;f z>*Q5=?kO#CdIpdAU19D?K>6j#^3V;x;JxPLbrX131ew9ihZ2T?$-u8~z&o+s?f1@; zS9Y0Wa-0G)X2JJ{lULcfrzzkaVu?_thsQ8~@j|iRqcFf_EJ9cc<5<7n@_f>nkx9p?=f4SJ~C4+NQU4o0p<51!20r z;DFU9k;&Kh@o7Jnq3tU}-@c&LC$ivIi`S<{o8x*mA+bi#D^1_qM$;Y2#Ps{jbY7fZ zritB_&qL?qWjAfaEXyS>1#-7>qgFXrCewOjhGJ!gBRy&Ryn>)rB~~}HLOZFST~)Pf z*u`ahKp|p8v^Wf-Qe6nB%H^$D`{oiqwp6TY3bo~^Z>jrFp1w4Sx~GGt)hmji4l)!azF5?c9YVt%jN%i(gf3D^${VNB}LcE{ote8%}c*7mH+EO zBg{`!h=;}}%iS)+?I%4nHFy0b|5vnmhcNwLMQdjUuUcmhhKaNqv>3JH6NAYy;k=9h zHu}3@)uWjF$s_?H73;E;uNofQg03UOQ~b)-!NzLwc?llejII^KQwtr8@p%p&+#;^X z`?j&UxrEEjdlfXUiu<;0SVzM?1{;$pdAA*3E2E!0dMRA-My7xr1|)pA9?dkaS!?nx z$~J#eYnszjdOHW#i))st^%iyp+;!i74Z1I}%e36cj5IRZyq*7&&gK=y8B>e*?zp}d zH88+*k>AA(X`1ecZ=*%aRG~j-#=MX>=*REOCNNl}@2OPtcPqN?6HSj%z`PJPcxUG7 zH(K(eS_}H$;F)4fN9kO}_q3XB`XVo*sLVQQy;vr#TOrMMD9d(iyI3i`R4%QHo$4H4 z$)mwt*D@h}St$*9Z|Od1D|4jNqPFp9H@@VWn_l?UyKoKayLnPes!>d`pO4R%Pm*!1 zlySuZJH?8$HH$>P+193y-jBXUj~P#+}H+up0qzN+-t z)LWIkKH9T-(m!|LcF*^e_r?m=4a@7_eBVQVR}y+N32p9Q-`>CaWAqvl+OPYLZ~Af@ z+CTL!iE)?7cPGjIZTT|D?8!2$dEV`hpZb$h3Rq9=xkx4OPpuS~@xA!{r^!sa>beU! z^c{uq?N0fm{Lk9kJUDwRWR&OG?sX;`{JYsU>}sIc$fj8@efxYrIpi>QiuQ>x0>7|}^o`Nb zP>Lh)b2!wc19WuMglzDLdgl<#(Eg=c>L(#C4yMaKF~iH8ft8Mz3lGmx zM7rV4?OX;wO>@tUw+lwkN(AJ+%l-m7zrbRSOR#GC24Tcr$4kLiPdj+Uy-Po(L$=!~ z&YCB{;6Uqr}D&+@MK20jqQK zS*$wC2)in!JFG|Ya(tk=UR|yN-%dJM0p!6o3@#z7&X}UXAq-lqaA+Wk*0ZspMbkecEsaDr7PW= z_1a-!CtlTk9X3CRo~2UbWuaeUs9rCqVtiiIhuK}|`tv5ucF+xyTj;83rlAVN=TGD@ zJY3FdJfd%A>1=Hd+}SXTT$FB_8v3RghCsf@t$w`uzVYWc=zVf4zbTi~Cn(?$k*C0( zs26REsDA1SSr}E=QuM4Bi=A_(%b~4F2`JczkN~O#4b*sLi?_t$=urQV&UWZTQY;Mj$PwrDXQ~%DN<*S+#Z(|BCK=gz z2-=U_kE+g@t(f?`@ZK?{RzSe>bE|BJb!kSz&C^}+`fftRr`i+QQXsC!fqm*U^b2~L z|9n(jujDfe^7IEh#3JG4IFYN4Y}1RpuY(y|HRcM}PrqSw)xDer!3s&#Ut9LKCa{zo z0KKv)`M0+3+$jsg#81I{Bt)kku_bs269i1h=x&#Gn!*{YyK@ty^}>Hwn;f?60u@h- zYqO8rUhX1CdoLe_xy7mmTVDKn;n}Ur*ibdw=Z)?q?_(aC$?O>(dw&iVS#f;Bu#5@_ z@P&`Ef6TZ|37AxEpz(cQ_D_Qix|gQw`RMwXjWC~qkPA(>%z^^g;R}dTwo%WM1OBKO zObb%0u4G$|K?UfDy-EId@;Q#pISV_QUL3jFIL3C$8CWpAP8{sXeVoDX=i?v*((8I^KYkrGax<9&*RUV=;~O-M*Hs^ zmq8obpldU*@3(_nQ&T^=2HpCd3RsBZZRNNG-;AJ?kf6#Fnp={Z1x3`P-4{c)7@?U+-* zaV@H`R3p{sf;fo3txq+N8V;MC&}3Fa_guz{g&=I7&g8dE*xB;kXSQA5PoBc|s&Mly z3T6QMs7g`3!af>Ql)fHN5uwwz(@}NF?di_fFo(qj{l%V^Y(3El`-@JBiRV~>8Qdc7 zU6fnb+@!&dBCpY$b?*?yzk8O4`i*&B%Y7?}E~&K!y~sue?VZ^^C8S5={eQDI<`=ej z^@{3ZgKA>cV3#9LFG3aZ8xfBJKQ(K0hwXcrM4z?tiSY3KF<)wyEevR1;gM>OVksIu zN>xPsE4=v>Dpzx3v+-jXT2yGVvavh2AV^}KkmO(+!x6s;;{ffU+tT#6`?fHut@mfZ zWEf5`N%9qSLbOoSjGUDha!7^TlWEZ`5$l}?80vKvu4vS` zN9^N8;e3=N$q4q+b3lk!O51G$*xaUGXR71j`5|X7Zw&lNy}pDp7WWzSdZ4*6zM=XM z7b|M^{F@j@Y|OtG#G|4gA(kIn@r*RTmx22zH)|l7?uPu9PDw_n%3HFMMTFu5zqdu? z*5&)hayuD)>U#8KuW;T<3f3o|^kjXtt57q{nBk#k>d(|)b?46$uSg|!8NzxQuffp@ zs`-`Xonkjn=D&|4Gb9OnMDRJ(ZhVhlv_xI}BASZQW`~#R^=I_48|dsqoO&Dn~B65i7S<#Qo8#QD`mkCLV8~n_qJ#PSwx0lInGqBzN+3sjB~D+S*p6@(OINU!Bc% z{>{EJo9)tW)>6Xfe62DO9O$+hUB7newtnE}d}89%XB!ke6dSrq7dB59Jke#=c&X>| zBM7j&?0jNoaCZ(kzI)4nft7Z2TS>;3Jg{cciW z=27p1bnhi9VCua4QNTStV1LH>TFmg}7;qn<0!GQZ&IUXM0iIp}_eIVpQhCpMfcs^@ zJs;psY<=?Gk~_?tJIo#%ytGDc@M7k2(r@tM*S5aBejnCw`ffij)^tj~ey`^I9M*2| zK1BDrV*9R^_lCWG7q&htwp#d9cp)&*j0D>lHDJyGhe``T720Tapq`}`agvSTEcCGw zAtsC?y)qCQZ2pFwpmyv0V9oKfc@AcVPObFPd!_m^}^#|L7^ENUFYbIp9xn7m)VR6hHIR_befQN$=Cz6T-7ANYf zIUWOaxj7&Qc6`8C9sMZc$sAh$175_>Vi*=^r9m!rq^u~&PFhFt+QuG7lPi3L13`5SR3mxf*zY3lA5=uFqj_AMHNP}@j zJ42f(;FEY9m1zF~w*igqxgJkuF?`v{C2*VCS*+B4% z_cOox9E36PYYRkkESk$4*8CYjzT+1WH%w+hZuONhW9D)kE)QD&0h{{+DuVG>!o79A z*hq`NLygo8)FCfN3?O?Bx;Abj?$i~34rt|jmn|C0j6oa@+R6t2%SHN zJA`7pKl5RS;e{eGz&GCEdm?T4c=Q_2MV8PHm&dxHT_cVDwhxj%pHLjL zH3qGyfiz3XF zgXw(nMC;4Jv@4np15Q=%B;y7$70H5L37PvdL$}XdJ#Br0MSo!qVN6wQF~OFeE1W9u zfk^s_t6a{sZ!Dv_9`K7RMCwX}_3C|RF7KHqIx7&lE=2JT6IHe2b)$!gtUwV-V6VvM zFWZOdF6i;W*S3G%U>$DLY(wiM?S>7b_r-4`1j#l#K3|mtv)e;M^vN0fzn6ISQ0Z zZp;CzWOGJv2xnI$fFQ|0a#i!5Yn;g@R-|GBiFSmeI;?JZrg>&-m`sPL%&omE6gUi_evo=uFxGkJYV6%QtS3 zM!_bV(4;$T9f*R1A=gme5pg@1{;0P@0LVG-u?P{A7B6$|11n;dljJGlX>iFer5Y=9 z=BNZHBhYob)OCl{BY)@ogCWzAH_UyoJ&fr7Yy3?p59ZX0RK|~oeMSpDM$oDn@{b2> zbj~98oOf%Y!2ctu)8e->I3r}+D1l;BcPFv0Nvw!>Q0>RqWH)L@rTF17=9v1ZOaoXA zI4rQ4<^okPi^T};LSnn&j|!}TF>8n$TWY!%=L3%F7)wxDgY;-;alz;*MKv<@u;+sa zvmbH?WdBU%02uMR3A<&i#NB?n&UY-5?NE=joT=k9l$cmJ`Nh?)4`ucIi?YRNBp=p= z(MgZgSHK5ZqRQ78QPf{Z(bg|V8#buDVDjNAJKODkJQVQ>1eYRN<9@SHc5?nv z(ov)s{CYz-v^W?aQgq&A7>Y?cdH%yoUH7WVGYqjYR71+J6V)x%w2fCKLC~ zEBe)Hho3(p?Dr}m8M&%$MdQyc14DicHbJAk#>lNc(1wg5=f>gcmJXr^L&1ef#-6-m zozh7jC|0_6{4a9gOGUGdBKsY`Sav|Ldd~W->{vHV7j^c6=M@{ZMKi~9#7sm_#GXr$ zn={ajqztVk@jrj24rd!~$$|1ET$6)%657U`jREohZ>Yk9eI}XaE-H~GM>lY6ce?Vm zI3gUgOpMdF6T+fNV=R!5|PQp*johi=FK52KKa14o1dGG+* zD7=$rJp$-I(py<+7ijrc9u{DpPVCeS3#5nUdYbORDB#nw{S4IUoj_vQU`DzmaZ7W& zA}Z}K4ByEyyx4>+)Robb*n@sh_f(?pK@g{ldGBMMpPGki`l2bl$cElu=u;D9F==6{ z@e%zC5nYW?DhrWqSgacay0sn&tSA{0zwbSQKBCf>ik(tp1QmiqxI~n^n!||ZnS6?k zb3jh2)Rh1$onNcGZu!Ihj%w<2(sO0fS>J|nhP4x5XdOm#=r{{NKxw0MTrE-Vxh4DJ z*!BbDw0XyrO7e$E&75f`?ONG83q`C8MK^%X5lz?jQG#^c5<<^fo>J5y&g9VaD4RMG z;*Z5GMnG&#LYpdD%>y1|Urrfv0NJ{DM!q#W>#tum}h+vU-=#kVE4CA1~^+Cxpc793f&wre$- z0Bz@7GjDl&*C6%0`YM@WKFxxo?^{kP(GN-f8p}a0nuyYfGI7!uRDEBT{pGMIZ|^KA$w5DAtI3t9YAuQ_s~UO>MH; z?x3GQ@nnSX&4uKjfP;W8_kuEyG8pop&;AU7(q~o)uQcliXv%xL%F?Kk`Re{0k>_hW zXbL}wbBA;3xJcY>j>0u%tE|iHzpN3k{`7V2sO#bM9MNt6)7K( z*2yp17y~j6r&XPP`#`tF(Hk28fd8xPl);BKSCM==&aT{KAfs?eK4u;Y2>7WmtE`zb zs6sSB=Y~g?VUxq`WgtL1&WP(F&pFv+F@k#Mn&UAPO>Dc$F?Lk*+m61oiDoSaWjw=q zCP2YAshwiXVsjgQBkT?YaKl{gB+#Z=t=+;(59R3n^6P(T5Uw_Tx*7FPt1o&=rOY_1 z<+i$twN%=Ox>}{C5xnsTI{ZNL;$7$B77bdJ!YL=J2F!m^4}k1v?iXp>KpYnF`EdsX z*}@5e6%Gz~S!8od>w(1r{V?i{8W*4uBq4TG=k!gd))qicjo9Cbc04&=r1wybYTgm< zD2`N$pTGhMt@nKQhXngpe<^P*ZzZI)zpfMK6uWg)1-F;`BA-sMM23TCO3>aL4d;Uo z{i6KU+s`C6E6}*z#QF00KB8XQwg(MK56MtVQ+KbLKcS|xY@Z#JFVkv2i- zyq0uKTnby(b2yz^GVnZtDwKVazJbhtw73J3BGoBv9&y<;tF$RMH?)v(wE$YX0nZV+ zhD_;vW(wt+Dw@qY9CF%pzcJ#E6u%@L`FMquVaxKZgBp4Hf>0d1Fqa$j(~LffZ8nKj4e*1do}r#i=`!A;mr`w;)I*IKnF8c+*-^EB}2?g4y*wI+d!(_WhP zA=AB&?;BjG)%OM z>9*?I-FVEzWSkUD`xbjtpOMJjGmHH3k$sha9)+f73|TFmPv@+-qF?-yr*nRcq3jQp zj4gvEODj$MsbXczy2J^YJLx+a6zv9eM@)yLLmi5&@bW}9tuoEC z#*s$jYDH}od|s^9aed0x&mU*(x0sv@V7_DiF-NQAWpH7g7R;>4ZkJe)uTroq-ODQj zB>m?rzL^WDfS`m9L0G)so!jlxHhMK#fgxqBilE9J<|7a0}^QVA7L3*%H{2&a~s?sIHK0^l&>Xn3iu` zlfcwp_zUdTKv5N#cg;v z@V_wEm|09~dG`qyaO0`_lu#u}C&}POXQ^9#%eMh4&UxzW9)8xN9UNNR(_uEHu7*Uv zo06h-O~Q?4Jhx0qAK)S|aE>VR7U*z8bWoQ$QDL_kaiZ|ay3n;@kiqadwdZSpA5BjK9B_gR6tfS;9# zY#;j>G^z*9fRz){b>ZI=O{v{YcwOUNM@GJ%_tHMLZ3t)Ei$8PzG2uI6)gm8J22Q-}blGaDuq%mMT}Y zG~;?laQwu@97QJiPAKhW{E4-SRe*n>?VA_y=5*%(M-?Ux>sla(R`-$hlE12$+nuAm zCX5gH?Lt2bbxsA`)DkZmvy&X5Uo?%C67AUi+e75Tj9ScKos}B1d!u-Q1+SVkLRdI=&Y0a=hoe2`AYYVt&om71KFtWTsKl`Lk*abltV*RD zV$RsN+5ZBoXJtY~60+6>1vm8~1h+61FzWT&=F@5bp|dL12I+i}yfiO9b>!wb#*HlY zXbZ8_;gzlJdbBburhekWt?s8;O#RHard=U9LFk5C1*ty(7U^o`TdjOzY%`@v=K|e- ztld;l;#Q-HJC!dbEG0qgMMedf0#pG`0a<|%4FAnHGBk@{B5dE*udGW9V@1IhD{mGr zX(iL~F84H9mhS5&f6#y_jCbV&-B-LhQ4MApNJ&B_ner+;64B#?>*`a!@34h?GzILW zP@;?WAZPwQf3nyW9DjmsGSME5SK@#}0(X4#4hg@SLsTTbH2zJ;=N==`@7O^GgUoQ9 zmp$Kih&s?+!}GoYc6F;SLg^P(=gjVv=hQw|2m&P8F~VBKosQcP zs%eE}sr+n$`Vo4_*$D{_zPVqO{S)C-Xw+1i=V>SZPu1MvGLHl*HqJ%E*;7{Gi#kUx zS}~3gnNVH?Bmr~4nU?vYG>JWh&q~pv9y!6YzYxjhlTMW+^L#k>VeQ+eX6Y8~7G-Tl zB4$I?!)hL(A!FN6M|a1;L>?!-iq6oU7QvbVo3r@CILzytV``Gg)P}0#9M@T0Atzql<4PngDpG_UJQ^)%>B@pAS@%? zExJ7`pRCnFTcs)0wKaH1u?hZx0#cF}c=_$D=#cBP&3&wQGUbarGFNG z!r&FaGSwH7kEdF(>Nzzd>_v2in&HJZ#m0dz{XL_mH^&w~cLK=l&_iEeu`06`FS$JL zd@Y-cwyEe9wzo>VhMJWlSBUu_E}02ipJky2$^ zCRTn@mYG>?axT@4Yf9a!bryY67T@l%6~gPQ5X1LJFSgoSvO8%QHrHTC954zL!LeBG z%8WkIY>flHR0}bgW0P@m!v1zC2lKmpox`9J%D6_T*k_$LTO;aewGd8SpSb@%p~x-& z^vrl{ZsUjwXCr>?yBY7FQ@xh#K4Kf zX<(_?rBaaV>NM5j-TgxuA9tLTS%)T9!m)8!d5%SxtkUqUbplxnsP52p0U-VoaqDg5 zh8K^Qh*!RT|8t@0Q!`wnwk07@)3UP)`O1R|XlRONT04xK9y-~dC{L+PJ<$DI0RtSU_FCP4B#n=85&zD?J;mRfGs zQ{QgW6;Vbs3Z;?R3 zbRmIketP?|xLx^l!u0$gyt~FUEf>3zF{TNw3AJ~@EwQI-qHBU{(xv(m^yPRb{TYqd z*HDfO*T=juV^{p27)aAP8Acz<BNddd~}a>AcNt=?ozr@;1wr2kCV25?W5z=i+tx zb!#=G0Sq%CS4hTro8}Ee&q>TtmbWR9;*nyK;*w(5YG>dtOnDrVUZRs~bkl1GYBp*m z|80@Z7%A@#k=-(&&CggXS9CsJo($-$`SLxMy+0a-5a7)?^oCu8p=Te(h+^_{>sNyV zA2*29YbDMx@}aGhwVfKtQ3n(a?h!SgzqDRKH*u4zSq>t6C_FvzTqT?g5x|f(0mcF4 zs2*Z_MzNm0&W0=Jjna9{pnl^I2ot7gh;W9(eHuPl>Go8uH_X2Mb8xXj&` z8W)Q=1a8?*r|vsm4zc-IJX=FIjf$z-U*5b(Yf;!Bs4xRMZH0Q~0~aLm3GNH=e#09g z%&Q6L(Aov$Ihju8a>H_61=6hQ3`5px{3&fMr!pe@5Sz#;{X7T6r)PA7A_s1O_1Yk( zU5p)fF4u*67H0!nYv^ns<`aBGTKXM1mr{2yavBk3`LO{NjKdv$C@*tW!_9T*l z7fKNEM#)X8GT$J|N+Y;exhmttCgBB$2xOa+nxn>)yKe+reS2lG54ShRW5;#;-6&8G zlrSJ6`oLAOL1`dNXW$ztCds48qsU{(Bg>=9lX`z+PL%^!VY|xMr`r1brU?zL8mRT^ zVBp(ic2Ihc##?Zmc*!3VPlb!7GlyKTn&8f|&}WmlxG>2gw8;K3GhR`qS;kA+#$aiB z%Ck8q!2#UEVlRrO?t1jgAiOx%fWfXM3U60qY<9)FpK79leaus-=dx|~SgL#WxVih6 zSr&ZC=jtzpg)-1Z#}$&6$$L62>a|>bu1T*%Kj|6jN=K2$bt82Q+E(hZYe&9k>qkK> z@o*9V2r$ViI6a@Yft{1BD`$k%Yb4#qnrIs%Yx&m)dB1E6H z8rl4>u5AD)Wu2J*gOP~7+iJHO0LC1iW9c3+b1hkysM4(Ff+k{WH+0Rc;)fzlqou$0 z$g|lNRv4-raBz=}@x;rg4ka_5RfNeNuz6+vVj^QU)AZ(6>{jAtb!ENk=39IfsY2O3 z+n){ZlX#g#X1yvCs+VN~5~JDwM!c`)byOGn4ZFe-cWDQL9^Q!g;C1(EV0=99Q?A9s z$O~Pve~xIYA(`1t@GRI6Ic^b|!0Dqbr8kl}i}OWRI2)b1(KH}ALqo*b01JYfGRLro zu7%J7a2Got_z_gYwRV)-OfHLL@+aDKzyZVX?wH01dV@ah*c%9>J7gUgT?5pgw&!yr z%sB{E3OC3~w=5Hohd&qk7PSAjRu)7ZWbMb6ydEMA z7qz^0V5Q50E|u<|78f#<_9?4FvOgV|i-Er1-?|FhWUFPXhm1DoMX%3foC4PjaTlu1 zKZ8eBd1l8TPX{1qh>NKI8-39()4KdBT?3&rw9%=zk(wxJd(!>K%TKfOoz0ad-&&hA zoosBJk$APNFji3hKeFi~KWb{^{*JU-_qZ6NV2q#P9%>|Y4!WseTJ7x&Q=qDMArJ)% zUxwt@By9o&^#H#Eovcj|`3Rm=KrXY;mytm`q9jgRM945Pg%^ZfehhZ zo<#Y4Xxm6E4hX97^czZ^J0EjBUOqu%)*Xdvf1X1_=`8fZY6>m~m zZuOwCh5R4~3WNv5dtyjCpHT3VG(Iqtk5bK92MzSc^pG|t_%-0>b7r3=qX=GKMFtgf zTdu!ysm45dkV!i?iwS-Zp{PyzC1qGZ(1Q53D$zY;W?!snWfE1gG*&Efa9+f5Bv;Ev z;b`=R+t&(Px`djzwh5+{DjT#TLF+TxeRQV{#mL_UrAz%HM2?kl=@t`ql%jT*jnpt# zUa(Em8T6lnn>(m7atrKWt%wr=k)w$p|KVGt!H=XO;s<-#jKqUn#pAY5V&m z(enf9W(5JeHR#Qj9KxeuhSPmARHpvNW&*(wk9Tu)BFSGzc0F-@6zQpMzR_ck!AFjB z5854ZcdEe9I>T9uA9=0JS=8fi=zHu^N;I=VlFjagqp%zU~;?> z@?q_<_I+;t+7j5b6dubEG1#T>eB9@hP?OYEx=Z#Dza8DIVYQ9pqbDV@v8f%nhSeHi zRO(uLA>o7)+#X(XbTch<=9ac*1y(%+C9ds*U58C)fe4q^WtSQDxEIG+EgIfXEm1=n z>s4_jbNx2O)ShXHuF)k{nxiuG()2Qw1j8_I-yIx_ppQ#05&Y(j#m%e}*pId7JSA;le^@a(twwZ&Y`Kq zpXP_qCM7V&J)-8M2Glu}8+Qdj`~r2_ozz|%Nb5sW72CDSPI+R?JE}Af?xhOO_oD~m zwPekn*dFNyuCNGB{Nn1pK<|JNrnn4fQ7orkGRZSu|* zpn*O`g61_-=}@qIN?D~7HJ>t7w;-dPQ2nh_d|#xtSqc5{c^{l9t#`QMwqT(b^-S`( zY|68lf)wyj)1Ue)uz@lza2eIf*KOef)wTmV0(JSo?xX#A|db4#T)y4G3i%hLGalRoZ3162j0xpMNt*CqqX4;?Jt8^6lU+;pzPBnr z*$&0CW%Q)=yo^;C)=ehHeE-7=kcNms(*K-FG4=)`hB&_e2eQL!VCdw@I^o!WsjGUu zGhYXOBk}WSU9UcmIZV!nCG5P&0%YVs&T!1Hvu)mdd4|M4R>%DAEf$zNm2JFaoLJKk z>Z1cZj~+c^1Tfp7yk)3sp5pUj*>eP$Yp$m)iVHu@teY})1>vUDAH@@{6oA9~2NfL)&`8aL!8sbn{Z+c>M75 z6XKop+dpnCI*-c}Ym8nN2rah;$z3LvXAS836{_{Hd=C+CQ znOXsO_}R7ZcBI+DDV6-R^_l3F+PmxZa7b z(CmCagY~Pfr`~?qEr_(77T$?GobS)?>4T%5`$1eiCw!}Xa*um9H>}G$VH3Sqou;Pu zdK-8z-+Kl_Gu=LKkq`%Vi(Ylo5jVxbO8te=|7e@Gr8?+2-76H>?I-fse$}|Ubtho> zN(B5Vz78`N_A{t**e}~<)}(cF)91zXet9$eI>=Rh#Y<`+=&I8sXLC3FW#SR|zSjFj ze5wDJZ$oc830%=l7`mMazkTd}-A9~ivfF>fw^n1(iusEu(E*g8I z^}64qonWJY!!3o{_(sG1Ur%0Ocen9Gw#Z}Bwr~FfSzH^}eyrfk)XkO`?BLC;Tc=#f zb|Scq*fuQbQtcsD^^Y&LX6QtU&vc64)lH*{lHUql>3h~Z|1;aHnCV=?8(CL#`%B8U z$NEP5CVE5Ckze=YhA0RVr0{5ZyJdd6qkj9x{C3d%_SD=nh~vqYqmwr$m?1})H>XGJ zq&lil=)7-#TI;k4r901Dl3~(DZE4lAl))@6vODmlC?m*JZb}Y;Xip0E0Pu8Kh$8oH za*LL2d`X`T|Ct>gDeXq!Av7Bw>?iOXnw<^y`zFTqA?3lu;fG)6(WtRpDEYAYL#W{U zO#eA};;M`MweDs2s;e3fZ|;+5uvpD(x}QFI5N`uD3fH*Hu=^U za~gvAxSd3(mK^MH{nm}b54BAXhQ-5iir5Sba?{p26O>%#7{iqlyh{k)I*s2Faqlgv z{1&FPw`-gFMXenzGdNaveu+t(oi-xmW9FH&lUT3pTq}!~W=w09{`5bG_ z?mq65L|2sbXYPOenawUsvX29ElWcylr4On+$qop%_Hn<@$oJE5Tc7BE ztg^-jX_W);kYGg+DoJ$v(?8&m?8B}4z^x6SulC`n`GKpZ^^QcP*X>QyyzJIJo1$=q20T@&AeY!Qsp+CZQITkds8}>J z*R_Q|aQnbfupb=c-k4b`ED@E8W{c*C%0#TrA;Gy)<)V3_`J%01XqD#gMAX%B!_0zQ zzQl9gqTCPMMP_fhXQO|~g83fH=zA=n@7ZC&#ko+0Xt{-!NO2E`1(!-K6IH9AGL|Bm z-yNz_tV%BHh!m+M$xuzKno??|DwW4#p;`*Wqd82oJ4{nCEVx3nQp6KJEVxQ)KsL0! z8#~PR+-(1Qtjh24J^DQ^;Crm|@3HnZY?cY6{8i~po+K9Q!35RPO4rHDc4JB zqMJ{9V`;AmjPcbL%c(QKx-c7ZUA_I#nmXk-s%DdDw;u0esg0sdqRqLkoQ6uk$l!-= zRtnX2(8SJMS7|?VRiGLy2Q$c72#zxNbv-_G6VaXB$=^?Y8y^bz<7s0`_(NXDygLs2 zrxV;vTFh>YxC6N#c2~_+_QUQgt%iG0{T~vwiymsQM|^0p+*7*h!@2HvzipTM1%0A_ z#TkHpj)N26WG>-TqHXEWX{nM_Cibu0+1$UzIj6{kboW=zO-cD1J0aK}j{awQ{~PX4 zqjmr8`)+Z{caq14+*bEr+|rcqV1M8$Q@+FD>4tI3qCa$%U^%D)1wDVrB>#{J|Dl_Q zKOfYl{H?14Yf^p`{jcsy?tgPv!8LFl+yHAS`8!Jf-rWLM!F6y0tWWt7ALbog$lYA) z?qNHz_puMao+z73t}P5Q357x47KK61S%txeiaioBPldt9Qu%$|_~<{l3DJMB-oU~@U^Ybxt_A&GIG4u8@bM~=2Ppt+1C+?pA z3E$FvT?Z}vch?F34>!Hopwm5Oc{XjuRnAe!w%O%NyI^1eDT zhu!xQ+{Cm5Hx+dF!#%EKxM#EH^>woXcqj4P_Y>%Ogclv@*>5c3R<87TgDyr?^d)_S zvY?fAglB_G2rupHR;C5qIB%2}9qqXfJ=dD{JFd|EPIQdtPGyeeU@AH-IwLxs7Ivr8 z#(C}>)h>doY2UHA)ihNDYWuqDXE!z4`sG&l$?Hc+Qx#fg(WH#|KMo#Jtfo9ekqqWlzyYFuK0 z$GZg@{c3?`slba)^W4;Q=VqsW+m(Ux^lwLb)0pY6>d=-B6-pI}W{8SKGexsROO>)o z2e+j<^_3`ADw-{tBPtWk6_tzTiRO#8a*A892Z~MP1~v^A>s0 z8J=zM*S-p^6Rj6*5H*VS8mLK%cSnPNHwtm!Y4GbUG*z*cHkqBWgtmD6piLP?UUxO! zebcMZX2=!wg|n;Dtgp&k#Z#|Hnf3XX`5ijIj6iH?g-h)#-5 ziFSxizsez&=}YhK8q(i$>(h(5VA1yUM7LX_MfAU|JHXO81P-Tv-v;l$>Lzsiwqply z#a?1`rsuY0&Z3fNYZ#j5B{&{X_Ul)pCHg7!Lppi{^81lc$^!2Pt+LQSsX?Mexlp|+ z)ujyX2l3)>@P|kZ=;t1%caP4dVup3Y_<$YCVQG$MbIvB(96ls+#`Lo}d?4iTI>_OJ zA&0|j4j&CUd_d%k?dJ-;L^s1L1wbl<2^UT)7Q=T zeoS(?)SQK@K#s7ZMvgNxK4v@7HL?n1_U z(Z!y-l;K4yJa;vNa*qe5IvicXBCHJaK0g|TZt0N6!SiOu_oGWacPHcfymk6Tmub-Y zKLVcKPdkCANVHs+KSQcmR4sR=)U1Bilt`3{X7_W8St-LZ9nCD)$j9j~iO8ATk2iQZ zVxGi&#DabtS-3r&0glL>frb6t$jom?tGMs|su_7MbWOBaZiVQ&+#8}La+iwcXa2}7 z%=Dr)e=U==1Iiia`uZCFcmJc2E-8?T4UFo^CnS;FOD$i}e zx+c*hQ|GxMex2?^ou;-<_ohzMU8l8M)z3{03jI6Ktvk<5TQmZ=|R4AL*>s{27T{ct-NO`zV3uF)&1wx8=DalY5!Mb|QrtnSfu z+FjOb+gZ=6$gI~>g}eRL^?Kmfdz{@$4OHI`S|e%@trhKfmFWhT9TC*-N9mw?$l_Zwj5}--0I9-o?Dld;F@S?Q&vK>nUziV&4ktl zc6-r1UUEmeYs=!!?DgCQ)8cUo+tJUp6XB-p(@ojuC0AufTh--0-JgBBKLl?FlQ(B_ zgxIGe#6CS9&}iihMkO!Fc1LMtX`fg0p9c)ahm3CmuY^rPLQ>KzKJg$3sVwwd(koU% z6r|h)gW)IAi>a`Jemoc>M-{{?2{?&KkV$&JwWq=}v5Mhvta|YI6gA_kiEa|zURL{+ z?h@Ufk0gU0a(X;3QeJuSKc@os^8}y&@7X|}WhNrJrRow@mKuI?(a%Pss7d=d`iZA2 zm@X&%xwO~?J|Xi;*h@(8{KTKu z$c~GbO!&_uo?CxUudByP*GSCMRL8D6`(N1nD^H@Iw$L-aB0OKqA_AgvqH*!*x_fpf zp56E7Z_6uB?r#hMkfVZ}=hL5wUJ|`txIN~j583l${y&(}|L?@}Pvxf*+536tg_38p z)Z@vrROViVFWaBuTa)r$S{y6zV@o>tIePX)#FBDf z47^zQbS$w&{q(_lAtS!fV{7MWyvL__anilM?g=T+_&s{O@E8YP?a@P_r#8`-?Z$tO z-6(96UidFw{YfKw+&@FF^m{U#;IpSL_`>+R$14V#e#%pRT**JYDiHd67JQf5cxRPglz4-bX*{zt3%hJzm&WpY1`Pdv_&2 zdEA~o)1TjppKX=Tp2TM_Q|FfR8=N5f@LSI&fuC)& ze)#$2(e3%Nr>~<=tA#&v*PqBJ$&<~@#PhzU zYF{(YwxZ8X)C={3H*IxPN zr+7a3-GBCV{?CfU7gm{h7jOW>%IdS5)J9)7?&Q0PQ-lfE*I@VU@RnQATc6gVCpJ{BK(c>X}S8lWOIDLu!P-fh+n2#<_rJCmubqhm^~XO z)M?T>lSUd>Km7uWic&Y76s9NI7@r~HGZW^d_^R%?-sDLvK77VG@gZN>u5um0KWfFy z1DLl8lFf9*G^MFA-URt*f_3apSk1>v6Zvxp+ed8q1QMI~XQ6IcpA|{}+yq1Nwb$$f zd~Li`)}oPEi-~hq+;p34u8kQF`p0!@O{yx|lGGlTuc^#km7*1!S15@9`^kTd#Hc?) z#77bL`w;wP$l$Vr~K5tzG@k? zHTl)Ael5nI04j`h8hYIL6Wi|qNUL2@0~VS3j;J0O+bB`L7K6lDRACf+{7-W1-~XxM za*C!oZha+M*sHX%L-VIHc2VFo&A4K&aYg?1iDQH{Wq%k`QPi(1lPigpOVaZDU3FiWA+>T0Ieay}= zCX8S&aTqV(g|!mK#6)`BT2xb|S;k|nB3ATbVXnM3ekK0K6f3_8)Eg5sYK$M4#}XjI zezE3M8e@N)!XmNl0MnCX^>MK}e&P7$oir>UHZ5T@Vq)NiZP?EPPojS>3Y@dIV@>vF z*gN@2f6%g~YDm9F>Hobct2}WN>?iHg%g`ln%HV&Rz}|oGZxi$FaT^{JhV&Shx`>#W zZF}-=rfjvbmh<-b?VLAhzX|l4a#Ez~{{1)OR<2_I0cqKPNJ0P6oAK@5KaRsM%Wyp+ z4*W6XpGlkK@p)vb-*^>{%i(iFn&&u?Hjay~Ik~(3Vzftgt8cV`?kouFmKPD&>lX5!yFu_phWSW*&T%%~bWc~;eT#41H>y(Ip5=lQ?q+c0|K zbZLE8*Prt^dshsmvDt~Z?^1m4PE|5%$98pe%ZRD`rB0zzsi=RIusMR1S!4N+?Xkd8RAB!p zZeib#9X!T^j8kKsinH$`-`|N9^*ae`MUjb*RdeDZ>5~!N+Zq*je(} z_{Y`%i{P&lD*b!J_}&!8g`K!mo?=NF=e%S*jR!ty0Up1+!ITM|IKH1h;glrdTv;xg zSnS|Xf5A@efU!&E!tgO519OKjI?~0B7n1TN0Z{k0(t;8hb zy|K3EjvX?{qE>Xd)2PrOug4sAtoMsLHtaasx}IQpK5y7E09n?Pw|w*;$hizPO{^cp z0D1V^7}EUm-vur4?-KCur$UiznpPD}F=)P`F`d%WAmz_xOJKq+%lJz6`Ns| zsmA8<$I*%KgBO5h#hw2UhhL8MVq>gvvLD8}bG&g2v*z0q2G0Kx`}f1=|G4^=*ajYV zRui8Z~wr=tglPy$HoaJ`uN8wU~GsH zrj%RSpQ6HCVk(Y}le(TT+^R{5<50p{DjYUs)?6rSjC5g(d1wSye)OZU5~rFs=+SNi5G4i;y3Z; z?JMJN-ez+i-&K6k)^#is<98J`>$T?x>_4MMd{<#?b6kj(=U1BT7w?Y55}LS7c}ca1 zf8G~dzGE-T@B8xc!mad)zNQH0#U=BzNX8e5#H84sa(uiW+hZ0MoIQ39_8VT9>`4h4*AJ&&FOO|POnK4&CvEvCiCaDsw~WT`Xe8|6 z!K|jc+KN08`pQ(tnks`G6AKFC7)kyosr=8xTbpB_JZZGE#3aP80*LJ;xrL_03ScZP z?|Z*VByQ62^OQ|Vwcbb1{ePy#{xp4Y+>wpq{)`p>fiYzz4k@3tUf6)+#AjodiJpJ@ z@_apP{B%v5k2|dY|NdHoI0BgRO!$lchteo}!nkxQj`#Di%9kb^V^d{rO#cHEispFH zF53T!!-o=g)~5WUjx!Duo21(vyVNEsRtzZrKe$l$es9&q`aa;g3j+7rJ69=9!!c!QAk zHjJ_TMsdq9@w>n02Pmq%1UT+Xy~KGkns}1?>4e*Y@zx)^H8}CWUEEBGf3W+3=j%6N z!~BHrm&aYO(qk8_xH{?jOuSrQeEb~mvdX87=Z$j8I{=A;#=jtPkK^N%Iq{LYrg|K4 zN8;Dfo{2YkVgtP#4}P4ulO%TT{Sd5c!njab`N^nd+VxKS|fnDyX*asF>`xilqa$t#8-R{;(RQ2#fvtAMuU zlKP5eh!wJMspO*e_akcIR-BLQyM;e6q8g~fZ|f4pG$e9_(UaM((0 zAuk+#Up6#5m|?v6{2c!MToz@y4o-eXBY)qfMNvCtkzlER~N9@6Tr(;!XOT zRotNc_pt@lzZ+v)P_G$NPr>7Ev`|C0ro8^?KtpmTmPit_W?

$maxwidth) || ($maxheight && $height > $maxheight)) + { + if($maxwidth && $width > $maxwidth) + { + $widthratio = $maxwidth/$width; + $resizewidth=true; + } + else $resizewidth=false; + + if($maxheight && $height > $maxheight) + { + $heightratio = $maxheight/$height; + $resizeheight=true; + } + else $resizeheight=false; + + if($resizewidth && $resizeheight) + { + if($widthratio < $heightratio) $ratio = $widthratio; + else $ratio = $heightratio; + } + elseif($resizewidth) + { + $ratio = $widthratio; + } + elseif($resizeheight) + { + $ratio = $heightratio; + } + $newwidth = $width * $ratio; + $newheight = $height * $ratio; + if(function_exists('imagecopyresampled') && $imagetype !='image/gif') + { + $newim = imagecreatetruecolor($newwidth, $newheight); + } + else + { + $newim = imagecreate($newwidth, $newheight); + } + + // additional processing for png / gif transparencies (credit to Dirk Bohl) + if($imagetype == 'image/x-png' || $imagetype == 'image/png') + { + imagealphablending($newim, false); + imagesavealpha($newim, true); + } + elseif($imagetype == 'image/gif') + { + $originaltransparentcolor = imagecolortransparent( $im ); + if($originaltransparentcolor >= 0 && $originaltransparentcolor < imagecolorstotal( $im )) + { + $transparentcolor = imagecolorsforindex( $im, $originaltransparentcolor ); + $newtransparentcolor = imagecolorallocate($newim,$transparentcolor['red'],$transparentcolor['green'],$transparentcolor['blue']); + imagefill( $newim, 0, 0, $newtransparentcolor ); + imagecolortransparent( $newim, $newtransparentcolor ); + } + } + + imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); + + if($imagetype == 'image/pjpeg' || $imagetype == 'image/jpeg') + { + imagejpeg ($newim,$urlandname,$comp); + } + elseif($imagetype == 'image/x-png' || $imagetype == 'image/png') + { + imagepng ($newim,$urlandname,substr($comp,0,1)); + } + elseif($imagetype == 'image/gif') + { + imagegif ($newim,$urlandname); + } + imagedestroy ($newim); + } +else + { + if($imagetype == 'image/pjpeg' || $imagetype == 'image/jpeg') + { + imagejpeg ($im,$urlandname,$comp); + } + elseif($imagetype == 'image/x-png' || $imagetype == 'image/png') + { + imagepng ($im,$urlandname,substr($comp,0,1)); + } + elseif($imagetype == 'image/gif') + { + imagegif ($im,$urlandname); + } + } +} + +// **************************CHECK IMAGE TYPE AND CONVERT TO TEMP TYPE***************************** +function convert_image($imagetemp,$imagetype){ + +if($imagetype == 'image/pjpeg' || $imagetype == 'image/jpeg') + { + $cim1 = imagecreatefromjpeg($imagetemp); + } +elseif($imagetype == 'image/x-png' || $imagetype == 'image/png') + { + $cim1 = imagecreatefrompng($imagetemp); + imagealphablending($cim1, false); + imagesavealpha($cim1, true); + } +elseif($imagetype == 'image/gif') + { + $cim1 = imagecreatefromgif($imagetemp); + } +return $cim1; +} + +// **************************GENERATE FORM OPEN***************************** +function form_open($name,$class,$url,$parameters){ +?>
+ + + +
+ $length) + { + $textstring = substr($textstring,0,$length).'...'; + } + return $textstring; +} + +/** + * Present a size (in bytes) as a human-readable value + * + * @param int $size size (in bytes) + * @param int $precision number of digits after the decimal point + * @return string + */ +function bytestostring($size, $precision = 0) { + $sizes = array('YB', 'ZB', 'EB', 'PB', 'TB', 'GB', 'MB', 'KB', 'B'); + $total = count($sizes); + + while($total-- && $size > 1024) $size /= 1024; + return round($size, $precision).' '.$sizes[$total]; +} + +//function to clean a filename string so it is a valid filename +function clean_filename($filename){ + $filename = preg_replace('/^\W+|\W+$/', '', $filename); // remove all non-alphanumeric chars at begin & end of string + $filename = preg_replace('/\s+/', '_', $filename); // compress internal whitespace and replace with _ + return strtolower(preg_replace('/\W-/', '', $filename)); // remove all non-alphanumeric chars except _ and - + +} + +//********************************Return File MIME Type*************************** +function returnMIMEType($filename) + { + preg_match("|\.([a-z0-9]{2,4})$|i", $filename, $fileSuffix); + + switch(strtolower($fileSuffix[1])) + { + case 'js' : + return 'application/x-javascript'; + + case 'json' : + return 'application/json'; + + case 'jpg' : + case 'jpeg' : + case 'jpe' : + return 'image/jpg'; + + case 'png' : + case 'gif' : + case 'bmp' : + case 'tiff' : + return 'image/'.strtolower($fileSuffix[1]); + + case 'css' : + return 'text/css'; + + case 'xml' : + return 'application/xml'; + + case 'doc' : + case 'docx' : + return 'application/msword'; + + case 'xls' : + case 'xlt' : + case 'xlm' : + case 'xld' : + case 'xla' : + case 'xlc' : + case 'xlw' : + case 'xll' : + return 'application/vnd.ms-excel'; + + case 'ppt' : + case 'pps' : + return 'application/vnd.ms-powerpoint'; + + case 'rtf' : + return 'application/rtf'; + + case 'pdf' : + return 'application/pdf'; + + case 'html' : + case 'htm' : + case 'php' : + return 'text/html'; + + case 'txt' : + return 'text/plain'; + + case 'mpeg' : + case 'mpg' : + case 'mpe' : + return 'video/mpeg'; + + case 'mp3' : + return 'audio/mpeg3'; + + case 'wav' : + return 'audio/wav'; + + case 'aiff' : + case 'aif' : + return 'audio/aiff'; + + case 'avi' : + return 'video/msvideo'; + + case 'wmv' : + return 'video/x-ms-wmv'; + + case 'mov' : + return 'video/quicktime'; + + case 'zip' : + return 'application/zip'; + + case 'tar' : + return 'application/x-tar'; + + case 'swf' : + return 'application/x-shockwave-flash'; + + default : + if(function_exists('mime_content_type')) + { + $fileSuffix = mime_content_type($filename); + } + + return 'unknown/' . trim($fileSuffix[0], '.'); + } + } + +//************************Return Array of Directory Structure*************************** +function dirtree(&$alldirs,$types='*.*',$root='',$tree='',$branch='',$level=0) { + +// filter file types according to type +$filetypes = explode(',',preg_replace('{[ \t]+}', '',$types)); + +if($level==0 && is_dir($root.$tree.$branch)) + { + $filenum=0; + foreach($filetypes as $filetype) + { + $filenum = $filenum + count(glob($root.$tree.$branch.sql_regcase($filetype),GLOB_NOSORT)); + } + $treeparts = explode('/',rtrim($tree,'/')); + $topname = end($treeparts); + $alldirs[] = array($branch,rtrim($topname,'/').' ('.$filenum.')',rtrim($topname,'/'),rtrim($topname,'/'),$filenum,filemtime($root.$tree.$branch)); + } +$level++; + +$dh = opendir($root.$tree.$branch); +while (($dirname = readdir($dh)) !== false) + { + if($dirname != '.' && $dirname != '..' && is_dir($root.$tree.$branch.$dirname) && $dirname != '_thumbs') + { + $filenum=0; + foreach($filetypes as $filetype) + { + $filenum = $filenum + count(glob($root.$tree.$branch.$dirname.'/'.sql_regcase($filetype),GLOB_NOSORT)); + } + $indent = ''; + for($i=0;$i<$level;$i++) { $indent .= '   '; } + if(strlen($indent)>0) $indent .= '→ '; + $alldirs[] = array(urlencode($branch.$dirname.'/'),$indent.$dirname.' ('.$filenum.')',$indent.$dirname,$dirname,$filenum,filemtime($root.$tree.$branch.$dirname)); + dirtree($alldirs,$types,$root,$tree,$branch.$dirname.'/',$level); + } + } +closedir($dh); +$level--; +} + +/* user defined error handling function. */ +function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) +{ + // timestamp for the error entry. + $dt = date('Y-m-d H:i:s (T)'); + + // define an assoc array of error string + // in reality the only entries we should + // consider are E_WARNING, E_NOTICE, E_USER_ERROR, + // E_USER_WARNING and E_USER_NOTICE. + $errortype = array ( + E_ERROR => 'Error', + E_WARNING => 'Warning', + E_PARSE => 'Parsing Error', + E_NOTICE => 'Notice', + E_CORE_ERROR => 'Core Error', + E_CORE_WARNING => 'Core Warning', + E_COMPILE_ERROR => 'Compile Error', + E_COMPILE_WARNING => 'Compile Warning', + E_USER_ERROR => 'User Error', + E_USER_WARNING => 'User Warning', + E_USER_NOTICE => 'User Notice', + E_STRICT => 'Runtime Notice' + ); + // set of errors for which a var trace will be saved. + $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); + + if($errno != E_STRICT) // exclude Runtime Notices + { + $err = $dt. "\t"; + $err .= $errno.' '.$errortype[$errno]. "\t"; + $err .= $errmsg. "\t"; + $err .= 'File: '.basename($filename). "\t"; + $err .= 'Line: '.$linenum. "\t"; + + if (in_array($errno, $user_errors)) + { + $err .= 'Trace: '.wddx_serialize_value($vars, 'Variables'). "\t"; + } + $err .= "\n"; + + // save to the error log file, and e-mail me if there is a critical user error. + error_log($err, 3, 'error.log'); + } +} +$old_error_handler = set_error_handler('userErrorHandler'); + +?> diff --git a/web/libs/tiny_mce/plugins/tinybrowser/folders.php b/web/libs/tiny_mce/plugins/tinybrowser/folders.php new file mode 100644 index 0000000..b9f52a6 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/folders.php @@ -0,0 +1,273 @@ + array(), + 'message' => array() +); +$createqty = 0; +$deleteqty = 0; +$renameqty = 0; +$errorqty = 0; + +// Create any child folders with entered name +if(isset($_POST['createfolder'])) + { + foreach($_POST['createfolder'] as $parent => $newfolder) + { + if($newfolder != '') + { + $createthisfolder = $tinybrowser['docroot'].$dirpath.urldecode($_POST['actionfolder'][$parent]).clean_filename($newfolder); + if (!file_exists($createthisfolder) && createfolder($createthisfolder,$tinybrowser['unixpermissions'])) $createqty++; else $errorqty++; + if($typenow=='image') + { + createfolder($createthisfolder.'/_thumbs/',$tinybrowser['unixpermissions']); + } + } + } + } + +// Delete any checked folders +if(isset($_POST['deletefolder'])) + { + foreach($_POST['deletefolder'] as $delthis => $val) + { + if($typenow=='image') + { + $delthisthumbdir = $tinybrowser['docroot'].$dirpath.urldecode($_POST['actionfolder'][$delthis]).'_thumbs/'; + if (is_dir($delthisthumbdir)) rmdir($delthisthumbdir); + } + $delthisdir = $tinybrowser['docroot'].$dirpath.urldecode($_POST['actionfolder'][$delthis]); + if (is_dir($delthisdir) && rmdir($delthisdir)) $deleteqty++; else $errorqty++; + if($foldernow==urldecode($_POST['actionfolder'][$delthis])) + { + $foldernow = ''; + $passfolder = ''; + } + } + + } + +// Rename any folders with changed name +if(isset($_POST['renamefolder'])) + { + foreach($_POST['renamefolder'] as $namethis => $newname) + { + $urlparts = explode('/',rtrim(urldecode($_POST['actionfolder'][$namethis]),'/')); + if(array_pop($urlparts) != $newname) + { + $namethisfolderfrom = $tinybrowser['docroot'].$dirpath.urldecode($_POST['actionfolder'][$namethis]); + $renameurl = implode('/',$urlparts).'/'.clean_filename($newname).'/'; + $namethisfolderto = $tinybrowser['docroot'].$dirpath.$renameurl; + if (is_dir($namethisfolderfrom) && rename($namethisfolderfrom,$namethisfolderto)) $renameqty++; else $errorqty++; + if($foldernow==urldecode($_POST['actionfolder'][$namethis])) + { + $foldernow = ltrim($renameurl,'/'); + $passfolder = '&folder='.urlencode(ltrim($renameurl,'/')); + } + } + } + } + +// Assign directory structure to array +$dirs=array(); +dirtree($dirs,$tinybrowser['filetype'][$typenow],$tinybrowser['docroot'],$tinybrowser['path'][$typenow]); + +// generate alert if folders deleted +if($createqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGCREATE, $createqty); + } +// generate alert if folders deleted +elseif($deleteqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGDELETE, $deleteqty); + } +// generate alert if folders renamed +elseif($renameqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGRENAME, $renameqty); + } + +// generate alert if file errors encountered +if($errorqty>0) + { + $notify['type'][]='failure'; + $notify['message'][]=sprintf(TB_MSGEDITERR, $errorqty); + } + +// count folders +$num_of_folders = (isset($dirs) ? count($dirs) : 0); + +?> + + + +TinyBrowser :: <?php echo TB_FOLDERS; ?> + + + + + + + +0) alert($notify); +form_open('foldertab',false,'folders.php','?type='.$typenow.$passfeid); +?> +
+
    +
  • +
  • +
  • +
  • +
+
+ +
+
+
+ + +
+
+ + + + +'; + echo ''; + echo '' + .'\n"; + } + +echo "
'.$dirs[$i][2].''.$dirs[$i][4].''.date($tinybrowser['dateformat'],$dirs[$i][5]).''; + form_hidden_input('actionfolder['.$i.']',$dirs[$i][0]); + switch($actionnow) + { + case 'create': + echo '→ '; + form_text_input('createfolder['.$i.']',false,'',30,120); + break; + case 'delete': + $disabledel = ($dirs[$i][4] > 0 ? ' DISABLED' : ''); + if(!$disable) echo ''; + break; + case 'rename': + if(!$disable) form_text_input('renamefolder['.$i.']',false,$dirs[$i][3],30,120); + break; + default: + // do nothing + } + echo "
\n".'
'; +if($tinybrowser['allowdelete'] && $tinybrowser['allowedit']) + { + form_hidden_input('editaction',$actionnow); + form_submit_button('commit',$actionhead.' '.TB_FOLDERS,'edit'); + } +?> +
+ + diff --git a/web/libs/tiny_mce/plugins/tinybrowser/img/asc.gif b/web/libs/tiny_mce/plugins/tinybrowser/img/asc.gif new file mode 100644 index 0000000000000000000000000000000000000000..adf50130d7440d8cc40c8409d457326ffe54d0e2 GIT binary patch literal 158 zcmZ?wbhEHbhgzTCNUXZP;i3=9luX=y)x{P_O;``52u7cX9X z>((tVFR%Uk_y76x=kMRY|Ni|G6cqgb|36SAF+lMr3nK#q6N3&&G008^R_O%_eJPn- crz~B1IbD2qx|CQ;nb@#d`p$6(;$W}_0O&9^rvLx| literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/tinybrowser/img/back.png b/web/libs/tiny_mce/plugins/tinybrowser/img/back.png new file mode 100644 index 0000000000000000000000000000000000000000..567a182d70e2fdb8a390b6e7c7015811984151a7 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTv!3-pKreE;^QY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%83g!*xPJWj@!!9H@7}%p{rmUp z*ROy4`0@4Y*H525y?_7y&!0a(fBt;?_U)@zufBi({^iS;|Ns9R=zNa>>NWOsaSW-r zRdZy!-~j~&hK=S2S%kmcpZ2@BpKIgMzwRc2uHunCAG=h$euN4hQJ*AX#l*uPCc}K; TAM24#KhgzTCNUXZP;i3=9luX=y)x{P_O;``52u7cX9X z>((tVFR%Uk_y76x=kMRY|Ni|G6cqgb|36SAF+lMr3nK#q6N3&&G008^R_O%_eJP%7 dfwP1bFEo0x$V^q>;8TH%%aZ;%IC3yp0{{jJIG6wc literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/tinybrowser/img/preview.gif b/web/libs/tiny_mce/plugins/tinybrowser/img/preview.gif new file mode 100644 index 0000000000000000000000000000000000000000..73dba77751d391c98e7b76aebddd0fa9699a9e72 GIT binary patch literal 235 zcmViXHTh|%QuyoytvXe61q-m=c_=EkIir_;LC z^T^)xmz<}%(d@#QXa4{H^z7uzrFy~J^u^uv;qCd>=l8&X03`>_;RbO9 z4|HQ%0Ucm50SpYL3w}8QSIejys(wAhWTrF)V!sWg&ax8_%da%u{ zve2(}ux?7Z2v5e30H z420k>i%zGs>MbUd!XonEkS4%|qtS2x3IGr3;F~l=4Mbv0atIcIF9U%J3o literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/tinybrowser/img/rotate_c.gif b/web/libs/tiny_mce/plugins/tinybrowser/img/rotate_c.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a4bb7cd7574ee72848ef2d29f34406d7d30c2fc GIT binary patch literal 241 zcmVXs8&*&OYQaSTaZ_2t6_}F zgQ?b`kI9IN$Ag&7k8ZDJozRpyeKWGtuEOQMR*q3VggA%Ae~Gt)MvXwc-MDnFZFaVA zNRU8Xo>!vBp8x;=A^8LW000L7EC2ui01yBW000GU;31A=X`bjYDM2t~sbWFP;%wWg zD2w1jkd3A^0rVgM00ZJk5J-SufIuiP8h{R|6(}r39?i9aDu5G>M&x8L94?sThGH@# r5}bm?0x&#Dc2|2z9SC)3d;kvyh9?*W9T5=}9w`SEYnCLLCm{ekfHz+Y literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/tinybrowser/img/tabs.gif b/web/libs/tiny_mce/plugins/tinybrowser/img/tabs.gif new file mode 100644 index 0000000000000000000000000000000000000000..ce4be63558b02e9837b995d2b9dd540ce6d61a6f GIT binary patch literal 1326 zcmV+}1=0FPNk%w1VJrb!0M!5h00030|Ns2_{xV8plA^M<#LbbXwB+gR>o1FUl`^eGF(ALoK@apvR@ALES^78HR@$B&M>-P5Y_4V=e^zifZ@AC5Q z@$v2U_Ve}i^85Sw`1tnr_VoSz{QUg;`uh3!`1kSe-|p?^>+0k0?&$36oE*q;kn@I-k&}bV{vSuh^^>3n?4| z;IMd1E}PHjw0g~MyWjA*d`_>=7l@jE&+q&HfPsR8goTEOh>41ejE#(BTJr4xw7TUm@OOFuz`c;&!9t#9!C>oFt6t5zwd>cgW6Pc$+rZ!o zxO3~?&AYen-@tNG7S|k~SJ3z>`o$Ddm(@N@>THSZ1l^mRxq}B^ypwDdw0~ zere{JXr`&=nrnnf=9^WrDd(JY)@f%NZo;W2ly~;&=bwOLndhE*25RV`h$b4qpoG4u z=%bKEiYB9tjw$J-m}V*mrIp61>8GHE8V0AGPATfCs76X^sZplt>Z^dR%IcG_)@rMq zvd((zuDp7gE33T*D{LLV&T8zj$R?}ovdlK?EUU#nEA6z@R%`9G*b0Edw%m5>?YH2D zEAF`DmTT_0=%%ax?z-%@>+ZYox~sqgCd6y+z4+#<@4o!@>u8O)@dg`oiyn5@f zOZ7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+="";var _1d=this.getParams();for(var key in _1d){_19+="";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="";}_19+="";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject; \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/js/tinybrowser.js.php b/web/libs/tiny_mce/plugins/tinybrowser/js/tinybrowser.js.php new file mode 100644 index 0000000..2b428ac --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/js/tinybrowser.js.php @@ -0,0 +1,79 @@ + + function selectURL(url) + { + document.passform.fileurl.value = url; + FileBrowserDialogue.mySubmit(); + } + var FileBrowserDialogue = { + init : function () { + // Here goes your code for setting your custom things onLoad. + rowHighlight(); + }, + mySubmit : function () { + var URL = document.passform.fileurl.value; + var win = tinyMCEPopup.getWindowArg("window"); + + // insert information now + win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = URL; + + // for image browsers: update image dimensions + if (typeof(win.ImageDialog) != "undefined" && document.URL.indexOf('type=image') != -1) + { + if (win.ImageDialog.getImageData) win.ImageDialog.getImageData(); + if (win.ImageDialog.showPreviewImage) win.ImageDialog.showPreviewImage(URL); + } + + // close popup window + tinyMCEPopup.close(); + } + } + tinyMCEPopup.onInit.add(FileBrowserDialogue.init, FileBrowserDialogue); + + function selectURL(url){ + // window.opener.SetUrl( url, width, height, alt); + window.opener.SetUrl( url ) ; + window.close() ; + } + + function selectURL(url) { + opener.document.getElementById("").value = url; + // Set img source of element id, if img id exists (format is elementid + "img") + if ( + typeof(opener.document.getElementById("img")) != "undefined" + && opener.document.getElementById("img") != null + && opener.document.getElementById("img").src.length != 0 + ) + { + opener.document.getElementById("img").src = url; + } + self.close(); + } + + +rowHighlight = function() { +var x = document.getElementsByTagName('tr'); +for (var i=0;i diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/da.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/da.php new file mode 100644 index 0000000..b266c15 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/da.php @@ -0,0 +1,69 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/de.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/de.php new file mode 100644 index 0000000..7ec803c --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/de.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/en.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/en.php new file mode 100644 index 0000000..95fba41 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/en.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/es.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/es.php new file mode 100644 index 0000000..51340df --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/es.php @@ -0,0 +1,59 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/fi.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/fi.php new file mode 100644 index 0000000..1322505 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/fi.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/fr.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/fr.php new file mode 100644 index 0000000..ab8bec1 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/fr.php @@ -0,0 +1,66 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/hr.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/hr.php new file mode 100644 index 0000000..d25d22e --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/hr.php @@ -0,0 +1,59 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/hu.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/hu.php new file mode 100644 index 0000000..d6e5366 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/hu.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/it.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/it.php new file mode 100644 index 0000000..f163b35 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/it.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/lv.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/lv.php new file mode 100644 index 0000000..b9fc933 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/lv.php @@ -0,0 +1,59 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/nl.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/nl.php new file mode 100644 index 0000000..124426d --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/nl.php @@ -0,0 +1,69 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/pl.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/pl.php new file mode 100644 index 0000000..bc59025 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/pl.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/pt.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/pt.php new file mode 100644 index 0000000..0c2c77b --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/pt.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/ru.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/ru.php new file mode 100644 index 0000000..cd9def6 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/ru.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/sk.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/sk.php new file mode 100644 index 0000000..de11eb8 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/sk.php @@ -0,0 +1,59 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/sv.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/sv.php new file mode 100644 index 0000000..23f776e --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/sv.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/zh-cn.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/zh-cn.php new file mode 100644 index 0000000..9bafd12 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/zh-cn.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/langs/zh-tw.php b/web/libs/tiny_mce/plugins/tinybrowser/langs/zh-tw.php new file mode 100644 index 0000000..11b0589 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/langs/zh-tw.php @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/readme.txt b/web/libs/tiny_mce/plugins/tinybrowser/readme.txt new file mode 100644 index 0000000..c2a2fb6 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/readme.txt @@ -0,0 +1,430 @@ +TinyBrowser 1.41 - A TinyMCE file browser (C) 2008 Bryn Jones +(author website - http://www.lunarvis.com) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + +TinyBrowser Features: +===================== + +- Integrates as a custom file browser within TinyMCE for image, media and 'all' + file types, or can work in stand-alone mode + +- Adobe Flash based file uploader, supporting multiple file selection and upload + with file type and size filtering (permission based) + +- Browse files with a list view or as thumbnails (images only), with optional + pagination + +- List view has image thumbnail on hover + +- File display order customisable e.g. by name, type, size, date + +- Find function to filter results by search string + +- Display detailed file information such as type, size and dimensions (images + only) + +- File deletion facility (permission based) + +- File edit facility (permission based) - rename, resize and rotate (last two + images only) + +- Folder browsing and creation + +- File storage location user definable for each file type + +- Optional session control + +- Multi-lingual support with language definition files + +- Many user definable settings, all from central configuration file + + +TinyBrowser Background +====================== + +I created TinyBrowser as I couldn't find the right TinyMCE file browser for my +needs, particularly the ability to select and upload multiple files in an easy +way. + + +Version Notes +============= + +TinyBrowser 1.41 - released 05/05/2009 +-------------------------------------- +New Features: +Added folder argument to tinyBrowserPopUp function, so that a sub-folder can be +selected when using TinyBrowser in standalone mode. +Added error logging - errors are output to error.log in tinybrowser directory. +Added Spanish, Croatian, Slovakian, Latvian, Czech, Italian, Hungarian, Swedish +and Russian language files (thanks to all who contributed). + +Changes: +Prohibited files are no longer browseable (if the paths defined contained files +of this type). +Only defined file extensions of a file type are browseable and editable. +Changed stripos function to strpos to ensure PHP4 compatability. +Updated createfolder function to work recursively with PHP4. +Remember current folder after upload. +Changed filename clean regex to be less strict. + +Bug Fixes: +Fixed transparency support for gif and png (thanks to Dirk Bohl). +Added 'no-cache' meta tag to ensure latest page is served by web browser. +Added another fix for no style issue with TinyMCE integration. +Security fix for browse type when set to non-existant value. +Security fix for malicious setting of folder get variable to relative values. + +TinyBrowser 1.40 - released N/A +-------------------------------------- +New Features: +Added multiple folder support with a separate Folders tab to allow folder +creation, renaming and deletion. +Added Move action to Edit tab, to allow moving of files between folders. +Added Danish language file. +Added 'delayprocess' to config file - this can be set if server response is +delayed, preventing uploaded files being processed correctly. +Added width and height config values for the TinyBrowser pop up window size. +Added 'cleanfilename' flag to config file, to remove disallowed characters +from filenames on upload (set to true by default). + +Changes: +Added recursive flag to createfolder function, to allow TinyBrowser to +create full upload path. +Changed default window size to 770px x 480px. +Minor code optimisation. +Prohibited files are now not browseable (if the paths defined contained files of +this type). +Now only defined file extensions of a file type are browseable and editable. +Changed stripos function call to strpos to ensure PHP4 compatability. +Updated createfolder function to work recursively with PHP4. +Remember current folder after upload. + +Bug Fixes: +Fixed minor bug causing elementid to be lost after file upload in +stand-alone mode. +Fixed stand-alone javascript selectURL function bug that prevented +TinyBrowser window close on selection. +Fixed bug in Flash upload that prevented folder permission error reporting. +Fixed bug in image resize and rotate functions that converted all types +to jpeg. + +TinyBrowser 1.33 - released 23/09/2008 +-------------------------------------- +New Features: +Added German, Finnish, Traditional and Simplified Chinese language files. +Added session control workaround for upload_file.php (called by Flash). + +Changes: +Flash uploader has been modified to display the file type and also to fix +strange progress bar behaviour when uploading multiple files. As the +upload process is not concurrent, I have removed the individual progress +bars and replaced them with one (progress is still per file however). +When the Upload button is pressed all the buttons now disappear. + +Bug Fixes: +Fixed minor bug that affected css layout after file upload. +Fixed bug introduced in 1.32 that prevented automatic image resize on +upload. +Added 'HTTP/1.1 200' response to upload_file.php script, to address +Flash bug in some Mac setups. +Added check for valid images in Browse and Edit tabs - non-image files +are still listed but error producing image properties code is bypassed. + + +TinyBrowser 1.32 - released 17/09/2008 +-------------------------------------- +New Features: +None. + +Changes: +The upload path is now passed to the Flash upload widget, for better +compatibility with Firefox and Opera when you set your paths using session +variables (this is due to a Flash bug that loses session data). +Files are no longer uploaded to a temporary directory, so there's now no +folder creation during the upload process. Instead, file name extensions +are suffixed with an underscore until processed. (This renders them +useless until verification). +The thumbs directory has been changed to '_thumbs'. + +Bug Fixes: +Fixed security hole - previously, it was possible to directly +submit files to the upload_file.php script. Due to the Flash session bug, +normal session control does not work. Instead, a hash string check has been +added to the upload_file.php script and the installation instructions +amended. + +TinyBrowser 1.31 - released 16/09/2008 +-------------------------------------- +New Features: +None. + +Changes: +Added prohibited files logic to the file_upload.php script (previously +located only in file_process.php script). +Changed duplicate file handling behaviour - TinyBrowser now discards +files with the same name. + +Bug Fixes: +None. + +TinyBrowser 1.30 - released 12/09/2008 +-------------------------------------- +New Features: +'Stand-alone' mode, for use without TinyMCE. +Optional and configurable pagination, to break results down into pages. +New configuration option, $tinybrowser['link'], allows the passback link to +be different to the upload path. +Added automatic creation of upload directories (with definable chmod for Unix +servers). +Added alert messages for errors and actions. +Multi-lingual support - credit to Francis Rebouças +(francisreboucas[at]gmail[dot]com) for idea, design, implementation and +Portugese language file. +Experimental support for FCKeditor. + +Changes: +Rationalised TinyBrowser file and folder names and structure (brought in line +with TinyMCE plugin specification). +Revised documentation. +After file upload user is now directed back to upload tab instead of the +browse tab. + +Bug Fixes: +Fixed security hole - prohibited file extensions not obeyed due to error in +inherited code. +Fixed small issue with edit / delete permissions (not consistently hiding +edit tab). + +TinyBrowser 1.20 - released 20/08/2008 +-------------------------------------- +New Features: +Added thumbnail on hover for detail view (images only). Note: not working in +IE6. +Added Edit tab - allows file rename, resize and rotate (last two for images +only). Also moved delete action to here. +Added configurable automatic image resize on upload. + +Changes: +Moved file thumbnail generation to upload process. +Changed table css to match Flash upload. +Improved thumbnail view layout. +Removed the form select elements for sort by and type, and made the table +column headers clickable. + +Bug Fixes: +Changed default $tinymce['docroot'] value to +rtrim($_SERVER['DOCUMENT_ROOT'],'/') - this fixes an issue with server setups +that return a value with a '/' suffix. +Removed .htaccess file after various bug reports - doesn't appear to be +required for majority of server setups. +Fixed silly bug with thumbnail urls that could prevent generation and viewing +under some server setups. +Fixed various other minor bugs and tidied code. + +TinyBrowser 1.10 +---------------- +Adjusted layout of file upload. +Added facility to limit permitted file upload size (separate values for each +file type). +Amended installation instructions for clarity. +Tested as working in Opera 9. + +TinyBrowser 1.00 +---------------- +Tested in Firefox 2 and 3, Internet Explorer 6 and 7 and Safari 3. +Requires Adobe Flash Player 9. + + +Requirements +============ + +Adobe Flash Player 8 + +PHP enabled server + +Supported browsers: +Internet Explorer 6 + +Firefox 2 + +Safari 3 + +Opera 9 + +Google Chrome + + +Language Definition Files +========================= + +English (en) +Chinese Simplified (zh-cn) +Chinese Traditional (zh-tw) +Croatian (hr) +Czech (cs) +Danish (da) +Dutch (nl) +Finnish (fi) +French (fr) +German (de) +Hungarian (hu) +Italian (it) +Latvian (lv) +Polish (pl) +Portuguese (pt) +Russian (ru) +Slovak (sk) +Spanish (es) +Swedish (sv) + + + +Known Issues +============ + +None. + + +Troubleshooting +=============== + +If you receive a 403, 406 or 412 status error on uploading files, please create +an .htaccess file in your tinybrowser directory with the following contents: + +SecFilterEngine Off +SecFilterScanPOST Off + +If you use Linux and the Squid proxy, you need to add a "ignore_expect_100 on" +flag to the squid config file to avoid a 417 status error. + + +TinyBrowser Installation Method 1 +================================= + +The standard TinyBrowser installation, this integrates TinyBrowser as a custom +file browseer with TinyMCE. + +1) Copy the tinybrowser folder and contents to your TinyMCE plugins directory. + +2) Place the following javascript link after the link to TinyMCE (tiny_mce.js): + + + + ***NOTE:*** The above link assumes TinyMCE is installed in your website root + directory, you will need to amend the link to your specific setup! + +3) Add this line to your TinyMCE init: + + file_browser_callback : "tinyBrowser" + +4) Edit the TinyBrowser configuration file (config_tinybrowser.php). The most + important settings are the file paths (these will be automatically created on + your server by TinyBrowser if they do not exist) and also the 'obfuscate' + property, which should be set to a random value. + + ***NOTE:*** If your server is Unix-based. you may wish to modify the + $tinybrowser['unixpermissions'] config value, which decides permissions. + +5) All done! Now you will see a browse button in the TinyMCE dialog windows for + plugins like image, media and link - just click this button and TinyBrowser + will appear. + + +TinyBrowser Installation Method 2 +================================= + +This installation allows TinyBrowser to be used in 'stand-alone' mode, for +integration with any web application. + +1) Copy the tinybrowser folder and contents to your server. + +2) Place the following javascript link within the tag on the page you + require TinyBrowser: + + + + ***NOTE:*** The above link assumes TinyBrowser is installed in your website + root directory, you will need to amend the link to your specific setup! + +3) Edit the TinyBrowser configuration file (config_tinybrowser.php). The most + important settings are the file paths (these will be automatically created on + your server by TinyBrowser if they do not exist) and also the 'obfuscate' + property, which should be set to a random value. + + ***NOTE:*** If your server is Unix-based. you may wish to modify the + $tinybrowser['unixpermissions'] config value, which decides permissions. + +4) To launch TinyBrowser use the following javascript function: + + tinyBrowserPopUp('type','elementid'); + + 'type' can contain 'image', 'media' or 'file' - corresponding to the type of + file you want TinyBrowser to manage. + + 'elementid' is the id of the page element you want populate with the file url + TinyBrowser returns - this is generally a form text input. If you want to + immediately display the image then create an tag with the same element + id, only suffixed with img - e.g. elementidimg. + + +TinyBrowser Installation Method 3 +================================= + +This installation method integrates TinyBrowser as a custom file browser with +FCKeditor. + +1) Copy the tinybrowser folder and contents to your server. + +2) Edit your fckconfig.js file as follows (replace existing lines). + + To enable TinyBrowser for files: + FCKConfig.LinkBrowserURL = '/yourtinybrowserurl/tinybrowser.php?type=file'; + + To enable TinyBrowser for images: + FCKConfig.ImageBrowserURL = '/yourtinybrowserurl/tinybrowser.php?type=image'; + + To enable TinyBrowser for Flash: + FCKConfig.FlashBrowserURL = '/yourtinybrowserurl/tinybrowser.php?type=media'; + + If you wish to disable the default FCKeditor file uploads (recommended), set + the following: + FCKConfig.LinkUpload = false; + FCKConfig.ImageUpload = false; + FCKConfig.FlashUpload = false; + +3) Edit the TinyBrowser configuration file (config_tinybrowser.php). + + Change the $tinybrowser['integration'] line: + $tinybrowser['integration'] = 'fckeditor'; + + The other most important settings are the file paths (these will be + automatically created on your server by TinyBrowser if they do not exist) and + the 'obfuscate' property, which should be set to a random value. + + ***NOTE:*** If your server is Unix-based. you may wish to modify the + $tinybrowser['unixpermissions'] config value, which decides permissions. + +4) All done! Now when you click the Browse Server button in the FCKeditor dialog + windows for image, Flash and link, TinyBrowser will appear instead of the + standard FCKeditor file browser. + + +Contact +======= + +Please notify me by email bryn[at]lunarvis[dot]com if you notice any bugs or +have ideas for new features. + +----------------------------- +File Last Modified 05/05/2009 \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/tb_standalone.js.php b/web/libs/tiny_mce/plugins/tinybrowser/tb_standalone.js.php new file mode 100644 index 0000000..5de1f82 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/tb_standalone.js.php @@ -0,0 +1,14 @@ + + +function tinyBrowserPopUp(type,formelementid,folder) { + tburl = "" + "?type=" + type + "&feid=" + formelementid; + if (folder !== undefined) tburl += "&folder="+folder+"%2F"; + newwindow=window.open(tburl,'tinybrowser','height=,width=,scrollbars=yes,resizable=yes'); + if (window.focus) {newwindow.focus()} + return false; +} diff --git a/web/libs/tiny_mce/plugins/tinybrowser/tb_tinymce.js.php b/web/libs/tiny_mce/plugins/tinybrowser/tb_tinymce.js.php new file mode 100644 index 0000000..b19dad7 --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/tb_tinymce.js.php @@ -0,0 +1,40 @@ + + + function tinyBrowser (field_name, url, type, win) { + + /* If you work with sessions in PHP and your client doesn't accept cookies you might need to carry + the session name and session ID in the request string (can look like this: "?PHPSESSID=88p0n70s9dsknra96qhuk6etm5"). + These lines of code extract the necessary parameters and add them back to the filebrowser URL again. */ + + var cmsURL = ""; // script URL - use an absolute path! + if (cmsURL.indexOf("?") < 0) { + //add the type as the only query parameter + cmsURL = cmsURL + "?type=" + type; + } + else { + //add the type as an additional query parameter + // (PHP session ID is now included if there is one at all) + cmsURL = cmsURL + "&type=" + type; + } + + tinyMCE.activeEditor.windowManager.open({ + file : cmsURL, + title : 'Tiny Browser', + width : , + height : , + resizable : "yes", + scrollbars : "yes", + inline : "yes", // This parameter only has an effect if you use the inlinepopups plugin! + close_previous : "no" + }, { + window : win, + input : field_name + }); + return false; + } \ No newline at end of file diff --git a/web/libs/tiny_mce/plugins/tinybrowser/tinybrowser.php b/web/libs/tiny_mce/plugins/tinybrowser/tinybrowser.php new file mode 100644 index 0000000..aa4ff4d --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/tinybrowser.php @@ -0,0 +1,337 @@ + array(), + 'message' => array() +); +$newthumbqty = 0; + +// read folder contents if folder exists +if(file_exists($tinybrowser['docroot'].$browsepath)) + { + // Read directory contents and populate $file array + $dh = opendir($tinybrowser['docroot'].$browsepath); + $file = array(); + while (($filename = readdir($dh)) !== false) + { + // get file extension + $nameparts = explode('.',$filename); + $ext = end($nameparts); + + // filter directories and prohibited file types + if($filename != '.' && $filename != '..' && !is_dir($tinybrowser['docroot'].$browsepath.$filename) && !in_array($ext, $tinybrowser['prohibited']) && ($typenow == 'file' || strpos(strtolower($tinybrowser['filetype'][$typenow]),strtolower($ext)))) + { + // search file name if search term entered + if($findnow) $exists = strpos(strtolower($filename),strtolower($findnow)); + + // assign file details to array, for all files or those that match search + if(!$findnow || ($findnow && $exists !== false)) + { + $file['name'][] = $filename; + $file['sortname'][] = strtolower($filename); + $file['modified'][] = filemtime($tinybrowser['docroot'].$browsepath.$filename); + $file['size'][] = filesize($tinybrowser['docroot'].$browsepath.$filename); + + // image specific info or general + if($typenow=='image' && $imginfo = getimagesize($tinybrowser['docroot'].$browsepath.$filename)) + { + $file['width'][] = $imginfo[0]; + $file['height'][] = $imginfo[1]; + $file['dimensions'][] = $imginfo[0] + $imginfo[1]; + $file['type'][] = $imginfo['mime']; + + // Check a thumbnail exists + if(!file_exists($tinybrowser['docroot'].$browsepath.'_thumbs/')) createfolder($tinybrowser['docroot'].$browsepath.'_thumbs/',$tinybrowser['unixpermissions']); + $thumbimg = $tinybrowser['docroot'].$browsepath.'_thumbs/_'.$filename; + if (!file_exists($thumbimg)) + { + $nothumbimg = $tinybrowser['docroot'].$browsepath.$filename; + $mime = getimagesize($nothumbimg); + $im = convert_image($nothumbimg,$mime['mime']); + resizeimage($im,$tinybrowser['thumbsize'],$tinybrowser['thumbsize'],$thumbimg,$tinybrowser['thumbquality'],$mime['mime']); + imagedestroy($im); + $newthumbqty++; + } + } + else + { + $file['width'][] = 'N/A'; + $file['height'][] = 'N/A'; + $file['dimensions'][] = 'N/A'; + $file['type'][] = returnMIMEType($filename); + } + } + } + } + closedir($dh); + } +// create file upload folder +else + { + $success = createfolder($tinybrowser['docroot'].$browsepath,$tinybrowser['unixpermissions']); + if($success) + { + if($typenow=='image') createfolder($tinybrowser['docroot'].$browsepath.'_thumbs/',$tinybrowser['unixpermissions']); + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGMKDIR, $browsepath); + } + else + { + $notify['type'][]='error'; + $notify['message'][]=sprintf(TB_MSGMKDIRFAIL, $browsepath); + } + } + +// Assign directory structure to array +$browsedirs=array(); +dirtree($browsedirs,$tinybrowser['filetype'][$typenow],$tinybrowser['docroot'],$tinybrowser['path'][$typenow]); + +// generate alert if new thumbnails created +if($newthumbqty>0) + { + $notify['type'][]='info'; + $notify['message'][]=sprintf(TB_MSGNEWTHUMBS, $newthumbqty); + } + + +// determine sort order +$sortorder = ($sorttypenow == 'asc' ? SORT_ASC : SORT_DESC); +$num_of_files = (isset($file['name']) ? count($file['name']) : 0); + +if($num_of_files>0) + { + // sort files by selected order + sortfileorder($sortbynow,$sortorder,$file); + } + +// determine pagination +if($tinybrowser['pagination']>0) + { + $showpage_start = ($showpagenow ? ($_REQUEST['showpage']*$tinybrowser['pagination'])-$tinybrowser['pagination'] : 0); + $showpage_end = $showpage_start+$tinybrowser['pagination']; + if($showpage_end>$num_of_files) $showpage_end = $num_of_files; + } +else + { + $showpage_start = 0; + $showpage_end = $num_of_files; + } +?> + + + +TinyBrowser :: <?php echo TB_BROWSE; ?> + + + + + + + +> +0) alert($notify); +form_open('foldertab',false,'tinybrowser.php','?type='.$typenow.$passviewtype.$passsortby.$passfeid); +?> +
+
    +
  • 1) + { + ?>
  • +
+
+ +
+
+
+ + +
+0) + { + $pagelimit = ceil($num_of_files/$tinybrowser['pagination'])+1; + $page = array(); + for($i=1;$i<$pagelimit;$i++) + { + $page[] = array($i,TB_PAGE.' '.$i); + } + if($i>2) form_select($page,'showpage',TB_SHOW,$showpagenow,true); + } +?>
+'.TB_DIMENSIONS.''; + } +else $imagehead = ''; + +echo '
' + .'' + .'' + .$imagehead + .'' + .''; + +// show image thumbnails, unless detail view is selected +if($typenow=='image' && $viewtypenow != 'detail') + { + echo '
'.TB_FILENAME.''.TB_SIZE.''.TB_TYPE.''.TB_DATE.'
'; + + for($i=$showpage_start;$i<$showpage_end;$i++) + { + echo ''; + } + } +else + { + for($i=$showpage_start;$i<$showpage_end;$i++) + { + $alt = (IsOdd($i) ? 'r1' : 'r0'); + echo ''; + if($typenow=='image') echo ''.truncate_text($file['name'][$i],30).''; + else echo ''.truncate_text($file['name'][$i],30).''; + echo ''.bytestostring($file['size'][$i],1).''; + if($typenow=='image') echo ''.$file['width'][$i].' x '.$file['height'][$i].''; + echo ''.$file['type'][$i].'' + .''.date($tinybrowser['dateformat'],$file['modified'][$i]).''."\n"; + } + echo '
'; + } +?> +
+
+ + diff --git a/web/libs/tiny_mce/plugins/tinybrowser/upload.php b/web/libs/tiny_mce/plugins/tinybrowser/upload.php new file mode 100644 index 0000000..bc97e8d --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/upload.php @@ -0,0 +1,177 @@ + array(), + 'message' => array() +); +$goodqty = (isset($_GET['goodfiles']) ? $_GET['goodfiles'] : 0); +$badqty = (isset($_GET['badfiles']) ? $_GET['badfiles'] : 0); +$dupqty = (isset($_GET['dupfiles']) ? $_GET['dupfiles'] : 0); + +if($goodqty>0) + { + $notify['type'][]='success'; + $notify['message'][]=sprintf(TB_MSGUPGOOD, $goodqty); + } +if($badqty>0) + { + $notify['type'][]='failure'; + $notify['message'][]=sprintf(TB_MSGUPBAD, $badqty); + } +if($dupqty>0) + { + $notify['type'][]='failure'; + $notify['message'][]=sprintf(TB_MSGUPDUP, $dupqty); + } +if(isset($_GET['permerror'])) + { + $notify['type'][]='failure'; + $notify['message'][]=sprintf(TB_MSGUPFAIL, $tinybrowser['docroot'].$tinybrowser['path'][$typenow]); + } +?> + + + +TinyBrowser :: <?php echo TB_UPLOAD; ?> + + + + + + + +"); + so.addVariable("sessid", ""); + so.addVariable("obfus", ""); + so.addVariable("filenames", ""); + so.addVariable("extensions", ""); + so.addVariable("filenamelbl", ""); + so.addVariable("sizelbl", ""); + so.addVariable("typelbl", ""); + so.addVariable("progresslbl", ""); + so.addVariable("browselbl", ""); + so.addVariable("removelbl", ""); + so.addVariable("uploadlbl", ""); + so.addVariable("uplimitmsg", ""); + so.addVariable("uplimitlbl", ""); + so.addVariable("uplimitbyte", ""); + so.addParam("allowScriptAccess", "always"); + so.addParam("type", "application/x-shockwave-flash"); + so.write("flashcontent");'> +0) alert($notify); +form_open('foldertab',false,'upload.php','?type='.$typenow.$passfeid); +?> +
+
    +
  • +
  • +
  • +
  • 1) + { + ?>
  • +
+
+ +
+
+
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/tinybrowser/upload_file.php b/web/libs/tiny_mce/plugins/tinybrowser/upload_file.php new file mode 100644 index 0000000..f9c2a7f --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/upload_file.php @@ -0,0 +1,40 @@ +File Upload SuccessFile Upload Success diff --git a/web/libs/tiny_mce/plugins/tinybrowser/upload_process.php b/web/libs/tiny_mce/plugins/tinybrowser/upload_process.php new file mode 100644 index 0000000..971e37f --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/upload_process.php @@ -0,0 +1,99 @@ +0) sleep($tinybrowser['delayprocess']); + +// Initialise files array and error vars +$files = array(); +$good = 0; +$bad = 0; +$dup = 0; +$total = (isset($_GET['filetotal']) ? $_GET['filetotal'] : 0); + + +// Assign get variables +$folder = $tinybrowser['docroot'].urldecode($_GET['folder']); +$foldernow = urlencode(str_replace($tinybrowser['path'][$_GET['type']],'',urldecode($_GET['folder']))); +$passfeid = (isset($_GET['feid']) ? '&feid='.$_GET['feid'] : ''); + +if ($handle = opendir($folder)) + { + while (false !== ($file = readdir($handle))) + { + if ($file != "." && $file != ".." && substr($file,-1)=='_') + { + //-- File Naming + $tmp_filename = $folder.$file; + $dest_filename = $folder.rtrim($file,'_'); + + //-- Duplicate Files + if(file_exists($dest_filename)) { unlink($tmp_filename); $dup++; continue; } + + //-- Bad extensions + $nameparts = explode('.',$dest_filename); + $ext = end($nameparts); + + if(!validateExtension($ext, $tinybrowser['prohibited'])) { unlink($tmp_filename); continue; } + + //-- Rename temp file to dest file + rename($tmp_filename, $dest_filename); + $good++; + + //-- if image, perform additional processing + if($_GET['type']=='image') + { + //-- Good mime-types + $imginfo = getimagesize($dest_filename); + if($imginfo === false) { unlink($dest_filename); continue; } + $mime = $imginfo['mime']; + + // resize image to maximum height and width, if set + if($tinybrowser['imageresize']['width'] > 0 || $tinybrowser['imageresize']['height'] > 0) + { + // assign new width and height values, only if they are less than existing image size + $widthnew = ($tinybrowser['imageresize']['width'] > 0 && $tinybrowser['imageresize']['width'] < $imginfo[0] ? $tinybrowser['imageresize']['width'] : $imginfo[0]); + $heightnew = ($tinybrowser['imageresize']['height'] > 0 && $tinybrowser['imageresize']['height'] < $imginfo[1] ? $tinybrowser['imageresize']['height'] : $imginfo[1]); + + // only resize if width or height values are different + if($widthnew != $imginfo[0] || $heightnew != $imginfo[1]) + { + $im = convert_image($dest_filename,$mime); + resizeimage($im,$widthnew,$heightnew,$dest_filename,$tinybrowser['imagequality'],$mime); + imagedestroy($im); + } + } + + // generate thumbnail + $thumbimg = $folder.'_thumbs/_'.rtrim($file,'_'); + if (!file_exists($thumbimg)) + { + $im = convert_image($dest_filename,$mime); + resizeimage ($im,$tinybrowser['thumbsize'],$tinybrowser['thumbsize'],$thumbimg,$tinybrowser['thumbquality'],$mime); + imagedestroy ($im); + } + } + + } + } + closedir($handle); + } +$bad = $total-($good+$dup); + +// Check for problem during upload +if($total>0 && $bad==$total) Header('Location: ./upload.php?type='.$_GET['type'].$passfeid.'&permerror=1&total='.$total); +else Header('Location: ./upload.php?type='.$_GET['type'].$passfeid.'&folder='.$foldernow.'&badfiles='.$bad.'&goodfiles='.$good.'&dupfiles='.$dup); +?> + + + + + + + TinyBrowser :: Process Upload + + +

Sorry, there was an error processing file uploads.

+ + diff --git a/web/libs/tiny_mce/plugins/visualchars/editor_plugin.js b/web/libs/tiny_mce/plugins/visualchars/editor_plugin.js new file mode 100644 index 0000000..94719f9 --- /dev/null +++ b/web/libs/tiny_mce/plugins/visualchars/editor_plugin.js @@ -0,0 +1 @@ +(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/web/libs/tiny_mce/plugins/visualchars/editor_plugin_src.js b/web/libs/tiny_mce/plugins/visualchars/editor_plugin_src.js new file mode 100644 index 0000000..35856e2 --- /dev/null +++ b/web/libs/tiny_mce/plugins/visualchars/editor_plugin_src.js @@ -0,0 +1,83 @@ +/** + * 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/web/libs/tiny_mce/plugins/wordcount/editor_plugin.js b/web/libs/tiny_mce/plugins/wordcount/editor_plugin.js new file mode 100644 index 0000000..a099e6a --- /dev/null +++ b/web/libs/tiny_mce/plugins/wordcount/editor_plugin.js @@ -0,0 +1 @@ +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/\S\s+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(h,"span",{},'0')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_count:function(b){var c=this,a=0;if(c.block){return}c.block=1;setTimeout(function(){var d=b.getContent({format:"raw"});if(d){d=d.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");d=d.replace(c.cleanre,"");d.replace(c.countre,function(){a++})}tinymce.DOM.setHTML(c.id,a.toString());setTimeout(function(){c.block=0},2000)},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/web/libs/tiny_mce/plugins/wordcount/editor_plugin_src.js b/web/libs/tiny_mce/plugins/wordcount/editor_plugin_src.js new file mode 100644 index 0000000..5cb92fa --- /dev/null +++ b/web/libs/tiny_mce/plugins/wordcount/editor_plugin_src.js @@ -0,0 +1,98 @@ +/** + * 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; + + t.countre = ed.getParam('wordcount_countregex', /\S\s+/g); + t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g); + 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); + }); + + ed.onKeyUp.add(function(ed, e) { + if (e.keyCode == last) + return; + + if (13 == e.keyCode || 8 == last || 46 == last) + t._count(ed); + + last = e.keyCode; + }); + }, + + _count : function(ed) { + var t = this, tc = 0; + + // Keep multiple calls from happening at the same time + if (t.block) + return; + + t.block = 1; + + setTimeout(function() { + var tx = ed.getContent({format : 'raw'}); + + if (tx) { + tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars + tx = tx.replace(t.cleanre, ''); // remove numbers and punctuation + tx.replace(t.countre, function() {tc++;}); // count the words + } + + tinymce.DOM.setHTML(t.id, tc.toString()); + + setTimeout(function() {t.block = 0;}, 2000); + }, 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/web/libs/tiny_mce/plugins/xhtmlxtras/abbr.htm b/web/libs/tiny_mce/plugins/xhtmlxtras/abbr.htm new file mode 100644 index 0000000..3aeac0d --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/abbr.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_abbr_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/xhtmlxtras/acronym.htm b/web/libs/tiny_mce/plugins/xhtmlxtras/acronym.htm new file mode 100644 index 0000000..31ee7b7 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/acronym.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_acronym_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/xhtmlxtras/attributes.htm b/web/libs/tiny_mce/plugins/xhtmlxtras/attributes.htm new file mode 100644 index 0000000..17054da --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/attributes.htm @@ -0,0 +1,148 @@ + + + + {#xhtmlxtras_dlg.attribs_title} + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.attribute_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
+ +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.attribute_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/xhtmlxtras/cite.htm b/web/libs/tiny_mce/plugins/xhtmlxtras/cite.htm new file mode 100644 index 0000000..d0a3e3a --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/cite.htm @@ -0,0 +1,141 @@ + + + + {#xhtmlxtras_dlg.title_cite_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/web/libs/tiny_mce/plugins/xhtmlxtras/css/attributes.css new file mode 100644 index 0000000..9a6a235 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/css/attributes.css @@ -0,0 +1,11 @@ +.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/web/libs/tiny_mce/plugins/xhtmlxtras/css/popup.css b/web/libs/tiny_mce/plugins/xhtmlxtras/css/popup.css new file mode 100644 index 0000000..e67114d --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/css/popup.css @@ -0,0 +1,9 @@ +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/web/libs/tiny_mce/plugins/xhtmlxtras/del.htm b/web/libs/tiny_mce/plugins/xhtmlxtras/del.htm new file mode 100644 index 0000000..8b07fa8 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/del.htm @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_del_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin.js new file mode 100644 index 0000000..a9393ad --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin.js @@ -0,0 +1 @@ +(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_width",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_width",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_width",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_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380,height:370,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/web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js new file mode 100644 index 0000000..5f9d9bd --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js @@ -0,0 +1,132 @@ +/** + * 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_width', 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_width', 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_width', 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_width', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + ed.addCommand('mceAttributes', function() { + ed.windowManager.open({ + file : url + '/attributes.htm', + width : 380, + height : 370, + 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/web/libs/tiny_mce/plugins/xhtmlxtras/ins.htm b/web/libs/tiny_mce/plugins/xhtmlxtras/ins.htm new file mode 100644 index 0000000..6c5470c --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/ins.htm @@ -0,0 +1,161 @@ + + + + {#xhtmlxtras_dlg.title_ins_element} + + + + + + + + + +
+ + +
+
+
+ {#xhtmlxtras_dlg.fieldset_general_tab} + + + + + + + + + +
: + + + + + +
+
:
+
+
+ {#xhtmlxtras_dlg.fieldset_attrib_tab} + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
: + +
:
: + +
: + +
+
+
+
+
+ {#xhtmlxtras_dlg.fieldset_events_tab} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:
:
:
:
:
:
:
:
:
:
:
:
+
+
+
+
+ + + +
+
+ + diff --git a/web/libs/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/web/libs/tiny_mce/plugins/xhtmlxtras/js/abbr.js new file mode 100644 index 0000000..4b51a25 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/js/abbr.js @@ -0,0 +1,28 @@ +/** + * 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/web/libs/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/web/libs/tiny_mce/plugins/xhtmlxtras/js/acronym.js new file mode 100644 index 0000000..6ec2f88 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/js/acronym.js @@ -0,0 +1,28 @@ +/** + * 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/web/libs/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/web/libs/tiny_mce/plugins/xhtmlxtras/js/attributes.js new file mode 100644 index 0000000..d62a219 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/js/attributes.js @@ -0,0 +1,126 @@ +/** + * 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(); + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + 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; + } + + if (value != "") { + dom.setAttrib(elm, attrib.toLowerCase(), value); + + if (attrib == "style") + attrib = "style.cssText"; + + if (attrib.substring(0, 2) == 'on') + value = 'return true;' + value; + + if (attrib == "class") + attrib = "className"; + + elm[attrib]=value; + } else + elm.removeAttribute(attrib); +} + +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/web/libs/tiny_mce/plugins/xhtmlxtras/js/cite.js b/web/libs/tiny_mce/plugins/xhtmlxtras/js/cite.js new file mode 100644 index 0000000..009b715 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/js/cite.js @@ -0,0 +1,28 @@ +/** + * 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/web/libs/tiny_mce/plugins/xhtmlxtras/js/del.js b/web/libs/tiny_mce/plugins/xhtmlxtras/js/del.js new file mode 100644 index 0000000..9e5d8c5 --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/js/del.js @@ -0,0 +1,63 @@ +/** + * 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'); +} + +function insertDel() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL'); + + tinyMCEPopup.execCommand('mceBeginUndoLevel'); + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('del'); + var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';}); + 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, {_mce_new : 1}), n, 1); + }); +} diff --git a/web/libs/tiny_mce/plugins/xhtmlxtras/js/ins.js b/web/libs/tiny_mce/plugins/xhtmlxtras/js/ins.js new file mode 100644 index 0000000..3774f0a --- /dev/null +++ b/web/libs/tiny_mce/plugins/xhtmlxtras/js/ins.js @@ -0,0 +1,62 @@ +/** + * 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'); +} + +function insertIns() { + var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); + tinyMCEPopup.execCommand('mceBeginUndoLevel'); + if (elm == null) { + var s = SXE.inst.selection.getContent(); + if(s.length > 0) { + insertInlineElement('INS'); + var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';}); + for (var i=0; i + + + {#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? + Hosted By Sourceforge + Also on freshmeat +
+
+ +
+
+

{#advanced_dlg.about_loaded}

+ +
+
+ +

 

+
+
+ +
+
+
+
+ +
+ +
+ + diff --git a/web/libs/tiny_mce/themes/advanced/anchor.htm b/web/libs/tiny_mce/themes/advanced/anchor.htm new file mode 100644 index 0000000..2bc63fc --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/anchor.htm @@ -0,0 +1,26 @@ + + + + {#advanced_dlg.anchor_title} + + + + +
+ + + + + + + + +
{#advanced_dlg.anchor_title}
{#advanced_dlg.anchor_name}:
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/themes/advanced/charmap.htm b/web/libs/tiny_mce/themes/advanced/charmap.htm new file mode 100644 index 0000000..3991b81 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/charmap.htm @@ -0,0 +1,52 @@ + + + + {#advanced_dlg.charmap_title} + + + + + + + + + + + + + + + +
{#advanced_dlg.charmap_title}
+ + + + + + + + + +
 
 
+
+ + + + + + + + + + + + + + + + +
HTML-Code
 
 
NUM-Code
 
+
+ + + diff --git a/web/libs/tiny_mce/themes/advanced/color_picker.htm b/web/libs/tiny_mce/themes/advanced/color_picker.htm new file mode 100644 index 0000000..096e755 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/color_picker.htm @@ -0,0 +1,73 @@ + + + + {#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/web/libs/tiny_mce/themes/advanced/editor_template.js b/web/libs/tiny_mce/themes/advanced/editor_template.js new file mode 100644 index 0000000..4c43312 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/editor_template.js @@ -0,0 +1 @@ +(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.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(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",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",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",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",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l)}if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute("themes/advanced/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){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((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){i.formatter.remove(p[0])}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={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"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},""),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,l){var j=this.editor,k=this.settings,m=d.get(j.id+"_tbl"),n=d.get(j.id+"_ifr");i=Math.max(k.theme_advanced_resizing_min_width||100,i);l=Math.max(k.theme_advanced_resizing_min_height||100,l);i=Math.min(k.theme_advanced_resizing_max_width||65535,i);l=Math.min(k.theme_advanced_resizing_max_height||65535,l);d.setStyle(m,"height","");d.setStyle(n,"height",l);if(k.theme_advanced_resize_horizontal){d.setStyle(m,"width","");d.setStyle(n,"width",i);if(i"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},""));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},""));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":" ");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);if(w.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+p.id+"_size",{cw:n,ch:E})}}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(r,z,l,x,j){var C=this,i,y=0,B,u,D=C.settings,A,k,w,m,q;e.each(C.stateControls,function(n){z.setActive(n,r.queryCommandState(C.controls[n][1]))});function o(p){var s,n=j.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s= 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; + + // Init editor + ed.onInit.add(function() { + if (!ed.settings.readonly) + ed.onNodeChange.add(t._nodeChanged, t); + + if (ed.settings.content_css !== false) + ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css")); + }); + + 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"); + }, + + 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; + + ed.formatter.register(name, { + inline : 'span', + attributes : {'class' : o['class']}, + selector : '*' + }); + + ctrl.add(o['class'], name); + }); + } + }, + + _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 = []; + + each(ctrl.items, function(item) { + formatNames.push(item.value); + }); + + ed.focus(); + ed.undoManager.add(); + + // Toggle off the current format + matches = ed.formatter.matchAll(formatNames); + if (!name || matches[0] == name) + ed.formatter.remove(matches[0]); + else + ed.formatter.apply(name); + + ed.undoManager.add(); + ed.nodeChanged(); + + return false; // No auto select + } + }); + + // Handle specified format + ed.onInit.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); + } else + ctrl.add(fmt.title); + }); + } else { + each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) { + var name; + + if (val) { + name = 'style_' + (counter++); + + ed.formatter.register(name, { + inline : 'span', + classes : val, + selector : '*' + }); + + ctrl.add(t.editor.translate(key), name); + } + }); + } + }); + + // 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; + }); + + 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; + }); + + 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', cmd : 'FormatBlock'}); + 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}); + }); + } + + 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; + + n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')}); + + if (!DOM.boxModel) + n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); + + n = sc = DOM.add(n, 'table', {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 = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8 + 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 Event.cancel(e); + } + }); +/* + 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; + + 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 + '_tbl'); + + this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); + }, + + resizeTo : function(w, h) { + 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) + DOM.setStyle(ifr, 'width', e.clientWidth); + } + }, + + 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); + }); + + 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 (v.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; + + a = s.theme_advanced_toolbar_align.toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a}); + + if (!ed.getParam('accessibility_focus')) + h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '')); + + h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '')); + + // Create toolbar and add the controls + for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { + 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); + + //n.appendChild(n = tb.render()); + h.push(tb.renderHTML()); + + o.deltaHeight -= s.theme_advanced_row_height; + } + + 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'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' '); + DOM.add(n, 'a', {href : '#', accesskey : 'x'}); + + if (s.theme_advanced_resizing) { + DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'}); + + 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', 'mousedown', function(e) { + var mouseMoveHandler1, mouseMoveHandler2, + mouseUpHandler1, mouseUpHandler2, + startX, startY, startWidth, startHeight, width, height, ifrElm; + + function resizeOnMove(e) { + 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); + + // Store away the size + if (s.theme_advanced_resizing_use_cookie) { + Cookie.setHash("TinyMCE_" + ed.id + "_size", { + cw : width, + ch : height + }); + } + }; + + 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; + }, + + _nodeChanged : function(ed, cm, n, co, ob) { + var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, 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); + cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing); + cm.setDisabled('redo', !ed.undoManager.hasRedo()); + cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); + + p = getParent('A'); + if (c = cm.get('link')) { + if (!p || !p.name) { + c.setDisabled(!p && co); + c.setActive(!!p); + } + } + + if (c = cm.get('unlink')) { + c.setDisabled(!p && co); + c.setActive(!!p && !p.name); + } + + if (c = cm.get('anchor')) { + c.setActive(!!p && p.name); + } + + p = getParent('IMG'); + if (c = cm.get('image')) + c.setActive(!!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]); + } + + if (c = cm.get('formatselect')) { + p = getParent(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 (!fz && n.style.fontSize) + fz = n.style.fontSize; + + if (!fn && n.style.fontFamily) + fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); + } + + 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_path && s.theme_advanced_statusbar_location) { + p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); + DOM.setHTML(p, ''); + + getParent(function(n) { + var na = n.nodeName.toLowerCase(), u, pi, ti = ''; + + /*if (n.getAttribute('_mce_bogus')) + return; +*/ + // Ignore non element and hidden elements + if (n.nodeType != 1 || n.nodeName === 'BR' || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))) + return; + + // Fake name + if (v = DOM.getAttrib(n, 'mce_name')) + na = v; + + // Handle prefix + if (tinymce.isIE && n.scopeName !== 'HTML') + 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 (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:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); + + if (p.hasChildNodes()) { + p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild); + p.insertBefore(pi, p.firstChild); + } else + p.appendChild(pi); + }, ed.getBody()); + } + }, + + // 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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/charmap.htm', + width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceHelp : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : tinymce.baseURL + '/themes/advanced/about.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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/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 : tinymce.baseURL + '/themes/advanced/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)); \ No newline at end of file diff --git a/web/libs/tiny_mce/themes/advanced/image.htm b/web/libs/tiny_mce/themes/advanced/image.htm new file mode 100644 index 0000000..f30d670 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/image.htm @@ -0,0 +1,80 @@ + + + + {#advanced_dlg.image_title} + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+ x +
+
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/themes/advanced/img/colorpicker.jpg b/web/libs/tiny_mce/themes/advanced/img/colorpicker.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4c542d107b25f68a9d4f9d7a109d0565d1f1437 GIT binary patch literal 3189 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 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/themes/advanced/img/icons.gif b/web/libs/tiny_mce/themes/advanced/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..e46de5333082869b9bdab2576a554a2f9d01a966 GIT binary patch literal 11794 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 F{{gR&nqvR} literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/themes/advanced/js/about.js b/web/libs/tiny_mce/themes/advanced/js/about.js new file mode 100644 index 0000000..5cee9ed --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/js/about.js @@ -0,0 +1,72 @@ +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'; + } +} + +tinyMCEPopup.onInit.add(init); diff --git a/web/libs/tiny_mce/themes/advanced/js/anchor.js b/web/libs/tiny_mce/themes/advanced/js/anchor.js new file mode 100644 index 0000000..7fe7810 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/js/anchor.js @@ -0,0 +1,37 @@ +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'); + + 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; + + tinyMCEPopup.restoreSelection(); + + if (this.action != 'update') + ed.selection.collapse(1); + + elm = ed.dom.getParent(ed.selection.getNode(), 'A'); + if (elm) + elm.name = name; + else + ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, '')); + + tinyMCEPopup.close(); + } +}; + +tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog); diff --git a/web/libs/tiny_mce/themes/advanced/js/charmap.js b/web/libs/tiny_mce/themes/advanced/js/charmap.js new file mode 100644 index 0000000..8c5aea1 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/js/charmap.js @@ -0,0 +1,335 @@ +/** + * 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'], + ['♠', '♠', false,'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()); +}); + +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 += '
'; + + 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/web/libs/tiny_mce/themes/advanced/js/color_picker.js b/web/libs/tiny_mce/themes/advanced/js/color_picker.js new file mode 100644 index 0000000..fd9700f --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/js/color_picker.js @@ -0,0 +1,253 @@ +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':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', + '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown', + '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue', + '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod', + '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen', + '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue', + '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue', + '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen', + '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey', + '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory', + '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue', + '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen', + '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey', + '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', + '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue', + '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin', + '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid', + '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff', + '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue', + '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver', + '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen', + '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', + '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen' +}; + +function init() { + var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')); + + tinyMCEPopup.resizeToInnerSize(); + + generatePicker(); + + if (inputColor) { + changeFinalColor(inputColor); + + col = convertHexToRGB(inputColor); + + if (col) + updateLight(col.r, col.g, col.b); + } +} + +function insertAction() { + var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); + + tinyMCEPopup.restoreSelection(); + + if (f) + f(color); + + tinyMCEPopup.close(); +} + +function showColor(color, name) { + if (name) + document.getElementById("colorname").innerHTML = name; + + document.getElementById("preview").style.backgroundColor = color; + document.getElementById("color").value = color.toLowerCase(); +} + +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; + + h += '' + + ''; + + for (i=0; i' + + '' + + ''; + if ((i+1) % 18 == 0) + h += ''; + } + + h += '
'; + + el.innerHTML = h; + el.className = 'generated'; +} + +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 += '' + } + + el.innerHTML = h; + el.className = 'generated'; +} + +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; + + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.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', '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 = 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, + 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); + } else { + ed.execCommand('mceInsertContent', false, '', {skip_undo : 1}); + ed.dom.setAttribs('__mce_tmp', args); + ed.dom.setAttrib('__mce_tmp', 'id', ''); + ed.undoManager.add(); + } + + tinyMCEPopup.close(); + }, + + updateStyle : function() { + var dom = tinyMCEPopup.dom, st, v, f = document.forms[0]; + + if (tinyMCEPopup.editor.settings.inline_styles) { + st = tinyMCEPopup.dom.parseStyle(this.styleVal); + + // 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/web/libs/tiny_mce/themes/advanced/js/link.js b/web/libs/tiny_mce/themes/advanced/js/link.js new file mode 100644 index 0000000..f67a5bc --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/js/link.js @@ -0,0 +1,156 @@ +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; + + tinyMCEPopup.restoreSelection(); + e = ed.dom.getParent(ed.selection.getNode(), 'A'); + + // Remove element if there is no href + if (!f.href.value) { + if (e) { + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + b = ed.selection.getBookmark(); + ed.dom.remove(e, 1); + ed.selection.moveToBookmark(b); + tinyMCEPopup.execCommand("mceEndUndoLevel"); + tinyMCEPopup.close(); + return; + } + } + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + // Create new anchor elements + if (e == null) { + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("CreateLink", 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 : f.href.value, + 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 : f.href.value, + title : f.linktitle.value, + target : f.target_list ? getSelectValue(f, "target_list") : null, + 'class' : f.class_list ? getSelectValue(f, "class_list") : null + }); + } + + // 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/web/libs/tiny_mce/themes/advanced/js/source_editor.js b/web/libs/tiny_mce/themes/advanced/js/source_editor.js new file mode 100644 index 0000000..2793286 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/js/source_editor.js @@ -0,0 +1,62 @@ +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)) { + setWrap('soft'); + 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 toggleWordWrap(elm) { + if (elm.checked) + setWrap('soft'); + else + setWrap('off'); +} + +var wHeight=0, wWidth=0, owHeight=0, owWidth=0; + +function resizeInputs() { + var el = document.getElementById('htmlSource'); + + if (!tinymce.isIE) { + wHeight = self.innerHeight - 65; + wWidth = self.innerWidth - 16; + } else { + wHeight = document.body.clientHeight - 70; + wWidth = document.body.clientWidth - 16; + } + + el.style.height = Math.abs(wHeight) + 'px'; + el.style.width = Math.abs(wWidth) + 'px'; +} diff --git a/web/libs/tiny_mce/themes/advanced/langs/en.js b/web/libs/tiny_mce/themes/advanced/langs/en.js new file mode 100644 index 0000000..69694b1 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/langs/en.js @@ -0,0 +1,62 @@ +tinyMCE.addI18n('en.advanced',{ +style_select:"Styles", +font_size:"Font size", +fontdefault:"Font family", +block:"Format", +paragraph:"Paragraph", +div:"Div", +address:"Address", +pre:"Preformatted", +h1:"Heading 1", +h2:"Heading 2", +h3:"Heading 3", +h4:"Heading 4", +h5:"Heading 5", +h6:"Heading 6", +blockquote:"Blockquote", +code:"Code", +samp:"Code sample", +dt:"Definition term ", +dd:"Definition description", +bold_desc:"Bold (Ctrl+B)", +italic_desc:"Italic (Ctrl+I)", +underline_desc:"Underline (Ctrl+U)", +striketrough_desc:"Strikethrough", +justifyleft_desc:"Align left", +justifycenter_desc:"Align center", +justifyright_desc:"Align right", +justifyfull_desc:"Align full", +bullist_desc:"Unordered list", +numlist_desc:"Ordered list", +outdent_desc:"Outdent", +indent_desc:"Indent", +undo_desc:"Undo (Ctrl+Z)", +redo_desc:"Redo (Ctrl+Y)", +link_desc:"Insert/edit link", +unlink_desc:"Unlink", +image_desc:"Insert/edit image", +cleanup_desc:"Cleanup messy code", +code_desc:"Edit HTML Source", +sub_desc:"Subscript", +sup_desc:"Superscript", +hr_desc:"Insert horizontal ruler", +removeformat_desc:"Remove formatting", +custom1_desc:"Your custom description here", +forecolor_desc:"Select text color", +backcolor_desc:"Select background color", +charmap_desc:"Insert custom character", +visualaid_desc:"Toggle guidelines/invisible elements", +anchor_desc:"Insert/edit anchor", +cut_desc:"Cut", +copy_desc:"Copy", +paste_desc:"Paste", +image_props_desc:"Image properties", +newdocument_desc:"New document", +help_desc:"Help", +blockquote_desc:"Blockquote", +clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?", +path:"Path", +newdocument:"Are you sure you want clear all contents?", +toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X", +more_colors:"More colors" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/themes/advanced/langs/en_dlg.js b/web/libs/tiny_mce/themes/advanced/langs/en_dlg.js new file mode 100644 index 0000000..9d124d7 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/langs/en_dlg.js @@ -0,0 +1,51 @@ +tinyMCE.addI18n('en.advanced_dlg',{ +about_title:"About TinyMCE", +about_general:"About", +about_help:"Help", +about_license:"License", +about_plugins:"Plugins", +about_plugin:"Plugin", +about_author:"Author", +about_version:"Version", +about_loaded:"Loaded plugins", +anchor_title:"Insert/edit anchor", +anchor_name:"Anchor name", +code_title:"HTML Source Editor", +code_wordwrap:"Word wrap", +colorpicker_title:"Select a color", +colorpicker_picker_tab:"Picker", +colorpicker_picker_title:"Color picker", +colorpicker_palette_tab:"Palette", +colorpicker_palette_title:"Palette colors", +colorpicker_named_tab:"Named", +colorpicker_named_title:"Named colors", +colorpicker_color:"Color:", +colorpicker_name:"Name:", +charmap_title:"Select custom character", +image_title:"Insert/edit image", +image_src:"Image URL", +image_alt:"Image description", +image_list:"Image list", +image_border:"Border", +image_dimensions:"Dimensions", +image_vspace:"Vertical space", +image_hspace:"Horizontal space", +image_align:"Alignment", +image_align_baseline:"Baseline", +image_align_top:"Top", +image_align_middle:"Middle", +image_align_bottom:"Bottom", +image_align_texttop:"Text top", +image_align_textbottom:"Text bottom", +image_align_left:"Left", +image_align_right:"Right", +link_title:"Insert/edit link", +link_url:"Link URL", +link_target:"Target", +link_target_same:"Open link in the same window", +link_target_blank:"Open link in a new window", +link_titlefield:"Title", +link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?", +link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?", +link_list:"Link list" +}); \ No newline at end of file diff --git a/web/libs/tiny_mce/themes/advanced/link.htm b/web/libs/tiny_mce/themes/advanced/link.htm new file mode 100644 index 0000000..7565b9a --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/link.htm @@ -0,0 +1,58 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
 
+
+
+ +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/themes/advanced/skins/default/content.css b/web/libs/tiny_mce/themes/advanced/skins/default/content.css new file mode 100644 index 0000000..9fba043 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/skins/default/content.css @@ -0,0 +1,36 @@ +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(img/items.gif) no-repeat 0 0;} +span.mceItemNbsp {background: #DDD} +td.mceSelected, th.mceSelected {background-color:#3399ff !important} +img {border:0;} +table {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} diff --git a/web/libs/tiny_mce/themes/advanced/skins/default/dialog.css b/web/libs/tiny_mce/themes/advanced/skins/default/dialog.css new file mode 100644 index 0000000..f012226 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/skins/default/dialog.css @@ -0,0 +1,117 @@ +/* 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 {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;} +#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 #previewblock {float:right; padding-left:10px; height:20px;} +#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/web/libs/tiny_mce/themes/advanced/skins/default/img/buttons.png b/web/libs/tiny_mce/themes/advanced/skins/default/img/buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd58418ba7cfe58ae7efdf174e0b223fe3aa6a0 GIT binary patch literal 3274 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 SLTQbO*E^TJI;F+RU=09Vu@yA{ literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/web/libs/tiny_mce/themes/advanced/skins/default/img/menu_check.gif new file mode 100644 index 0000000000000000000000000000000000000000..adfdddccd7cac62a17d68873fa53c248bff8351a GIT binary patch literal 70 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 R!Sp}^Mt9BhYjvGt{|88cricIl literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/web/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png new file mode 100644 index 0000000000000000000000000000000000000000..8996c7493e8a58c9c40845cbe8abdc3e6730716d GIT binary patch literal 3736 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 M07*qoM6N<$f@g#ZbN~PV literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui.css b/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui.css new file mode 100644 index 0000000..a625397 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui.css @@ -0,0 +1,215 @@ +/* Reset */ +.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .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} +.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} +.o2k7Skin table td {vertical-align:middle} + +/* Containers */ +.o2k7Skin table {background:#E5EFFD} +.o2k7Skin iframe {display:block; background:#FFF} +.o2k7Skin .mceToolbar {height:26px} + +/* External */ +.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none} +.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;} +.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} + +/* Layout */ +.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD} +.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD} +.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0} +.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD} +.o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px} +.o2k7Skin .mceStatusbar div {float:left; padding:2px} +.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} +.o2k7Skin .mceStatusbar a:hover {text-decoration:underline} +.o2k7Skin table.mceToolbar {margin-left:3px} +.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;} +.o2k7Skin .mceToolbar td.mceFirst span {margin:0} +.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} +.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none} +.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px} +.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} +.o2k7Skin td.mceCenter {text-align:center;} +.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;} +.o2k7Skin td.mceRight table {margin:0 0 0 auto;} + +/* Button */ +.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} +.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px} +.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px} +.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} +.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px} +.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceButtonLabeled {width:auto} +.o2k7Skin .mceButtonLabeled span.mceIcon {float:left} +.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} +.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888} + +/* Separator */ +.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} + +/* ListBox */ +.o2k7Skin .mceListBox {margin-left:3px} +.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block} +.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} +.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0} +.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF} +.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px} +.o2k7Skin .mceListBoxDisabled .mceText {color:gray} +.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden} +.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px} +.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;} + +/* SplitButton */ +.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px} +.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)} +.o2k7Skin .mceSplitButton a.mceAction {width:22px} +.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)} +.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0} +.o2k7Skin .mceSplitButton span.mceOpen {display:none} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px} +.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px} +.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} +.o2k7Skin .mceSplitButtonActive {background-position:0 -44px} + +/* ColorSplitButton */ +.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} +.o2k7Skin .mceColorSplitMenu td {padding:2px} +.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} +.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} +.o2k7Skin .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} +.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} +.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A} +.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden} +.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden} + +/* Menu */ +.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD} +.o2k7Skin .mceNoIcons span.mceIcon {width:0;} +.o2k7Skin .mceNoIcons a .mceText {padding-left:10px} +.o2k7Skin .mceMenu table {background:#FFF} +.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block} +.o2k7Skin .mceMenu td {height:20px} +.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0} +.o2k7Skin .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} +.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px} +.o2k7Skin .mceMenu pre.mceText {font-family:Monospace} +.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} +.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3} +.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px} +.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD} +.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} +.o2k7Skin .mceMenuItemDisabled .mceText {color:#888} +.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)} +.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center} +.o2k7Skin .mceMenu span.mceMenuLine {display:none} +.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;} + +/* Progress,Resize */ +.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} +.o2k7Skin .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} + +/* Formats */ +.o2k7Skin .mce_formatPreview a {font-size:10px} +.o2k7Skin .mce_p span.mceText {} +.o2k7Skin .mce_address span.mceText {font-style:italic} +.o2k7Skin .mce_pre span.mceText {font-family:monospace} +.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} +.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} +.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} +.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} +.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} +.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} + +/* Theme */ +.o2k7Skin span.mce_bold {background-position:0 0} +.o2k7Skin span.mce_italic {background-position:-60px 0} +.o2k7Skin span.mce_underline {background-position:-140px 0} +.o2k7Skin span.mce_strikethrough {background-position:-120px 0} +.o2k7Skin span.mce_undo {background-position:-160px 0} +.o2k7Skin span.mce_redo {background-position:-100px 0} +.o2k7Skin span.mce_cleanup {background-position:-40px 0} +.o2k7Skin span.mce_bullist {background-position:-20px 0} +.o2k7Skin span.mce_numlist {background-position:-80px 0} +.o2k7Skin span.mce_justifyleft {background-position:-460px 0} +.o2k7Skin span.mce_justifyright {background-position:-480px 0} +.o2k7Skin span.mce_justifycenter {background-position:-420px 0} +.o2k7Skin span.mce_justifyfull {background-position:-440px 0} +.o2k7Skin span.mce_anchor {background-position:-200px 0} +.o2k7Skin span.mce_indent {background-position:-400px 0} +.o2k7Skin span.mce_outdent {background-position:-540px 0} +.o2k7Skin span.mce_link {background-position:-500px 0} +.o2k7Skin span.mce_unlink {background-position:-640px 0} +.o2k7Skin span.mce_sub {background-position:-600px 0} +.o2k7Skin span.mce_sup {background-position:-620px 0} +.o2k7Skin span.mce_removeformat {background-position:-580px 0} +.o2k7Skin span.mce_newdocument {background-position:-520px 0} +.o2k7Skin span.mce_image {background-position:-380px 0} +.o2k7Skin span.mce_help {background-position:-340px 0} +.o2k7Skin span.mce_code {background-position:-260px 0} +.o2k7Skin span.mce_hr {background-position:-360px 0} +.o2k7Skin span.mce_visualaid {background-position:-660px 0} +.o2k7Skin span.mce_charmap {background-position:-240px 0} +.o2k7Skin span.mce_paste {background-position:-560px 0} +.o2k7Skin span.mce_copy {background-position:-700px 0} +.o2k7Skin span.mce_cut {background-position:-680px 0} +.o2k7Skin span.mce_blockquote {background-position:-220px 0} +.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0} +.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0} +.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0} +.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.o2k7Skin span.mce_advhr {background-position:-0px -20px} +.o2k7Skin span.mce_ltr {background-position:-20px -20px} +.o2k7Skin span.mce_rtl {background-position:-40px -20px} +.o2k7Skin span.mce_emotions {background-position:-60px -20px} +.o2k7Skin span.mce_fullpage {background-position:-80px -20px} +.o2k7Skin span.mce_fullscreen {background-position:-100px -20px} +.o2k7Skin span.mce_iespell {background-position:-120px -20px} +.o2k7Skin span.mce_insertdate {background-position:-140px -20px} +.o2k7Skin span.mce_inserttime {background-position:-160px -20px} +.o2k7Skin span.mce_absolute {background-position:-180px -20px} +.o2k7Skin span.mce_backward {background-position:-200px -20px} +.o2k7Skin span.mce_forward {background-position:-220px -20px} +.o2k7Skin span.mce_insert_layer {background-position:-240px -20px} +.o2k7Skin span.mce_insertlayer {background-position:-260px -20px} +.o2k7Skin span.mce_movebackward {background-position:-280px -20px} +.o2k7Skin span.mce_moveforward {background-position:-300px -20px} +.o2k7Skin span.mce_media {background-position:-320px -20px} +.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px} +.o2k7Skin span.mce_pastetext {background-position:-360px -20px} +.o2k7Skin span.mce_pasteword {background-position:-380px -20px} +.o2k7Skin span.mce_selectall {background-position:-400px -20px} +.o2k7Skin span.mce_preview {background-position:-420px -20px} +.o2k7Skin span.mce_print {background-position:-440px -20px} +.o2k7Skin span.mce_cancel {background-position:-460px -20px} +.o2k7Skin span.mce_save {background-position:-480px -20px} +.o2k7Skin span.mce_replace {background-position:-500px -20px} +.o2k7Skin span.mce_search {background-position:-520px -20px} +.o2k7Skin span.mce_styleprops {background-position:-560px -20px} +.o2k7Skin span.mce_table {background-position:-580px -20px} +.o2k7Skin span.mce_cell_props {background-position:-600px -20px} +.o2k7Skin span.mce_delete_table {background-position:-620px -20px} +.o2k7Skin span.mce_delete_col {background-position:-640px -20px} +.o2k7Skin span.mce_delete_row {background-position:-660px -20px} +.o2k7Skin span.mce_col_after {background-position:-680px -20px} +.o2k7Skin span.mce_col_before {background-position:-700px -20px} +.o2k7Skin span.mce_row_after {background-position:-720px -20px} +.o2k7Skin span.mce_row_before {background-position:-740px -20px} +.o2k7Skin span.mce_merge_cells {background-position:-760px -20px} +.o2k7Skin span.mce_table_props {background-position:-980px -20px} +.o2k7Skin span.mce_row_props {background-position:-780px -20px} +.o2k7Skin span.mce_split_cells {background-position:-800px -20px} +.o2k7Skin span.mce_template {background-position:-820px -20px} +.o2k7Skin span.mce_visualchars {background-position:-840px -20px} +.o2k7Skin span.mce_abbr {background-position:-860px -20px} +.o2k7Skin span.mce_acronym {background-position:-880px -20px} +.o2k7Skin span.mce_attribs {background-position:-900px -20px} +.o2k7Skin span.mce_cite {background-position:-920px -20px} +.o2k7Skin span.mce_del {background-position:-940px -20px} +.o2k7Skin span.mce_ins {background-position:-960px -20px} +.o2k7Skin span.mce_pagebreak {background-position:0 -40px} +.o2k7Skin span.mce_restoredraft {background-position:-20px -40px} +.o2k7Skin span.mce_spellchecker {background-position:-540px -20px} diff --git a/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_black.css b/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_black.css new file mode 100644 index 0000000..153f0c3 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_black.css @@ -0,0 +1,8 @@ +/* Black */ +.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack table, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF} +.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0} +.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0} +.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;} +.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)} +.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1} \ No newline at end of file diff --git a/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css b/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css new file mode 100644 index 0000000..7fe3b45 --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css @@ -0,0 +1,5 @@ +/* Silver */ +.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)} +.o2k7SkinSilver table, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee} +.o2k7SkinSilver .mceListBox .mceText {background:#FFF} +.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb} diff --git a/web/libs/tiny_mce/themes/advanced/source_editor.htm b/web/libs/tiny_mce/themes/advanced/source_editor.htm new file mode 100644 index 0000000..5957bbd --- /dev/null +++ b/web/libs/tiny_mce/themes/advanced/source_editor.htm @@ -0,0 +1,25 @@ + + + {#advanced_dlg.code_title} + + + + +
+
{#advanced_dlg.code_title}
+ +
+ +
+ +
+ + + +
+ + +
+
+ + diff --git a/web/libs/tiny_mce/themes/simple/editor_template.js b/web/libs/tiny_mce/themes/simple/editor_template.js new file mode 100644 index 0000000..ed89abc --- /dev/null +++ b/web/libs/tiny_mce/themes/simple/editor_template.js @@ -0,0 +1 @@ +(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})});c.dom.loadCSS(d+"/skins/"+f.skin+"/content.css")});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/themes/simple/editor_template_src.js b/web/libs/tiny_mce/themes/simple/editor_template_src.js new file mode 100644 index 0000000..4b862d4 --- /dev/null +++ b/web/libs/tiny_mce/themes/simple/editor_template_src.js @@ -0,0 +1,85 @@ +/** + * 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() { + var DOM = tinymce.DOM; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('simple'); + + tinymce.create('tinymce.themes.SimpleTheme', { + init : function(ed, url) { + var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings; + + t.editor = ed; + + ed.onInit.add(function() { + ed.onNodeChange.add(function(ed, cm) { + tinymce.each(states, function(c) { + cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c)); + }); + }); + + ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css"); + }); + + DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css"); + }, + + renderUI : function(o) { + var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc; + + n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n); + n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'}); + n = tb = DOM.add(n, 'tbody'); + + // Create iframe container + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'}); + + // Create toolbar container + n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'}); + + // Create toolbar + tb = t.toolbar = cf.createToolbar("tools1"); + tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'})); + tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'})); + tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'})); + tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'})); + tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'})); + tb.add(cf.createSeparator()); + tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'})); + tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'})); + tb.renderTo(n); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_container', + sizeContainer : sc, + deltaHeight : -20 + }; + }, + + getInfo : function() { + return { + longname : 'Simple theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + } + }); + + tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme); +})(); \ No newline at end of file diff --git a/web/libs/tiny_mce/themes/simple/img/icons.gif b/web/libs/tiny_mce/themes/simple/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..16af141ff0eea376a889b1e8d28e9c1cacaaab16 GIT binary patch literal 1440 zcmV;R1z-9{Nk%w1VaNa!0QUd@Ib*`7v&H}b0P*i`B{WZ*I4YI8{iDPCZ*XyWj;?N! z&ooP8CcKTM%}ImAk&d@bUef&=iA% zhPA3sm56OYcjMRI^s}jof~E0n!SIozxs`y)bZpaM%~elOt(xIz_1F@`xREtxwxO@X zElsNLx;f_MIwnTOux@bk@5r<-;@s){f~fMSskU>S&vlpdmZGk)n^Ks084*pfMo5}`Y)@uBrt7q^ z_xb)XxI@^-XhLVQWPPfUtMQSg&Xb6UQhU2=S3pa1!Lhs1Kwz1)!P59aI6r5pthLM4 zE-ud4`aC>8zybolqcQ$sRq*)W>+kl^)!br%x2LJkVv+Dui1Oh7|6z>ag023Luhg%= z;=sbh)RP30t>V}2$H?fg=;-%zOTU8v0MO8l85I$+z}bYP#G9DS_#hs}n3hj*tissz zAwYQh{QX~VkH5&*9YTcu{{H^`{_yYcW|;u|{Qilm^upTyi?sd!nVG)6{{LrW`s5%! zQETJeu@Y0sB3Qy+jGVB@-BWO)C1U{h_4v@?@UEu*S8lPiucH6>|4vxO2|0#LaF@v0 z@ZaCy@c8hkxVXaB{z|fT@U~;Hv$d$T$J*xpqPpE8TH+G^0=vlI+KzIEuZN}B@UYO} z&dtoGp5{=vw)ErQRcDJbQgSxGf8JYL_`X^{uFH_9uqY`f`}_Of)zF}&w4mVd!0r05 zoM3>k!2kdMA^8LW00930EC2ui0LTCo000R80RIUbNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVW@EluM+^lPFV4B&kwhfCK?JZW}S8Lq-x8D(>2KU{_0tBn}8A zagb%p1Q&P-6u`78(}*2LRH3FT;{^Z%ooYoWl!#X%K7Tem@Rf*AgGMWAZK^N;uLKrJ zgqs_6Dufyfw<06~AZA3KR{>nO09GJYj!yq2Mo2^;St0-;UpPxp*8_}f6+Z>JE!?&a z+dPb*b~hYDra%-%J`C}|)xna%9$;-yz|zc`Z6DmMS)p07fiENwe4t=jwVQEwY|=zo zxL=@s=&E6Qp)TGXT_1)l*emUVx)m?~6;Hl)c5^2e&KlH&3v877L9rfP;Fp}T4iu?af8AOXd@5C0(U&fK3z8Av u{UxbK~bzVrJ#-t*jZ&pr2fKKGn^&V9~vZo*x2BQEx{>;M38nHcL^F{BiObs@}* z`J{#WLxwovXYBAC060$l$4o$8!D#?sw|K0lclYii-vHm|k9_^aO!V}`{GR!GKKAwi zfM8^yH4JKv6VxCt?&+GwM`W1#S_weJtaOti_){-Si=W`V9WVZ2Ucj=G&%l61xW6Qx zIXOAvt$?KrXCnI?8&>>da`dP8#6ikZ*e9=Xj!Y3TOdSEKH%uWB{D5|7vhEi^+mI=uFz2#0P{IPZ3_WyP0q)8IE|RbRP5}{x z2f1NP!2Jwy0j82vKX1B3cwNuxb$DV7!1VZ0{n)%cIrDj8dcu&mZD20F_l+P$K~x|}=gXx@k6>Qpl6&#z^PNTmmnMl1(^x`y}el%5+)I}ziC z{+nV%ZRP-}B2yQ-P25`SrTJGZPx>e8=e;E=m0n2DO}o-_X%ci_#>h~ZH8IzKuTM0Y z!ct|+A3S80mwAc^uuzL3L4$(Us`#(&g1vdn3IGLcQB-!%*n8~-# z(8-gNhLb*47jZHb`6|X|FQyM5-M#AB)G}nmuJ*sd7Ge=tWvnn(eD^+kp_{h<=L73y zDXYOJx6iEduBxoEdgLhS*nG;fS}6Yj<-3-0Pq*enlU1E%T=^-L7kO$U(SjzXr8OTj zr_MeSdPII)w;u45Zy{6EJbT=3atLR%p1sbz7sSaGD-him50g5Rf12$y>`c(4Pd?@RJM(g;u(Uk1qVh}SVkL(S(PjvmQsHF% zs@Bj(*?Oho#P6&so65qwo7TeCu!>vdah0%gU#QmSa0glfs{`T=!b0z}Wyv?^mDXM{ zj)!Ny2g`_iaaF~>h`iQ)`P<0+%Rp&(4ow7}q)}P%K}}EjwzA!KD`JMH7TZdW|3N{3 z`H3~DvTR~_;v)a{mE|kKUsUe2D0(=0Rc2*p*;g4?SymZswyD1=8NeMVk=#0c zwL3k?%w8Sn54MXzP`_X1ZoC#iX`OsDGL^ zd}qk>_HnP{ip0v(-lx5vF0)=1zieu@VMfTaGHdyA<;$%*x9;?f43B&qnaRDDuc0`r zw3fe?KbwzfcDWaPPo}B7>4%3&J@(!g2SQV;&zpN{4yE=s_a1yVtSPLyGy|`Jm+_Ug zn5Uap70tj9Uw4`Ynkt&ld|jPmMb$PvZF=Pja}$C!_tYW?>22w+e!hA~(_rI@o9C_) zxhE3-yx|%DP1~D`d7}jctyevJSvYx^{TT1qobpQ3si7;~j|;8yr;K1iu$Jf1#Q3BH z)2Jc2Y)!d*;ogP*Htg*HlK+FH&`DBZ{`dSYd^xI)ph|d5h(i|-s}x@;a!`Igj_B9> zW4St^#ZjE8;DxCUx6reQgf*^Rlz%9nYF9J+wYfB?lI*%Iq`9y8tawFpMg97s(xQX& z@b!-7{^lVIgm01a8;suTi=aCg3QhoJ5to=?%n6Y?k@t^L4nkjwwUdtIx9evFG=5F}<%s89tU)Ll=IH%;BxHopOTFHL# z_Gc#)v#$kBp!J?(^pEtj^cVACiWX{hvbV2EYgWoVQAb|?sq#~+SI*O6c-p?u-o)GV zoSK|;t*VdrFANn=j9V^T=2!_6%8~DX;1}{?v}^B8nP7$7Ntv5j+IQm3Z)E(_;gv2I ze0yp4RM4el_K+@-F4zV63Dt@CIXy>dQS)76X|vF@t<=_QArd{xr8286F_IPUTkmk) zS;)UxB$yW{_EbsZW}9MkTIzd$-AZw@^d{H_?5}6wP_@UKdU}sfQnS2hCfk75_xIJu z9c0;?bib@a?@7%{v(>{q>^$2?5(d?>s*0|T;D^5tqTXLG*e(X~C%aBAr8Sktn%c>V z*#B*-exg>d?jM3;UlBNdHP)83TKz|2ll0SRiz>Wbc5QguA2Nw474wy#Qqu4@WO@V~OT7HyJw!rH-DRl6vaGdX8doDVop`xn0#eK|k z(i8W0QMTwlcUEQg-)wFlu6bkw7sj>$Pue#?$!Cv9q2SR?dM%&Y)qk{llnsoI+|q)6 zhVDU+psIw)g+|xe1D^?ka9HcU%GNaMek+-#Iq(Z*!(?MN?K$m1F`;}XYt<%H;tsMX zPao8nKlR7=F;6nn*e-H6&9?lW7Maw5TBXcf-8ACvJO7JbxE&U z7DqmTA&YX|L1m~Wj&x$k!Wr^T@5#LUKGDAfpco~J-X z-67;Q5jyY~iHn*_hwYBNEzB%@6)ty(c0qk?3R`FHAzeeeQ!UTuq`R|_Gutuf4#j1w-pKDw~i7P2D< z&P*4nX)Lr6Lw(6TWD-VjA^e#nZFC4eA0$brX|-r|-qXhG%5n!qvy8Kub*@T zl@KS;Mr77E(PQ*fQVNgW@s!+@p;)fi&7vEcYHG_`&uBPmnckTD*ySQ2`bYXut&pI6 z_`&q%?C3 zL<7Jf$dEVyc%c9Q8!iBFGY0^KeAAqJ3;}={xO)d`z`%eYh#JiuMDNsfW1=$<(dmeo zjP95WM1J$1l2&YH-E;|jIjipXkD;|WEa?w!-}cqFV)$|~e5s^$xdgu0`J3=-Vxw&w z*E+V2nAz@{CUpMB{~E`2PHpwf{u@M-#+S$=3%e74_NG_%k!y$Zf6230(!vG>jXT0@ zQWkKBD|iY9x4*ta!{QHDwhjtf(8ch@lGepy_(H?L@-N2uQ~0)tjbD=+0}K1zvkVjX zeiX51?%&Yje((Ihp1JK2%>KyY?kI*hvwAR%B~LEx&0zP(76>cb^ko8V2~SK&K zhZgtxQ9FG|29P*_-Wgih9Yhf(m-i-?h~t>;(FObndTSO-M6Qvr|LB;_gMJiY5WPLI z%qL(;yWI9`%6K1(3Q7(n;XqFi2emX?T!M z21(7}!4Q3a5TtI4U6L8WDoG=3?&A|zCaLN{(cA-zZgEJoBj3+qz1VjeXFz>+S_q3%Ha5;mvltEk0 z0I@mXY5{${dec;X@b$bxp z9RrC|)SYo~Z-z#k2KN_0G6p0sfm9+m{{oy329Ym8bR>w5rp-swkufx642VghGpsLV zfa_J@<_~aZ7~Go&NhpxA1I~ni(;>9q!Qf0NZ9WD(+@ue@p!NmO2Lh@6FQ{;5TB{2k z@raIiLhE`Aj>gePV!^R^N`noh!Is)&M{TsD!Ck=LIkdTQ5Lr3ckUh|l1I||*p_&en zje`w21K)GDrW!Y=8jp~TjF;a|x}gsMOhAB@xiv%meO2x_!p66W8|!3F z3K<7F$K0Opu&RXCgY0kj(}Md=k40Ax3**GROT%0zW&NB3QY@Ac&kyGl^e-&ALU@lcY9Q}1h&TWo z+k?8hnE8OA{@y=VwBtoF@ihygu@)0b$2x5Lov1td z-k(2Ze}N=k@O+&25t3H|iTZ-W?aUDy#Sicgc12CnBuq5L+a-$MlL@I3Y8rf~(>P;3 z6|)Hzvs3&!*8B$J{E8Z)sCX_~-HCM8E*6rI;^47^s=UobI%jJMp zUEHb>8saG^lr1R4=HWje>a6xd&1c<7%aN7wAskl%AhM|DwH^LGE<~=j0xyL1Sf`8F zffz3*Ycx-kPN=ks(AiKa(byk%<5z5p{T<`)uilX3XZL^m(C70?&g>>B^n3^&aS>j9 z(=a=hH}sEs46p9_z0MHG2c9n8K7X{?dLX>Or_5^-R}=tu3__0%m^4q(9!oU$T2(;h zNEfnimp*HOZcw1o*@LAD3YkNR4wn4n!2NCwOMU}OG@k+IaKgNZV*bJaAt7uzSt@b9 zI%mY~Pg3{HjIBCfO5aNUj=q~RUy9^Of6ie-JM#Qs73~!#+PX12@5|%LBP$yl8|!N} z(<+WeX4cottl1cv*%Xu$t)~l`4PMZ6FIm&W3$-3l_^?6o_l`b`;8X`NC zCSjT;Go-{Vy}Ran$)Ua?Ci?hcquG{?heOssk(AxT=;)W4uiuZYVX$@4afkW;MwkRe zg#{4hP)@|byaFde!CYEWl9lzz>a&*5*_D^tDmPctYVAn%wGT@|gM)()rq-0of86@S zpW$YCMNq)NG9$`LhM%M70yp9Oe27W3YD3n< zV?=oxR(68L_JS3@&Ti7CH)#u-q^YxN7b22`Or8ynbtoJ~GYNN6M}36p0QHtFr;sN(-`SjCLE z^;=~`c}nHAqS=&+**WhTU?amp#_E%kugb=cbTvjcRPdpJo_T*OLJ~E+ z!ioz{$NIZL-zNH7DRMHiRe7{kW|Putvu{sV*4mj)KM`Q#@$FtzjJr`TWl&lobv$g0 zKk0a>J=E{+oZtaA(2AEuGZ)*O-YVuT>7N}ZloloSuk}6lP(mKk+94U@XrwtnRBxAs zm^c~xa2y+x-0}0iUT9JlG=jv-)(>n)f262E!2209 VmjT$ODWe$zObpERYjs_s{s;8{A&me4 literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/themes/simple/skins/o2k7/ui.css b/web/libs/tiny_mce/themes/simple/skins/o2k7/ui.css new file mode 100644 index 0000000..cf6c35d --- /dev/null +++ b/web/libs/tiny_mce/themes/simple/skins/o2k7/ui.css @@ -0,0 +1,35 @@ +/* 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/web/libs/tiny_mce/tiny_mce.js b/web/libs/tiny_mce/tiny_mce.js new file mode 100644 index 0000000..14d3570 --- /dev/null +++ b/web/libs/tiny_mce/tiny_mce.js @@ -0,0 +1 @@ +(function(c){var a=/^\s*|\s*$/g,d;var b={majorVersion:"3",minorVersion:"3.8",releaseDate:"2010-06-30",_init:function(){var r=this,o=document,m=navigator,f=m.userAgent,l,e,k,j,h,q;r.isOpera=c.opera&&opera.buildNumber;r.isWebKit=/WebKit/.test(f);r.isIE=!r.isWebKit&&!r.isOpera&&(/MSIE/gi).test(f)&&(/Explorer/gi).test(m.appName);r.isIE6=r.isIE&&/MSIE [56]/.test(f);r.isGecko=!r.isWebKit&&/Gecko/.test(f);r.isMac=f.indexOf("Mac")!=-1;r.isAir=/adobeair/i.test(f);r.isIDevice=/(iPad|iPhone)/.test(f);if(c.tinyMCEPreInit){r.suffix=tinyMCEPreInit.suffix;r.baseURL=tinyMCEPreInit.base;r.query=tinyMCEPreInit.query;return}r.suffix="";e=o.getElementsByTagName("base");for(l=0;l=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(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},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;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);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)}}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){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(m){var k=m.each,j=m.is,i=m.isWebKit,d=m.isIE,a=/^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,e=g("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),f=g("src,href,style,coords,shape"),c={"&":"&",'"':""","<":"<",">":">"},n=/[<>&\"]/g,b=/^([a-z0-9],?)+$/i,h=/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,l=/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;function g(q){var p={},o;q=q.split(",");for(o=q.length;o>=0;o--){p[q[o]]=1}return p}m.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(u,q){var p=this,o;p.doc=u;p.win=window;p.files={};p.cssFlicker=false;p.counter=0;p.boxModel=!m.isIE||u.compatMode=="CSS1Compat";p.stdMode=u.documentMode===8;p.settings=q=m.extend({keep_values:false,hex_colors:1,process_html:1},q);if(m.isIE6){try{u.execCommand("BackgroundImageCache",false,true)}catch(r){p.cssFlicker=true}}if(q.valid_styles){p._styles={};k(q.valid_styles,function(t,s){p._styles[s]=m.explode(t)})}m.addUnload(p.destroy,p)},getRoot:function(){var o=this,p=o.settings;return(p&&o.get(p.root_element))||o.doc.body},getViewPort:function(p){var q,o;p=!p?this.win:p;q=p.document;o=this.boxModel?q.documentElement:q.body;return{x:p.pageXOffset||o.scrollLeft,y:p.pageYOffset||o.scrollTop,w:p.innerWidth||o.clientWidth,h:p.innerHeight||o.clientHeight}},getRect:function(s){var r,o=this,q;s=o.get(s);r=o.getPos(s);q=o.getSize(s);return{x:r.x,y:r.y,w:q.w,h:q.h}},getSize:function(r){var p=this,o,q;r=p.get(r);o=p.getStyle(r,"width");q=p.getStyle(r,"height");if(o.indexOf("px")===-1){o=0}if(q.indexOf("px")===-1){q=0}return{w:parseInt(o)||r.offsetWidth||r.clientWidth,h:parseInt(q)||r.offsetHeight||r.clientHeight}},getParent:function(q,p,o){return this.getParents(q,p,o,false)},getParents:function(z,v,s,y){var q=this,p,u=q.settings,x=[];z=q.get(z);y=y===undefined;if(u.strict_root){s=s||q.getRoot()}if(j(v,"string")){p=v;if(v==="*"){v=function(o){return o.nodeType==1}}else{v=function(o){return q.is(o,p)}}}while(z){if(z==s||!z.nodeType||z.nodeType===9){break}if(!v||v(z)){if(y){x.push(z)}else{return z}}z=z.parentNode}return y?x:null},get:function(o){var p;if(o&&this.doc&&typeof(o)=="string"){p=o;o=this.doc.getElementById(o);if(o&&o.id!==p){return this.doc.getElementsByName(p)[1]}}return o},getNext:function(p,o){return this._findSib(p,o,"nextSibling")},getPrev:function(p,o){return this._findSib(p,o,"previousSibling")},select:function(q,p){var o=this;return m.dom.Sizzle(q,o.get(p)||o.get(o.settings.root_element)||o.doc,[])},is:function(q,o){var p;if(q.length===undefined){if(o==="*"){return q.nodeType==1}if(b.test(o)){o=o.toLowerCase().split(/,/);q=q.nodeName.toLowerCase();for(p=o.length-1;p>=0;p--){if(o[p]==q){return true}}return false}}return m.dom.Sizzle.matches(o,q.nodeType?[q]:q).length>0},add:function(s,v,o,r,u){var q=this;return this.run(s,function(y){var x,t;x=j(v,"string")?q.doc.createElement(v):v;q.setAttribs(x,o);if(r){if(r.nodeType){x.appendChild(r)}else{q.setHTML(x,r)}}return !u?y.appendChild(x):x})},create:function(q,o,p){return this.add(this.doc.createElement(q),q,o,p,1)},createHTML:function(v,p,s){var u="",r=this,q;u+="<"+v;for(q in p){if(p.hasOwnProperty(q)){u+=" "+q+'="'+r.encode(p[q])+'"'}}if(m.is(s)){return u+">"+s+""}return u+" />"},remove:function(o,p){return this.run(o,function(r){var q,s;q=r.parentNode;if(!q){return null}if(p){while(s=r.firstChild){if(!m.isIE||s.nodeType!==3||s.nodeValue){q.insertBefore(s,r)}else{r.removeChild(s)}}}return q.removeChild(r)})},setStyle:function(r,o,p){var q=this;return q.run(r,function(v){var u,t;u=v.style;o=o.replace(/-(\D)/g,function(x,s){return s.toUpperCase()});if(q.pixelStyles.test(o)&&(m.is(p,"number")||/^[\-0-9\.]+$/.test(p))){p+="px"}switch(o){case"opacity":if(d){u.filter=p===""?"":"alpha(opacity="+(p*100)+")";if(!r.currentStyle||!r.currentStyle.hasLayout){u.display="inline-block"}}u[o]=u["-moz-opacity"]=u["-khtml-opacity"]=p||"";break;case"float":d?u.styleFloat=p:u.cssFloat=p;break;default:u[o]=p||""}if(q.settings.update_styles){q.setAttrib(v,"_mce_style")}})},getStyle:function(r,o,q){r=this.get(r);if(!r){return false}if(this.doc.defaultView&&q){o=o.replace(/[A-Z]/g,function(s){return"-"+s});try{return this.doc.defaultView.getComputedStyle(r,null).getPropertyValue(o)}catch(p){return null}}o=o.replace(/-(\D)/g,function(t,s){return s.toUpperCase()});if(o=="float"){o=d?"styleFloat":"cssFloat"}if(r.currentStyle&&q){return r.currentStyle[o]}return r.style[o]},setStyles:function(u,v){var q=this,r=q.settings,p;p=r.update_styles;r.update_styles=0;k(v,function(o,s){q.setStyle(u,s,o)});r.update_styles=p;if(r.update_styles){q.setAttrib(u,r.cssText)}},setAttrib:function(q,r,o){var p=this;if(!q||!r){return}if(p.settings.strict){r=r.toLowerCase()}return this.run(q,function(u){var t=p.settings;switch(r){case"style":if(!j(o,"string")){k(o,function(s,x){p.setStyle(u,x,s)});return}if(t.keep_values){if(o&&!p._isRes(o)){u.setAttribute("_mce_style",o,2)}else{u.removeAttribute("_mce_style",2)}}u.style.cssText=o;break;case"class":u.className=o||"";break;case"src":case"href":if(t.keep_values){if(t.url_converter){o=t.url_converter.call(t.url_converter_scope||p,o,r,u)}p.setAttrib(u,"_mce_"+r,o,2)}break;case"shape":u.setAttribute("_mce_style",o);break}if(j(o)&&o!==null&&o.length!==0){u.setAttribute(r,""+o,2)}else{u.removeAttribute(r,2)}})},setAttribs:function(q,r){var p=this;return this.run(q,function(o){k(r,function(s,t){p.setAttrib(o,t,s)})})},getAttrib:function(r,s,q){var o,p=this;r=p.get(r);if(!r||r.nodeType!==1){return false}if(!j(q)){q=""}if(/^(src|href|style|coords|shape)$/.test(s)){o=r.getAttribute("_mce_"+s);if(o){return o}}if(d&&p.props[s]){o=r[p.props[s]];o=o&&o.nodeValue?o.nodeValue:o}if(!o){o=r.getAttribute(s,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(s)){if(r[p.props[s]]===true&&o===""){return s}return o?s:""}if(r.nodeName==="FORM"&&r.getAttributeNode(s)){return r.getAttributeNode(s).nodeValue}if(s==="style"){o=o||r.style.cssText;if(o){o=p.serializeStyle(p.parseStyle(o),r.nodeName);if(p.settings.keep_values&&!p._isRes(o)){r.setAttribute("_mce_style",o)}}}if(i&&s==="class"&&o){o=o.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(d){switch(s){case"rowspan":case"colspan":if(o===1){o=""}break;case"size":if(o==="+0"||o===20||o===0){o=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(o===0){o=""}break;case"hspace":if(o===-1){o=""}break;case"maxlength":case"tabindex":if(o===32768||o===2147483647||o==="32768"){o=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(o===65535){return s}return q;case"shape":o=o.toLowerCase();break;default:if(s.indexOf("on")===0&&o){o=(""+o).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1")}}}return(o!==undefined&&o!==null&&o!=="")?""+o:q},getPos:function(A,s){var p=this,o=0,z=0,u,v=p.doc,q;A=p.get(A);s=s||v.body;if(A){if(d&&!p.stdMode){A=A.getBoundingClientRect();u=p.boxModel?v.documentElement:v.body;o=p.getStyle(p.select("html")[0],"borderWidth");o=(o=="medium"||p.boxModel&&!p.isIE6)&&2||o;return{x:A.left+u.scrollLeft-o,y:A.top+u.scrollTop-o}}q=A;while(q&&q!=s&&q.nodeType){o+=q.offsetLeft||0;z+=q.offsetTop||0;q=q.offsetParent}q=A.parentNode;while(q&&q!=s&&q.nodeType){o-=q.scrollLeft||0;z-=q.scrollTop||0;q=q.parentNode}}return{x:o,y:z}},parseStyle:function(r){var u=this,v=u.settings,x={};if(!r){return x}function p(D,A,C){var z,B,o,y;z=x[D+"-top"+A];if(!z){return}B=x[D+"-right"+A];if(z!=B){return}o=x[D+"-bottom"+A];if(B!=o){return}y=x[D+"-left"+A];if(o!=y){return}x[C]=y;delete x[D+"-top"+A];delete x[D+"-right"+A];delete x[D+"-bottom"+A];delete x[D+"-left"+A]}function q(y,s,o,A){var z;z=x[s];if(!z){return}z=x[o];if(!z){return}z=x[A];if(!z){return}x[y]=x[s]+" "+x[o]+" "+x[A];delete x[s];delete x[o];delete x[A]}r=r.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");k(r.split(";"),function(s){var o,t=[];if(s){s=s.replace(/_MCE_SEMI_/g,";");s=s.replace(/url\([^\)]+\)/g,function(y){t.push(y);return"url("+t.length+")"});s=s.split(":");o=m.trim(s[1]);o=o.replace(/url\(([^\)]+)\)/g,function(z,y){return t[parseInt(y)-1]});o=o.replace(/rgb\([^\)]+\)/g,function(y){return u.toHex(y)});if(v.url_converter){o=o.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(y,z){return"url("+v.url_converter.call(v.url_converter_scope||u,u.decode(z),"style",null)+")"})}x[m.trim(s[0]).toLowerCase()]=o}});p("border","","border");p("border","-width","border-width");p("border","-color","border-color");p("border","-style","border-style");p("padding","","padding");p("margin","","margin");q("border","border-width","border-style","border-color");if(d){if(x.border=="medium none"){x.border=""}}return x},serializeStyle:function(v,p){var q=this,r="";function u(s,o){if(o&&s){if(o.indexOf("-")===0){return}switch(o){case"font-weight":if(s==700){s="bold"}break;case"color":case"background-color":s=s.toLowerCase();break}r+=(r?" ":"")+o+": "+s+";"}}if(p&&q._styles){k(q._styles["*"],function(o){u(v[o],o)});k(q._styles[p.toLowerCase()],function(o){u(v[o],o)})}else{k(v,u)}return r},loadCSS:function(o){var q=this,r=q.doc,p;if(!o){o=""}p=q.select("head")[0];k(o.split(","),function(s){var t;if(q.files[s]){return}q.files[s]=true;t=q.create("link",{rel:"stylesheet",href:m._addVer(s)});if(d&&r.documentMode){t.onload=function(){r.recalc();t.onload=null}}p.appendChild(t)})},addClass:function(o,p){return this.run(o,function(q){var r;if(!p){return 0}if(this.hasClass(q,p)){return q.className}r=this.removeClass(q,p);return q.className=(r!=""?(r+" "):"")+p})},removeClass:function(q,r){var o=this,p;return o.run(q,function(t){var s;if(o.hasClass(t,r)){if(!p){p=new RegExp("(^|\\s+)"+r+"(\\s+|$)","g")}s=t.className.replace(p," ");s=m.trim(s!=" "?s:"");t.className=s;if(!s){t.removeAttribute("class");t.removeAttribute("className")}return s}return t.className})},hasClass:function(p,o){p=this.get(p);if(!p||!o){return false}return(" "+p.className+" ").indexOf(" "+o+" ")!==-1},show:function(o){return this.setStyle(o,"display","block")},hide:function(o){return this.setStyle(o,"display","none")},isHidden:function(o){o=this.get(o);return !o||o.style.display=="none"||this.getStyle(o,"display")=="none"},uniqueId:function(o){return(!o?"mce_":o)+(this.counter++)},setHTML:function(q,p){var o=this;return this.run(q,function(v){var r,t,s,z,u,r;p=o.processHTML(p);if(d){function y(){while(v.firstChild){v.firstChild.removeNode()}try{v.innerHTML="
"+p;v.removeChild(v.firstChild)}catch(x){r=o.create("div");r.innerHTML="
"+p;k(r.childNodes,function(B,A){if(A){v.appendChild(B)}})}}if(o.settings.fix_ie_paragraphs){p=p.replace(/

<\/p>|]+)><\/p>|/gi,' 

')}y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("p");for(t=s.length-1,r=0;t>=0;t--){z=s[t];if(!z.hasChildNodes()){if(!z._mce_keep){r=1;break}z.removeAttribute("_mce_keep")}}}if(r){p=p.replace(/

]+)>|

/ig,'

');p=p.replace(/<\/p>/gi,"
");y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("DIV");for(t=s.length-1;t>=0;t--){z=s[t];if(z._mce_tmp){u=o.doc.createElement("p");z.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(A,x){var B;if(x!=="_mce_tmp"){B=z.getAttribute(x);if(!B&&x==="class"){B=z.className}u.setAttribute(x,B)}});for(r=0;r]+)\/>|/gi,"");if(q.keep_values){if(/)/g,"\n");t=t.replace(/^[\r\n]*|[\r\n]*$/g,"");t=t.replace(/^\s*(\/\/\s*|\]\]>|-->|\]\]-->)\s*$/g,"");return t}r=r.replace(/]+|)>([\s\S]*?)<\/script>/gi,function(s,x,t){if(!x){x=' type="text/javascript"'}x=x.replace(/src=\"([^\"]+)\"?/i,function(y,z){if(q.url_converter){z=p.encode(q.url_converter.call(q.url_converter_scope||p,p.decode(z),"src","script"))}return'_mce_src="'+z+'"'});if(m.trim(t)){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/style>/gi,function(s,x,t){if(t){v.push(o(t));t=""}return""+t+""});r=r.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(s,x,t){return""})}r=r.replace(//g,"");function u(s){return s.replace(h,function(y,z,x,t){return"<"+z+x.replace(l,function(B,A,E,D,C){var F;A=A.toLowerCase();E=E||D||C||"";if(e[A]){if(E==="false"||E==="0"){return}return A+'="'+A+'"'}if(f[A]&&x.indexOf("_mce_"+A)==-1){F=p.decode(E);if(q.url_converter&&(A=="src"||A=="href")){F=q.url_converter.call(q.url_converter_scope||p,F,A,z)}if(A=="style"){F=p.serializeStyle(p.parseStyle(F),A)}return A+'="'+E+'" _mce_'+A+'="'+p.encode(F)+'"'}return B})+t+">"})}r=u(r);r=r.replace(/MCE_SCRIPT:([0-9]+)/g,function(t,s){return v[s]})}return r},getOuterHTML:function(o){var p;o=this.get(o);if(!o){return null}if(o.outerHTML!==undefined){return o.outerHTML}p=(o.ownerDocument||this.doc).createElement("body");p.appendChild(o.cloneNode(true));return p.innerHTML},setOuterHTML:function(r,p,s){var o=this;function q(u,t,x){var y,v;v=x.createElement("body");v.innerHTML=t;y=v.lastChild;while(y){o.insertAfter(y.cloneNode(true),u);y=y.previousSibling}o.remove(u)}return this.run(r,function(u){u=o.get(u);if(u.nodeType==1){s=s||u.ownerDocument||o.doc;if(d){try{if(d&&u.nodeType==1){u.outerHTML=p}else{q(u,p,s)}}catch(t){q(u,p,s)}}else{q(u,p,s)}}})},decode:function(p){var q,r,o;if(/&[\w#]+;/.test(p)){q=this.doc.createElement("div");q.innerHTML=p;r=q.firstChild;o="";if(r){do{o+=r.nodeValue}while(r=r.nextSibling)}return o||p}return p},encode:function(o){return(""+o).replace(n,function(p){return c[p]})},insertAfter:function(o,p){p=this.get(p);return this.run(o,function(r){var q,s;q=p.parentNode;s=p.nextSibling;if(s){q.insertBefore(r,s)}else{q.appendChild(r)}return r})},isBlock:function(o){if(o.nodeType&&o.nodeType!==1){return false}o=o.nodeName||o;return a.test(o)},replace:function(s,r,p){var q=this;if(j(r,"array")){s=s.cloneNode(true)}return q.run(r,function(t){if(p){k(m.grep(t.childNodes),function(o){s.appendChild(o)})}return t.parentNode.replaceChild(s,t)})},rename:function(r,o){var q=this,p;if(r.nodeName!=o.toUpperCase()){p=q.create(o);k(q.getAttribs(r),function(s){q.setAttrib(p,s.nodeName,q.getAttrib(r,s.nodeName))});q.replace(p,r,1)}return p||r},findCommonAncestor:function(q,o){var r=q,p;while(r){p=o;while(p&&r!=p){p=p.parentNode}if(r==p){break}r=r.parentNode}if(!r&&q.ownerDocument){return q.ownerDocument.documentElement}return r},toHex:function(o){var q=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(o);function p(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}if(q){o="#"+p(q[1])+p(q[2])+p(q[3]);return o}return o},getClasses:function(){var s=this,o=[],r,u={},v=s.settings.class_filter,q;if(s.classes){return s.classes}function x(t){k(t.imports,function(y){x(y)});k(t.cssRules||t.rules,function(y){switch(y.type||1){case 1:if(y.selectorText){k(y.selectorText.split(","),function(z){z=z.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(z)||!/\.[\w\-]+$/.test(z)){return}q=z;z=z.replace(/.*\.([a-z0-9_\-]+).*/i,"$1");if(v&&!(z=v(z,q))){return}if(!u[z]){o.push({"class":z});u[z]=1}})}break;case 3:x(y.styleSheet);break}})}try{k(s.doc.styleSheets,x)}catch(p){}if(o.length>0){s.classes=o}return o},run:function(u,r,q){var p=this,v;if(p.doc&&typeof(u)==="string"){u=p.get(u)}if(!u){return false}q=q||this;if(!u.nodeType&&(u.length||u.length===0)){v=[];k(u,function(s,o){if(s){if(typeof(s)=="string"){s=p.doc.getElementById(s)}v.push(r.call(q,s,o))}});return v}return r.call(q,u)},getAttribs:function(q){var p;q=this.get(q);if(!q){return[]}if(d){p=[];if(q.nodeName=="OBJECT"){return q.attributes}if(q.nodeName==="OPTION"&&this.getAttrib(q,"selected")){p.push({specified:1,nodeName:"selected"})}q.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(o){p.push({specified:1,nodeName:o})});return p}return q.attributes},destroy:function(p){var o=this;if(o.events){o.events.destroy()}o.win=o.doc=o.root=o.events=null;if(!p){m.removeUnload(o.destroy)}},createRng:function(){var o=this.doc;return o.createRange?o.createRange():new m.dom.Range(this)},nodeIndex:function(s,t){var o=0,q,r,p;if(s){for(q=s.nodeType,s=s.previousSibling,r=s;s;s=s.previousSibling){p=s.nodeType;if(t&&p==3){if(p==q||!s.nodeValue.length){continue}}o++;q=p}}return o},split:function(u,s,y){var z=this,o=z.createRng(),v,q,x;function p(A){var t,r=A.childNodes;if(A.nodeType==1&&A.getAttribute("_mce_type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){p(r[t])}if(A.nodeType!=9){if(A.nodeType==3&&A.nodeValue.length>0){return}if(A.nodeType==1){r=A.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("_mce_type")=="bookmark"){A.parentNode.insertBefore(r[0],A)}if(r.length||/^(br|hr|input|img)$/i.test(A.nodeName)){return}}z.remove(A)}return A}if(u&&s){o.setStart(u.parentNode,z.nodeIndex(u));o.setEnd(s.parentNode,z.nodeIndex(s));v=o.extractContents();o=z.createRng();o.setStart(s.parentNode,z.nodeIndex(s)+1);o.setEnd(u.parentNode,z.nodeIndex(u)+1);q=o.extractContents();x=u.parentNode;x.insertBefore(p(v),u);if(y){x.replaceChild(y,s)}else{x.insertBefore(s,u)}x.insertBefore(p(q),u);z.remove(u);return y||s}},bind:function(s,o,r,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.add(s,o,r,q||this)},unbind:function(r,o,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.remove(r,o,q)},_findSib:function(r,o,p){var q=this,s=o;if(r){if(j(s,"string")){s=function(t){return q.is(t,o)}}for(r=r[p];r;r=r[p]){if(s(r)){return r}}}return null},_isRes:function(o){return/^(top|left|bottom|right|width|height)/i.test(o)||/;\s*(top|left|bottom|right|width|height)/i.test(o)}});m.DOM=new m.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,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:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(W,X){var Z=N[h],Y=N[U],V=N[P],t=N[z];if(W===0){return G(Z,Y,Z,Y)}if(W===1){return G(Z,Y,V,t)}if(W===2){return G(V,t,V,t)}if(W===3){return G(V,t,Z,Y)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(g){var i=this,j="\uFEFF",e,h,d=g.dom,c=true,f=false;function b(){var n=g.getRng(),k=d.createRng(),m,o;m=n.item?n.item(0):n.parentElement();if(m.ownerDocument!=d.doc){return k}if(n.item||!m.hasChildNodes()){k.setStart(m.parentNode,d.nodeIndex(m));k.setEnd(k.startContainer,k.startOffset+1);return k}o=g.isCollapsed();function l(s){var u,q,t,p,A=0,x,y,z,r,v;r=n.duplicate();r.collapse(s);u=d.create("a");z=r.parentElement();if(!z.hasChildNodes()){k[s?"setStart":"setEnd"](z,0);return}z.appendChild(u);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){k[s?"setStartAfter":"setEndAfter"](z);d.remove(u);return}p=tinymce.grep(z.childNodes);x=p.length-1;while(A<=x){y=Math.floor((A+x)/2);z.insertBefore(u,p[y]);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){A=y+1}else{if(v<0){x=y-1}else{found=true;break}}}q=v>0||y==0?u.nextSibling:u.previousSibling;if(q.nodeType==1){d.remove(u);t=d.nodeIndex(q);q=q.parentNode;if(!s||y>0){t++}}else{if(v>0||y==0){r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=r.text.length}else{r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=q.nodeValue.length-r.text.length}d.remove(u)}k[s?"setStart":"setEnd"](q,t)}l(true);if(!o){l()}return k}this.addRange=function(k){var p,n,m,r,u,s,t=g.dom.doc,o=t.body;function l(B){var x,A,v,z,y;v=d.create("a");x=B?m:u;A=B?r:s;z=p.duplicate();if(x==t){x=o;A=0}if(x.nodeType==3){x.parentNode.insertBefore(v,x);z.moveToElementText(v);z.moveStart("character",A);d.remove(v);p.setEndPoint(B?"StartToStart":"EndToEnd",z)}else{y=x.childNodes;if(y.length){if(A>=y.length){d.insertAfter(v,y[y.length-1])}else{x.insertBefore(v,y[A])}z.moveToElementText(v)}else{v=t.createTextNode(j);x.appendChild(v);z.moveToElementText(v.parentNode);z.collapse(c)}p.setEndPoint(B?"StartToStart":"EndToEnd",z);d.remove(v)}}this.destroy();m=k.startContainer;r=k.startOffset;u=k.endContainer;s=k.endOffset;p=o.createTextRange();if(m==u&&m.nodeType==1&&r==s-1){if(r==s-1){try{n=o.createControlRange();n.addElement(m.childNodes[r]);n.select();n.scrollIntoView();return}catch(q){}}}l(true);l();p.select();p.scrollIntoView()};this.getRangeAt=function(){if(!e||!tinymce.dom.RangeUtils.compareRanges(h,g.getRng())){e=b();h=g.getRng()}try{e.startContainer.nextSibling}catch(k){e=b();h=null}return e};this.destroy=function(){h=e=null};if(g.dom.boxModel){(function(){var q=d.doc,l=q.body,n,o;q.documentElement.unselectable=c;function p(r,u){var s=l.createTextRange();try{s.moveToPoint(r,u)}catch(t){s=null}return s}function m(s){var r;if(s.button){r=p(s.x,s.y);if(r){if(r.compareEndPoints("StartToStart",o)>0){r.setEndPoint("StartToStart",o)}else{r.setEndPoint("EndToEnd",o)}r.select()}}else{k()}}function k(){d.unbind(q,"mouseup",k);d.unbind(q,"mousemove",m);n=0}d.bind(q,"mousedown",function(r){if(r.target.nodeName==="HTML"){if(n){k()}n=1;o=p(r.x,r.y);if(o){d.bind(q,"mouseup",k);d.bind(q,"mousemove",m);o.select()}}})})()}}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return re[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="

";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(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_';if(j.startContainer==k&&j.endContainer==k){k.body.innerHTML=i}else{j.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=i}else{j.insertNode(j.createContextualFragment(i))}}l=f.dom.get("__caret");j=k.createRange();j.setStartBefore(l);j.setEndBefore(l);f.setRng(j);f.dom.remove("__caret")}else{if(j.item){k.execCommand("Delete",false,null);j=f.getRng()}j.pasteHTML(i)}f.onSetContent.dispatch(f,g)},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}if(h&&h.nodeName=="BODY"){return h.firstChild||h}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(q,r){var u=this,m=u.dom,g,j,i,n,h,o,p,l="\uFEFF",s;function f(v,x){var t=0;d(m.select(v),function(z,y){if(z==x){t=y}});return t}if(q==2){function k(){var v=u.getRng(true),t=m.getRoot(),x={};function y(B,G){var A=B[G?"startContainer":"endContainer"],F=B[G?"startOffset":"endOffset"],z=[],C,E,D=0;if(A.nodeType==3){if(r){for(C=A.previousSibling;C&&C.nodeType==3;C=C.previousSibling){F+=C.nodeValue.length}}z.push(F)}else{E=A.childNodes;if(F>=E.length&&E.length){D=1;F=Math.max(0,E.length-1)}z.push(u.dom.nodeIndex(E[F],r)+D)}for(;A&&A!=t;A=A.parentNode){z.push(u.dom.nodeIndex(A,r))}return z}x.start=y(v,true);if(!u.isCollapsed()){x.end=y(v)}return x}return k()}if(q){return{rng:u.getRng()}}g=u.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();s="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();g.collapse();g.pasteHTML(''+l+"");if(!n){j.collapse(false);j.pasteHTML(''+l+"")}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=u.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_end",style:s},l))}g.collapse(true);g.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_start",style:s},l))}u.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(r.tridentSel){r.tridentSel.destroy()}if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(u.length){x=u[t[v]]}}if(z){f.setStart(x,t[0])}else{f.setEnd(x,t[0])}}}g(true);g();r.setRng(f)}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(!a&&l.isBlock(t)&&!t.innerHTML){t.innerHTML='
'}return t}k("start");k("end");f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g);return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(j){var g=this,h,i;if(j&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():g.win.document.createRange())}}catch(f){}if(!i){i=g.win.document.createRange?g.win.document.createRange():g.win.document.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;h.removeAllRanges();h.addRange(i);g.selectedRange=h.getRangeAt(0)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var g=this,f=g.getRng(),h=g.getSel(),i;if(f.setStart){if(!f){return g.dom.getRoot()}i=f.commonAncestorContainer;if(!f.collapsed){if(f.startContainer==f.endContainer){if(f.startOffset-f.endOffset<2){if(f.startContainer.hasChildNodes()){i=f.startContainer.childNodes[f.startOffset]}}}if(c.isWebKit&&h.anchorNode&&h.anchorNode.nodeType==1){return h.anchorNode.childNodes[h.anchorOffset]}}if(i&&i.nodeType==3){return i.parentNode}return i}return f.item?f.item(0):f.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATASection(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>||<\/html>||]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,">")}return b}})})(tinymce);(function(a){a.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(b){this.settings=a.extend({indent_char:" ",indentation:0},b);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(b){this._writeAttributesEnd();this.writeRaw("<"+b);this.tags.push(b);this.inAttr=true;this.count++;this.elementCount=this.count},writeAttribute:function(d,b){var c=this;c.writeRaw(" "+c.encode(d)+'="'+c.encode(b)+'"')},writeEndElement:function(){var b;if(this.tags.length>0){b=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("")}if(this.settings.indentation>0){this.writeRaw("\n")}}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw("");if(this.settings.indentation>0){this.writeRaw("\n")}}},writeText:function(b){this._writeAttributesEnd();this.writeRaw(this.encode(b));this.count++},writeCDATA:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeComment:function(b){this._writeAttributesEnd();this.writeRaw("");this.count++},writeRaw:function(b){this.str+=b},encode:function(b){return b.replace(/[<>&"]/g,function(c){switch(c){case"<":return"<";case">":return">";case"&":return"&";case'"':return"""}return c})},getContent:function(){return this.str},_writeAttributesEnd:function(b){if(!this.inAttr){return}this.inAttr=false;if(b&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(_mce_|_moz_|sizset|sizcache)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,entity_encoding:"named",entities:"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,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,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",valid_elements:"*[*]",extended_valid_elements:0,invalid_elements:0,fix_table_elements:1,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,apply_source_formatting:0,indent_mode:"simple",indent_char:"\t",indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;i.schema=j.schema;if(j.entity_encoding=="named"&&!j.entities){j.entity_encoding="raw"}if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(
\s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^
\s*<\//.test(n)){return""}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,z,y=["ol","ul"],u,t,q,k=/^(OL|UL)$/,A;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p=1767){f(i.dom.select("p table",l.node).reverse(),function(p){var o=i.dom.getParent(p.parentNode,"table,p");if(o.nodeName!="TABLE"){try{i.dom.split(o,p)}catch(m){}}})}})}},setEntities:function(o){var n=this,j,m,h={},k;if(n.entityLookup){return}j=o.split(",");for(m=0;m1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t=1767)){p=j.createHTMLDocument("");f(r.nodeName=="BODY"?r.childNodes:[r],function(h){p.body.appendChild(p.importNode(h,true))});if(r.nodeName!="BODY"){r=p.body.firstChild}else{r=p.body}i=k.dom.doc;k.dom.doc=p}k.key=""+(parseInt(k.key)+1);if(!q.no_events){q.node=r;k.onPreProcess.dispatch(k,q)}k.writer.reset();k._info=q;k._serializeNode(r,q.getInner);q.content=k.writer.getContent();if(i){k.dom.doc=i}if(!q.no_events){k.onPostProcess.dispatch(k,q)}k._postProcess(q);q.node=null;return e.trim(q.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(]*>)(.*?)(<\/script>)/g},{pattern:/(]*>)(.*?)(<\/noscript>)/g},{pattern:/(]*>)(.*?)(<\/style>)/g},{pattern:/(]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/()/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=j.replace(/

\s+<\/p>|]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?" 

":" 

");if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=j.replace(/(<[^>]+>)\s+/g,"$1 ");j=j.replace(/\s+(<\/[^>]+>)/g," $1");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,"<$1 $2>");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,"<$1>");j=j.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,"")}if(k.apply_source_formatting&&k.indent_mode=="simple"){j=j.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n");j=j.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>");j=j.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"\n");j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=j.replace(//g,"");if(k.entity_encoding=="raw"){j=j.replace(/

 <\/p>|]+)> <\/p>/g,"\u00a0

")}j=j.replace(/]+|)>([\s\S]*?)<\/noscript>/g,function(h,p,o){return""+i.dom.decode(o.replace(//g,""))+""})}n.content=j},_serializeNode:function(E,J){var A=this,B=A.settings,y=A.writer,q,j,u,G,F,I,C,h,z,k,r,D,p,m,H,o,x;if(!B.node_filter||B.node_filter(E)){switch(E.nodeType){case 1:if(E.hasAttribute?E.hasAttribute("_mce_bogus"):E.getAttribute("_mce_bogus")){return}p=H=false;q=E.hasChildNodes();k=E.getAttribute("_mce_name")||E.nodeName.toLowerCase();o=E.getAttribute("_mce_type");if(o){if(!A._info.cleanup){p=true;return}else{H=1}}if(d){x=E.scopeName;if(x&&x!=="HTML"&&x!=="html"){k=x+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!H){if(!A.validElementsRE||!A.validElementsRE.test(k)||(A.invalidElementsRE&&A.invalidElementsRE.test(k))||J){p=true;break}}if(d){if(B.fix_content_duplication){if(E._mce_serialized==A.key){return}E._mce_serialized=A.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(E.nodeName==="BR"&&E.getAttribute("type")=="_moz"){return}}}if(B.validate_children){if(A.elementName&&!A.schema.isValid(A.elementName,k)){p=true;break}A.elementName=k}r=A.findRule(k);if(!r){p=true;break}k=r.name||k;m=B.closed.test(k);if((!q&&r.noEmpty)||(d&&!k)){p=true;break}if(r.requiredAttribs){I=r.requiredAttribs;for(G=I.length-1;G>=0;G--){if(this.dom.getAttrib(E,I[G])!==""){break}}if(G==-1){p=true;break}}y.writeStartElement(k);if(r.attribs){for(G=0,C=r.attribs,F=C.length;G-1;G--){h=C[G];if(h.specified){I=h.nodeName.toLowerCase();if(B.invalid_attrs.test(I)||!r.validAttribsRE.test(I)){continue}D=A.findAttribRule(r,I);z=A._getAttrib(E,D,I);if(z!==null){y.writeAttribute(I,z)}}}}if(o&&H){y.writeAttribute("_mce_type",o)}if(k==="script"&&e.trim(E.innerHTML)){y.writeText("// ");y.writeCDATA(E.innerHTML.replace(/|<\[CDATA\[|\]\]>/g,""));q=false;break}if(r.padd){if(q&&(u=E.firstChild)&&u.nodeType===1&&E.childNodes.length===1){if(u.hasAttribute?u.hasAttribute("_mce_bogus"):u.getAttribute("_mce_bogus")){y.writeText("\u00a0")}}else{if(!q){y.writeText("\u00a0")}}}break;case 3:if(B.validate_children&&A.elementName&&!A.schema.isValid(A.elementName,"#text")){return}return y.writeText(E.nodeValue);case 4:return y.writeCDATA(E.nodeValue);case 8:return y.writeComment(E.nodeValue)}}else{if(E.nodeType==1){q=E.hasChildNodes()}}if(q&&!m){u=E.firstChild;while(u){A._serializeNode(u);A.elementName=k;u=u.nextSibling}}if(!p){if(!m){y.writeFullEndElement()}else{y.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+""+p}))});return j},_unprotect:function(i,j){i=i.replace(/\"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,""))}}if(b.stdMode){e+=''+j.renderHTML()+""}else{e+=""+j.renderHTML()+""}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,""))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,""));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},""+e+"")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{items:[],urls:{},lookup:{},onAdd:new a(this),get:function(d){return this.lookup[d]},requireLangPack:function(e){var d=b.settings;if(d&&d.language){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));b.ScriptLoader.add(e,d,g)}});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(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}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);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_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",valid_elements:"@[id|class|style|title|dir';if(F.document_base_url!=m.documentBaseURL){E.iframeHTML+=''}E.iframeHTML+='';if(m.relaxedDomain){E.iframeHTML+=''; + + 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) { + // We need to write the contents here in IE since multiple writes messes up refresh button and back button + if (isIE || (tinymce.isOpera && parseFloat(opera.version()) >= 9.5)) + u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'; + else if (tinymce.isOpera) + u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();ed.setupIframe();})()'; + } + + // Create iframe + n = DOM.add(o.iframeContainer, 'iframe', { + id : t.id + "_ifr", + src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7 + frameBorder : '0', + style : { + width : '100%', + height : h + } + }); + + t.contentAreaContainer = o.iframeContainer; + DOM.get(o.editorContainer).style.display = t.orgDisplay; + DOM.get(t.id).style.display = 'none'; + + if (!isIE || !tinymce.relaxedDomain) + t.setupIframe(); + + e = n = o = null; // Cleanup + }, + + setupIframe : function() { + var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b; + + // Setup iframe body + if (!isIE || !tinymce.relaxedDomain) { + d.open(); + d.write(t.iframeHTML); + d.close(); + } + + // Design mode needs to be added here Ctrl+A will fail otherwise + if (!isIE) { + try { + if (!s.readonly) + d.designMode = 'On'; + } catch (ex) { + // Will fail on Gecko if the editor is placed in an hidden container element + // The design mode will be set ones the editor is focused + } + } + + // IE needs to use contentEditable or it will display non secure items for HTTPS + if (isIE) { + // It will not steal focus if we hide it while setting contentEditable + b = t.getBody(); + DOM.hide(b); + + if (!s.readonly) + b.contentEditable = true; + + DOM.show(b); + } + + t.dom = new tinymce.dom.DOMUtils(t.getDoc(), { + keep_values : true, + url_converter : t.convertURL, + url_converter_scope : t, + hex_colors : s.force_hex_style_colors, + class_filter : s.class_filter, + update_styles : 1, + fix_ie_paragraphs : 1, + valid_styles : s.valid_styles + }); + + t.schema = new tinymce.dom.Schema(); + + t.serializer = new tinymce.dom.Serializer(extend(s, { + valid_elements : s.verify_html === false ? '*[*]' : s.valid_elements, + dom : t.dom, + schema : t.schema + })); + + t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer); + + t.formatter = new tinymce.Formatter(this); + + // Register default formats + t.formatter.register({ + alignleft : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}}, + {selector : 'img,table', styles : {'float' : 'left'}} + ], + + aligncenter : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}}, + {selector : 'img', styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}}, + {selector : 'table', styles : {marginLeft : 'auto', marginRight : 'auto'}} + ], + + alignright : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}}, + {selector : 'img,table', styles : {'float' : 'right'}} + ], + + alignfull : [ + {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}} + ], + + bold : [ + {inline : 'strong'}, + {inline : 'span', styles : {fontWeight : 'bold'}}, + {inline : 'b'} + ], + + italic : [ + {inline : 'em'}, + {inline : 'span', styles : {fontStyle : 'italic'}}, + {inline : 'i'} + ], + + underline : [ + {inline : 'span', styles : {textDecoration : 'underline'}, exact : true}, + {inline : 'u'} + ], + + strikethrough : [ + {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true}, + {inline : 'u'} + ], + + forecolor : {inline : 'span', styles : {color : '%value'}}, + hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}}, + 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'}, + + 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) { + t.formatter.register(name, {block : name, remove : 'all'}); + }); + + // Register user defined formats + t.formatter.register(t.settings.formats); + + t.undoManager = new tinymce.UndoManager(t); + + // Pass through + t.undoManager.onAdd.add(function(um, l) { + if (!l.initial) + return t.onChange.dispatch(t, l, um); + }); + + t.undoManager.onUndo.add(function(um, l) { + return t.onUndo.dispatch(t, l, um); + }); + + t.undoManager.onRedo.add(function(um, l) { + return t.onRedo.dispatch(t, l, um); + }); + + t.forceBlocks = new tinymce.ForceBlocks(t, { + forced_root_block : s.forced_root_block + }); + + t.editorCommands = new tinymce.EditorCommands(t); + + // Pass through + t.serializer.onPreProcess.add(function(se, o) { + return t.onPreProcess.dispatch(t, o, se); + }); + + t.serializer.onPostProcess.add(function(se, o) { + return t.onPostProcess.dispatch(t, o, se); + }); + + t.onPreInit.dispatch(t); + + if (!s.gecko_spellcheck) + t.getBody().spellcheck = 0; + + if (!s.readonly) + t._addEvents(); + + t.controlManager.onPostRender.dispatch(t, t.controlManager); + t.onPostRender.dispatch(t); + + if (s.directionality) + t.getBody().dir = s.directionality; + + if (s.nowrap) + t.getBody().style.whiteSpace = "nowrap"; + + if (s.custom_elements) { + function handleCustom(ed, o) { + each(explode(s.custom_elements), function(v) { + var n; + + if (v.indexOf('~') === 0) { + v = v.substring(1); + n = 'span'; + } else + n = 'div'; + + o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' _mce_name="$1"$2>'); + o.content = o.content.replace(new RegExp('', 'g'), ''); + }); + }; + + t.onBeforeSetContent.add(handleCustom); + t.onPostProcess.add(function(ed, o) { + if (o.set) + handleCustom(ed, o); + }); + } + + if (s.handle_node_change_callback) { + t.onNodeChange.add(function(ed, cm, n) { + t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed()); + }); + } + + if (s.save_callback) { + t.onSaveContent.add(function(ed, o) { + var h = t.execCallback('save_callback', t.id, o.content, t.getBody()); + + if (h) + o.content = h; + }); + } + + if (s.onchange_callback) { + t.onChange.add(function(ed, l) { + t.execCallback('onchange_callback', t, l); + }); + } + + if (s.convert_newlines_to_brs) { + t.onBeforeSetContent.add(function(ed, o) { + if (o.initial) + o.content = o.content.replace(/\r?\n/g, '
'); + }); + } + + if (s.fix_nesting && isIE) { + t.onBeforeSetContent.add(function(ed, o) { + o.content = t._fixNesting(o.content); + }); + } + + if (s.preformatted) { + t.onPostProcess.add(function(ed, o) { + o.content = o.content.replace(/^\s*/, ''); + o.content = o.content.replace(/<\/pre>\s*$/, ''); + + if (o.set) + o.content = '
' + o.content + '
'; + }); + } + + if (s.verify_css_classes) { + t.serializer.attribValueFilter = function(n, v) { + var s, cl; + + if (n == 'class') { + // Build regexp for classes + if (!t.classesRE) { + cl = t.dom.getClasses(); + + if (cl.length > 0) { + s = ''; + + each (cl, function(o) { + s += (s ? '|' : '') + o['class']; + }); + + t.classesRE = new RegExp('(' + s + ')', 'gi'); + } + } + + return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : ''; + } + + return v; + }; + } + + if (s.cleanup_callback) { + t.onBeforeSetContent.add(function(ed, o) { + o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); + }); + + t.onPreProcess.add(function(ed, o) { + if (o.set) + t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o); + + if (o.get) + t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o); + }); + + t.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); + + if (o.get) + o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o); + }); + } + + if (s.save_callback) { + t.onGetContent.add(function(ed, o) { + if (o.save) + o.content = t.execCallback('save_callback', t.id, o.content, t.getBody()); + }); + } + + if (s.handle_event_callback) { + t.onEvent.add(function(ed, e, o) { + if (t.execCallback('handle_event_callback', e, ed, o) === false) + Event.cancel(e); + }); + } + + // Add visual aids when new contents is added + t.onSetContent.add(function() { + t.addVisual(t.getBody()); + }); + + // Remove empty contents + if (s.padd_empty_editor) { + t.onPostProcess.add(function(ed, o) { + o.content = o.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/, ''); + }); + } + + if (isGecko) { + // Fix 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 + function fixLinks(ed, o) { + each(ed.dom.select('a'), function(n) { + var pn = n.parentNode; + + if (ed.dom.isBlock(pn) && pn.lastChild === n) + ed.dom.add(pn, 'br', {'_mce_bogus' : 1}); + }); + }; + + t.onExecCommand.add(function(ed, cmd) { + if (cmd === 'CreateLink') + fixLinks(ed); + }); + + t.onSetContent.add(t.selection.onSetContent.add(fixLinks)); + + if (!s.readonly) { + try { + // Design mode must be set here once again to fix a bug where + // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again + d.designMode = 'Off'; + d.designMode = 'On'; + } catch (ex) { + // Will fail on Gecko if the editor is placed in an hidden container element + // The design mode will be set ones the editor is focused + } + } + } + + // A small timeout was needed since firefox will remove. Bug: #1838304 + setTimeout(function () { + if (t.removed) + return; + + t.load({initial : true, format : (s.cleanup_on_startup ? 'html' : 'raw')}); + t.startContent = t.getContent({format : 'raw'}); + t.initialized = true; + + t.onInit.dispatch(t); + t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc()); + t.execCallback('init_instance_callback', t); + t.focus(true); + t.nodeChanged({initial : 1}); + + // Load specified content CSS last + if (s.content_css) { + tinymce.each(explode(s.content_css), function(u) { + t.dom.loadCSS(t.documentBaseURI.toAbsolute(u)); + }); + } + + // Handle auto focus + if (s.auto_focus) { + setTimeout(function () { + var ed = tinymce.get(s.auto_focus); + + ed.selection.select(ed.getBody(), 1); + ed.selection.collapse(1); + ed.getWin().focus(); + }, 100); + } + }, 1); + + e = null; + }, + + + focus : function(sf) { + var oed, t = this, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc(); + + if (!sf) { + // Get selected control element + ieRng = t.selection.getRng(); + if (ieRng.item) { + controlElm = ieRng.item(0); + } + + // Is not content editable + if (!ce) + t.getWin().focus(); + + // 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 != t) { + if ((oed = tinymce.activeEditor) != null) + oed.onDeactivate.dispatch(oed, t); + + t.onActivate.dispatch(t, oed); + } + + tinymce._setActive(t); + }, + + 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 t = this, s = t.selection, n = (isIE ? s.getNode() : s.getStart()) || t.getBody(); + + // Fix for bug #1896577 it seems that this can not be fired while the editor is loading + if (t.initialized) { + o = o || {}; + n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state + + // Get parents and add them to object + o.parents = []; + t.dom.getParent(n, function(node) { + if (node.nodeName == 'BODY') + return true; + + o.parents.push(node); + }); + + t.onNodeChange.dispatch( + t, + o ? o.controlManager || t.controlManager : t.controlManager, + n, + s.isCollapsed(), + o + ); + } + }, + + addButton : function(n, s) { + var t = this; + + t.buttons = t.buttons || {}; + t.buttons[n] = s; + }, + + addCommand : function(n, f, s) { + this.execCommands[n] = {func : f, scope : s || this}; + }, + + addQueryStateHandler : function(n, f, s) { + this.queryStateCommands[n] = {func : f, scope : s || this}; + }, + + addQueryValueHandler : function(n, f, s) { + this.queryValueCommands[n] = {func : f, scope : s || this}; + }, + + addShortcut : function(pa, desc, cmd_func, sc) { + var t = this, c; + + if (!t.settings.custom_shortcuts) + 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 : 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(); + + o = {}; + t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o); + if (o.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; + } + + // Execute global commands + if (tinymce.GlobalCommands.execCommand(t, 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 t = this; + + DOM.show(t.getContainer()); + DOM.hide(t.id); + t.load(); + }, + + hide : function() { + var t = this, d = t.getDoc(); + + // Fixed bug where IE has a blinking cursor left from the editor + if (isIE && d) + d.execCommand('SelectAll'); + + // We must save before we hide so Safari doesn't crash + t.save(); + DOM.hide(t.getContainer()); + DOM.setStyle(t.id, 'display', t.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; + + // Add undo level will trigger onchange event + if (!o.no_events) { + t.undoManager.typing = 0; + t.undoManager.add(); + } + + 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(h, o) { + var t = this; + + o = o || {}; + o.format = o.format || 'html'; + o.set = true; + o.content = h; + + if (!o.no_events) + t.onBeforeSetContent.dispatch(t, o); + + // 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 && (h.length === 0 || /^\s+$/.test(h))) { + o.content = t.dom.setHTML(t.getBody(), '
'); + o.format = 'raw'; + } + + o.content = t.dom.setHTML(t.getBody(), tinymce.trim(o.content)); + + if (o.format != 'raw' && t.settings.cleanup) { + o.getInner = true; + o.content = t.dom.setHTML(t.getBody(), t.serializer.serialize(t.getBody(), o)); + } + + if (!o.no_events) + t.onSetContent.dispatch(t, o); + + return o.content; + }, + + getContent : function(o) { + var t = this, h; + + o = o || {}; + o.format = o.format || 'html'; + o.get = true; + + if (!o.no_events) + t.onBeforeGetContent.dispatch(t, o); + + if (o.format != 'raw' && t.settings.cleanup) { + o.getInner = true; + h = t.serializer.serialize(t.getBody(), o); + } else + h = t.getBody().innerHTML; + + h = h.replace(/^\s*|\s*$/g, ''); + o.content = h; + + if (!o.no_events) + t.onGetContent.dispatch(t, o); + + return o.content; + }, + + isDirty : function() { + var t = this; + + return tinymce.trim(t.startContent) != tinymce.trim(t.getContent({format : 'raw', no_events : 1})) && !t.isNotDirty; + }, + + getContainer : function() { + var t = this; + + if (!t.container) + t.container = DOM.get(t.editorContainer || t.id + '_parent'); + + return t.container; + }, + + getContentAreaContainer : function() { + return this.contentAreaContainer; + }, + + getElement : function() { + return DOM.get(this.settings.content_element || this.id); + }, + + getWin : function() { + var t = this, e; + + if (!t.contentWindow) { + e = DOM.get(t.id + "_ifr"); + + if (e) + t.contentWindow = e.contentWindow; + } + + return t.contentWindow; + }, + + getDoc : function() { + var t = this, w; + + if (!t.contentDocument) { + w = t.getWin(); + + if (w) + t.contentDocument = w.document; + } + + return t.contentDocument; + }, + + getBody : function() { + return this.bodyElement || this.getDoc().body; + }, + + convertURL : function(u, n, e) { + var t = this, s = t.settings; + + // Use callback instead + if (s.urlconverter_callback) + return t.execCallback('urlconverter_callback', u, e, true, n); + + // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs + if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0) + return u; + + // Convert to relative + if (s.relative_urls) + return t.documentBaseURI.toRelative(u); + + // Convert to absolute + u = t.documentBaseURI.toAbsolute(u, s.remove_script_host); + + return u; + }, + + addVisual : function(e) { + var t = this, s = t.settings; + + e = e || t.getBody(); + + if (!is(t.hasVisual)) + t.hasVisual = s.visual; + + each(t.dom.select('table,a', e), function(e) { + var v; + + switch (e.nodeName) { + case 'TABLE': + v = t.dom.getAttrib(e, 'border'); + + if (!v || v == '0') { + if (t.hasVisual) + t.dom.addClass(e, s.visual_table_class); + else + t.dom.removeClass(e, s.visual_table_class); + } + + return; + + case 'A': + v = t.dom.getAttrib(e, 'name'); + + if (v) { + if (t.hasVisual) + t.dom.addClass(e, 'mceItemAnchor'); + else + t.dom.removeClass(e, 'mceItemAnchor'); + } + + return; + } + }); + + t.onVisualAid.dispatch(t, e, t.hasVisual); + }, + + remove : function() { + var t = this, e = t.getContainer(); + + t.removed = 1; // Cancels post remove event execution + t.hide(); + + t.execCallback('remove_instance_callback', t); + t.onRemove.dispatch(t); + + // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command + t.onExecCommand.listeners = []; + + tinymce.remove(t); + DOM.remove(e); + }, + + destroy : function(s) { + var t = this; + + // One time is enough + if (t.destroyed) + return; + + 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(); + + // Remove all events + + // Don't clear the window or document if content editable + // is enabled since other instances might still be present + if (!t.settings.content_editable) { + Event.clear(t.getWin()); + Event.clear(t.getDoc()); + } + + Event.clear(t.getBody()); + Event.clear(t.formElement); + } + + 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 + + _addEvents : function() { + // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset + var t = this, i, s = t.settings, lo = { + 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 + }; + + function eventHandler(e, o) { + var ty = e.type; + + // Don't fire events when it's removed + if (t.removed) + return; + + // Generic event handler + if (t.onEvent.dispatch(t, e, o) !== false) { + // Specific event handler + t[lo[e.fakeType || e.type]].dispatch(t, e, o); + } + }; + + // Add DOM events + each(lo, function(v, k) { + switch (k) { + case 'contextmenu': + if (tinymce.isOpera) { + // Fake contextmenu on Opera + t.dom.bind(t.getBody(), 'mousedown', function(e) { + if (e.ctrlKey) { + e.fakeType = 'contextmenu'; + eventHandler(e); + } + }); + } else + t.dom.bind(t.getBody(), k, eventHandler); + break; + + case 'paste': + t.dom.bind(t.getBody(), k, function(e) { + eventHandler(e); + }); + break; + + case 'submit': + case 'reset': + t.dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler); + break; + + default: + t.dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler); + } + }); + + t.dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) { + t.focus(true); + }); + + + // Fixes bug where a specified document_base_uri could result in broken images + // This will also fix drag drop of images in Gecko + if (tinymce.isGecko) { + // Convert all images to absolute URLs +/* t.onSetContent.add(function(ed, o) { + each(ed.dom.select('img'), function(e) { + var v; + + if (v = e.getAttribute('_mce_src')) + e.src = t.documentBaseURI.toAbsolute(v); + }) + });*/ + + t.dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) { + var v; + + e = e.target; + + if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('_mce_src'))) + e.src = t.documentBaseURI.toAbsolute(v); + }); + } + + // Set various midas options in Gecko + if (isGecko) { + function setOpts() { + var t = this, d = t.getDoc(), s = t.settings; + + if (isGecko && !s.readonly) { + if (t._isHidden()) { + try { + if (!s.content_editable) + d.designMode = 'On'; + } catch (ex) { + // Fails if it's hidden + } + } + + try { + // Try new Gecko method + d.execCommand("styleWithCSS", 0, false); + } catch (ex) { + // Use old method + if (!t._isHidden()) + try {d.execCommand("useCSS", 0, true);} catch (ex) {} + } + + if (!s.table_inline_editing) + try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {} + + if (!s.object_resizing) + try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {} + } + }; + + t.onBeforeExecCommand.add(setOpts); + t.onMouseDown.add(setOpts); + } + + // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 + // WebKit can't even do simple things like selecting an image + // This also fixes so it's possible to select mceItemAnchors + if (tinymce.isWebKit) { + t.onClick.add(function(ed, e) { + e = e.target; + + // Needs tobe the setBaseAndExtend or it will fail to select floated images + if (e.nodeName == 'IMG' || (e.nodeName == 'A' && t.dom.hasClass(e, 'mceItemAnchor'))) + t.selection.getSel().setBaseAndExtent(e, 0, e, 1); + }); + } + + // Add node change handlers + t.onMouseUp.add(t.nodeChanged); + //t.onClick.add(t.nodeChanged); + t.onKeyUp.add(function(ed, e) { + var c = e.keyCode; + + if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey) + t.nodeChanged(); + }); + + // Add reset handler + t.onReset.add(function() { + t.setContent(t.startContent, {format : 'raw'}); + }); + + // Add shortcuts + if (s.custom_shortcuts) { + if (s.custom_undo_redo_keyboard_shortcuts) { + t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo'); + t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo'); + } + + // Add default shortcuts for gecko + t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold'); + t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic'); + t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline'); + + // BlockFormat shortcuts keys + for (i=1; i<=6; i++) + t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]); + + t.addShortcut('ctrl+7', '', ['FormatBlock', false, '

']); + t.addShortcut('ctrl+8', '', ['FormatBlock', false, '

']); + t.addShortcut('ctrl+9', '', ['FormatBlock', false, '
']); + + function find(e) { + var v = null; + + if (!e.altKey && !e.ctrlKey && !e.metaKey) + return v; + + each(t.shortcuts, function(o) { + if (tinymce.isMac && o.ctrl != e.metaKey) + return; + else if (!tinymce.isMac && o.ctrl != e.ctrlKey) + return; + + if (o.alt != e.altKey) + return; + + if (o.shift != e.shiftKey) + return; + + if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) { + v = o; + return false; + } + }); + + return v; + }; + + t.onKeyUp.add(function(ed, e) { + var o = find(e); + + if (o) + return Event.cancel(e); + }); + + t.onKeyPress.add(function(ed, e) { + var o = find(e); + + if (o) + return Event.cancel(e); + }); + + t.onKeyDown.add(function(ed, e) { + var o = find(e); + + if (o) { + o.func.call(o.scope); + return Event.cancel(e); + } + }); + } + + if (tinymce.isIE) { + // Fix so resize will only update the width and height attributes not the styles of an image + // It will also block mceItemNoResize items + t.dom.bind(t.getDoc(), 'controlselect', function(e) { + var re = t.resizeInfo, cb; + + e = e.target; + + // Don't do this action for non image elements + if (e.nodeName !== 'IMG') + return; + + if (re) + t.dom.unbind(re.node, re.ev, re.cb); + + if (!t.dom.hasClass(e, 'mceItemNoResize')) { + ev = 'resizeend'; + cb = t.dom.bind(e, ev, function(e) { + var v; + + e = e.target; + + if (v = t.dom.getStyle(e, 'width')) { + t.dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, '')); + t.dom.setStyle(e, 'width', ''); + } + + if (v = t.dom.getStyle(e, 'height')) { + t.dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, '')); + t.dom.setStyle(e, 'height', ''); + } + }); + } else { + ev = 'resizestart'; + cb = t.dom.bind(e, 'resizestart', Event.cancel, Event); + } + + re = t.resizeInfo = { + node : e, + ev : ev, + cb : cb + }; + }); + + t.onKeyDown.add(function(ed, e) { + switch (e.keyCode) { + case 8: + // Fix IE control + backspace browser bug + if (t.selection.getRng().item) { + ed.dom.remove(t.selection.getRng().item(0)); + return Event.cancel(e); + } + } + }); + + /*if (t.dom.boxModel) { + t.getBody().style.height = '100%'; + + Event.add(t.getWin(), 'resize', function(e) { + var docElm = t.getDoc().documentElement; + + docElm.style.height = (docElm.offsetHeight - 10) + 'px'; + }); + }*/ + } + + if (tinymce.isOpera) { + t.onClick.add(function(ed, e) { + Event.prevent(e); + }); + } + + // Add custom undo/redo handlers + if (s.custom_undo_redo) { + function addUndo() { + t.undoManager.typing = 0; + t.undoManager.add(); + }; + + t.dom.bind(t.getDoc(), 'focusout', function(e) { + if (!t.removed && t.undoManager.typing) + addUndo(); + }); + + t.onKeyUp.add(function(ed, e) { + if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey) + addUndo(); + }); + + t.onKeyDown.add(function(ed, e) { + var rng, parent, bookmark; + + // IE has a really odd bug where the DOM might include an node that doesn't have + // a proper structure. If you try to access nodeValue it would throw an illegal value exception. + // This seems to only happen when you delete contents and it seems to be avoidable if you refresh the element + // after you delete contents from it. See: #3008923 + if (isIE && e.keyCode == 46) { + rng = t.selection.getRng(); + + if (rng.parentElement) { + parent = rng.parentElement(); + + // Select next word when ctrl key is used in combo with delete + if (e.ctrlKey) { + rng.moveEnd('word', 1); + rng.select(); + } + + // Delete contents + t.selection.getSel().clear(); + + // Check if we are within the same parent + if (rng.parentElement() == parent) { + bookmark = t.selection.getBookmark(); + + try { + // Update the HTML and hopefully it will remove the artifacts + parent.innerHTML = parent.innerHTML; + } catch (ex) { + // And since it's IE it can sometimes produce an unknown runtime error + } + + // Restore the caret position + t.selection.moveToBookmark(bookmark); + } + + // Block the default delete behavior since it might be broken + e.preventDefault(); + return; + } + } + + // Is caracter positon keys + if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45) { + if (t.undoManager.typing) + addUndo(); + + return; + } + + if (!t.undoManager.typing) { + t.undoManager.add(); + t.undoManager.typing = 1; + } + }); + + t.onMouseDown.add(function() { + if (t.undoManager.typing) + addUndo(); + }); + } + }, + + _isHidden : function() { + var s; + + if (!isGecko) + return 0; + + // Weird, wheres that cursor selection? + s = this.selection.getSel(); + return (!s || !s.rangeCount || s.rangeCount == 0); + }, + + // Fix for bug #1867292 + _fixNesting : function(s) { + var d = [], i; + + s = s.replace(/<(\/)?([^\s>]+)[^>]*?>/g, function(a, b, c) { + var e; + + // Handle end element + if (b === '/') { + if (!d.length) + return ''; + + if (c !== d[d.length - 1].tag) { + for (i=d.length - 1; i>=0; i--) { + if (d[i].tag === c) { + d[i].close = 1; + break; + } + } + + return ''; + } else { + d.pop(); + + if (d.length && d[d.length - 1].close) { + a = a + ''; + d.pop(); + } + } + } else { + // Ignore these + if (/^(br|hr|input|meta|img|link|param)$/i.test(c)) + return a; + + // Ignore closed ones + if (/\/>$/.test(a)) + return a; + + d.push({tag : c}); // Push start element + } + + return a; + }); + + // End all open tags + for (i=d.length - 1; i>=0; i--) + s += ''; + + return s; + } + }); +})(tinymce); + +(function(tinymce) { + // Added for compression purposes + var each = tinymce.each, undefined, TRUE = true, FALSE = false; + + tinymce.EditorCommands = function(editor) { + var dom = editor.dom, + selection = editor.selection, + commands = {state: {}, exec : {}, value : {}}, + settings = editor.settings, + 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 === undefined) + ui = FALSE; + + if (value === undefined) + value = null; + + return editor.getDoc().execCommand(command, ui, value); + }; + + function isFormatMatch(name) { + return editor.formatter.match(name); + }; + + function toggleFormat(name, value) { + editor.formatter.toggle(name, value ? {value : value} : undefined); + }; + + 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) + editor.formatter.remove('align' + name); + }); + + toggleFormat('align' + align); + }, + + // 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' : 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) { + editor.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) { + selection.setContent(value); + }, + + mceInsertRawHTML : function(command, ui, value) { + selection.setContent('tiny_mce_marker'); + editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, 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')) { + 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) { + editor.formatter.toggle(value); + }, + + InsertHorizontalRule : function() { + selection.setContent('
'); + }, + + mceToggleVisualAid : function() { + editor.hasVisual = !editor.hasVisual; + editor.addVisual(); + }, + + mceReplaceContent : function(command, ui, value) { + selection.setContent(value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'}))); + }, + + mceInsertLink : function(command, ui, value) { + var link = dom.getParent(selection.getNode(), 'a'); + + if (tinymce.is(value, 'string')) + value = {href : value}; + + if (!link) { + execNativeCommand('CreateLink', FALSE, 'javascript:mctmp(0);'); + each(dom.select('a[href=javascript:mctmp(0);]'), function(link) { + dom.setAttribs(link, value); + }); + } else { + if (value.href) + dom.setAttribs(link, value); + else + editor.dom.remove(link, TRUE); + } + }, + + selectAll : function() { + var root = dom.getRoot(), rng = dom.createRng(); + + rng.setStart(root, 0); + rng.setEnd(root, root.childNodes.length); + + editor.selection.setRng(rng); + } + }); + + // Add queryCommandState overrides + addCommands({ + // Override justify commands + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) { + return isFormatMatch('align' + command.substring(7)); + }, + + 'Bold,Italic,Underline,Strikethrough' : 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) { + return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : '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 + if (settings.custom_undo_redo) { + 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 = []; + + function getContent() { + return tinymce.trim(editor.getContent({format : 'raw', no_events : 1})); + }; + + return self = { + typing : 0, + + onAdd : new Dispatcher(self), + onUndo : new Dispatcher(self), + onRedo : new Dispatcher(self), + + add : function(level) { + var i, settings = editor.settings, lastLevel; + + level = level || {}; + level.content = getContent(); + + // Add undo level if needed + lastLevel = data[index]; + if (lastLevel && lastLevel.content == level.content) { + if (index > 0 || data.length == 1) + return null; + } + + // 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) { + // Treat first level as initial + if (index == 0) + data = []; + else + 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 = 0; + } + + if (index > 0) { + level = data[--index]; + + editor.setContent(level.content, {format : 'raw'}); + editor.selection.moveToBookmark(level.bookmark); + + 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 = self.typing = 0; + }, + + hasUndo : function() { + return index > 0 || self.typing; + }, + + hasRedo : function() { + return index < data.length - 1; + } + }; + }; +})(tinymce); + +(function(tinymce) { + // Shorten names + var Event = tinymce.dom.Event, + isIE = tinymce.isIE, + isGecko = tinymce.isGecko, + isOpera = tinymce.isOpera, + each = tinymce.each, + extend = tinymce.extend, + TRUE = true, + FALSE = false; + + function cloneFormats(node) { + var clone, temp, inner; + + do { + if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) { + if (clone) { + temp = node.cloneNode(false); + temp.appendChild(clone); + clone = temp; + } else { + clone = inner = node.cloneNode(false); + } + + clone.removeAttribute('id'); + } + } while (node = node.parentNode); + + if (clone) + return {wrapper : clone, inner : inner}; + }; + + // Checks if the selection/caret is at the end of the specified block element + function isAtEnd(rng, par) { + var rng2 = par.ownerDocument.createRange(); + + rng2.setStart(rng.endContainer, rng.endOffset); + rng2.setEndAfter(par); + + // Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element + return rng2.cloneContents().textContent.length == 0; + }; + + function isEmpty(n) { + n = n.innerHTML; + + n = n.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi, '-'); // Keep these convert them to - chars + n = n.replace(/<[^>]+>/g, ''); // Remove all tags + + return n.replace(/[ \u00a0\t\r\n]+/g, '') == ''; + }; + + function splitList(selection, dom, li) { + var listBlock, block; + + if (isEmpty(li)) { + listBlock = dom.getParent(li, 'ul,ol'); + + if (!dom.getParent(listBlock.parentNode, 'ul,ol')) { + dom.split(listBlock, li); + block = dom.create('p', 0, '
'); + dom.replace(block, li); + selection.select(block, 1); + } + + return FALSE; + } + + return TRUE; + }; + + tinymce.create('tinymce.ForceBlocks', { + ForceBlocks : function(ed) { + var t = this, s = ed.settings, elm; + + t.editor = ed; + t.dom = ed.dom; + elm = (s.forced_root_block || 'p').toLowerCase(); + s.element = elm.toUpperCase(); + + ed.onPreInit.add(t.setup, t); + + t.reOpera = new RegExp('(\\u00a0| | )<\/' + elm + '>', 'gi'); + t.rePadd = new RegExp(']+)><\\\/p>|]+)\\\/>|]+)>\\s+<\\\/p>|

<\\\/p>||

\\s+<\\\/p>'.replace(/p/g, elm), 'gi'); + t.reNbsp2BR1 = new RegExp(']+)>[\\s\\u00a0]+<\\\/p>|

[\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi'); + t.reNbsp2BR2 = new RegExp('<%p()([^>]+)>( | )<\\\/%p>|<%p>( | )<\\\/%p>'.replace(/%p/g, elm), 'gi'); + t.reBR2Nbsp = new RegExp(']+)>\\s*
\\s*<\\\/p>|

\\s*
\\s*<\\\/p>'.replace(/p/g, elm), 'gi'); + + function padd(ed, o) { + if (isOpera) + o.content = o.content.replace(t.reOpera, ''); + + o.content = o.content.replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0'); + + if (!isIE && !isOpera && o.set) { + // Use   instead of BR in padded paragraphs + o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2>
'); + o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2>
'); + } else + o.content = o.content.replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0'); + }; + + ed.onBeforeSetContent.add(padd); + ed.onPostProcess.add(padd); + + if (s.forced_root_block) { + ed.onInit.add(t.forceRoots, t); + ed.onSetContent.add(t.forceRoots, t); + ed.onBeforeGetContent.add(t.forceRoots, t); + } + }, + + setup : function() { + var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection; + + // Force root blocks when typing and when getting output + if (s.forced_root_block) { + ed.onBeforeExecCommand.add(t.forceRoots, t); + ed.onKeyUp.add(t.forceRoots, t); + ed.onPreProcess.add(t.forceRoots, t); + } + + if (s.force_br_newlines) { + // Force IE to produce BRs on enter + if (isIE) { + ed.onKeyPress.add(function(ed, e) { + var n; + + if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') { + selection.setContent('
', {format : 'raw'}); + n = dom.get('__'); + n.removeAttribute('id'); + selection.select(n); + selection.collapse(); + return Event.cancel(e); + } + }); + } + } + + if (s.force_p_newlines) { + if (!isIE) { + ed.onKeyPress.add(function(ed, e) { + if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e)) + Event.cancel(e); + }); + } else { + // Ungly hack to for IE to preserve the formatting when you press + // enter at the end of a block element with formatted contents + // This logic overrides the browsers default logic with + // custom logic that enables us to control the output + tinymce.addUnload(function() { + t._previousFormats = 0; // Fix IE leak + }); + + ed.onKeyPress.add(function(ed, e) { + t._previousFormats = 0; + + // Clone the current formats, this will later be applied to the new block contents + if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles) + t._previousFormats = cloneFormats(ed.selection.getStart()); + }); + + ed.onKeyUp.add(function(ed, e) { + // Let IE break the element and the wrap the new caret location in the previous formats + if (e.keyCode == 13 && !e.shiftKey) { + var parent = ed.selection.getStart(), fmt = t._previousFormats; + + // Parent is an empty block + if (!parent.hasChildNodes()) { + parent = dom.getParent(parent, dom.isBlock); + + if (parent) { + parent.innerHTML = ''; + + if (t._previousFormats) { + parent.appendChild(fmt.wrapper); + fmt.inner.innerHTML = '\uFEFF'; + } else + parent.innerHTML = '\uFEFF'; + + selection.select(parent, 1); + ed.getDoc().execCommand('Delete', false, null); + } + } + } + }); + } + + if (isGecko) { + ed.onKeyDown.add(function(ed, e) { + if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) + t.backspaceDelete(e, e.keyCode == 8); + }); + } + } + + // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973 + if (tinymce.isWebKit) { + function insertBr(ed) { + var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h; + + // Insert BR element + rng.insertNode(br = dom.create('br')); + + // Place caret after BR + rng.setStartAfter(br); + rng.setEndAfter(br); + selection.setRng(rng); + + // Could not place caret after BR then insert an nbsp entity and move the caret + if (selection.getSel().focusNode == br.previousSibling) { + selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br)); + selection.collapse(TRUE); + } + + // Create a temporary DIV after the BR and get the position as it + // seems like getPos() returns 0 for text nodes and BR elements. + dom.insertAfter(div, br); + divYPos = dom.getPos(div).y; + dom.remove(div); + + // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117 + if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port. + ed.getWin().scrollTo(0, divYPos); + }; + + ed.onKeyPress.add(function(ed, e) { + if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) { + insertBr(ed); + Event.cancel(e); + } + }); + } + + // Padd empty inline elements within block elements + // For example:

becomes

 

+ ed.onPreProcess.add(function(ed, o) { + each(dom.select('p,h1,h2,h3,h4,h5,h6,div', o.node), function(p) { + if (isEmpty(p)) { + each(dom.select('span,em,strong,b,i', o.node), function(n) { + if (!n.hasChildNodes()) { + n.appendChild(ed.getDoc().createTextNode('\u00a0')); + return FALSE; // Break the loop one padding is enough + } + }); + } + }); + }); + + // IE specific fixes + if (isIE) { + // Replaces IE:s auto generated paragraphs with the specified element name + if (s.element != 'P') { + ed.onKeyPress.add(function(ed, e) { + t.lastElm = selection.getNode().nodeName; + }); + + ed.onKeyUp.add(function(ed, e) { + var bl, n = selection.getNode(), b = ed.getBody(); + + if (b.childNodes.length === 1 && n.nodeName == 'P') { + n = dom.rename(n, s.element); + selection.select(n); + selection.collapse(); + ed.nodeChanged(); + } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') { + bl = dom.getParent(n, 'p'); + + if (bl) { + dom.rename(bl, s.element); + ed.nodeChanged(); + } + } + }); + } + } + }, + + find : function(n, t, s) { + var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, FALSE), c = -1; + + while (n = w.nextNode()) { + c++; + + // Index by node + if (t == 0 && n == s) + return c; + + // Node by index + if (t == 1 && c == s) + return n; + } + + return -1; + }, + + forceRoots : function(ed, e) { + var t = this, ed = t.editor, b = ed.getBody(), d = ed.getDoc(), se = ed.selection, s = se.getSel(), r = se.getRng(), si = -2, ei, so, eo, tr, c = -0xFFFFFF; + var nx, bl, bp, sp, le, nl = b.childNodes, i, n, eid; + + // Fix for bug #1863847 + //if (e && e.keyCode == 13) + // return TRUE; + + // Wrap non blocks into blocks + for (i = nl.length - 1; i >= 0; i--) { + nx = nl[i]; + + // Ignore internal elements + if (nx.nodeType === 1 && nx.getAttribute('_mce_type')) { + bl = null; + continue; + } + + // Is text or non block element + if (nx.nodeType === 3 || (!t.dom.isBlock(nx) && nx.nodeType !== 8 && !/^(script|mce:script|style|mce:style)$/i.test(nx.nodeName))) { + if (!bl) { + // Create new block but ignore whitespace + if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) { + // Store selection + if (si == -2 && r) { + if (!isIE) { + // If selection is element then mark it + if (r.startContainer.nodeType == 1 && (n = r.startContainer.childNodes[r.startOffset]) && n.nodeType == 1) { + // Save the id of the selected element + eid = n.getAttribute("id"); + n.setAttribute("id", "__mce"); + } else { + // If element is inside body, might not be the case in contentEdiable mode + if (ed.dom.getParent(r.startContainer, function(e) {return e === b;})) { + so = r.startOffset; + eo = r.endOffset; + si = t.find(b, 0, r.startContainer); + ei = t.find(b, 0, r.endContainer); + } + } + } else { + // Force control range into text range + if (r.item) { + tr = d.body.createTextRange(); + tr.moveToElementText(r.item(0)); + r = tr; + } + + tr = d.body.createTextRange(); + tr.moveToElementText(b); + tr.collapse(1); + bp = tr.move('character', c) * -1; + + tr = r.duplicate(); + tr.collapse(1); + sp = tr.move('character', c) * -1; + + tr = r.duplicate(); + tr.collapse(0); + le = (tr.move('character', c) * -1) - sp; + + si = sp - bp; + ei = le; + } + } + + // Uses replaceChild instead of cloneNode since it removes selected attribute from option elements on IE + // See: http://support.microsoft.com/kb/829907 + bl = ed.dom.create(ed.settings.forced_root_block); + nx.parentNode.replaceChild(bl, nx); + bl.appendChild(nx); + } + } else { + if (bl.hasChildNodes()) + bl.insertBefore(nx, bl.firstChild); + else + bl.appendChild(nx); + } + } else + bl = null; // Time to create new block + } + + // Restore selection + if (si != -2) { + if (!isIE) { + bl = b.getElementsByTagName(ed.settings.element)[0]; + r = d.createRange(); + + // Select last location or generated block + if (si != -1) + r.setStart(t.find(b, 1, si), so); + else + r.setStart(bl, 0); + + // Select last location or generated block + if (ei != -1) + r.setEnd(t.find(b, 1, ei), eo); + else + r.setEnd(bl, 0); + + if (s) { + s.removeAllRanges(); + s.addRange(r); + } + } else { + try { + r = s.createRange(); + r.moveToElementText(b); + r.collapse(1); + r.moveStart('character', si); + r.moveEnd('character', ei); + r.select(); + } catch (ex) { + // Ignore + } + } + } else if (!isIE && (n = ed.dom.get('__mce'))) { + // Restore the id of the selected element + if (eid) + n.setAttribute('id', eid); + else + n.removeAttribute('id'); + + // Move caret before selected element + r = d.createRange(); + r.setStartBefore(n); + r.setEndBefore(n); + se.setRng(r); + } + }, + + getParentBlock : function(n) { + var d = this.dom; + + return d.getParent(n, d.isBlock); + }, + + insertPara : function(e) { + var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body; + var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car; + + // If root blocks are forced then use Operas default behavior since it's really good +// Removed due to bug: #1853816 +// if (se.forced_root_block && isOpera) +// return TRUE; + + // Setup before range + rb = d.createRange(); + + // If is before the first block element and in body, then move it into first block element + rb.setStart(s.anchorNode, s.anchorOffset); + rb.collapse(TRUE); + + // Setup after range + ra = d.createRange(); + + // If is before the first block element and in body, then move it into first block element + ra.setStart(s.focusNode, s.focusOffset); + ra.collapse(TRUE); + + // Setup start/end points + dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0; + sn = dir ? s.anchorNode : s.focusNode; + so = dir ? s.anchorOffset : s.focusOffset; + en = dir ? s.focusNode : s.anchorNode; + eo = dir ? s.focusOffset : s.anchorOffset; + + // If selection is in empty table cell + if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) { + if (sn.firstChild.nodeName == 'BR') + dom.remove(sn.firstChild); // Remove BR + + // Create two new block elements + if (sn.childNodes.length == 0) { + ed.dom.add(sn, se.element, null, '
'); + aft = ed.dom.add(sn, se.element, null, '
'); + } else { + n = sn.innerHTML; + sn.innerHTML = ''; + ed.dom.add(sn, se.element, null, n); + aft = ed.dom.add(sn, se.element, null, '
'); + } + + // Move caret into the last one + r = d.createRange(); + r.selectNodeContents(aft); + r.collapse(1); + ed.selection.setRng(r); + + return FALSE; + } + + // If the caret is in an invalid location in FF we need to move it into the first block + if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) { + sn = en = sn.firstChild; + so = eo = 0; + rb = d.createRange(); + rb.setStart(sn, 0); + ra = d.createRange(); + ra.setStart(en, 0); + } + + // Never use body as start or end node + sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes + sn = sn.nodeName == "BODY" ? sn.firstChild : sn; + en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes + en = en.nodeName == "BODY" ? en.firstChild : en; + + // Get start and end blocks + sb = t.getParentBlock(sn); + eb = t.getParentBlock(en); + bn = sb ? sb.nodeName : se.element; // Get block name to create + + // Return inside list use default browser behavior + if (n = t.dom.getParent(sb, 'li,pre')) { + if (n.nodeName == 'LI') + return splitList(ed.selection, t.dom, n); + + return TRUE; + } + + // If caption or absolute layers then always generate new blocks within + if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) { + bn = se.element; + sb = null; + } + + // If caption or absolute layers then always generate new blocks within + if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) { + bn = se.element; + eb = null; + } + + // Use P instead + if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) { + bn = se.element; + sb = eb = null; + } + + // Setup new before and after blocks + bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn); + aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn); + + // Remove id from after clone + aft.removeAttribute('id'); + + // Is header and cursor is at the end, then force paragraph under + if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb)) + aft = ed.dom.create(se.element); + + // Find start chop node + n = sc = sn; + do { + if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName)) + break; + + sc = n; + } while ((n = n.previousSibling ? n.previousSibling : n.parentNode)); + + // Find end chop node + n = ec = en; + do { + if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName)) + break; + + ec = n; + } while ((n = n.nextSibling ? n.nextSibling : n.parentNode)); + + // Place first chop part into before block element + if (sc.nodeName == bn) + rb.setStart(sc, 0); + else + rb.setStartBefore(sc); + + rb.setEnd(sn, so); + bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari + + // Place secnd chop part within new block element + try { + ra.setEndAfter(ec); + } catch(ex) { + //console.debug(s.focusNode, s.focusOffset); + } + + ra.setStart(en, eo); + aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari + + // Create range around everything + r = d.createRange(); + if (!sc.previousSibling && sc.parentNode.nodeName == bn) { + r.setStartBefore(sc.parentNode); + } else { + if (rb.startContainer.nodeName == bn && rb.startOffset == 0) + r.setStartBefore(rb.startContainer); + else + r.setStart(rb.startContainer, rb.startOffset); + } + + if (!ec.nextSibling && ec.parentNode.nodeName == bn) + r.setEndAfter(ec.parentNode); + else + r.setEnd(ra.endContainer, ra.endOffset); + + // Delete and replace it with new block elements + r.deleteContents(); + + if (isOpera) + ed.getWin().scrollTo(0, vp.y); + + // Never wrap blocks in blocks + if (bef.firstChild && bef.firstChild.nodeName == bn) + bef.innerHTML = bef.firstChild.innerHTML; + + if (aft.firstChild && aft.firstChild.nodeName == bn) + aft.innerHTML = aft.firstChild.innerHTML; + + // Padd empty blocks + if (isEmpty(bef)) + bef.innerHTML = '
'; + + function appendStyles(e, en) { + var nl = [], nn, n, i; + + e.innerHTML = ''; + + // Make clones of style elements + if (se.keep_styles) { + n = en; + do { + // We only want style specific elements + if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) { + nn = n.cloneNode(FALSE); + dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique + nl.push(nn); + } + } while (n = n.parentNode); + } + + // Append style elements to aft + if (nl.length > 0) { + for (i = nl.length - 1, nn = e; i >= 0; i--) + nn = nn.appendChild(nl[i]); + + // Padd most inner style element + nl[0].innerHTML = isOpera ? ' ' : '
'; // Extra space for Opera so that the caret can move there + return nl[0]; // Move caret to most inner element + } else + e.innerHTML = isOpera ? ' ' : '
'; // Extra space for Opera so that the caret can move there + }; + + // Fill empty afterblook with current style + if (isEmpty(aft)) + car = appendStyles(aft, en); + + // Opera needs this one backwards for older versions + if (isOpera && parseFloat(opera.version()) < 9.5) { + r.insertNode(bef); + r.insertNode(aft); + } else { + r.insertNode(aft); + r.insertNode(bef); + } + + // Normalize + aft.normalize(); + bef.normalize(); + + function first(n) { + return d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE).nextNode() || n; + }; + + // Move cursor and scroll into view + r = d.createRange(); + r.selectNodeContents(isGecko ? first(car || aft) : car || aft); + r.collapse(1); + s.removeAllRanges(); + s.addRange(r); + + // 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 = ed.dom.getPos(aft).y; + ch = aft.clientHeight; + + // Is element within viewport + if (y < vp.y || y + ch > vp.y + vp.h) { + ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks + //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight)); + } + + return FALSE; + }, + + backspaceDelete : function(e, bs) { + var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn, walker; + + // Delete when caret is behind a element doesn't work correctly on Gecko see #3011651 + if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) { + walker = new tinymce.dom.TreeWalker(sc.lastChild, sc); + + // Walk the dom backwards until we find a text node + for (n = sc.lastChild; n; n = walker.prev()) { + if (n.nodeType == 3) { + r.setStart(n, n.nodeValue.length); + r.collapse(true); + se.setRng(r); + return; + } + } + } + + // The caret sometimes gets stuck in Gecko if you delete empty paragraphs + // This workaround removes the element by hand and moves the caret to the previous element + if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) { + if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) { + // Find previous block element + n = sc; + while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ; + + if (n) { + if (sc != b.firstChild) { + // Find last text node + w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE); + while (tn = w.nextNode()) + n = tn; + + // Place caret at the end of last text node + r = ed.getDoc().createRange(); + r.setStart(n, n.nodeValue ? n.nodeValue.length : 0); + r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0); + se.setRng(r); + + // Remove the target container + ed.dom.remove(sc); + } + + return Event.cancel(e); + } + } + } + } + }); +})(tinymce); + +(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(n) { + var c, t = this, ed = t.editor; + + each(ed.plugins, function(p) { + if (p.createControl) { + c = p.createControl(n, t); + + if (c) + return false; + } + }); + + switch (n) { + case "|": + case "separator": + return t.createSeparator(); + } + + if (!c && ed.buttons && (c = ed.buttons[n])) + return t.createButton(n, c); + + return t.add(c); + }, + + 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); + + 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; + + if (ed.settings.use_native_selects) + c = new tinymce.ui.NativeListBox(id, s); + else { + cls = cc || t._cls.listbox || tinymce.ui.ListBox; + c = new cls(id, s); + } + + 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.onMouseDown.add(c.hideMenu, c); + } else { + cls = t._cls.button || tinymce.ui.Button; + c = new cls(id, s); + } + + 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.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.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); + + 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) { + function CommandManager() { + var execCommands = {}, queryStateCommands = {}, queryValueCommands = {}; + + function add(collection, cmd, func, scope) { + if (typeof(cmd) == 'string') + cmd = [cmd]; + + tinymce.each(cmd, function(cmd) { + collection[cmd.toLowerCase()] = {func : func, scope : scope}; + }); + }; + + tinymce.extend(this, { + add : function(cmd, func, scope) { + add(execCommands, cmd, func, scope); + }, + + addQueryStateHandler : function(cmd, func, scope) { + add(queryStateCommands, cmd, func, scope); + }, + + addQueryValueHandler : function(cmd, func, scope) { + add(queryValueCommands, cmd, func, scope); + }, + + execCommand : function(scope, cmd, ui, value, args) { + if (cmd = execCommands[cmd.toLowerCase()]) { + if (cmd.func.call(scope || cmd.scope, ui, value, args) !== false) + return true; + } + }, + + queryCommandValue : function() { + if (cmd = queryValueCommands[cmd.toLowerCase()]) + return cmd.func.call(scope || cmd.scope, ui, value, args); + }, + + queryCommandState : function() { + if (cmd = queryStateCommands[cmd.toLowerCase()]) + return cmd.func.call(scope || cmd.scope, ui, value, args); + } + }); + }; + + tinymce.GlobalCommands = new CommandManager(); +})(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.isValid, + 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, + undefined, + pendingFormats = {apply : [], remove : []}; + + function isArray(obj) { + return obj instanceof Array; + }; + + function getParents(node, selector) { + return dom.getParents(node, selector, dom.getRoot()); + }; + + function isCaretNode(node) { + return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline'); + }; + + // 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 === undefined) + format.deep = !format.selector; + + // Default to true + if (format.split === undefined) + format.split = !format.selector || format.inline; + + // Default to true + if (format.remove === undefined && 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 apply(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, i; + + function moveStart(rng) { + var container = rng.startContainer, + offset = rng.startOffset, + walker, node; + + // Move startContainer/startOffset in to a suitable node + if (container.nodeType == 1 || container.nodeValue === "") { + container = container.nodeType == 1 ? container.childNodes[offset] : container; + + // Might fail if the offset is behind the last element in it's container + if (container) { + walker = new TreeWalker(container, container.parentNode); + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType == 3 && !isWhiteSpaceNode(node)) { + rng.setStart(node, 0); + break; + } + } + } + } + + return rng; + }; + + function setElementFormat(elm, fmt) { + fmt = fmt || format; + + if (elm) { + 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 applyRngStyle(rng) { + var newWrappers = [], wrapName, wrapElm; + + // 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 = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found; + + // 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 (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) { + 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 (isValid(wrapName, nodeName) && isValid(parentName, wrapName)) { + // Start wrapping + if (!currentWrapElm) { + // Wrap the node + currentWrapElm = wrapElm.cloneNode(FALSE); + node.parentNode.insertBefore(currentWrapElm, node); + newWrappers.push(currentWrapElm); + } + + currentWrapElm.appendChild(node); + } else { + // Start a new wrapper for possible children + currentWrapElm = 0; + + each(tinymce.grep(node.childNodes), process); + + // End the last wrapper + currentWrapElm = 0; + } + }; + + // Process siblings from range + each(nodes, process); + }); + + // 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 = child.cloneNode(FALSE); + setElementFormat(clone); + + dom.replace(clone, node, TRUE); + dom.remove(child, 1); + } + + return clone || node; + }; + + childCount = getChildCount(node); + + // Remove empty nodes + if (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) { + 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) { + node = mergeSiblings(getNonWhiteSpaceSibling(node), node); + node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE)); + } + } + }); + }; + + if (format) { + if (node) { + rng = dom.createRng(); + + rng.setStartBefore(node); + rng.setEndAfter(node); + + applyRngStyle(expandRng(rng, formatList)); + } else { + if (!selection.isCollapsed() || !format.inline) { + // Apply formatting to selection + bookmark = selection.getBookmark(); + applyRngStyle(expandRng(selection.getRng(TRUE), formatList)); + + selection.moveToBookmark(bookmark); + selection.setRng(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; + + function moveStart(rng) { + var container = rng.startContainer, + offset = rng.startOffset, + walker, node, nodes, tmpNode; + + // Convert text node into index if possible + if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) { + container = container.parentNode; + offset = nodeIndex(container) + 1; + } + + // 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); + + // If offset is at end of the parent node walk to the next one + if (offset > nodes.length - 1) + 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; + } + } + } + }; + + // Merges the styles for each node + function process(node) { + var children, i, l; + + // Grab the children first since the nodelist might be changed + children = tinymce.grep(node.childNodes); + + // Process current node + for (i = 0, l = formatList.length; i < l; i++) { + if (removeFormat(formatList[i], vars, node, node)) + break; + } + + // Process the children + if (format.deep) { + for (i = 0, l = children.length; i < l; i++) + process(children[i]); + } + }; + + 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 = parent.cloneNode(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; + + rng = expandRng(rng, formatList, TRUE); + + if (format.split) { + startContainer = getContainer(rng, TRUE); + endContainer = getContainer(rng); + + if (startContainer != endContainer) { + // Wrap start/end nodes in span element since these might be cloned/moved + startContainer = wrap(startContainer, 'span', {id : '_start', _mce_type : 'bookmark'}); + endContainer = wrap(endContainer, 'span', {id : '_end', _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); + }); + }); + }; + + // Handle node + if (node) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + removeRngStyle(rng); + return; + } + + if (!selection.isCollapsed() || !format.inline) { + 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 (match(name, vars, selection.getStart())) { + moveStart(selection.getRng(true)); + } + + ed.nodeChanged(); + } else + performCaretAction('remove', name, vars); + }; + + function toggle(name, vars, node) { + if (match(name, vars, node)) + 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; + + // Check all items + if (items) { + // Non indexed object + if (items.length === undefined) { + 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, i; + + 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 pending formats + if (selection.isCollapsed()) { + for (i = pendingFormats.apply.length - 1; i >= 0; i--) { + if (pendingFormats.apply[i].name == name) + return true; + } + + for (i = pendingFormats.remove.length - 1; i >= 0; i--) { + if (pendingFormats.remove[i].name == name) + return false; + } + + return matchParents(selection.getNode()); + } + + // 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; + + // If the selection is collapsed then check pending formats + if (selection.isCollapsed()) { + for (ni = 0; ni < names.length; ni++) { + // If the name is to be removed, then stop it from being added + for (i = pendingFormats.remove.length - 1; i >= 0; i--) { + name = names[ni]; + + if (pendingFormats.remove[i].name == name) { + checkedMap[name] = true; + break; + } + } + } + + // If the format is to be applied + for (i = pendingFormats.apply.length - 1; i >= 0; i--) { + for (ni = 0; ni < names.length; ni++) { + name = names[ni]; + + if (!checkedMap[name] && pendingFormats.apply[i].name == name) { + checkedMap[name] = true; + matchedFormatNames.push(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); + } + } + }); + + 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; + }; + + // Expose to public + tinymce.extend(this, { + get : get, + register : register, + apply : apply, + remove : remove, + toggle : toggle, + match : match, + matchAll : matchAll, + matchNode : matchNode, + canApply : canApply + }); + + // 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 && /^([\s\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 startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset, sibling, lastIdx; + + // This function walks up the tree if there is no siblings before/after the node + function findParentContainer(container, child_name, sibling_name, root) { + var parent, child; + + root = root || dom.getRoot(); + + for (;;) { + // Check if we can move up are we at root level or body level + parent = container.parentNode; + + // Stop expanding on block elements or root depending on format + if (parent == root || (!format[0].block_expand && isBlock(parent))) + return container; + + for (sibling = parent[child_name]; sibling && sibling != container; sibling = sibling[sibling_name]) { + if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) + return container; + + if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling)) + return container; + } + + container = container.parentNode; + } + + return container; + }; + + // 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; + } + + // Exclude bookmark nodes if possible + if (isBookmarkNode(startContainer.parentNode)) + startContainer = startContainer.parentNode; + + if (isBookmarkNode(startContainer)) + startContainer = startContainer.nextSibling || startContainer; + + if (isBookmarkNode(endContainer.parentNode)) + endContainer = endContainer.parentNode; + + if (isBookmarkNode(endContainer)) + endContainer = endContainer.previousSibling || endContainer; + + // 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) { + startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling'); + endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling'); + } + + // Expand start/end container to matching selector + if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) { + function findSelectorEndPoint(container, sibling_name) { + var parents, i, y; + + 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++) { + if (dom.is(parents[i], format[y].selector)) + return parents[i]; + } + } + + return container; + }; + + // 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) { + 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, isBlock); + + // 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; + }; + + // 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(startContainer, 'firstChild', 'nextSibling'); + + if (!isBlock(endContainer)) + endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling'); + } + } + + // 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('_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('_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; + + if (format.block) { + if (!forcedRootBlock) { + function find(node, next, inc) { + node = getNonWhiteSpaceSibling(node, next, inc); + + return !node || (node.nodeName == 'BR' || isBlock(node)); + }; + + // 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('_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 === undefined) + 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; + }; + + // Check if next/prev exists and that they are elements + if (prev && next) { + function findElementSibling(node, sibling_name) { + for (sibling = node; sibling; sibling = sibling[sibling_name]) { + if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling)) + return node; + + if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) + return sibling; + } + + return node; + }; + + // 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; + + 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]; + } + + return container; + }; + + function performCaretAction(type, name, vars) { + var i, currentPendingFormats = pendingFormats[type], + otherPendingFormats = pendingFormats[type == 'apply' ? 'remove' : 'apply']; + + function hasPending() { + return pendingFormats.apply.length || pendingFormats.remove.length; + }; + + function resetPending() { + pendingFormats.apply = []; + pendingFormats.remove = []; + }; + + function perform(caret_node) { + // Apply pending formats + each(pendingFormats.apply.reverse(), function(item) { + apply(item.name, item.vars, caret_node); + }); + + // Remove pending formats + each(pendingFormats.remove.reverse(), function(item) { + remove(item.name, item.vars, caret_node); + }); + + dom.remove(caret_node, 1); + resetPending(); + }; + + // Check if it already exists then ignore it + for (i = currentPendingFormats.length - 1; i >= 0; i--) { + if (currentPendingFormats[i].name == name) + return; + } + + currentPendingFormats.push({name : name, vars : vars}); + + // Check if it's in the other type, then remove it + for (i = otherPendingFormats.length - 1; i >= 0; i--) { + if (otherPendingFormats[i].name == name) + otherPendingFormats.splice(i, 1); + } + + // Pending apply or remove formats + if (hasPending()) { + ed.getDoc().execCommand('FontName', false, 'mceinline'); + pendingFormats.lastRng = selection.getRng(); + + // IE will convert the current word + each(dom.select('font,span'), function(node) { + var bookmark; + + if (isCaretNode(node)) { + bookmark = selection.getBookmark(); + perform(node); + selection.moveToBookmark(bookmark); + ed.nodeChanged(); + } + }); + + // Only register listeners once if we need to + if (!pendingFormats.isListening && hasPending()) { + pendingFormats.isListening = true; + + each('onKeyDown,onKeyUp,onKeyPress,onMouseUp'.split(','), function(event) { + ed[event].addToTop(function(ed, e) { + // Do we have pending formats and is the selection moved has moved + if (hasPending() && !tinymce.dom.RangeUtils.compareRanges(pendingFormats.lastRng, selection.getRng())) { + each(dom.select('font,span'), function(node) { + var textNode, rng; + + // Look for marker + if (isCaretNode(node)) { + textNode = node.firstChild; + + if (textNode) { + perform(node); + + rng = dom.createRng(); + rng.setStart(textNode, textNode.nodeValue.length); + rng.setEnd(textNode, textNode.nodeValue.length); + selection.setRng(rng); + ed.nodeChanged(); + } else + dom.remove(node); + } + }); + + // Always unbind and clear pending styles on keyup + if (e.type == 'keyup' || e.type == 'mouseup') + resetPending(); + } + }); + }); + } + } + }; + }; +})(tinymce); + +tinymce.onAddEditor.add(function(tinymce, ed) { + var filters, fontSizes, dom, settings = ed.settings; + + if (settings.inline_styles) { + fontSizes = tinymce.explode(settings.font_size_style_values); + + function replaceWithSpan(node, styles) { + dom.replace(dom.create('span', { + style : styles + }), node, 1); + }; + + filters = { + font : function(dom, node) { + replaceWithSpan(node, { + backgroundColor : node.style.backgroundColor, + color : node.color, + fontFamily : node.face, + fontSize : fontSizes[parseInt(node.size) - 1] + }); + }, + + u : function(dom, node) { + replaceWithSpan(node, { + textDecoration : 'underline' + }); + }, + + strike : function(dom, node) { + replaceWithSpan(node, { + textDecoration : 'line-through' + }); + } + }; + + 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); + }); + } + }; + + ed.onPreProcess.add(convert); + + ed.onInit.add(function() { + ed.selection.onSetContent.add(convert); + }); + } +}); + diff --git a/web/libs/tiny_mce/utils/editable_selects.js b/web/libs/tiny_mce/utils/editable_selects.js new file mode 100644 index 0000000..fd943c0 --- /dev/null +++ b/web/libs/tiny_mce/utils/editable_selects.js @@ -0,0 +1,70 @@ +/** + * 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; + + 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); + 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 + + + out_file("views/head.php"); ?> + + + + + + + +
+
+ +
+out_file("views/admin/colonne.php"); ?> +
+ +
+out_file("views/messages.php"); ?> +out_file_exists($layout["content"])) require $this->out_file($layout["content"]); + +?> +
+ +
+ +
+
+ + + + + diff --git a/web/out/dist/compte.php b/web/out/dist/compte.php new file mode 100644 index 0000000..604a9ca --- /dev/null +++ b/web/out/dist/compte.php @@ -0,0 +1,44 @@ + + + + out_file("views/head.php"); ?> + + + + + + + +
+
+ +
+out_file("views/users/colonne.php"); ?> +
+ +
+out_file("views/messages.php"); ?> +out_file_exists($layout["content"])) require $this->out_file($layout["content"]); + +?> +
+ +
+ +
+
+ + + + + diff --git a/web/out/dist/config.xml b/web/out/dist/config.xml new file mode 100644 index 0000000..a50ddb4 --- /dev/null +++ b/web/out/dist/config.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/web/out/dist/content.php b/web/out/dist/content.php new file mode 100644 index 0000000..99f10d3 --- /dev/null +++ b/web/out/dist/content.php @@ -0,0 +1,5 @@ +out_file_exists($layout["content"])) require $this->out_file($layout["content"]); + +?> \ No newline at end of file diff --git a/web/out/dist/css/actions/admin.css b/web/out/dist/css/actions/admin.css new file mode 100644 index 0000000..ea51ffe --- /dev/null +++ b/web/out/dist/css/actions/admin.css @@ -0,0 +1,199 @@ +table.admin +{ width: 100%; +} + +table.admin tr.hl td +{ padding: 3px; +} + +table.admin td.action +{ text-align: center; + width: 50px; +} + +ul.admin +{ list-style-type: none; + margin: 10px 10px 20px 10px; + text-align: right; + padding-bottom: 10px; +} + +ul.admin li +{ display: inline; +} + +ul.admin li a +{ padding: 3px 7px 3px 7px; +} + +ul li a.add +{ padding: 3px 7px 3px 18px; +} + +ul.admin li.admin_form_title +{ display: block; + float: left; + padding: 0px 7px 3px 7px; +} + +ul.form +{ clear: both; + list-style-type: none; +} + +ul.form li +{ clear: both; + padding: 5px; +} + +ul.form li label +{ float: left; + display: block; + width: 100px; + text-align: right; + padding: 0 15px 0 15px; +} + +ul.form li div p +{ float: left; + display: block; + width: 350px; + text-align: left; + padding: 0 0px 15px 0px; +} + +ul.form li p span +{ display: block; + padding: 5px; + font-size: 0.9em; +} + +ul.admin_form_head +{ clear: both; + list-style-type: none; + margin: 10px 0px 0px 0px; +} + +ul.admin_form_head li +{ clear: both; + padding: 5px; + text-align: right; + line-height: 20px; +} + +ul.admin_form_head li input +{ margin: 0px 10px 0px 10px; +} + +ul.admin_form_content +{ list-style-type: none; + margin: 0px 0px 0px 0px; + padding: 10px 0px 10px 0px; +} + +ul.admin_form_content ul.admin +{ list-style-type: none; + margin: 10px 10px 20px 10px; + text-align: right; + padding-bottom: 10px; +} + +ul.admin_form_content ul.admin li +{ display: inline; +} + +ul.admin_form_content ul.admin li a +{ padding: 3px 7px 3px 7px; +} + +ul.admin_form_content ul li a.add +{ padding: 3px 7px 3px 18px; +} + +ul.admin_form_content ul.admin li.admin_form_title +{ display: block; + float: left; + padding: 0px 7px 3px 7px; +} + +.admin_source_infos +{ margin: 0px 10px 10px 20px; +} + +.admin_source_infos ul.admin_source_head +{ list-style-type: none; + margin: 0px 0px 0px 0px; + text-align: right; + padding-bottom: 10px; + padding-top: 5px; +} + +ul.admin_source_head li +{ display: inline; +} + +ul.admin_source_head li a +{ padding: 3px 7px 3px 7px; +} + +ul.admin_source_head li.admin_form_title +{ display: block; + float: left; + padding: 0px 7px 3px 7px; + font-size: 1.2em; +} + +.admin_source_url +{ margin: 10px 0px 0px 20px; +} + +input[type=text], input[type=file], input[type=password], textarea, select +{ padding: 3px; +} + +input[type=submit], a.button +{ padding: 3px 7px 3px 7px; + cursor: pointer; +} + +ul.form li.buttons +{ text-align: center; +} + +.tinymce +{ width: 500px; + height: 400px; +} + +.document +{ margin: 5px; + padding: 5px; +} + +.document .delete +{ float: right; +} + +.document .clear +{ height: 5px; +} + +.xml_edit_content +{ display: block; + margin: 5px 10px 30px 0px; + text-align: right; +} + +.xml_edit_content textarea +{ width: 97%; +} + +ul.xml_infos +{ margin: 10px 10px 0px 20px; +} + +ul.xml_infos li +{ padding: 5px; + margin: 0px 0px 0px 20px; +} + diff --git a/web/out/dist/css/actions/admin_plugins.css b/web/out/dist/css/actions/admin_plugins.css new file mode 100644 index 0000000..e899c45 --- /dev/null +++ b/web/out/dist/css/actions/admin_plugins.css @@ -0,0 +1,32 @@ +ul.plugins +{ list-style-type: none; + margin: 20px 10px; +} + +ul.plugins li +{ padding: 5px 10px; + margin: 10px; +} + +ul.plugins p.folder +{ float: right; + font-size: 0.9em; +} + +ul.plugins li ul.plugin_links +{ text-align: right; +} + +ul.plugins li ul.plugin_links li +{ display: inline; + padding: 1px 7px; + margin: 0; +} + +ul.plugins li ul.plugin_links li input +{ width: 2em; +} + +ul.plugins li.buttons +{ text-align: right; +} \ No newline at end of file diff --git a/web/out/dist/css/actions/forms_contact.css b/web/out/dist/css/actions/forms_contact.css new file mode 100644 index 0000000..b59c801 --- /dev/null +++ b/web/out/dist/css/actions/forms_contact.css @@ -0,0 +1,32 @@ +@import url("admin.css"); + +#contact form +{ margin: 20px 0px 10px 0px; +} + +#contact form .ptitcaptcha img +{ float: left; + margin: 0px 10px 0px 0px; +} + +#contact ul.form li label +{ float: left; + display: block; + width: 50px; + text-align: right; + padding: 0 15px 0 15px; +} + +#contact ul.form li p +{ float: left; + display: block; + width: 380px; + text-align: left; + padding: 0 15px 5px 15px; +} + +#contact ul.form li p span +{ display: block; + padding: 5px; + font-size: 0.9em; +} \ No newline at end of file diff --git a/web/out/dist/css/actions/users.css b/web/out/dist/css/actions/users.css new file mode 100644 index 0000000..c7f8d13 --- /dev/null +++ b/web/out/dist/css/actions/users.css @@ -0,0 +1 @@ +@import url("admin.css"); diff --git a/web/out/dist/css/colorbox.css b/web/out/dist/css/colorbox.css new file mode 100644 index 0000000..c31b237 --- /dev/null +++ b/web/out/dist/css/colorbox.css @@ -0,0 +1,92 @@ +/* + ColorBox Core Style: + The following CSS is consistent between example themes and should not be altered. +*/ +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxOverlay{position:fixed; width:100%; height:100%;} +#cboxMiddleLeft, #cboxBottomLeft{clear:left;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto;} +#cboxTitle{margin:0;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} +.cboxPhoto{float:left; margin:auto; border:0; display:block;} +.cboxIframe{width:100%; height:100%; display:block; border:0;} + +/* + User Style: + Change the following styles to modify the appearance of ColorBox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. +*/ +#cboxOverlay{background:url(../images/colorbox/overlay.png) repeat 0 0;} +#colorbox{} +/* + #cboxTopLeft{width:21px; height:21px; background:url(../images/colorbox/controls.png) no-repeat -100px 0;} + #cboxTopRight{width:21px; height:21px; background:url(../images/colorbox/controls.png) no-repeat -129px 0;} + #cboxBottomLeft{width:21px; height:21px; background:url(../images/colorbox/controls.png) no-repeat -100px -29px;} + #cboxBottomRight{width:21px; height:21px; background:url(../images/colorbox/controls.png) no-repeat -129px -29px;} + #cboxMiddleLeft{width:21px; background:url(../images/colorbox/controls.png) left top repeat-y;} + #cboxMiddleRight{width:21px; background:url(../images/colorbox/controls.png) right top repeat-y;} + #cboxTopCenter{height:21px; background:url(../images/colorbox/border.png) 0 0 repeat-x;} + #cboxBottomCenter{height:21px; background:url(../images/colorbox/border.png) 0 -29px repeat-x;} +*/ + #cboxTopLeft{width:21px; height:21px;} + #cboxTopRight{width:21px; height:21px;} + #cboxBottomLeft{width:21px; height:21px;} + #cboxBottomRight{width:21px; height:21px;} + #cboxMiddleLeft{width:21px;} + #cboxMiddleRight{width:21px;} + #cboxTopCenter{height:21px;} + #cboxBottomCenter{height:21px;} + #cboxContent{background:#ffffff; overflow:hidden; color: #555555; padding: 10px 10px 0px 10px; border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px;} + #cboxError{padding:50px; border:1px solid #ccc;} + #cboxLoadedContent{margin-bottom:28px;} + #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;} + #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;} + #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;} + #cboxPrevious{position:absolute; bottom:0; left:0; background:url(../images/colorbox/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;} + #cboxPrevious.hover{background-position:-75px -25px;} + #cboxNext{position:absolute; bottom:0; left:27px; background:url(../images/colorbox/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;} + #cboxNext.hover{background-position:-50px -25px;} + #cboxLoadingOverlay{} + #cboxLoadingGraphic{background:url(../images/colorbox/loading.gif) no-repeat center center;} + #cboxClose{position:absolute; bottom:0; right:0; background:url(../images/colorbox/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;} + #cboxClose.hover{background-position:-25px -25px;} + +/* + The following fixes a problem where IE7+ replaces a PNG's alpha transparency with a black fill + when an alpha filter (opacity change) is set on the element or ancestor element. +*/ +.cboxIE #cboxTopLeft, +.cboxIE #cboxTopCenter, +.cboxIE #cboxTopRight, +.cboxIE #cboxBottomLeft, +.cboxIE #cboxBottomCenter, +.cboxIE #cboxBottomRight, +.cboxIE #cboxMiddleLeft, +.cboxIE #cboxMiddleRight { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF); +} + +/* + The following provides PNG transparency support for IE6 +*/ +.cboxIE6 #cboxTopLeft{background:url(../images/colorbox/ie6/borderTopLeft.png);} +.cboxIE6 #cboxTopCenter{background:url(../images/colorbox/ie6/borderTopCenter.png);} +.cboxIE6 #cboxTopRight{background:url(../images/colorbox/ie6/borderTopRight.png);} +.cboxIE6 #cboxBottomLeft{background:url(../images/colorbox/ie6/borderBottomLeft.png);} +.cboxIE6 #cboxBottomCenter{background:url(../images/colorbox/ie6/borderBottomCenter.png);} +.cboxIE6 #cboxBottomRight{background:url(../images/colorbox/ie6/borderBottomRight.png);} +.cboxIE6 #cboxMiddleLeft{background:url(../images/colorbox/ie6/borderMiddleLeft.png);} +.cboxIE6 #cboxMiddleRight{background:url(../images/colorbox/ie6/borderMiddleRight.png);} + +.cboxIE6 #cboxTopLeft, +.cboxIE6 #cboxTopCenter, +.cboxIE6 #cboxTopRight, +.cboxIE6 #cboxBottomLeft, +.cboxIE6 #cboxBottomCenter, +.cboxIE6 #cboxBottomRight, +.cboxIE6 #cboxMiddleLeft, +.cboxIE6 #cboxMiddleRight { + _behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')"); +} diff --git a/web/out/dist/css/colors.css b/web/out/dist/css/colors.css new file mode 100644 index 0000000..9b50de8 --- /dev/null +++ b/web/out/dist/css/colors.css @@ -0,0 +1,324 @@ +body +{ background-color: #ffffff; + color: #333333; +} + +a +{ text-decoration: none; + color: #000066; +} + +a img +{ border: none; +} + +a:hover +{ color: #c0c0c0; +} + +.navig +{ color: #333333; + border: solid 1px #c0c0c0; + background-color: #ffffff; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +.loading +{ background-image: url("../icons/ajax-loader.gif"); + background-repeat: no-repeat; + background-position: 5px 5px; +} + +/* ------------------------- messages --------------- */ + +.messages +{ border: solid 1px #c0c0c0; +} + +.erreur +{ border: solid 1px #c0c0c0; +} + +.redirect_message div +{ border: solid 1px #c0c0c0; +} + +/* ------------------------- blocs generaux --------- */ + +#header +{ padding-top: 10px; +} + +#header .content +{ border-bottom: solid 1px #d9d9d9; +} + +#colonne +{ /*border-right: dashed 1px #555555; */ +} + +#footer .content +{ border-top: solid 1px #e9e9e9; +} + +#footer .content p +{ color: #777777; +} + +/* ----------------------------------- menu top ----- */ + +#menu_top ul.menu li a +{ border: solid 1px #e9e9e9; + background-color: #ffffff; +} + +#menu_top ul.menu li ul li a +{ border-top: none; + border-right: solid 1px #333333; + border-bottom: none; + border-left: solid 1px #333333; + background-color: #050505; +} + +#menu_top ul.menu li ul li.last a +{ border-top: none; + border-right: solid 1px #333333; + border-bottom: solid 1px #333333; + border-left: solid 1px #333333; + background-color: #050505; +} + +/* ----------------------------------- admin --------- */ + +table.admin tr.hl td +{ border: solid 1px #d1d1d1; +} + +table.admin tr.hl:hover +{ background-color: #f9f9f9; +} + +input[type=text], input[type=file], input[type=password], textarea, select +{ border: solid 1px #999999; + color: #333333; +} + +input[type=submit], a.button +{ border: solid 1px #d1d1d1; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +input[type=submit]:hover, a.button:hover +{ border: solid 1px #d1d1d1; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +ul.admin +{ border-bottom: dashed 1px #c0c0c0; +} + +ul.admin_form_head +{ border: solid 1px #c0c0c0; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +ul.admin_form_content ul.admin +{ border-bottom: none; +} + +ul.admin li a +{ border: solid 1px #d1d1d1; +} + +.admin_source_infos ul.admin li a +{ border: none; + background-color: #101010; + color: #c0c0c0; +} + +ul.admin li a.add +{ background-image: url("../icons/add.gif"); + background-repeat: no-repeat; + background-position: 3px 6px; + border: solid 1px #d1d1d1; +} + +ul.admin li a:hover +{ +} + +.admin_source_infos +{ border: solid 1px #c0c0c0; +/* background-color: #0a0a0a;*/ + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +.admin_source_infos ul.admin li a:hover +{ border: none; + background-color: #333333; + color: #c0c0c0; +} + +#documents .document +{ border: solid 1px #c0c0c0; +} + +/* ------------------------------- plugins ----------- */ + +ul.plugins li +{ border: solid 1px #c0c0c0; +} + +ul.plugins li.enabled +{ background-color: #ffffff; +} + +ul.plugins li.disabled +{ background-color: #f7f7f7; +} + +ul.plugins li.uninstalled +{ background-color: #e5e5e5; +} + +ul.plugins li ul.plugin_links li +{ border-top: none; + border-right: none; + border-bottom: none; + border-left: solid 1px #c0c0c0; +} + +ul.plugins li ul.plugin_links li input +{ border: solid 1px #c0c0c0; +} + +/* ------------------------------- liste groupes ----------- */ + +ul.groupes li h4 a +{ border: solid 1px #d9d9d9; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +/* ------------------------------- page album ----------- */ + +p#play_all a +{ border: solid 1px #c0c0c0; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; + background-image: url("../icons/ecouter.png"); + background-repeat: no-repeat; + background-position: 6px 6px; + background-color: #ffffff; +} + +/* ----------------------------------- sources --------- */ + +ul.albums li a +{ border: solid 1px #555555; +} + +.logo_groupe +{ /*border: solid 1px #e9e9e9;*/ + background-color: #ffffff; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +ul#lien_contact li a +{ border-bottom: solid 1px #d9d9d9; +} + +#colonne ul#album_links +{ /*border-bottom: solid 1px #333333;*/ +} + +#colonne ul#album_links li +{ +} + +#colonne ul.menu_albums li +{ border: solid 1px #d9d9d9; + background-color: #ffffff; +} + +#center ul.menu_albums li +{ border: solid 1px #d9d9d9; + float: left; +} + +.track +{ border: solid 1px #ffffff; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +.track h5 +{ background-color: #ffffff; + border-radius: 3px 3px 0px 0px; + -moz-border-radius: 3px 3px 0px 0px; +} + +.playing_track +{ border: solid 1px #dedede; + background-color: #ffffff; + border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; +} + +.player_progress +{ background-color: #ececec; +} + +.player_progress .loaded +{ background-color: #dedede; +} + +.player_progress .position +{ background-color: #999999; +} + +.player_controls a img +{ border: none; +} + +.source_arbo ul.menu_source +{ float: right; + margin: 0px 10px 1px 0px; +} + +.source_arbo ul.menu_source li +{ float: right; + padding: 1px; +} + +.source_arbo ul.menu_source li a +{ display: block; + text-align: center; + background-color: #151515; + border-radius: 3px 3px 0px 0px; + -moz-border-radius: 3px 3px 0px 0px; + padding: 2px 5px 2px 5px; +} + +.source_arbo ul.menu_source li a:hover +{ +} + +.source_arbo ul.menu_source li.icon a +{ border: none; + padding: 2px 2px 2px 2px; +} + +.pistes +{ border-left: none; +} + +.derivation +{ border-left: none; +} diff --git a/web/out/dist/css/footer.css b/web/out/dist/css/footer.css new file mode 100644 index 0000000..d9393d4 --- /dev/null +++ b/web/out/dist/css/footer.css @@ -0,0 +1,12 @@ +#footer .content +{ height: 100px; +} + +#footer .content p +{ text-align: right; +} + +#footer .content p#a_propos_links +{ text-align: left; + float: left; +} diff --git a/web/out/dist/css/general.css b/web/out/dist/css/general.css new file mode 100644 index 0000000..dd3602e --- /dev/null +++ b/web/out/dist/css/general.css @@ -0,0 +1,70 @@ +body +{ font: normal 12px Verdana, Helvetica, Arial, sans-serif; +} + +ul +{ margin: 5px 5px 5px 15px; +} + +h1 +{ margin: 5px +} + +h2 +{ margin: 5px +} + +h2 span +{ font-weight: normal; + font-size: 0.8em; +} + +h3 +{ margin: 5px +} + +p +{ margin: 5px + text-align: justify; +} + +.messages +{ margin: 10px; + padding: 10px; +} + +.erreur +{ margin: 50px 100px 50px 100px; + padding: 20px; +} + +.redirect_message div +{ margin: 50px 100px 50px 100px; + padding: 20px; +} + +ul.list +{ margin: 5px 10px 10px 15px; +} + +ul.list li +{ margin: 5px 5px 5px 15px; + padding: 5px; +} + +.navig +{ text-align: right; + padding: 3px; + margin: 10px; +} + +.loading +{ margin: 5px 0px 10px 15px; + padding: 0px; + height: 40px; + width: 40px; +} + +.loading span +{ display: none; +} diff --git a/web/out/dist/css/header.css b/web/out/dist/css/header.css new file mode 100644 index 0000000..04b1324 --- /dev/null +++ b/web/out/dist/css/header.css @@ -0,0 +1,11 @@ +#header h1 +{ padding-top: 5px; + padding: 5px 0px 0px 0px; + margin: 0px; +} + +#header h1 a +{ text-decoration: none; + display: block; + padding: 10px; +} diff --git a/web/out/dist/css/main.css b/web/out/dist/css/main.css new file mode 100644 index 0000000..32abddb --- /dev/null +++ b/web/out/dist/css/main.css @@ -0,0 +1,32 @@ +#main .content +{ padding: 10px 0px 10px 0px; + width: 800px; +} + +#colonne +{ float: left; + width: 240px; + padding: 0px 0px 50px 0px; +} + +#center +{ float: left; + width: 540px; + padding: 10px; +} + +#center.no_colonne +{ width: 800px; +} + +#colonne ul.menu +{ margin-left: 15px; +} + +#colonne ul.menu li +{ margin-left: 15px; +} + +#colonne ul.navig_menu +{ margin-top: 20px; +} diff --git a/web/out/dist/css/menu_top.css b/web/out/dist/css/menu_top.css new file mode 100644 index 0000000..f751fef --- /dev/null +++ b/web/out/dist/css/menu_top.css @@ -0,0 +1,31 @@ +#menu_top ul.menu +{ margin: 5px 0px 0px 0px; + float: right; + position: relative; +} + +#menu_top ul.menu li +{ list-style-type: none; + margin-left: 15px; + float: left; +} + +#menu_top ul.menu li a +{ display: block; + padding: 5px 10px 5px 10px; +} + +#menu_top ul.menu li ul +{ position: absolute; + margin: 0px 0px 0px -15px; + z-index: 1; + display: none; +} + +#menu_top ul.menu li ul li +{ float: none; +} + +#menu_top ul.menu li ul li a +{ padding: 5px 10px 5px 10px; +} diff --git a/web/out/dist/css/style.css b/web/out/dist/css/style.css new file mode 100644 index 0000000..0eed589 --- /dev/null +++ b/web/out/dist/css/style.css @@ -0,0 +1,34 @@ +@import url("general.css"); +@import url("header.css"); +@import url("menu_top.css"); +@import url("main.css"); +@import url("footer.css"); + +* +{ margin: 0; + padding: 0; +} + +html +{ height: 100%; +} + +body +{ text-align: center; + height: 100%; +} + +pre, div { text-align: left; } + +.content +{ margin-left: auto; + margin-right: auto; + width: 800px; +} + +.clear +{ clear: both; + font-size: 0px; + line-height: 0px; + height: 0px; +} diff --git a/web/out/dist/css/tinymce.css b/web/out/dist/css/tinymce.css new file mode 100644 index 0000000..e892ebe --- /dev/null +++ b/web/out/dist/css/tinymce.css @@ -0,0 +1,3 @@ +body, td, pre +{ +} \ No newline at end of file diff --git a/web/out/dist/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/web/out/dist/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000000000000000000000000000000000000..29460f0ef34db4f18a80f960518e9b04dada21d6 GIT binary patch literal 384 zcmV-`0e}99P)kMRa>W>&2g2PjZ8lL>#>l-Cbhi_`NFUi-FUUIGAM-&VLd zFfRcv4(!_s7YF7g9LptUl7+IFE)LXL;z9s;1trOtm&i{E6!Wr7j_NgK0UX2)_zT8JCxgFa zjO49AQkJ~r<+>IG+_TYalhlB;s^ujOe%lzS_`9P8r8Fjq7DO78q!pCYm?RpI)R-hK eAg%sxlDq+o?9?C3V?i(g0000bvPcjKS|RKP(6sDcCAB(_QB%0978a<$Ah$!b|E zwn;|HO0i8cQj@~)s!ajF0S002ovPDHLkV1oEp BYH0uf literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/web/out/dist/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQY-ImG zFPf9b{J;c_6SHRK%WcbN_hZpM=(Ry;4Rxv2@@2Y=$K57eF$X$=!PC{xWt~$(69B)$ BI)4BF literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/web/out/dist/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9b383f4d2eab09c0f2a739d6b232c32934bc620b GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour1U*q978O6-yYw{%b*}|_(02F z@qbE9)0CJMo;*v*PWv`Vh2h6EmG8IS-Cm{3U~` zFlmZ}YMcJY=eo?o%*@I?2`NblNeMudl#t?{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/web/out/dist/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 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 literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/web/out/dist/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..f1273672d253263b7564e9e21d69d7d9d0b337d9 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%l7LV~E7mxPQ=F85a&M@g_{ d|GeK{$Y5lo%PMu^>wln`44$rjF6*2UngE4^EGqy2 literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-icons_222222_256x240.png b/web/out/dist/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..b273ff111d219c9b9a8b96d57683d0075fb7871a GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/web/out/dist/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..a641a371afa0fbb08ba599dc7ddf14b9bfc3c84f GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@e{{5C=l}o! literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/web/out/dist/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..85e63e9f604ce042d59eb06a8428eeb7cb7896c9 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/web/out/dist/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..e117effa3dca24e7978cfc5f8b967f661e81044f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/web/out/dist/css/ui-lightness/jquery-ui-1.8.12.custom.css b/web/out/dist/css/ui-lightness/jquery-ui-1.8.12.custom.css new file mode 100644 index 0000000..3f7bf90 --- /dev/null +++ b/web/out/dist/css/ui-lightness/jquery-ui-1.8.12.custom.css @@ -0,0 +1,578 @@ +/* + * jQuery UI CSS Framework 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; + /* http://bugs.jqueryui.com/ticket/7233 + - Resizable: resizable handles fail to work in IE if transparent and content overlaps + */ + background-image:url(data:); +} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } +/* + * jQuery UI Autocomplete 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.12 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/web/out/dist/functions.php b/web/out/dist/functions.php new file mode 100644 index 0000000..21ab7e9 --- /dev/null +++ b/web/out/dist/functions.php @@ -0,0 +1,80 @@ + $max) + { if(isset($legende)) + { $navig .= + $legende." ".($current + 1)." à " + .(($current + $max) > $total ? $total : $current + $max) + ." sur ".$total." - aller à la "; + } + $get_params = array(); + if(($q = strpos($base_url, "?")) !== false) + { $v_query = explode("&", substr($base_url, $q + 1)); + $base_url = substr($base_url, 0, $q); + foreach($v_query as $query) + { if($query) + { $v = explode("=", $query); + $get_params[$v[0]] = $v[1]; + } + } + } + if(isset($get_params[$start_param])) unset($get_params[$start_param]); + $base_url .= "?"; + foreach($get_params as $key => $value) $base_url .= $key."=".$value."&"; + $nb_pages = ceil($total / $max); + $navig .= + "page : " + ."\n"; + if($current >= $max) + { $navig .= + "«\n"; + } + if($current < $total - $max) + { $navig .= + "»\n"; + } + } + return $navig; + } + + function aff_date($date) + { if(preg_match("/([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})/", $date, $regs)) + { $date = $regs[3]." ".mois($regs[2])." ".$regs[1]; + } + return $date; + } + + function mois($n) + { switch($n) + { case 1: $mois = "jan"; break; + case 2: $mois = "fev"; break; + case 3: $mois = "mars"; break; + case 4: $mois = "avr"; break; + case 5: $mois = "mai"; break; + case 6: $mois = "juin"; break; + case 7: $mois = "juil"; break; + case 8: $mois = "aout"; break; + case 9: $mois = "sept"; break; + case 10: $mois = "oct"; break; + case 11: $mois = "nov"; break; + case 12: $mois = "dec"; break; + default: $mois = $n; + } + return $mois; + } + +?> \ No newline at end of file diff --git a/web/out/dist/html_reponse.php b/web/out/dist/html_reponse.php new file mode 100644 index 0000000..80aa95a --- /dev/null +++ b/web/out/dist/html_reponse.php @@ -0,0 +1,32 @@ + + + + out_file("views/head.php"); ?> + + + + + +
+
+out_file("views/messages.php"); ?> +out_file_exists($layout["content"])) require $this->out_file($layout["content"]); + +?> +
+
+ + + + + diff --git a/web/out/dist/html_simple_reponse.php b/web/out/dist/html_simple_reponse.php new file mode 100644 index 0000000..4a63648 --- /dev/null +++ b/web/out/dist/html_simple_reponse.php @@ -0,0 +1,13 @@ + + + + + + +out_file_exists($layout["content"])) require $this->out_file($layout["content"]); + +?> + + \ No newline at end of file diff --git a/web/out/dist/icons/add.gif b/web/out/dist/icons/add.gif new file mode 100644 index 0000000000000000000000000000000000000000..a853e08c5b220b42de797d7104d6dcd0cd65d7c9 GIT binary patch literal 83 zcmZ?wbhEHb3UH!ouR`=lAT{vl};VeEIUl!ouRtojadCecHBd+kyoPPMtdS z?%g|}ArPSWpWDwhB-q(8z|~04fSC~}s`yXJxhOTUBsE2$JhLQ2Au%hlA}2pFMK3ci zEuTU0CkrPxP?ZiyKgf{`thx#ceJPpqmMq|Ubc$)6gFv&z8PkHx)%R}in9s-lM6i9! zBZm__dd2Imak;LY=7h}zm4rkI)`WR0GG*E)?mKYn(8@QLmiIn?v-kDx2z`w?tc})! zof1sgG@1de?oQNs+@Zp$B*l}wBx#YxN$K-jdS4q!9hlC1plNUP#}nRyjb|@j-XZKa z^H3#V%=s`!CV{ zGZTv~S)?jgU+dnbH8)5Rn@L8H@VK@q;+ad}wo4-xl69peI z>rMAn>7QZ36tBx*W_EhPz6U`Z*qo#fG3yD?Ju5c7TU8{Z8nlJ?f$93++hq!-bARhP dGOMsv=2x69g9)2+mYc?Kr#IqJ&~b=~2alYfYb G!5RR{dk^9O literal 0 HcmV?d00001 diff --git a/web/out/dist/icons/del.gif b/web/out/dist/icons/del.gif new file mode 100644 index 0000000000000000000000000000000000000000..6ec609664b26547a9d29b920430442caf57fc2b5 GIT binary patch literal 67 zcmZ?wbhEHbb%7 literal 0 HcmV?d00001 diff --git a/web/out/dist/icons/desc.gif b/web/out/dist/icons/desc.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf7c2d45728d4f8cb16baa86c762bd9017ae4a25 GIT binary patch literal 57 zcmZ?wbhEHbmYc?Kq~DfP{kUA&SxNn#Av E0IzQi*8l(j literal 0 HcmV?d00001 diff --git a/web/out/dist/icons/edit.gif b/web/out/dist/icons/edit.gif new file mode 100644 index 0000000000000000000000000000000000000000..773e8b35784c8ed82cd4b06648f108d01b82b350 GIT binary patch literal 107 zcmZ?wbhEHbwc6x=<10~i#4vH(>v cGw6Vnf;2HO@m#S>T7LUmQc#Yn2^WJk0N>vi2LJ#7 literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/border.png b/web/out/dist/images/colorbox/border.png new file mode 100644 index 0000000000000000000000000000000000000000..f463a10d838aeba263ff44e5c3578dfe7ba07648 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI}$P6Txn<}3KQfvV}A+A9B|Ns9>Z_d99WHFWm z`2{zujf-{zawI%m978JNrXFPE1@f8<7E8}%%lTu>&#KnM&G`7uteHSj22WQ%mvv4F FO#q`M9f1G< literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/controls.png b/web/out/dist/images/colorbox/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..051b4a623e0dffe738ff60b912e7bf0a3e51cf53 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^>w(yagAGV(Wp%#*QjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfZB|A>36=C->1jZrIi4<#Ar-gY z-ZA8AFyL{xc#ZqJj_pQ2y`|mGhKlcfo4OCHPYKB31*&9dIP>eiyutH5_n#ZO{r@HR zv5hBUM@xUX_^JX=;rCJ-3Oq&EFJ@BHSB<%-{!TArL$1Rf_47NJKu(5&j^n8%N2-+) z9tzpri(PR@)pt+!fkUdHd-}L$?3walx$=xX+jysRU!NxqR-aYHpej*X`K_Dz3yAOO L>gTe~DWM4fED&Dk literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/ie6/borderBottomCenter.png b/web/out/dist/images/colorbox/ie6/borderBottomCenter.png new file mode 100644 index 0000000000000000000000000000000000000000..0d4475edf4e1ebb18d41db83915a21a9a6bc5977 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{P$P6U+&JlA5QfvV}A+A9B|Ns9>Z_d99WHFWm z`2{zujf-{za>PAd978JNY7Z)cbT)5ruP-ra%e~G}wTijXxbw&apdf>%tDnm{r-UW| DknJ7# literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/ie6/borderBottomLeft.png b/web/out/dist/images/colorbox/ie6/borderBottomLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..2775eba899d10d3dc6f8c4044ad69cb89a5f8499 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?BQd3j6Z{H4KpFe*d zCJdtg|NlSbL?0`V#ZwaG7u>*5G5>gk!F7ua0ST$+oA`j@!JaOTAr*10r#A97C`hm- z3dKH%oOr{aLpj2LsW&>nlF|6W##ZJ(&Vq|N!)H`n4WCnOwE6XE$$JkZ%dBmlKK#!l q^N>YH$6>u0R?BQd3j6Z{H4KpFe*d zCJdtg|NlSbL?0`V#ZwaG7u>*5G5>gk!F7ua0ST$+oA`j@p`I>|Ar*0Rk8R{_P!M3f za60r>rSy%6n-)#V7EE~whgkX^aO5~8RysR6J&4z+ys8}98}g<84F4bXKSykNqt5CV sw|{E#ePx# literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/ie6/borderMiddleLeft.png b/web/out/dist/images/colorbox/ie6/borderMiddleLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d63d156e008a01fde9d2d68c531c34926a924a GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{Z$P6U8=aokQDYgKg5LY1m|NsA`H|O64NtXoq z1vjjXi*^HYL_A#_Ln`7}8#ZzRc@9(l|2O5zVPsZ_d99WHFWm z`2{zujf-{za>PAd978JNY7Z)cbT)5ruP@Q*%6-Zwv5L7-WU|;#pdf>%tDnm{r-UW| Dg{~b` literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/ie6/borderTopLeft.png b/web/out/dist/images/colorbox/ie6/borderTopLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d458b5bba4a8cb84b9ee39a3844e258c1dcc20 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?qNKH*WfByXT?c0H} z|NsBDZcF_MWbu>)`2{yHR2W1EWLV67bmi? zvo+on5)g6V?RfL6QIf literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/ie6/borderTopRight.png b/web/out/dist/images/colorbox/ie6/borderTopRight.png new file mode 100644 index 0000000000000000000000000000000000000000..74b8583cfbb2e62a84ef04ba01064ecb4d70e72a GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?Sq^70<1<#*9zkU05 zAmji4|I_}5*Z^5PB|(0{4Ga|#78wHb4Xz)Tc+|OiK2SW!)5S5QBChw?MqY;mf#VnJ z^}ggWcLpW1DoZ@PeSjlp!DT5|UGpg|kLp?vt)3@$_tm@JIJ0M=)Av-}@ro0Ud)StJ qkbTcp`HhbYABf8t?|bZq*G4@Nf;!!};89ZJ6T-G@yGywoYi%4?- literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/loading.gif b/web/out/dist/images/colorbox/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..09d621ede9dbe610877292e554c858d60573359e GIT binary patch literal 723 zcmZ?wbhEHb6ky3UH!ouR`=lAT{vl};VeEIUl!ouRtojadCecHBd+kyoPPMtdS z?%g|}ArPSWpWDwhB-q(8z|~04fSC~}s`yXJxhOTUBsE2$JhLQ2Au%hlA}2pFMK3ci zEuTU0CkrPxP?ZiyKgf{`thx#ceJPpqmMq|Ubc$)6gFv&z8PkHx)%R}in9s-lM6i9! zBZm__dd2Imak;LY=7h}zm4rkI)`WR0GG*E)?mKYn(8@QLmiIn?v-kDx2z`w?tc})! zof1sgG@1de?oQNs+@Zp$B*l}wBx#YxN$K-jdS4q!9hlC1plNUP#}nRyjb|@j-XZKa z^H3#V%=s`!CV{ zGZTv~S)?jgU+dnbH8)5Rn@L8H@VK@q;+ad}wo4-xl69peI z>rMAn>7QZ36tBx*W_EhPz6U`Z*qo#fG3yD?Ju5c7TU8{Z8nlJ?f$93++hq!-bARhP dGOMsv=2x69g9)2+UU{crc4h8@qAkJEl10~!7q>s;6wwG+ x;Lym#%7w)E5SqaM?W?}pgPY2~zL+0j{rLCv$(}1!-+=Zpc)I$ztaD0e0s!7!I-dXl literal 0 HcmV?d00001 diff --git a/web/out/dist/images/colorbox/overlay.png b/web/out/dist/images/colorbox/overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf9e09a61e5debb48299263ef880f4aa92ce46b GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1SGcvS$+jljKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)78zk~)wiD{_<%y1o-U3d9>?FF zF%)EA;9ybMdi1+~7MD0b(*@60$F4|jjanPF`fAqK|5c1xTnz2GH~Bn)nixD?{an^L HB{Ts5WP2|f literal 0 HcmV?d00001 diff --git a/web/out/dist/index.php b/web/out/dist/index.php new file mode 100644 index 0000000..2ddd92e --- /dev/null +++ b/web/out/dist/index.php @@ -0,0 +1,53 @@ + + + + out_file("views/head.php"); ?> + + + + + + + +
+ +
+
+ +out_config("colonne")) : ?> +
+out_file("views/index/colonne.php"); ?> +
+ + +
out_config("colonne") ? "" : " class=\"no_colonne\"" ?>> +out_file("views/messages.php"); ?> +out_file_exists($layout["content"])) require $this->out_file($layout["content"]); + +?> + +
+ +
+ +
+
+ + + + + diff --git a/web/out/dist/js/actions/admin.js b/web/out/dist/js/actions/admin.js new file mode 100644 index 0000000..a0287e1 --- /dev/null +++ b/web/out/dist/js/actions/admin.js @@ -0,0 +1,14 @@ +$(document).ready +( function() + { init_contact_form_ckeckbox(); + } +); + +function init_contact_form_ckeckbox() +{ $("#contact_form").click + ( function() + { if($(this).get(0).checked) $("#email_li").slideDown(200); + else $("#email_li").slideUp(200); + } + ); +} diff --git a/web/out/dist/js/actions/users.js b/web/out/dist/js/actions/users.js new file mode 100644 index 0000000..0039302 --- /dev/null +++ b/web/out/dist/js/actions/users.js @@ -0,0 +1,14 @@ +$(document).ready +( function() + { init_tinymce(); + } +); + +function init_tinymce() +{ $(".tinymce").each + ( function() + { tinyMCE.execCommand("mceAddControl", true, $(this).attr("id")); + } + ); +} + diff --git a/web/out/dist/js/jquery-1.5.2.min.js b/web/out/dist/js/jquery-1.5.2.min.js new file mode 100644 index 0000000..f78f96a --- /dev/null +++ b/web/out/dist/js/jquery-1.5.2.min.js @@ -0,0 +1,16 @@ +/*! + * jQuery JavaScript Library v1.5.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Mar 31 15:28:23 2011 -0400 + */ +(function(a,b){function ci(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cf(a){if(!b_[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";b_[a]=c}return b_[a]}function ce(a,b){var c={};d.each(cd.concat.apply([],cd.slice(0,b)),function(){c[this]=a});return c}function b$(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bZ(){try{return new a.XMLHttpRequest}catch(b){}}function bY(){d(a).unload(function(){for(var a in bW)bW[a](0,1)})}function bS(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function P(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function H(a,b){return(a&&a!=="*"?a+".":"")+b.replace(t,"`").replace(u,"&")}function G(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,p=[],q=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function E(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function y(){return!0}function x(){return!1}function i(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function h(a,c,e){if(e===b&&a.nodeType===1){e=a.getAttribute("data-"+c);if(typeof e==="string"){try{e=e==="true"?!0:e==="false"?!1:e==="null"?null:d.isNaN(e)?g.test(e)?d.parseJSON(e):e:parseFloat(e)}catch(f){}d.data(a,c,e)}else e=b}return e}var c=a.document,d=function(){function G(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(G,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x,y,z=Object.prototype.toString,A=Object.prototype.hasOwnProperty,B=Array.prototype.push,C=Array.prototype.slice,D=String.prototype.trim,E=Array.prototype.indexOf,F={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.2",length:0,size:function(){return this.length},toArray:function(){return C.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?B.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),x.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(C.apply(this,arguments),"slice",C.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:B,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;x.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=d._Deferred();if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",y,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",y),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&G()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):F[z.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!A.call(a,"constructor")&&!A.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||A.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1?f.call(arguments,0):c,--g||h.resolveWith(h,f.call(b,0))}}var b=arguments,c=0,e=b.length,g=e,h=e<=1&&a&&d.isFunction(a.promise)?a:d.Deferred();if(e>1){for(;c
a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0,reliableMarginRight:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e)}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(a.style.width="1px",a.style.marginRight="0",d.support.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(a,null).marginRight,10)||0)===0),b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function");return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}}();var g=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!i(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,g=b.nodeType,h=g?d.cache:b,j=g?b[d.expando]:d.expando;if(!h[j])return;if(c){var k=e?h[j][f]:h[j];if(k){delete k[c];if(!i(k))return}}if(e){delete h[j][f];if(!i(h[j]))return}var l=h[j][f];d.support.deleteExpando||h!=a?delete h[j]:h[j]=null,l?(h[j]={},g||(h[j].toJSON=d.noop),h[j][f]=l):g&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var f=this[0].attributes,g;for(var i=0,j=f.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var j=i?f:0,k=i?f+1:h.length;j=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=m.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&n.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var k=a.getAttributeNode("tabIndex");return k&&k.specified?k.value:o.test(a.nodeName)||p.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var l=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return l===null?b:l}h&&(a[c]=e);return a[c]}});var r=/\.(.*)$/,s=/^(?:textarea|input|select)$/i,t=/\./g,u=/ /g,v=/[^\w\s.|`]/g,w=function(a){return a.replace(v,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=x;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(a){return typeof d!=="undefined"&&d.event.triggered!==a.type?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=x);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),w).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(r,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=a.type,l[m]())}catch(p){}k&&(l["on"+m]=k),d.event.triggered=b}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},D=function D(a){var c=a.target,e,f;if(s.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=C(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:D,beforedeactivate:D,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&D.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&D.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",C(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in B)d.event.add(this,c+".specialChange",B[c]);return s.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return s.test(this.nodeName)}},B=d.event.special.change.filters,B.focus=B.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function f(a){var c=d.event.fix(a);c.type=b,c.originalEvent={},d.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var e=0;d.event.special[b]={setup:function(){e++===0&&c.addEventListener(a,f,!0)},teardown:function(){--e===0&&c.removeEventListener(a,f,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return"text"===c&&(b===c||b===null)},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=N.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(P(c[0])||P(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=M.call(arguments);I.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!O[a]?d.unique(f):f,(this.length>1||K.test(e))&&J.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var R=/ jQuery\d+="(?:\d+|null)"/g,S=/^\s+/,T=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,U=/<([\w:]+)/,V=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};Z.optgroup=Z.option,Z.tbody=Z.tfoot=Z.colgroup=Z.caption=Z.thead,Z.th=Z.td,d.support.htmlSerialize||(Z._default=[1,"div
","
"]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(R,""):null;if(typeof a!=="string"||X.test(a)||!d.support.leadingWhitespace&&S.test(a)||Z[(U.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(T,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){ba(a,e),f=bb(a),g=bb(e);for(h=0;f[h];++h)ba(f[h],g[h])}if(b){_(a,e);if(c){f=bb(a),g=bb(e);for(h=0;f[h];++h)_(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||W.test(i)){if(typeof i==="string"){i=i.replace(T,"<$1>");var j=(U.exec(i)||["",""])[1].toLowerCase(),k=Z[j]||Z._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=V.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&S.test(i)&&m.insertBefore(b.createTextNode(S.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bd=/alpha\([^)]*\)/i,be=/opacity=([^)]*)/,bf=/-([a-z])/ig,bg=/([A-Z]|^ms)/g,bh=/^-?\d+(?:px)?$/i,bi=/^-?\d/,bj={position:"absolute",visibility:"hidden",display:"block"},bk=["Left","Right"],bl=["Top","Bottom"],bm,bn,bo,bp=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bm(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bm)return bm(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bf,bp)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bq(a,b,e):d.swap(a,bj,function(){f=bq(a,b,e)});if(f<=0){f=bm(a,b,b),f==="0px"&&bo&&(f=bo(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bh.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return be.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bd.test(f)?f.replace(bd,e):c.filter+" "+e}}),d(function(){d.support.reliableMarginRight||(d.cssHooks.marginRight={get:function(a,b){var c;d.swap(a,{display:"inline-block"},function(){b?c=bm(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bn=function(a,c,e){var f,g,h;e=e.replace(bg,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bo=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bh.test(d)&&bi.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bm=bn||bo,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var br=/%20/g,bs=/\[\]$/,bt=/\r?\n/g,bu=/#.*$/,bv=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bw=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bx=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,by=/^(?:GET|HEAD)$/,bz=/^\/\//,bA=/\?/,bB=/)<[^<]*)*<\/script>/gi,bC=/^(?:select|textarea)/i,bD=/\s+/,bE=/([?&])_=[^&]*/,bF=/(^|\-)([a-z])/g,bG=function(a,b,c){return b+c.toUpperCase()},bH=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bI=d.fn.load,bJ={},bK={},bL,bM;try{bL=c.location.href}catch(bN){bL=c.createElement("a"),bL.href="",bL=bL.href}bM=bH.exec(bL.toLowerCase())||[],d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bI)return bI.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
").append(c.replace(bB,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bC.test(this.nodeName)||bw.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(bt,"\r\n")}}):{name:b.name,value:c.replace(bt,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bL,isLocal:bx.test(bM[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bO(bJ),ajaxTransport:bO(bK),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bR(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bS(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bF,bG)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bv.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bu,"").replace(bz,bM[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bD),e.crossDomain==null&&(q=bH.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bM[1]||q[2]!=bM[2]||(q[3]||(q[1]==="http:"?80:443))!=(bM[3]||(bM[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bP(bJ,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!by.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(bA.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bE,"$1_="+w);e.url=x+(x===e.url?(bA.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bP(bK,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bQ(g,a[g],c,f);return e.join("&").replace(br,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bT=d.now(),bU=/(\=)\?(&|$)|\?\?/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bT++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bU.test(b.url)||f&&bU.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bU,l),b.url===j&&(f&&(k=k.replace(bU,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bV=d.now(),bW,bX;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bZ()||b$()}:bZ,bX=d.ajaxSettings.xhr(),d.support.ajax=!!bX,d.support.cors=bX&&"withCredentials"in bX,bX=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),!a.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bW[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bW||(bW={},bY()),h=bV++,g.onreadystatechange=bW[h]=c):c()},abort:function(){c&&c(0,1)}}}});var b_={},ca=/^(?:toggle|show|hide)$/,cb=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cc,cd=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(ce("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:ce("show",1),slideUp:ce("hide",1),slideToggle:ce("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!cc&&(cc=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=(e==="absolute"||e==="fixed")&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=ch.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!ch.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=ci(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=ci(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window); \ No newline at end of file diff --git a/web/out/dist/js/jquery-ui-1.8.12.custom.min.js b/web/out/dist/js/jquery-ui-1.8.12.custom.min.js new file mode 100644 index 0000000..1b1c88f --- /dev/null +++ b/web/out/dist/js/jquery-ui-1.8.12.custom.min.js @@ -0,0 +1,783 @@ +/*! + * jQuery UI 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.12",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106, +NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this, +"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position"); +if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f, +"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h, +d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}}); +c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate); +if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- +this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions(); +d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| +this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&& +this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== +a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]|| +0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], +this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top- +(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(), +height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"? +document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"), +10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"), +10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&& +d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], +this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.leftthis.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g= +this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])? +e:!(e-this.offset.click.left
').css({width:this.offsetWidth+ +"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity", +a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e=j&&f<=l||h>=j&&h<=l||fl)&&(e>= +i&&e<=k||g>=i&&g<=k||ek);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; +if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), +d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset= +this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: +this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", +b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height; +f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing"); +this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top= +null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidthb.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+ +this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b, +a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a, +c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize, +originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.12"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize= +b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width", +"height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})}; +if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height- +g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width, +height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d= +e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options, +d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper? +d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height= +a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&& +/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable"); +b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/ +(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +;/* + * jQuery UI Selectable 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), +selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("
")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, +c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", +c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= +this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.righti||a.bottomb&&a.rightg&&a.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable"); +this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]= +b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false; +d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left- +this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; +this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!= +document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a); +return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0], +e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset(); +c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): +this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null, +dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")}, +toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+jg&&b+la[this.floating?"width":"height"]?j:g0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith(); +if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), +this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b= +this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f= +d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")|| +0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out", +a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h- +f)this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g- +this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?f:!(f-this.offset.click.left=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this, +this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop", +a,this._uiHash());for(e=0;e li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); +a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", +function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a= +this.options;if(a.icons){c("").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); +this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); +b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); +a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ +c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; +if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); +if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(), +e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight|| +e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false", +"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.12", +animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/); +f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide", +paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); +;/* + * jQuery UI Autocomplete 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g= +false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= +a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; +this.menu=d("
    ").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& +a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); +d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& +b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= +this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length").data("item.autocomplete",b).append(d("").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, +"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); +(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.attr("scrollTop"),c=this.element.height();if(b<0)this.element.attr("scrollTop",g+b);else b>=c&&this.element.attr("scrollTop",g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})}, +deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0); +e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e, +g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first")); +this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){if(this.options.text)e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("");d.secondary&&b.append("");if(!this.options.text){e.push(f?"ui-button-icons-only": +"ui-button-icon-only");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, +destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery); +;/* + * jQuery UI Dialog 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, +position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ +b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), +h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id", +e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); +a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== +b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+= +1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== +f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
    ").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a, +function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", +handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition, +originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize", +f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "): +[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f); +if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"): +e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a= +this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height- +b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.12",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), +create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("
    ");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("").appendTo(this.element).addClass("ui-slider-handle"); +if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur(); +else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e= +false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");h=b._start(c,f);if(h===false)return}break}i=b.options.step;h=b.options.values&&b.options.values.length?(g=b.values(f)):(g=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=b._valueMin();break;case d.ui.keyCode.END:g=b._valueMax();break;case d.ui.keyCode.PAGE_UP:g=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h=== +b._valueMax())return;g=b._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===b._valueMin())return;g=b._trimAlignValue(h-i);break}b._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"); +this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,h,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(a.range===true&&this.values(1)===a.min){g+=1;f=d(this.handles[g])}if(this._start(b, +g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();a=f.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-f.width()/2,top:b.pageY-a.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true}, +_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a; +if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value= +this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max}, +_refreshValue:function(){var b=this.options.range,a=this.options,c=this,e=!this._animateOff?a.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate); +if(k===1)c.range[e?"animate":"css"]({width:f-g+"%"},{queue:false,duration:a.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:a.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1, +1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.12"})})(jQuery); +;/* + * jQuery UI Tabs 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
    ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= +d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| +(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); +this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ +g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", +function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; +this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= +-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; +d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e= +d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, +e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); +j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); +if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, +this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, +load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, +"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, +url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.12"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k')}function F(a,b){d.extend(a,b);for(var c in b)if(b[c]== +null||b[c]==A)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.12"}});var y=(new Date).getTime();d.extend(K.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){F(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase(); +f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('
    ')}}, +_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&& +b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f== +""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a, +c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b), +true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}F(a.settings,e||{}); +b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass); +this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup", +this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs, +function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null: +f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target); +if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a); +d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");F(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-= +document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim"); +var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst= +b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a));var e=a.dpDiv.find("iframe.ui-datepicker-cover");e.length&&e.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover"); +this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+ +this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&& +a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var f=a.yearshtml;setTimeout(function(){f===a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);f=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth(): +0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a), +"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"? +"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a= +d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a= +d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c== +"M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth= +b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker(); +this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0); +a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c? +c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=z+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}w=this._daylightSavingAdjust(new Date(c,j-1,l));if(w.getFullYear()!=c||w.getMonth()+1!=j||w.getDate()!=l)throw"Invalid date";return w},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y", +RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay= +a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(), +b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n= +this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
    '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
    ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z= +this._get(a,"monthNames"),w=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),v=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var L=this._getDefaultDate(a),I="",D=0;D1)switch(E){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]- +1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='
    '+(/all|left/.test(t)&&D==0?c?f:n:"")+(/all|right/.test(t)&&D==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,D>0||E>0,z,w)+'
    ';var B=j?'":"";for(t=0;t<7;t++){var q= +(t+h)%7;B+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}x+=B+"";B=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,B);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;B=l?6:Math.ceil((t+B)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O";var P=!j?"":'";for(t=0;t<7;t++){var G= +p?p.apply(a.input?a.input[0]:null,[q]):[true,""],C=q.getMonth()!=g,J=C&&!H||!G[0]||k&&qo;P+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+= +P+""}g++;if(g>11){g=0;m++}x+="
    '+this._get(a,"weekHeader")+"
    '+this._get(a,"calculateWeek")(q)+""+(C&&!v?" ":J?''+q.getDate()+"":''+q.getDate()+"")+"
    "+(l?""+(i[0]>0&&E==i[1]-1?'
    ':""):"");M+=x}I+=M}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
    ', +o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&& +l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";if(d.browser.mozilla)k+='";else{k+=a.yearshtml;a.yearshtml=null}}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="
    ";return k},_adjustInstDate:function(a,b,c){var e= +a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a, +"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a); +c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker= +function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker, +[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.12";window["DP_jQuery_"+y]=d})(jQuery); +;/* + * jQuery UI Progressbar 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
    ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.12"})})(jQuery); +;/* + * jQuery UI Effects 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], +16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, +a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= +a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", +"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0, +0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211, +211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, +d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0]; +h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c, +a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.12",save:function(c,a){for(var b=0;b").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent", +border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c); +return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments); +else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c), +b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c, +a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c, +a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a== +e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ +e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +;/* + * jQuery UI Effects Fade 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Fold 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], +10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +;/* + * jQuery UI Effects Highlight 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +;/* + * jQuery UI Effects Pulsate 1.8.12 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); +b.dequeue()})})}})(jQuery); +; \ No newline at end of file diff --git a/web/out/dist/js/jquery.colorbox-min.js b/web/out/dist/js/jquery.colorbox-min.js new file mode 100644 index 0000000..b795ee8 --- /dev/null +++ b/web/out/dist/js/jquery.colorbox-min.js @@ -0,0 +1,4 @@ +// ColorBox v1.3.16 - a full featured, light-weight, customizable lightbox based on jQuery 1.3+ +// Copyright (c) 2011 Jack Moore - jack@colorpowered.com +// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php +(function(a,b,c){function ba(b){if(!T){O=b,Z(a.extend(J,a.data(O,e))),x=a(O),P=0,J.rel!=="nofollow"&&(x=a("."+V).filter(function(){var b=a.data(this,e).rel||this.rel;return b===J.rel}),P=x.index(O),P===-1&&(x=x.add(O),P=x.length-1));if(!R){R=S=!0,q.show();if(J.returnFocus)try{O.blur(),a(O).one(k,function(){try{this.focus()}catch(a){}})}catch(c){}p.css({opacity:+J.opacity,cursor:J.overlayClose?"pointer":"auto"}).show(),J.w=X(J.initialWidth,"x"),J.h=X(J.initialHeight,"y"),U.position(0),n&&y.bind("resize."+o+" scroll."+o,function(){p.css({width:y.width(),height:y.height(),top:y.scrollTop(),left:y.scrollLeft()})}).trigger("resize."+o),$(g,J.onOpen),I.add(C).hide(),H.html(J.close).show()}U.load(!0)}}function _(){var a,b=f+"Slideshow_",c="click."+f,d,e,g;J.slideshow&&x[1]&&(d=function(){E.text(J.slideshowStop).unbind(c).bind(i,function(){if(P"),b.open=!0;f.each(function(){a.data(this,e,a.extend({},a.data(this,e)||d,b)),a(this).addClass(V)}),g=b.open,a.isFunction(g)&&(g=g.call(f)),g&&ba(f[0]);return f},U.init=function(){y=a(c),q=W().attr({id:e,"class":m?f+(n?"IE6":"IE"):""}),p=W("Overlay",n?"position:absolute":"").hide(),r=W("Wrapper"),s=W("Content").append(z=W("LoadedContent","width:0; height:0; overflow:hidden"),B=W("LoadingOverlay").add(W("LoadingGraphic")),C=W("Title"),D=W("Current"),F=W("Next"),G=W("Previous"),E=W("Slideshow").bind(g,_),H=W("Close")),r.append(W().append(W("TopLeft"),t=W("TopCenter"),W("TopRight")),W(!1,"clear:left").append(u=W("MiddleLeft"),s,v=W("MiddleRight")),W(!1,"clear:left").append(W("BottomLeft"),w=W("BottomCenter"),W("BottomRight"))).children().children().css({"float":"left"}),A=W(!1,"position:absolute; width:9999px; visibility:hidden; display:none"),a("body").prepend(p,q.append(r,A)),s.children().hover(function(){a(this).addClass("hover")},function(){a(this).removeClass("hover")}).addClass("hover"),K=t.height()+w.height()+s.outerHeight(!0)-s.height(),L=u.width()+v.width()+s.outerWidth(!0)-s.width(),M=z.outerHeight(!0),N=z.outerWidth(!0),q.css({"padding-bottom":K,"padding-right":L}).hide(),F.click(function(){U.next()}),G.click(function(){U.prev()}),H.click(function(){U.close()}),I=F.add(G).add(D).add(E),s.children().removeClass("hover"),a("."+V).live("click",function(a){a.button!==0&&typeof a.button!="undefined"||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),ba(this))}),p.click(function(){J.overlayClose&&U.close()}),a(b).bind("keydown."+f,function(a){var b=a.keyCode;R&&J.escKey&&b===27&&(a.preventDefault(),U.close()),R&&J.arrowKey&&x[1]&&(b===37?(a.preventDefault(),G.click()):b===39&&(a.preventDefault(),F.click()))})},U.remove=function(){q.add(p).remove(),a("."+V).die("click").removeData(e).removeClass(V)},U.position=function(a,c){function g(a){t[0].style.width=w[0].style.width=s[0].style.width=a.style.width,B[0].style.height=B[1].style.height=s[0].style.height=u[0].style.height=v[0].style.height=a.style.height}var d,e=Math.max(b.documentElement.clientHeight-J.h-M-K,0)/2+y.scrollTop(),f=Math.max(y.width()-J.w-N-L,0)/2+y.scrollLeft();d=q.width()===J.w+N&&q.height()===J.h+M?0:a,r[0].style.width=r[0].style.height="9999px",q.dequeue().animate({width:J.w+N,height:J.h+M,top:e,left:f},{duration:d,complete:function(){g(this),S=!1,r[0].style.width=J.w+N+L+"px",r[0].style.height=J.h+M+K+"px",c&&c()},step:function(){g(this)}})},U.resize=function(a){if(R){a=a||{},a.width&&(J.w=X(a.width,"x")-N-L),a.innerWidth&&(J.w=X(a.innerWidth,"x")),z.css({width:J.w}),a.height&&(J.h=X(a.height,"y")-M-K),a.innerHeight&&(J.h=X(a.innerHeight,"y"));if(!a.innerHeight&&!a.height){var b=z.wrapInner("
    ").children();J.h=b.height(),b.replaceWith(b.children())}z.css({height:J.h}),U.position(J.transition==="none"?0:J.speed)}},U.prep=function(b){function h(b){U.position(b,function(){var b,d,g,h,j=x.length,k,n;!R||(n=function(){B.hide(),$(i,J.onComplete)},m&&Q&&z.fadeIn(100),C.html(J.title).add(z).show(),j>1?(typeof J.current=="string"&&D.html(J.current.replace(/\{current\}/,P+1).replace(/\{total\}/,j)).show(),F[J.loop||P")[0].src=h),Y(d)&&(a("")[0].src=d))):I.hide(),J.iframe?(k=a("

    PQnccm5Dv|ao=Uf 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⋘6-^6H(qxDRmbr`|NncXy^^_A{Ck>;+}^% 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 WX##I+mOZqLh&}9ZIQ}01lJU&r1`yBy literal 0 HcmV?d00001 diff --git a/web/libs/tiny_mce/plugins/tinybrowser/fns_tinybrowser.php b/web/libs/tiny_mce/plugins/tinybrowser/fns_tinybrowser.php new file mode 100644 index 0000000..c5ea26b --- /dev/null +++ b/web/libs/tiny_mce/plugins/tinybrowser/fns_tinybrowser.php @@ -0,0 +1,431 @@ +