From 75079f2acb4db454979cdaab7944bd1ee62f84af Mon Sep 17 00:00:00 2001 From: Miguel Cantillana Date: Tue, 1 Nov 2011 15:43:16 -0300 Subject: [PATCH] primer import del proyecto --- .buildpath | 5 + .htaccess | 3 + .project | 22 + .settings/org.eclipse.php.core.prefs | 4 + .settings/org.eclipse.php.ui.prefs | 3 + application/config/autoload.php | 116 + application/config/config.php-bak | 329 + application/config/constants.php | 41 + application/config/database-sample.php | 55 + application/config/doctypes.php | 15 + application/config/hooks.php | 16 + application/config/index.html | 10 + application/config/mimes.php | 105 + application/config/routes.php | 57 + application/config/smileys.php | 66 + application/config/user_agents.php | 175 + application/controllers/PlanificarTaller.php | 366 + application/controllers/admin.php | 57 + application/controllers/administradores.php | 209 + application/controllers/categorias.php | 183 + application/controllers/crud.php | 14 + application/controllers/index.html | 10 + application/controllers/main.php | 254 + application/controllers/participantes.php | 115 + application/controllers/relatores.php | 371 + application/controllers/sitio.php | 27 + application/controllers/talleres.php | 263 + application/controllers/welcome.php | 19 + application/errors/error_404.php | 34 + application/errors/error_db.php | 34 + application/errors/error_general.php | 34 + application/errors/error_php.php | 10 + application/errors/index.html | 10 + application/helpers/index.html | 10 + application/hooks/index.html | 10 + application/index.html | 10 + application/language/english/index.html | 16 + application/libraries/index.html | 10 + application/models/admin_model.php | 139 + application/models/categoria_model.php | 108 + .../models/categoria_relator_model.php | 77 + application/models/categoria_taller_model.php | 77 + application/models/index.html | 10 + application/models/participante_model.php | 131 + .../models/planificar_taller_model.php | 154 + application/models/relator_model.php | 136 + application/models/sitio_model.php | 31 + application/models/taller_model.php | 126 + .../agregar_planificacion_taller.php | 124 + .../editar_planificacion_taller.php | 112 + .../listar_planificacion_taller.php | 111 + application/views/admin/admin_footer.php | 9 + application/views/admin/admin_header.php | 91 + application/views/admin/admin_index.php | 31 + application/views/admin/admin_menu.php | 9 + .../views/admin/admin_menu_derecho.php | 50 + application/views/admin/admin_round.php | 29 + application/views/admin/admin_top.php | 59 + .../admin/categorias/agregar_categoria.php | 110 + .../views/admin/categorias/categorias.php | 23 + .../admin/categorias/editar_categoria.php | 114 + .../admin/categorias/listar_categorias.php | 88 + .../participantes/listar_participantes.php | 101 + .../views/admin/relatores/agregar_relator.php | 140 + .../views/admin/relatores/editar_relator.php | 159 + .../admin/relatores/listar_relatores.php | 91 + .../views/admin/talleres/agregar_taller.php | 139 + .../views/admin/talleres/editar_taller.php | 147 + .../views/admin/talleres/listar_talleres.php | 100 + .../admin/usuarios/agregar_administrador.php | 67 + .../admin/usuarios/editar_administrador.php | 73 + .../admin/usuarios/listar_administradores.php | 79 + application/views/front/detalle_relator.php | 71 + application/views/front/detalle_taller.php | 52 + application/views/front/front_index.php | 218 + application/views/front/inscribir_taller.php | 172 + .../front/listar_planificacion_talleres.php | 208 + application/views/front/login_form.php | 76 + application/views/index.html | 10 + application/views/sitio_view.php | 25 + application/views/sitio_view_2.php | 23 + application/views/welcome_message.php | 62 + css/frame.gif | Bin 0 -> 187 bytes css/front_style.css | 40 + css/ie.css | 36 + css/ie6.css | 42 + css/jquery.alerts.css | 57 + css/print.css | 30 + css/rounded.css | 163 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4379 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4379 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4379 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4379 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4379 bytes css/smoothness/jquery-ui-1.7.1.custom.css | 404 + css/style.css | 627 + css/superfish.css | 137 + css/thickbox.css | 163 + ...8210815906_1248700751_770774_4683767_n.jpg | Bin 0 -> 37605 bytes fotos_perfil/back.jpg | Bin 0 -> 161119 bytes fotos_perfil/escanear0001.jpg | Bin 0 -> 30437 bytes fotos_perfil/no_foto.jpg | Bin 0 -> 3291 bytes ...8210815906_1248700751_770774_4683767_n.jpg | Bin 0 -> 13500 bytes fotos_perfil/thumbs/back.jpg | Bin 0 -> 9410 bytes fotos_perfil/thumbs/escanear0001.jpg | Bin 0 -> 13088 bytes htaccess.txt | 6 + images/1280093377_calendar.png | Bin 0 -> 15390 bytes images/accept.jpg | Bin 0 -> 785 bytes images/accept.png | Bin 0 -> 781 bytes images/add_user.png | Bin 0 -> 1605 bytes images/arrows-ffffff.png | Bin 0 -> 235 bytes images/avatar.jpg | Bin 0 -> 1476 bytes images/background45.jpg | Bin 0 -> 55218 bytes images/bg-top.jpg | Bin 0 -> 41007 bytes images/bg.jpg | Bin 0 -> 654 bytes images/bg_10.gif | Bin 0 -> 193311 bytes images/bg_8.jpg | Bin 0 -> 55043 bytes images/bg_9.jpg | Bin 0 -> 717071 bytes images/calendar.png | Bin 0 -> 620 bytes images/cancel.jpg | Bin 0 -> 878 bytes images/cancel.png | Bin 0 -> 587 bytes images/clear.gif | Bin 0 -> 43 bytes images/close_buton.png | Bin 0 -> 1928 bytes images/comments.jpg | Bin 0 -> 1182 bytes images/comments.png | Bin 0 -> 5149 bytes images/deleted.png | Bin 0 -> 540 bytes images/edit.jpg | Bin 0 -> 792 bytes images/edit.png | Bin 0 -> 450 bytes images/error.jpg | Bin 0 -> 844 bytes images/folder.jpg | Bin 0 -> 772 bytes images/folder.png | Bin 0 -> 537 bytes images/ftp.jpg | Bin 0 -> 1342 bytes images/ftp.png | Bin 0 -> 4612 bytes images/gallery.jpg | Bin 0 -> 1276 bytes images/gallery.png | Bin 0 -> 4733 bytes images/header/icon-48-alert.png | Bin 0 -> 2460 bytes images/header/icon-48-apply.png | Bin 0 -> 1585 bytes images/header/icon-48-archive.png | Bin 0 -> 1878 bytes images/header/icon-48-article-add.png | Bin 0 -> 2413 bytes images/header/icon-48-article-edit.png | Bin 0 -> 2733 bytes images/header/icon-48-article.png | Bin 0 -> 2154 bytes images/header/icon-48-banner-categories.png | Bin 0 -> 2178 bytes images/header/icon-48-banner-client.png | Bin 0 -> 3007 bytes images/header/icon-48-banner-tracks.png | Bin 0 -> 2989 bytes images/header/icon-48-banner.png | Bin 0 -> 3045 bytes images/header/icon-48-calendar.png | Bin 0 -> 2217 bytes images/header/icon-48-category-add.png | Bin 0 -> 1271 bytes images/header/icon-48-category.png | Bin 0 -> 791 bytes images/header/icon-48-checkin.png | Bin 0 -> 1585 bytes images/header/icon-48-clear.png | Bin 0 -> 1971 bytes images/header/icon-48-component.png | Bin 0 -> 1981 bytes images/header/icon-48-config.png | Bin 0 -> 2737 bytes images/header/icon-48-contacts-categories.png | Bin 0 -> 2023 bytes images/header/icon-48-contacts.png | Bin 0 -> 2752 bytes images/header/icon-48-content.png | Bin 0 -> 2227 bytes images/header/icon-48-copy.png | Bin 0 -> 2318 bytes images/header/icon-48-cpanel.png | Bin 0 -> 1761 bytes images/header/icon-48-deny.png | Bin 0 -> 2045 bytes images/header/icon-48-download.png | Bin 0 -> 2186 bytes images/header/icon-48-edit.png | Bin 0 -> 2100 bytes images/header/icon-48-extension.png | Bin 0 -> 1614 bytes images/header/icon-48-featured.png | Bin 0 -> 2563 bytes images/header/icon-48-frontpage.png | Bin 0 -> 2019 bytes images/header/icon-48-generic.png | Bin 0 -> 1410 bytes images/header/icon-48-groups-add.png | Bin 0 -> 3619 bytes images/header/icon-48-groups.png | Bin 0 -> 3434 bytes images/header/icon-48-help-forum.png | Bin 0 -> 3224 bytes images/header/icon-48-help-this.png | Bin 0 -> 4227 bytes images/header/icon-48-help_header.png | Bin 0 -> 3129 bytes images/header/icon-48-inbox.png | Bin 0 -> 2718 bytes images/header/icon-48-info.png | Bin 0 -> 2423 bytes images/header/icon-48-install.png | Bin 0 -> 1667 bytes images/header/icon-48-language.png | Bin 0 -> 3284 bytes images/header/icon-48-levels-add.png | Bin 0 -> 1125 bytes images/header/icon-48-levels.png | Bin 0 -> 645 bytes images/header/icon-48-links-cat.png | Bin 0 -> 2343 bytes images/header/icon-48-links.png | Bin 0 -> 2805 bytes images/header/icon-48-massmail.png | Bin 0 -> 2799 bytes images/header/icon-48-media.png | Bin 0 -> 2278 bytes images/header/icon-48-menu-add.png | Bin 0 -> 1680 bytes images/header/icon-48-menu.png | Bin 0 -> 1649 bytes images/header/icon-48-menumgr.png | Bin 0 -> 1308 bytes images/header/icon-48-module.png | Bin 0 -> 1494 bytes images/header/icon-48-move.png | Bin 0 -> 973 bytes images/header/icon-48-new-privatemessage.png | Bin 0 -> 3087 bytes images/header/icon-48-newcategory.png | Bin 0 -> 1258 bytes images/header/icon-48-newsfeeds-cat.png | Bin 0 -> 1896 bytes images/header/icon-48-newsfeeds.png | Bin 0 -> 1787 bytes images/header/icon-48-notice.png | Bin 0 -> 2223 bytes images/header/icon-48-plugin.png | Bin 0 -> 2557 bytes images/header/icon-48-preview.png | Bin 0 -> 1157 bytes images/header/icon-48-print.png | Bin 0 -> 2919 bytes images/header/icon-48-purge.png | Bin 0 -> 1789 bytes images/header/icon-48-read-privatemessage.png | Bin 0 -> 3560 bytes images/header/icon-48-readmess.png | Bin 0 -> 2793 bytes images/header/icon-48-redirect.png | Bin 0 -> 1650 bytes images/header/icon-48-revert.png | Bin 0 -> 1473 bytes images/header/icon-48-search.png | Bin 0 -> 2446 bytes images/header/icon-48-section.png | Bin 0 -> 1994 bytes images/header/icon-48-send.png | Bin 0 -> 2843 bytes images/header/icon-48-static.png | Bin 0 -> 2227 bytes images/header/icon-48-stats.png | Bin 0 -> 888 bytes images/header/icon-48-themes.png | Bin 0 -> 1176 bytes images/header/icon-48-trash.png | Bin 0 -> 2193 bytes images/header/icon-48-unarchive.png | Bin 0 -> 3218 bytes images/header/icon-48-upload.png | Bin 0 -> 2407 bytes images/header/icon-48-user-add.png | Bin 0 -> 1579 bytes images/header/icon-48-user.png | Bin 0 -> 2472 bytes images/header/icon-48-writemess.png | Bin 0 -> 2644 bytes images/header/icon-messaging.png | Bin 0 -> 3196 bytes images/header/index.html | 1 + images/heart.jpg | Bin 0 -> 747 bytes images/heart.png | Bin 0 -> 749 bytes images/help.gif | Bin 0 -> 1582 bytes images/home.png | Bin 0 -> 4376 bytes images/ico_chart_bar.jpg | Bin 0 -> 790 bytes images/ico_chart_bar.png | Bin 0 -> 541 bytes images/ico_error.jpg | Bin 0 -> 782 bytes images/ico_error.png | Bin 0 -> 666 bytes images/ico_hourglass.jpg | Bin 0 -> 768 bytes images/ico_hourglass.png | Bin 0 -> 744 bytes images/ico_mug.jpg | Bin 0 -> 883 bytes images/ico_page.jpg | Bin 0 -> 776 bytes images/ico_page.png | Bin 0 -> 635 bytes images/ico_posts.jpg | Bin 0 -> 764 bytes images/ico_posts.png | Bin 0 -> 663 bytes images/ico_settings.jpg | Bin 0 -> 703 bytes images/ico_settings.png | Bin 0 -> 613 bytes images/ico_user.jpg | Bin 0 -> 827 bytes images/ico_user.png | Bin 0 -> 741 bytes images/icon-16-allow.png | Bin 0 -> 462 bytes images/icon-16-allowinactive.png | Bin 0 -> 471 bytes images/icon-16-article.png | Bin 0 -> 590 bytes images/icon-16-checkin.png | Bin 0 -> 507 bytes images/icon-16-deny.png | Bin 0 -> 525 bytes images/icon-16-groups.png | Bin 0 -> 886 bytes images/icon-16-menumgr.png | Bin 0 -> 591 bytes images/icon-16-user-dd.png | Bin 0 -> 598 bytes images/icon-16-user.png | Bin 0 -> 790 bytes images/important.gif | Bin 0 -> 1492 bytes images/info.gif | Bin 0 -> 1487 bytes images/j_border.png | Bin 0 -> 213 bytes images/j_bottom.png | Bin 0 -> 232 bytes images/j_button1_left.png | Bin 0 -> 400 bytes images/j_button2_blank.png | Bin 0 -> 398 bytes images/j_button2_left.png | Bin 0 -> 360 bytes images/j_button2_left_cap.png | Bin 0 -> 413 bytes images/j_button2_right.png | Bin 0 -> 362 bytes images/j_button2_right_cap.png | Bin 0 -> 292 bytes images/j_corner_bl.png | Bin 0 -> 303 bytes images/j_corner_br.png | Bin 0 -> 314 bytes images/j_crn_bl_dark.png | Bin 0 -> 252 bytes images/j_crn_bl_light.png | Bin 0 -> 246 bytes images/j_crn_bl_med.png | Bin 0 -> 248 bytes images/j_crn_br_dark.png | Bin 0 -> 259 bytes images/j_crn_br_light.png | Bin 0 -> 253 bytes images/j_crn_br_med.png | Bin 0 -> 256 bytes images/j_crn_tl_dark.png | Bin 0 -> 253 bytes images/j_crn_tl_light.png | Bin 0 -> 247 bytes images/j_crn_tl_med.png | Bin 0 -> 253 bytes images/j_crn_tr_dark.png | Bin 0 -> 259 bytes images/j_crn_tr_light.png | Bin 0 -> 252 bytes images/j_crn_tr_med.png | Bin 0 -> 262 bytes images/j_divider.png | Bin 0 -> 196 bytes images/list_user.png | Bin 0 -> 1720 bytes images/loadingAnimation.gif | Bin 0 -> 5886 bytes images/loginbox.jpg | Bin 0 -> 1166 bytes images/logo.gif | Bin 0 -> 3931 bytes images/logo.jpg | Bin 0 -> 13795 bytes images/logo.png | Bin 0 -> 3048 bytes images/menutop.jpg | Bin 0 -> 2241 bytes images/menutop_hover.jpg | Bin 0 -> 875 bytes images/no_photo.gif | Bin 0 -> 4997 bytes images/overlay.jpg | Bin 0 -> 9193 bytes images/security.jpg | Bin 0 -> 1272 bytes images/security.png | Bin 0 -> 1241 bytes images/statistic.jpg | Bin 0 -> 1939 bytes images/statistic.png | Bin 0 -> 5706 bytes images/subnav_btn.gif | Bin 0 -> 336 bytes images/success.jpg | Bin 0 -> 752 bytes images/taller_planificado.png | Bin 0 -> 6123 bytes images/theme.jpg | Bin 0 -> 1517 bytes images/theme.png | Bin 0 -> 3672 bytes images/title.gif | Bin 0 -> 317 bytes images/toolbar/icon-32-adduser.png | Bin 0 -> 1630 bytes images/toolbar/icon-32-alert.png | Bin 0 -> 2542 bytes images/toolbar/icon-32-apply.png | Bin 0 -> 1457 bytes images/toolbar/icon-32-archive.png | Bin 0 -> 1320 bytes images/toolbar/icon-32-article-add.png | Bin 0 -> 2300 bytes images/toolbar/icon-32-article-featured.png | Bin 0 -> 2360 bytes images/toolbar/icon-32-article.png | Bin 0 -> 1829 bytes images/toolbar/icon-32-back.png | Bin 0 -> 2488 bytes images/toolbar/icon-32-banner-categories.png | Bin 0 -> 2272 bytes images/toolbar/icon-32-banner-client.png | Bin 0 -> 2684 bytes images/toolbar/icon-32-banner-tracks.png | Bin 0 -> 2862 bytes images/toolbar/icon-32-banner.png | Bin 0 -> 2750 bytes images/toolbar/icon-32-calendar.png | Bin 0 -> 2154 bytes images/toolbar/icon-32-cancel.png | Bin 0 -> 2607 bytes images/toolbar/icon-32-checkin.png | Bin 0 -> 1457 bytes images/toolbar/icon-32-component.png | Bin 0 -> 1769 bytes images/toolbar/icon-32-config.png | Bin 0 -> 1860 bytes .../toolbar/icon-32-contacts-categories.png | Bin 0 -> 1544 bytes images/toolbar/icon-32-contacts.png | Bin 0 -> 2771 bytes images/toolbar/icon-32-copy.png | Bin 0 -> 1639 bytes images/toolbar/icon-32-css.png | Bin 0 -> 1736 bytes images/toolbar/icon-32-default.png | Bin 0 -> 1395 bytes images/toolbar/icon-32-delete-style.png | Bin 0 -> 2702 bytes images/toolbar/icon-32-delete.png | Bin 0 -> 2190 bytes images/toolbar/icon-32-deny.png | Bin 0 -> 2191 bytes images/toolbar/icon-32-download.png | Bin 0 -> 2353 bytes images/toolbar/icon-32-edit | Bin 0 -> 2288 bytes images/toolbar/icon-32-edit.png | Bin 0 -> 2563 bytes images/toolbar/icon-32-error.png | Bin 0 -> 1427 bytes images/toolbar/icon-32-export.png | Bin 0 -> 1427 bytes images/toolbar/icon-32-forward.png | Bin 0 -> 2492 bytes images/toolbar/icon-32-help.png | Bin 0 -> 3049 bytes images/toolbar/icon-32-html.png | Bin 0 -> 1631 bytes images/toolbar/icon-32-inbox.png | Bin 0 -> 2681 bytes images/toolbar/icon-32-info.png | Bin 0 -> 2704 bytes images/toolbar/icon-32-links.png | Bin 0 -> 3123 bytes images/toolbar/icon-32-lock.png | Bin 0 -> 822 bytes images/toolbar/icon-32-menu.png | Bin 0 -> 1383 bytes images/toolbar/icon-32-messanging.png | Bin 0 -> 2582 bytes images/toolbar/icon-32-module.png | Bin 0 -> 1429 bytes images/toolbar/icon-32-move.png | Bin 0 -> 1055 bytes images/toolbar/icon-32-new-privatemessage.png | Bin 0 -> 2456 bytes images/toolbar/icon-32-new-style.png | Bin 0 -> 2785 bytes images/toolbar/icon-32-new.png | Bin 0 -> 2217 bytes images/toolbar/icon-32-notice.png | Bin 0 -> 2287 bytes images/toolbar/icon-32-preview.png | Bin 0 -> 1180 bytes images/toolbar/icon-32-print.png | Bin 0 -> 2746 bytes images/toolbar/icon-32-publish.png | Bin 0 -> 2571 bytes images/toolbar/icon-32-purge.png | Bin 0 -> 1749 bytes .../toolbar/icon-32-read-privatemessage.png | Bin 0 -> 3267 bytes images/toolbar/icon-32-refresh.png | Bin 0 -> 2432 bytes images/toolbar/icon-32-remove.png | Bin 0 -> 2767 bytes images/toolbar/icon-32-revert.png | Bin 0 -> 1516 bytes images/toolbar/icon-32-save-copy.png | Bin 0 -> 1736 bytes images/toolbar/icon-32-save-new.png | Bin 0 -> 1873 bytes images/toolbar/icon-32-save.png | Bin 0 -> 1352 bytes images/toolbar/icon-32-search.png | Bin 0 -> 2352 bytes images/toolbar/icon-32-send.png | Bin 0 -> 2472 bytes images/toolbar/icon-32-stats.png | Bin 0 -> 1292 bytes images/toolbar/icon-32-trash.png | Bin 0 -> 2353 bytes images/toolbar/icon-32-unarchive.png | Bin 0 -> 2600 bytes images/toolbar/icon-32-unpublish.png | Bin 0 -> 2437 bytes images/toolbar/icon-32-upload.png | Bin 0 -> 2094 bytes images/toolbar/icon-32-user-add.png | Bin 0 -> 1644 bytes images/toolbar/icon-32-xml.png | Bin 0 -> 1022 bytes images/toolbar/index.html | 1 + images/users.jpg | Bin 0 -> 1834 bytes images/users.png | Bin 0 -> 5927 bytes images/warnings.jpg | Bin 0 -> 1847 bytes images/warnings.png | Bin 0 -> 5433 bytes index.php | 118 + js/DD_belatedPNG_0.0.7a-min.js | 14 + js/custom.js | 33 + js/excanvas.pack.js | 1 + js/hoverIntent.js | 84 + js/jquery-1.3.2.min.js | 19 + js/jquery-ui-1.7.1.custom.min.js | 273 + js/jquery.alerts.js | 235 + js/jquery.bgiframe.min.js | 10 + js/jquery.flot.pack.js | 1 + js/jquery.js | 32 + js/jquery.ui.draggable.js | 1 + js/mootools.js | 100 + js/rokbox/rokbox.js | 20 + js/rokbox/themes/dark/ajax-loader.gif | Bin 0 -> 3208 bytes js/rokbox/themes/dark/bl.gif | Bin 0 -> 75 bytes js/rokbox/themes/dark/bl.png | Bin 0 -> 1553 bytes js/rokbox/themes/dark/bottom.gif | Bin 0 -> 135 bytes js/rokbox/themes/dark/bottom.png | Bin 0 -> 1341 bytes js/rokbox/themes/dark/br.gif | Bin 0 -> 75 bytes js/rokbox/themes/dark/br.png | Bin 0 -> 1529 bytes js/rokbox/themes/dark/close.png | Bin 0 -> 1436 bytes js/rokbox/themes/dark/left.gif | Bin 0 -> 290 bytes js/rokbox/themes/dark/left.png | Bin 0 -> 1319 bytes js/rokbox/themes/dark/next.png | Bin 0 -> 1449 bytes js/rokbox/themes/dark/prev.png | Bin 0 -> 1455 bytes js/rokbox/themes/dark/right.gif | Bin 0 -> 290 bytes js/rokbox/themes/dark/right.png | Bin 0 -> 1320 bytes js/rokbox/themes/dark/rokbox-config.js | 38 + js/rokbox/themes/dark/rokbox-style-ie6.css | 8 + js/rokbox/themes/dark/rokbox-style-ie7.css | 8 + js/rokbox/themes/dark/rokbox-style-ie8.css | 8 + js/rokbox/themes/dark/rokbox-style.css | 46 + js/rokbox/themes/dark/tl.gif | Bin 0 -> 73 bytes js/rokbox/themes/dark/tl.png | Bin 0 -> 1496 bytes js/rokbox/themes/dark/top.gif | Bin 0 -> 135 bytes js/rokbox/themes/dark/top.png | Bin 0 -> 1334 bytes js/rokbox/themes/dark/tr.gif | Bin 0 -> 74 bytes js/rokbox/themes/dark/tr.png | Bin 0 -> 1558 bytes js/rokbox/themes/dark/warning.png | Bin 0 -> 7696 bytes js/rokbox/themes/light/ajax-loader.gif | Bin 0 -> 3208 bytes js/rokbox/themes/light/bl.gif | Bin 0 -> 75 bytes js/rokbox/themes/light/bl.png | Bin 0 -> 1554 bytes js/rokbox/themes/light/blank.gif | Bin 0 -> 43 bytes js/rokbox/themes/light/bottom.gif | Bin 0 -> 135 bytes js/rokbox/themes/light/bottom.png | Bin 0 -> 1335 bytes js/rokbox/themes/light/br.gif | Bin 0 -> 75 bytes js/rokbox/themes/light/br.png | Bin 0 -> 1558 bytes js/rokbox/themes/light/close.png | Bin 0 -> 404 bytes js/rokbox/themes/light/left.gif | Bin 0 -> 290 bytes js/rokbox/themes/light/left.png | Bin 0 -> 1316 bytes js/rokbox/themes/light/next.png | Bin 0 -> 408 bytes js/rokbox/themes/light/prev.png | Bin 0 -> 403 bytes js/rokbox/themes/light/right.gif | Bin 0 -> 290 bytes js/rokbox/themes/light/right.png | Bin 0 -> 1317 bytes js/rokbox/themes/light/rokbox-config.js | 38 + js/rokbox/themes/light/rokbox-style-ie6.css | 8 + js/rokbox/themes/light/rokbox-style-ie7.css | 8 + js/rokbox/themes/light/rokbox-style-ie8.css | 8 + js/rokbox/themes/light/rokbox-style.css | 46 + js/rokbox/themes/light/tl.gif | Bin 0 -> 73 bytes js/rokbox/themes/light/tl.png | Bin 0 -> 1524 bytes js/rokbox/themes/light/top.gif | Bin 0 -> 135 bytes js/rokbox/themes/light/top.png | Bin 0 -> 1334 bytes js/rokbox/themes/light/tr.gif | Bin 0 -> 74 bytes js/rokbox/themes/light/tr.png | Bin 0 -> 1603 bytes js/rokbox/themes/light/warning.png | Bin 0 -> 7696 bytes js/superfish.js | 121 + js/supersubs.js | 90 + js/thickbox.js | 319 + license.txt | 52 + markitup/jquery.markitup.js | 553 + markitup/jquery.markitup.pack.js | 9 + markitup/readme.txt | 62 + markitup/sets/default/images/bold.png | Bin 0 -> 465 bytes markitup/sets/default/images/clean.png | Bin 0 -> 557 bytes markitup/sets/default/images/image.png | Bin 0 -> 497 bytes markitup/sets/default/images/italic.png | Bin 0 -> 380 bytes markitup/sets/default/images/link.png | Bin 0 -> 532 bytes markitup/sets/default/images/picture.png | Bin 0 -> 600 bytes markitup/sets/default/images/preview.png | Bin 0 -> 588 bytes markitup/sets/default/images/stroke.png | Bin 0 -> 466 bytes .../sets/default/images_orginalpng/bold.png | Bin 0 -> 304 bytes .../sets/default/images_orginalpng/clean.png | Bin 0 -> 667 bytes .../sets/default/images_orginalpng/image.png | Bin 0 -> 516 bytes .../sets/default/images_orginalpng/italic.png | Bin 0 -> 223 bytes .../sets/default/images_orginalpng/link.png | Bin 0 -> 343 bytes .../default/images_orginalpng/picture.png | Bin 0 -> 606 bytes .../default/images_orginalpng/preview.png | Bin 0 -> 537 bytes .../sets/default/images_orginalpng/stroke.png | Bin 0 -> 269 bytes markitup/sets/default/set.js | 27 + markitup/sets/default/style.css | 27 + .../skins/markitup/images/bg-container.png | Bin 0 -> 28455 bytes .../markitup/images/bg-editor-bbcode.png | Bin 0 -> 1642 bytes .../markitup/images/bg-editor-dotclear.png | Bin 0 -> 1682 bytes .../skins/markitup/images/bg-editor-html.png | Bin 0 -> 1534 bytes .../skins/markitup/images/bg-editor-json.png | Bin 0 -> 1529 bytes .../markitup/images/bg-editor-markdown.png | Bin 0 -> 1783 bytes .../markitup/images/bg-editor-textile.png | Bin 0 -> 1659 bytes .../skins/markitup/images/bg-editor-wiki.png | Bin 0 -> 1488 bytes .../skins/markitup/images/bg-editor-xml.png | Bin 0 -> 1495 bytes markitup/skins/markitup/images/bg-editor.png | Bin 0 -> 1745 bytes markitup/skins/markitup/images/handle.png | Bin 0 -> 258 bytes markitup/skins/markitup/images/menu.png | Bin 0 -> 27151 bytes markitup/skins/markitup/images/submenu.png | Bin 0 -> 240 bytes markitup/skins/markitup/style.css | 147 + markitup/skins/simple/images/handle.png | Bin 0 -> 258 bytes markitup/skins/simple/images/menu.png | Bin 0 -> 27151 bytes markitup/skins/simple/images/submenu.png | Bin 0 -> 240 bytes markitup/skins/simple/style.css | 118 + markitup/templates/preview.css | 5 + markitup/templates/preview.html | 11 + system/cache/index.html | 10 + system/codeigniter/Base4.php | 69 + system/codeigniter/Base5.php | 56 + system/codeigniter/CodeIgniter.php | 280 + system/codeigniter/Common.php | 421 + system/codeigniter/Compat.php | 93 + system/codeigniter/index.html | 10 + system/database/DB.php | 146 + system/database/DB_active_rec.php | 1820 +++ system/database/DB_cache.php | 195 + system/database/DB_driver.php | 1366 ++ system/database/DB_forge.php | 375 + system/database/DB_result.php | 342 + system/database/DB_utility.php | 389 + system/database/drivers/index.html | 10 + system/database/drivers/mssql/index.html | 10 + .../database/drivers/mssql/mssql_driver.php | 667 + system/database/drivers/mssql/mssql_forge.php | 248 + .../database/drivers/mssql/mssql_result.php | 169 + .../database/drivers/mssql/mssql_utility.php | 123 + system/database/drivers/mysql/index.html | 10 + .../database/drivers/mysql/mysql_driver.php | 670 + system/database/drivers/mysql/mysql_forge.php | 254 + .../database/drivers/mysql/mysql_result.php | 169 + .../database/drivers/mysql/mysql_utility.php | 245 + system/database/drivers/mysqli/index.html | 10 + .../database/drivers/mysqli/mysqli_driver.php | 671 + .../database/drivers/mysqli/mysqli_forge.php | 254 + .../database/drivers/mysqli/mysqli_result.php | 169 + .../drivers/mysqli/mysqli_utility.php | 123 + system/database/drivers/oci8/index.html | 10 + system/database/drivers/oci8/oci8_driver.php | 780 + system/database/drivers/oci8/oci8_forge.php | 248 + system/database/drivers/oci8/oci8_result.php | 249 + system/database/drivers/oci8/oci8_utility.php | 122 + system/database/drivers/odbc/index.html | 10 + system/database/drivers/odbc/odbc_driver.php | 639 + system/database/drivers/odbc/odbc_forge.php | 266 + system/database/drivers/odbc/odbc_result.php | 228 + system/database/drivers/odbc/odbc_utility.php | 148 + system/database/drivers/postgre/index.html | 10 + .../drivers/postgre/postgre_driver.php | 684 + .../drivers/postgre/postgre_forge.php | 248 + .../drivers/postgre/postgre_result.php | 169 + .../drivers/postgre/postgre_utility.php | 124 + system/database/drivers/sqlite/index.html | 10 + .../database/drivers/sqlite/sqlite_driver.php | 657 + .../database/drivers/sqlite/sqlite_forge.php | 265 + .../database/drivers/sqlite/sqlite_result.php | 179 + .../drivers/sqlite/sqlite_utility.php | 141 + system/database/index.html | 10 + system/fonts/index.html | 10 + system/fonts/texb.ttf | Bin 0 -> 143821 bytes system/helpers/array_helper.php | 78 + system/helpers/compatibility_helper.php | 498 + system/helpers/cookie_helper.php | 144 + system/helpers/date_helper.php | 611 + system/helpers/directory_helper.php | 84 + system/helpers/download_helper.php | 100 + system/helpers/email_helper.php | 62 + system/helpers/file_helper.php | 464 + system/helpers/form_helper.php | 1025 ++ system/helpers/html_helper.php | 416 + system/helpers/index.html | 10 + system/helpers/inflector_helper.php | 171 + system/helpers/language_helper.php | 58 + system/helpers/number_helper.php | 75 + system/helpers/path_helper.php | 72 + system/helpers/security_helper.php | 126 + system/helpers/smiley_helper.php | 273 + system/helpers/string_helper.php | 273 + system/helpers/text_helper.php | 462 + system/helpers/typography_helper.php | 71 + system/helpers/url_helper.php | 593 + system/helpers/xml_helper.php | 62 + system/index.html | 10 + system/language/english/calendar_lang.php | 51 + system/language/english/date_lang.php | 60 + system/language/english/db_lang.php | 28 + system/language/english/email_lang.php | 24 + .../language/english/form_validation_lang.php | 24 + system/language/english/ftp_lang.php | 17 + system/language/english/imglib_lang.php | 24 + system/language/english/index.html | 10 + system/language/english/number_lang.php | 10 + system/language/english/profiler_lang.php | 19 + system/language/english/scaffolding_lang.php | 17 + system/language/english/unit_test_lang.php | 24 + system/language/english/upload_lang.php | 22 + system/language/english/validation_lang.php | 24 + system/language/index.html | 10 + system/libraries/Benchmark.php | 113 + system/libraries/Calendar.php | 477 + system/libraries/Cart.php | 550 + system/libraries/Config.php | 244 + system/libraries/Controller.php | 127 + system/libraries/Email.php | 2041 +++ system/libraries/Encrypt.php | 484 + system/libraries/Exceptions.php | 174 + system/libraries/Form_validation.php | 1278 ++ system/libraries/Ftp.php | 618 + system/libraries/Hooks.php | 226 + system/libraries/Image_lib.php | 1544 ++ system/libraries/Input.php | 1067 ++ system/libraries/Language.php | 123 + system/libraries/Loader.php | 1085 ++ system/libraries/Log.php | 117 + system/libraries/Model.php | 83 + system/libraries/Output.php | 409 + system/libraries/Pagination.php | 244 + system/libraries/Parser.php | 173 + system/libraries/Profiler.php | 392 + system/libraries/Router.php | 389 + system/libraries/Session.php | 758 + system/libraries/Sha1.php | 251 + system/libraries/Table.php | 440 + system/libraries/Trackback.php | 547 + system/libraries/Typography.php | 406 + system/libraries/URI.php | 586 + system/libraries/Unit_test.php | 347 + system/libraries/Upload.php | 949 ++ system/libraries/User_agent.php | 502 + system/libraries/Validation.php | 875 + system/libraries/Xmlrpc.php | 1421 ++ system/libraries/Xmlrpcs.php | 536 + system/libraries/Zip.php | 359 + system/libraries/index.html | 10 + system/logs/index.html | 10 + system/plugins/captcha_pi.php | 356 + system/plugins/index.html | 10 + system/plugins/js_calendar_pi.php | 629 + system/scaffolding/Scaffolding.php | 291 + system/scaffolding/images/background.jpg | Bin 0 -> 410 bytes system/scaffolding/images/index.html | 10 + system/scaffolding/images/logo.jpg | Bin 0 -> 4518 bytes system/scaffolding/index.html | 10 + system/scaffolding/views/add.php | 32 + system/scaffolding/views/delete.php | 9 + system/scaffolding/views/edit.php | 33 + system/scaffolding/views/footer.php | 10 + system/scaffolding/views/header.php | 29 + system/scaffolding/views/index.html | 10 + system/scaffolding/views/no_data.php | 8 + system/scaffolding/views/stylesheet.css | 143 + system/scaffolding/views/view.php | 27 + tiny_mce/jquery.tinymce.js | 1 + tiny_mce/langs/en.js | 170 + tiny_mce/license.txt | 504 + tiny_mce/plugins/advhr/css/advhr.css | 5 + tiny_mce/plugins/advhr/editor_plugin.js | 1 + tiny_mce/plugins/advhr/editor_plugin_src.js | 57 + tiny_mce/plugins/advhr/js/rule.js | 43 + tiny_mce/plugins/advhr/langs/en_dlg.js | 5 + tiny_mce/plugins/advhr/rule.htm | 57 + tiny_mce/plugins/advimage/css/advimage.css | 13 + tiny_mce/plugins/advimage/editor_plugin.js | 1 + .../plugins/advimage/editor_plugin_src.js | 50 + tiny_mce/plugins/advimage/image.htm | 232 + tiny_mce/plugins/advimage/img/sample.gif | Bin 0 -> 1624 bytes tiny_mce/plugins/advimage/js/image.js | 443 + tiny_mce/plugins/advimage/langs/en_dlg.js | 43 + tiny_mce/plugins/advlink/css/advlink.css | 8 + tiny_mce/plugins/advlink/editor_plugin.js | 1 + tiny_mce/plugins/advlink/editor_plugin_src.js | 61 + tiny_mce/plugins/advlink/js/advlink.js | 528 + tiny_mce/plugins/advlink/langs/en_dlg.js | 52 + tiny_mce/plugins/advlink/link.htm | 333 + 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 + .../plugins/autosave/editor_plugin_src.js | 422 + tiny_mce/plugins/autosave/langs/en.js | 4 + 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 + .../directionality/editor_plugin_src.js | 82 + tiny_mce/plugins/emotions/editor_plugin.js | 1 + .../plugins/emotions/editor_plugin_src.js | 43 + 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 .../emotions/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emotions/img/smiley-foot-in-mouth.gif | Bin 0 -> 344 bytes .../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 .../emotions/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emotions/img/smiley-sealed.gif | Bin 0 -> 325 bytes .../plugins/emotions/img/smiley-smile.gif | Bin 0 -> 345 bytes .../plugins/emotions/img/smiley-surprised.gif | Bin 0 -> 342 bytes .../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 tiny_mce/plugins/emotions/js/emotions.js | 22 + tiny_mce/plugins/emotions/langs/en_dlg.js | 20 + tiny_mce/plugins/example/dialog.htm | 22 + tiny_mce/plugins/example/editor_plugin.js | 1 + tiny_mce/plugins/example/editor_plugin_src.js | 84 + tiny_mce/plugins/example/img/example.gif | Bin 0 -> 87 bytes tiny_mce/plugins/example/js/dialog.js | 19 + tiny_mce/plugins/example/langs/en.js | 3 + tiny_mce/plugins/example/langs/en_dlg.js | 3 + tiny_mce/plugins/fullpage/css/fullpage.css | 182 + tiny_mce/plugins/fullpage/editor_plugin.js | 1 + .../plugins/fullpage/editor_plugin_src.js | 153 + tiny_mce/plugins/fullpage/fullpage.htm | 571 + tiny_mce/plugins/fullpage/js/fullpage.js | 471 + 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 + tiny_mce/plugins/iespell/editor_plugin.js | 1 + tiny_mce/plugins/iespell/editor_plugin_src.js | 54 + .../plugins/inlinepopups/editor_plugin.js | 1 + .../plugins/inlinepopups/editor_plugin_src.js | 635 + .../skins/clearlooks2/img/alert.gif | Bin 0 -> 818 bytes .../skins/clearlooks2/img/button.gif | Bin 0 -> 280 bytes .../skins/clearlooks2/img/buttons.gif | Bin 0 -> 1195 bytes .../skins/clearlooks2/img/confirm.gif | Bin 0 -> 915 bytes .../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 + .../insertdatetime/editor_plugin_src.js | 83 + tiny_mce/plugins/layer/editor_plugin.js | 1 + tiny_mce/plugins/layer/editor_plugin_src.js | 212 + .../plugins/legacyoutput/editor_plugin.js | 1 + .../plugins/legacyoutput/editor_plugin_src.js | 136 + tiny_mce/plugins/media/css/content.css | 6 + tiny_mce/plugins/media/css/media.css | 16 + tiny_mce/plugins/media/editor_plugin.js | 1 + tiny_mce/plugins/media/editor_plugin_src.js | 414 + tiny_mce/plugins/media/img/flash.gif | Bin 0 -> 241 bytes tiny_mce/plugins/media/img/flv_player.swf | Bin 0 -> 11668 bytes tiny_mce/plugins/media/img/quicktime.gif | Bin 0 -> 303 bytes tiny_mce/plugins/media/img/realmedia.gif | Bin 0 -> 439 bytes tiny_mce/plugins/media/img/shockwave.gif | Bin 0 -> 387 bytes tiny_mce/plugins/media/img/trans.gif | Bin 0 -> 43 bytes tiny_mce/plugins/media/img/windowsmedia.gif | Bin 0 -> 415 bytes tiny_mce/plugins/media/js/embed.js | 73 + tiny_mce/plugins/media/js/media.js | 630 + tiny_mce/plugins/media/langs/en_dlg.js | 103 + 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 tiny_mce/plugins/pagebreak/img/trans.gif | Bin 0 -> 43 bytes tiny_mce/plugins/paste/editor_plugin.js | 1 + tiny_mce/plugins/paste/editor_plugin_src.js | 952 ++ tiny_mce/plugins/paste/js/pastetext.js | 36 + tiny_mce/plugins/paste/js/pasteword.js | 51 + tiny_mce/plugins/paste/langs/en_dlg.js | 5 + tiny_mce/plugins/paste/pastetext.htm | 27 + tiny_mce/plugins/paste/pasteword.htm | 21 + tiny_mce/plugins/preview/editor_plugin.js | 1 + tiny_mce/plugins/preview/editor_plugin_src.js | 53 + tiny_mce/plugins/preview/example.html | 28 + tiny_mce/plugins/preview/jscripts/embed.js | 73 + tiny_mce/plugins/preview/preview.html | 17 + tiny_mce/plugins/print/editor_plugin.js | 1 + tiny_mce/plugins/print/editor_plugin_src.js | 34 + tiny_mce/plugins/save/editor_plugin.js | 1 + tiny_mce/plugins/save/editor_plugin_src.js | 101 + .../searchreplace/css/searchreplace.css | 6 + .../plugins/searchreplace/editor_plugin.js | 1 + .../searchreplace/editor_plugin_src.js | 57 + .../plugins/searchreplace/js/searchreplace.js | 130 + .../plugins/searchreplace/langs/en_dlg.js | 16 + .../plugins/searchreplace/searchreplace.htm | 99 + tiny_mce/plugins/spellchecker/css/content.css | 1 + .../plugins/spellchecker/editor_plugin.js | 1 + .../plugins/spellchecker/editor_plugin_src.js | 417 + tiny_mce/plugins/spellchecker/img/wline.gif | Bin 0 -> 46 bytes tiny_mce/plugins/style/css/props.css | 13 + tiny_mce/plugins/style/editor_plugin.js | 1 + tiny_mce/plugins/style/editor_plugin_src.js | 55 + tiny_mce/plugins/style/js/props.js | 641 + tiny_mce/plugins/style/langs/en_dlg.js | 63 + tiny_mce/plugins/style/props.htm | 723 + tiny_mce/plugins/tabfocus/editor_plugin.js | 1 + .../plugins/tabfocus/editor_plugin_src.js | 112 + tiny_mce/plugins/table/cell.htm | 178 + tiny_mce/plugins/table/css/cell.css | 17 + tiny_mce/plugins/table/css/row.css | 25 + tiny_mce/plugins/table/css/table.css | 13 + tiny_mce/plugins/table/editor_plugin.js | 1 + tiny_mce/plugins/table/editor_plugin_src.js | 1125 ++ tiny_mce/plugins/table/js/cell.js | 286 + tiny_mce/plugins/table/js/merge_cells.js | 27 + tiny_mce/plugins/table/js/row.js | 237 + tiny_mce/plugins/table/js/table.js | 449 + tiny_mce/plugins/table/langs/en_dlg.js | 74 + tiny_mce/plugins/table/merge_cells.htm | 32 + tiny_mce/plugins/table/row.htm | 155 + tiny_mce/plugins/table/table.htm | 187 + tiny_mce/plugins/template/blank.htm | 12 + tiny_mce/plugins/template/css/template.css | 23 + tiny_mce/plugins/template/editor_plugin.js | 1 + .../plugins/template/editor_plugin_src.js | 159 + tiny_mce/plugins/template/js/template.js | 106 + tiny_mce/plugins/template/langs/en_dlg.js | 15 + tiny_mce/plugins/template/template.htm | 31 + 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 + tiny_mce/plugins/xhtmlxtras/abbr.htm | 141 + tiny_mce/plugins/xhtmlxtras/acronym.htm | 141 + tiny_mce/plugins/xhtmlxtras/attributes.htm | 148 + tiny_mce/plugins/xhtmlxtras/cite.htm | 141 + .../plugins/xhtmlxtras/css/attributes.css | 11 + tiny_mce/plugins/xhtmlxtras/css/popup.css | 9 + tiny_mce/plugins/xhtmlxtras/del.htm | 161 + tiny_mce/plugins/xhtmlxtras/editor_plugin.js | 1 + .../plugins/xhtmlxtras/editor_plugin_src.js | 132 + tiny_mce/plugins/xhtmlxtras/ins.htm | 161 + tiny_mce/plugins/xhtmlxtras/js/abbr.js | 28 + tiny_mce/plugins/xhtmlxtras/js/acronym.js | 28 + tiny_mce/plugins/xhtmlxtras/js/attributes.js | 126 + tiny_mce/plugins/xhtmlxtras/js/cite.js | 28 + tiny_mce/plugins/xhtmlxtras/js/del.js | 63 + .../plugins/xhtmlxtras/js/element_common.js | 231 + tiny_mce/plugins/xhtmlxtras/js/ins.js | 62 + tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js | 32 + tiny_mce/themes/advanced/about.htm | 54 + tiny_mce/themes/advanced/anchor.htm | 26 + tiny_mce/themes/advanced/charmap.htm | 52 + tiny_mce/themes/advanced/color_picker.htm | 73 + tiny_mce/themes/advanced/editor_template.js | 1 + .../themes/advanced/editor_template_src.js | 1217 ++ tiny_mce/themes/advanced/image.htm | 80 + tiny_mce/themes/advanced/img/colorpicker.jpg | Bin 0 -> 3189 bytes tiny_mce/themes/advanced/img/icons.gif | Bin 0 -> 11794 bytes tiny_mce/themes/advanced/js/about.js | 72 + tiny_mce/themes/advanced/js/anchor.js | 37 + tiny_mce/themes/advanced/js/charmap.js | 335 + tiny_mce/themes/advanced/js/color_picker.js | 253 + tiny_mce/themes/advanced/js/image.js | 245 + tiny_mce/themes/advanced/js/link.js | 156 + tiny_mce/themes/advanced/js/source_editor.js | 62 + tiny_mce/themes/advanced/langs/en.js | 62 + tiny_mce/themes/advanced/langs/en_dlg.js | 51 + tiny_mce/themes/advanced/link.htm | 58 + .../themes/advanced/skins/default/content.css | 36 + .../themes/advanced/skins/default/dialog.css | 117 + .../advanced/skins/default/img/buttons.png | Bin 0 -> 3274 bytes .../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 .../advanced/skins/default/img/progress.gif | Bin 0 -> 1787 bytes .../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 + .../themes/advanced/skins/o2k7/dialog.css | 116 + .../advanced/skins/o2k7/img/button_bg.png | Bin 0 -> 5859 bytes .../skins/o2k7/img/button_bg_black.png | Bin 0 -> 3736 bytes .../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 + tiny_mce/themes/simple/editor_template.js | 1 + tiny_mce/themes/simple/editor_template_src.js | 85 + tiny_mce/themes/simple/img/icons.gif | Bin 0 -> 1440 bytes 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 + .../simple/skins/o2k7/img/button_bg.png | Bin 0 -> 5102 bytes tiny_mce/themes/simple/skins/o2k7/ui.css | 35 + tiny_mce/tiny_mce.js | 1 + tiny_mce/tiny_mce_popup.js | 5 + tiny_mce/tiny_mce_src.js | 13346 ++++++++++++++++ tiny_mce/utils/editable_selects.js | 70 + tiny_mce/utils/form_utils.js | 200 + tiny_mce/utils/mctabs.js | 77 + tiny_mce/utils/validate.js | 220 + 864 files changed, 89679 insertions(+) create mode 100644 .buildpath create mode 100644 .htaccess create mode 100644 .project create mode 100644 .settings/org.eclipse.php.core.prefs create mode 100644 .settings/org.eclipse.php.ui.prefs create mode 100644 application/config/autoload.php create mode 100644 application/config/config.php-bak create mode 100644 application/config/constants.php create mode 100644 application/config/database-sample.php create mode 100644 application/config/doctypes.php create mode 100644 application/config/hooks.php create mode 100644 application/config/index.html create mode 100644 application/config/mimes.php create mode 100644 application/config/routes.php create mode 100644 application/config/smileys.php create mode 100644 application/config/user_agents.php create mode 100644 application/controllers/PlanificarTaller.php create mode 100644 application/controllers/admin.php create mode 100644 application/controllers/administradores.php create mode 100644 application/controllers/categorias.php create mode 100644 application/controllers/crud.php create mode 100644 application/controllers/index.html create mode 100644 application/controllers/main.php create mode 100644 application/controllers/participantes.php create mode 100644 application/controllers/relatores.php create mode 100644 application/controllers/sitio.php create mode 100644 application/controllers/talleres.php create mode 100644 application/controllers/welcome.php create mode 100644 application/errors/error_404.php create mode 100644 application/errors/error_db.php create mode 100644 application/errors/error_general.php create mode 100644 application/errors/error_php.php create mode 100644 application/errors/index.html create mode 100644 application/helpers/index.html create mode 100644 application/hooks/index.html create mode 100644 application/index.html create mode 100644 application/language/english/index.html create mode 100644 application/libraries/index.html create mode 100644 application/models/admin_model.php create mode 100644 application/models/categoria_model.php create mode 100644 application/models/categoria_relator_model.php create mode 100644 application/models/categoria_taller_model.php create mode 100644 application/models/index.html create mode 100644 application/models/participante_model.php create mode 100644 application/models/planificar_taller_model.php create mode 100644 application/models/relator_model.php create mode 100644 application/models/sitio_model.php create mode 100644 application/models/taller_model.php create mode 100644 application/views/admin/PlanificarTaller/agregar_planificacion_taller.php create mode 100644 application/views/admin/PlanificarTaller/editar_planificacion_taller.php create mode 100644 application/views/admin/PlanificarTaller/listar_planificacion_taller.php create mode 100644 application/views/admin/admin_footer.php create mode 100644 application/views/admin/admin_header.php create mode 100644 application/views/admin/admin_index.php create mode 100644 application/views/admin/admin_menu.php create mode 100644 application/views/admin/admin_menu_derecho.php create mode 100644 application/views/admin/admin_round.php create mode 100644 application/views/admin/admin_top.php create mode 100644 application/views/admin/categorias/agregar_categoria.php create mode 100644 application/views/admin/categorias/categorias.php create mode 100644 application/views/admin/categorias/editar_categoria.php create mode 100644 application/views/admin/categorias/listar_categorias.php create mode 100644 application/views/admin/participantes/listar_participantes.php create mode 100644 application/views/admin/relatores/agregar_relator.php create mode 100644 application/views/admin/relatores/editar_relator.php create mode 100644 application/views/admin/relatores/listar_relatores.php create mode 100644 application/views/admin/talleres/agregar_taller.php create mode 100644 application/views/admin/talleres/editar_taller.php create mode 100644 application/views/admin/talleres/listar_talleres.php create mode 100644 application/views/admin/usuarios/agregar_administrador.php create mode 100644 application/views/admin/usuarios/editar_administrador.php create mode 100644 application/views/admin/usuarios/listar_administradores.php create mode 100644 application/views/front/detalle_relator.php create mode 100644 application/views/front/detalle_taller.php create mode 100644 application/views/front/front_index.php create mode 100644 application/views/front/inscribir_taller.php create mode 100644 application/views/front/listar_planificacion_talleres.php create mode 100644 application/views/front/login_form.php create mode 100644 application/views/index.html create mode 100644 application/views/sitio_view.php create mode 100644 application/views/sitio_view_2.php create mode 100644 application/views/welcome_message.php create mode 100644 css/frame.gif create mode 100644 css/front_style.css create mode 100644 css/ie.css create mode 100644 css/ie6.css create mode 100644 css/jquery.alerts.css create mode 100644 css/print.css create mode 100644 css/rounded.css create mode 100644 css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 css/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 css/smoothness/images/ui-icons_222222_256x240.png create mode 100644 css/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100644 css/smoothness/images/ui-icons_454545_256x240.png create mode 100644 css/smoothness/images/ui-icons_888888_256x240.png create mode 100644 css/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100644 css/smoothness/jquery-ui-1.7.1.custom.css create mode 100644 css/style.css create mode 100644 css/superfish.css create mode 100644 css/thickbox.css create mode 100644 fotos_perfil/8423_1258210815906_1248700751_770774_4683767_n.jpg create mode 100644 fotos_perfil/back.jpg create mode 100644 fotos_perfil/escanear0001.jpg create mode 100644 fotos_perfil/no_foto.jpg create mode 100755 fotos_perfil/thumbs/8423_1258210815906_1248700751_770774_4683767_n.jpg create mode 100755 fotos_perfil/thumbs/back.jpg create mode 100755 fotos_perfil/thumbs/escanear0001.jpg create mode 100644 htaccess.txt create mode 100644 images/1280093377_calendar.png create mode 100644 images/accept.jpg create mode 100644 images/accept.png create mode 100644 images/add_user.png create mode 100644 images/arrows-ffffff.png create mode 100644 images/avatar.jpg create mode 100755 images/background45.jpg create mode 100644 images/bg-top.jpg create mode 100644 images/bg.jpg create mode 100755 images/bg_10.gif create mode 100755 images/bg_8.jpg create mode 100644 images/bg_9.jpg create mode 100644 images/calendar.png create mode 100644 images/cancel.jpg create mode 100644 images/cancel.png create mode 100644 images/clear.gif create mode 100644 images/close_buton.png create mode 100644 images/comments.jpg create mode 100644 images/comments.png create mode 100644 images/deleted.png create mode 100644 images/edit.jpg create mode 100644 images/edit.png create mode 100644 images/error.jpg create mode 100644 images/folder.jpg create mode 100644 images/folder.png create mode 100644 images/ftp.jpg create mode 100644 images/ftp.png create mode 100644 images/gallery.jpg create mode 100644 images/gallery.png create mode 100644 images/header/icon-48-alert.png create mode 100644 images/header/icon-48-apply.png create mode 100644 images/header/icon-48-archive.png create mode 100644 images/header/icon-48-article-add.png create mode 100644 images/header/icon-48-article-edit.png create mode 100644 images/header/icon-48-article.png create mode 100644 images/header/icon-48-banner-categories.png create mode 100644 images/header/icon-48-banner-client.png create mode 100644 images/header/icon-48-banner-tracks.png create mode 100644 images/header/icon-48-banner.png create mode 100644 images/header/icon-48-calendar.png create mode 100644 images/header/icon-48-category-add.png create mode 100644 images/header/icon-48-category.png create mode 100644 images/header/icon-48-checkin.png create mode 100644 images/header/icon-48-clear.png create mode 100644 images/header/icon-48-component.png create mode 100644 images/header/icon-48-config.png create mode 100644 images/header/icon-48-contacts-categories.png create mode 100644 images/header/icon-48-contacts.png create mode 100644 images/header/icon-48-content.png create mode 100644 images/header/icon-48-copy.png create mode 100644 images/header/icon-48-cpanel.png create mode 100644 images/header/icon-48-deny.png create mode 100644 images/header/icon-48-download.png create mode 100644 images/header/icon-48-edit.png create mode 100644 images/header/icon-48-extension.png create mode 100644 images/header/icon-48-featured.png create mode 100644 images/header/icon-48-frontpage.png create mode 100644 images/header/icon-48-generic.png create mode 100644 images/header/icon-48-groups-add.png create mode 100644 images/header/icon-48-groups.png create mode 100644 images/header/icon-48-help-forum.png create mode 100644 images/header/icon-48-help-this.png create mode 100644 images/header/icon-48-help_header.png create mode 100644 images/header/icon-48-inbox.png create mode 100644 images/header/icon-48-info.png create mode 100644 images/header/icon-48-install.png create mode 100644 images/header/icon-48-language.png create mode 100644 images/header/icon-48-levels-add.png create mode 100644 images/header/icon-48-levels.png create mode 100644 images/header/icon-48-links-cat.png create mode 100644 images/header/icon-48-links.png create mode 100644 images/header/icon-48-massmail.png create mode 100644 images/header/icon-48-media.png create mode 100644 images/header/icon-48-menu-add.png create mode 100644 images/header/icon-48-menu.png create mode 100644 images/header/icon-48-menumgr.png create mode 100644 images/header/icon-48-module.png create mode 100644 images/header/icon-48-move.png create mode 100644 images/header/icon-48-new-privatemessage.png create mode 100644 images/header/icon-48-newcategory.png create mode 100644 images/header/icon-48-newsfeeds-cat.png create mode 100644 images/header/icon-48-newsfeeds.png create mode 100644 images/header/icon-48-notice.png create mode 100644 images/header/icon-48-plugin.png create mode 100644 images/header/icon-48-preview.png create mode 100644 images/header/icon-48-print.png create mode 100644 images/header/icon-48-purge.png create mode 100644 images/header/icon-48-read-privatemessage.png create mode 100644 images/header/icon-48-readmess.png create mode 100644 images/header/icon-48-redirect.png create mode 100644 images/header/icon-48-revert.png create mode 100644 images/header/icon-48-search.png create mode 100644 images/header/icon-48-section.png create mode 100644 images/header/icon-48-send.png create mode 100644 images/header/icon-48-static.png create mode 100644 images/header/icon-48-stats.png create mode 100644 images/header/icon-48-themes.png create mode 100644 images/header/icon-48-trash.png create mode 100644 images/header/icon-48-unarchive.png create mode 100644 images/header/icon-48-upload.png create mode 100644 images/header/icon-48-user-add.png create mode 100644 images/header/icon-48-user.png create mode 100644 images/header/icon-48-writemess.png create mode 100644 images/header/icon-messaging.png create mode 100644 images/header/index.html create mode 100644 images/heart.jpg create mode 100644 images/heart.png create mode 100644 images/help.gif create mode 100644 images/home.png create mode 100644 images/ico_chart_bar.jpg create mode 100644 images/ico_chart_bar.png create mode 100644 images/ico_error.jpg create mode 100644 images/ico_error.png create mode 100644 images/ico_hourglass.jpg create mode 100644 images/ico_hourglass.png create mode 100644 images/ico_mug.jpg create mode 100644 images/ico_page.jpg create mode 100644 images/ico_page.png create mode 100644 images/ico_posts.jpg create mode 100644 images/ico_posts.png create mode 100644 images/ico_settings.jpg create mode 100644 images/ico_settings.png create mode 100644 images/ico_user.jpg create mode 100644 images/ico_user.png create mode 100644 images/icon-16-allow.png create mode 100644 images/icon-16-allowinactive.png create mode 100644 images/icon-16-article.png create mode 100644 images/icon-16-checkin.png create mode 100644 images/icon-16-deny.png create mode 100644 images/icon-16-groups.png create mode 100644 images/icon-16-menumgr.png create mode 100644 images/icon-16-user-dd.png create mode 100644 images/icon-16-user.png create mode 100644 images/important.gif create mode 100644 images/info.gif create mode 100644 images/j_border.png create mode 100644 images/j_bottom.png create mode 100644 images/j_button1_left.png create mode 100644 images/j_button2_blank.png create mode 100644 images/j_button2_left.png create mode 100644 images/j_button2_left_cap.png create mode 100644 images/j_button2_right.png create mode 100644 images/j_button2_right_cap.png create mode 100644 images/j_corner_bl.png create mode 100644 images/j_corner_br.png create mode 100644 images/j_crn_bl_dark.png create mode 100644 images/j_crn_bl_light.png create mode 100644 images/j_crn_bl_med.png create mode 100644 images/j_crn_br_dark.png create mode 100644 images/j_crn_br_light.png create mode 100644 images/j_crn_br_med.png create mode 100644 images/j_crn_tl_dark.png create mode 100644 images/j_crn_tl_light.png create mode 100644 images/j_crn_tl_med.png create mode 100644 images/j_crn_tr_dark.png create mode 100644 images/j_crn_tr_light.png create mode 100644 images/j_crn_tr_med.png create mode 100644 images/j_divider.png create mode 100644 images/list_user.png create mode 100644 images/loadingAnimation.gif create mode 100644 images/loginbox.jpg create mode 100644 images/logo.gif create mode 100644 images/logo.jpg create mode 100644 images/logo.png create mode 100644 images/menutop.jpg create mode 100644 images/menutop_hover.jpg create mode 100644 images/no_photo.gif create mode 100644 images/overlay.jpg create mode 100644 images/security.jpg create mode 100644 images/security.png create mode 100644 images/statistic.jpg create mode 100644 images/statistic.png create mode 100644 images/subnav_btn.gif create mode 100644 images/success.jpg create mode 100644 images/taller_planificado.png create mode 100644 images/theme.jpg create mode 100644 images/theme.png create mode 100644 images/title.gif create mode 100644 images/toolbar/icon-32-adduser.png create mode 100644 images/toolbar/icon-32-alert.png create mode 100644 images/toolbar/icon-32-apply.png create mode 100644 images/toolbar/icon-32-archive.png create mode 100644 images/toolbar/icon-32-article-add.png create mode 100644 images/toolbar/icon-32-article-featured.png create mode 100644 images/toolbar/icon-32-article.png create mode 100644 images/toolbar/icon-32-back.png create mode 100644 images/toolbar/icon-32-banner-categories.png create mode 100644 images/toolbar/icon-32-banner-client.png create mode 100644 images/toolbar/icon-32-banner-tracks.png create mode 100644 images/toolbar/icon-32-banner.png create mode 100644 images/toolbar/icon-32-calendar.png create mode 100644 images/toolbar/icon-32-cancel.png create mode 100644 images/toolbar/icon-32-checkin.png create mode 100644 images/toolbar/icon-32-component.png create mode 100644 images/toolbar/icon-32-config.png create mode 100644 images/toolbar/icon-32-contacts-categories.png create mode 100644 images/toolbar/icon-32-contacts.png create mode 100644 images/toolbar/icon-32-copy.png create mode 100644 images/toolbar/icon-32-css.png create mode 100644 images/toolbar/icon-32-default.png create mode 100644 images/toolbar/icon-32-delete-style.png create mode 100644 images/toolbar/icon-32-delete.png create mode 100644 images/toolbar/icon-32-deny.png create mode 100644 images/toolbar/icon-32-download.png create mode 100644 images/toolbar/icon-32-edit create mode 100644 images/toolbar/icon-32-edit.png create mode 100644 images/toolbar/icon-32-error.png create mode 100644 images/toolbar/icon-32-export.png create mode 100644 images/toolbar/icon-32-forward.png create mode 100644 images/toolbar/icon-32-help.png create mode 100644 images/toolbar/icon-32-html.png create mode 100644 images/toolbar/icon-32-inbox.png create mode 100644 images/toolbar/icon-32-info.png create mode 100644 images/toolbar/icon-32-links.png create mode 100644 images/toolbar/icon-32-lock.png create mode 100644 images/toolbar/icon-32-menu.png create mode 100644 images/toolbar/icon-32-messanging.png create mode 100644 images/toolbar/icon-32-module.png create mode 100644 images/toolbar/icon-32-move.png create mode 100644 images/toolbar/icon-32-new-privatemessage.png create mode 100644 images/toolbar/icon-32-new-style.png create mode 100644 images/toolbar/icon-32-new.png create mode 100644 images/toolbar/icon-32-notice.png create mode 100644 images/toolbar/icon-32-preview.png create mode 100644 images/toolbar/icon-32-print.png create mode 100644 images/toolbar/icon-32-publish.png create mode 100644 images/toolbar/icon-32-purge.png create mode 100644 images/toolbar/icon-32-read-privatemessage.png create mode 100644 images/toolbar/icon-32-refresh.png create mode 100644 images/toolbar/icon-32-remove.png create mode 100644 images/toolbar/icon-32-revert.png create mode 100644 images/toolbar/icon-32-save-copy.png create mode 100644 images/toolbar/icon-32-save-new.png create mode 100644 images/toolbar/icon-32-save.png create mode 100644 images/toolbar/icon-32-search.png create mode 100644 images/toolbar/icon-32-send.png create mode 100644 images/toolbar/icon-32-stats.png create mode 100644 images/toolbar/icon-32-trash.png create mode 100644 images/toolbar/icon-32-unarchive.png create mode 100644 images/toolbar/icon-32-unpublish.png create mode 100644 images/toolbar/icon-32-upload.png create mode 100644 images/toolbar/icon-32-user-add.png create mode 100644 images/toolbar/icon-32-xml.png create mode 100644 images/toolbar/index.html create mode 100644 images/users.jpg create mode 100644 images/users.png create mode 100644 images/warnings.jpg create mode 100644 images/warnings.png create mode 100644 index.php create mode 100644 js/DD_belatedPNG_0.0.7a-min.js create mode 100644 js/custom.js create mode 100644 js/excanvas.pack.js create mode 100644 js/hoverIntent.js create mode 100644 js/jquery-1.3.2.min.js create mode 100644 js/jquery-ui-1.7.1.custom.min.js create mode 100644 js/jquery.alerts.js create mode 100644 js/jquery.bgiframe.min.js create mode 100644 js/jquery.flot.pack.js create mode 100644 js/jquery.js create mode 100644 js/jquery.ui.draggable.js create mode 100644 js/mootools.js create mode 100644 js/rokbox/rokbox.js create mode 100644 js/rokbox/themes/dark/ajax-loader.gif create mode 100644 js/rokbox/themes/dark/bl.gif create mode 100644 js/rokbox/themes/dark/bl.png create mode 100644 js/rokbox/themes/dark/bottom.gif create mode 100644 js/rokbox/themes/dark/bottom.png create mode 100644 js/rokbox/themes/dark/br.gif create mode 100644 js/rokbox/themes/dark/br.png create mode 100644 js/rokbox/themes/dark/close.png create mode 100644 js/rokbox/themes/dark/left.gif create mode 100644 js/rokbox/themes/dark/left.png create mode 100644 js/rokbox/themes/dark/next.png create mode 100644 js/rokbox/themes/dark/prev.png create mode 100644 js/rokbox/themes/dark/right.gif create mode 100644 js/rokbox/themes/dark/right.png create mode 100644 js/rokbox/themes/dark/rokbox-config.js create mode 100644 js/rokbox/themes/dark/rokbox-style-ie6.css create mode 100644 js/rokbox/themes/dark/rokbox-style-ie7.css create mode 100644 js/rokbox/themes/dark/rokbox-style-ie8.css create mode 100644 js/rokbox/themes/dark/rokbox-style.css create mode 100644 js/rokbox/themes/dark/tl.gif create mode 100644 js/rokbox/themes/dark/tl.png create mode 100644 js/rokbox/themes/dark/top.gif create mode 100644 js/rokbox/themes/dark/top.png create mode 100644 js/rokbox/themes/dark/tr.gif create mode 100644 js/rokbox/themes/dark/tr.png create mode 100644 js/rokbox/themes/dark/warning.png create mode 100644 js/rokbox/themes/light/ajax-loader.gif create mode 100644 js/rokbox/themes/light/bl.gif create mode 100644 js/rokbox/themes/light/bl.png create mode 100644 js/rokbox/themes/light/blank.gif create mode 100644 js/rokbox/themes/light/bottom.gif create mode 100644 js/rokbox/themes/light/bottom.png create mode 100644 js/rokbox/themes/light/br.gif create mode 100644 js/rokbox/themes/light/br.png create mode 100644 js/rokbox/themes/light/close.png create mode 100644 js/rokbox/themes/light/left.gif create mode 100644 js/rokbox/themes/light/left.png create mode 100644 js/rokbox/themes/light/next.png create mode 100644 js/rokbox/themes/light/prev.png create mode 100644 js/rokbox/themes/light/right.gif create mode 100644 js/rokbox/themes/light/right.png create mode 100644 js/rokbox/themes/light/rokbox-config.js create mode 100644 js/rokbox/themes/light/rokbox-style-ie6.css create mode 100644 js/rokbox/themes/light/rokbox-style-ie7.css create mode 100644 js/rokbox/themes/light/rokbox-style-ie8.css create mode 100644 js/rokbox/themes/light/rokbox-style.css create mode 100644 js/rokbox/themes/light/tl.gif create mode 100644 js/rokbox/themes/light/tl.png create mode 100644 js/rokbox/themes/light/top.gif create mode 100644 js/rokbox/themes/light/top.png create mode 100644 js/rokbox/themes/light/tr.gif create mode 100644 js/rokbox/themes/light/tr.png create mode 100644 js/rokbox/themes/light/warning.png create mode 100644 js/superfish.js create mode 100644 js/supersubs.js create mode 100644 js/thickbox.js create mode 100644 license.txt create mode 100644 markitup/jquery.markitup.js create mode 100644 markitup/jquery.markitup.pack.js create mode 100644 markitup/readme.txt create mode 100644 markitup/sets/default/images/bold.png create mode 100644 markitup/sets/default/images/clean.png create mode 100644 markitup/sets/default/images/image.png create mode 100644 markitup/sets/default/images/italic.png create mode 100644 markitup/sets/default/images/link.png create mode 100644 markitup/sets/default/images/picture.png create mode 100644 markitup/sets/default/images/preview.png create mode 100644 markitup/sets/default/images/stroke.png create mode 100644 markitup/sets/default/images_orginalpng/bold.png create mode 100644 markitup/sets/default/images_orginalpng/clean.png create mode 100644 markitup/sets/default/images_orginalpng/image.png create mode 100644 markitup/sets/default/images_orginalpng/italic.png create mode 100644 markitup/sets/default/images_orginalpng/link.png create mode 100644 markitup/sets/default/images_orginalpng/picture.png create mode 100644 markitup/sets/default/images_orginalpng/preview.png create mode 100644 markitup/sets/default/images_orginalpng/stroke.png create mode 100644 markitup/sets/default/set.js create mode 100644 markitup/sets/default/style.css create mode 100644 markitup/skins/markitup/images/bg-container.png create mode 100644 markitup/skins/markitup/images/bg-editor-bbcode.png create mode 100644 markitup/skins/markitup/images/bg-editor-dotclear.png create mode 100644 markitup/skins/markitup/images/bg-editor-html.png create mode 100644 markitup/skins/markitup/images/bg-editor-json.png create mode 100644 markitup/skins/markitup/images/bg-editor-markdown.png create mode 100644 markitup/skins/markitup/images/bg-editor-textile.png create mode 100644 markitup/skins/markitup/images/bg-editor-wiki.png create mode 100644 markitup/skins/markitup/images/bg-editor-xml.png create mode 100644 markitup/skins/markitup/images/bg-editor.png create mode 100644 markitup/skins/markitup/images/handle.png create mode 100644 markitup/skins/markitup/images/menu.png create mode 100644 markitup/skins/markitup/images/submenu.png create mode 100644 markitup/skins/markitup/style.css create mode 100644 markitup/skins/simple/images/handle.png create mode 100644 markitup/skins/simple/images/menu.png create mode 100644 markitup/skins/simple/images/submenu.png create mode 100644 markitup/skins/simple/style.css create mode 100644 markitup/templates/preview.css create mode 100644 markitup/templates/preview.html create mode 100644 system/cache/index.html create mode 100644 system/codeigniter/Base4.php create mode 100644 system/codeigniter/Base5.php create mode 100644 system/codeigniter/CodeIgniter.php create mode 100644 system/codeigniter/Common.php create mode 100644 system/codeigniter/Compat.php create mode 100644 system/codeigniter/index.html create mode 100644 system/database/DB.php create mode 100644 system/database/DB_active_rec.php create mode 100644 system/database/DB_cache.php create mode 100644 system/database/DB_driver.php create mode 100644 system/database/DB_forge.php create mode 100644 system/database/DB_result.php create mode 100644 system/database/DB_utility.php create mode 100644 system/database/drivers/index.html create mode 100644 system/database/drivers/mssql/index.html create mode 100644 system/database/drivers/mssql/mssql_driver.php create mode 100644 system/database/drivers/mssql/mssql_forge.php create mode 100644 system/database/drivers/mssql/mssql_result.php create mode 100644 system/database/drivers/mssql/mssql_utility.php create mode 100644 system/database/drivers/mysql/index.html create mode 100644 system/database/drivers/mysql/mysql_driver.php create mode 100644 system/database/drivers/mysql/mysql_forge.php create mode 100644 system/database/drivers/mysql/mysql_result.php create mode 100644 system/database/drivers/mysql/mysql_utility.php create mode 100644 system/database/drivers/mysqli/index.html create mode 100644 system/database/drivers/mysqli/mysqli_driver.php create mode 100644 system/database/drivers/mysqli/mysqli_forge.php create mode 100644 system/database/drivers/mysqli/mysqli_result.php create mode 100644 system/database/drivers/mysqli/mysqli_utility.php create mode 100644 system/database/drivers/oci8/index.html create mode 100644 system/database/drivers/oci8/oci8_driver.php create mode 100644 system/database/drivers/oci8/oci8_forge.php create mode 100644 system/database/drivers/oci8/oci8_result.php create mode 100644 system/database/drivers/oci8/oci8_utility.php create mode 100644 system/database/drivers/odbc/index.html create mode 100644 system/database/drivers/odbc/odbc_driver.php create mode 100644 system/database/drivers/odbc/odbc_forge.php create mode 100644 system/database/drivers/odbc/odbc_result.php create mode 100644 system/database/drivers/odbc/odbc_utility.php create mode 100644 system/database/drivers/postgre/index.html create mode 100644 system/database/drivers/postgre/postgre_driver.php create mode 100644 system/database/drivers/postgre/postgre_forge.php create mode 100644 system/database/drivers/postgre/postgre_result.php create mode 100644 system/database/drivers/postgre/postgre_utility.php create mode 100644 system/database/drivers/sqlite/index.html create mode 100644 system/database/drivers/sqlite/sqlite_driver.php create mode 100644 system/database/drivers/sqlite/sqlite_forge.php create mode 100644 system/database/drivers/sqlite/sqlite_result.php create mode 100644 system/database/drivers/sqlite/sqlite_utility.php create mode 100644 system/database/index.html create mode 100644 system/fonts/index.html create mode 100644 system/fonts/texb.ttf create mode 100644 system/helpers/array_helper.php create mode 100644 system/helpers/compatibility_helper.php create mode 100644 system/helpers/cookie_helper.php create mode 100644 system/helpers/date_helper.php create mode 100644 system/helpers/directory_helper.php create mode 100644 system/helpers/download_helper.php create mode 100644 system/helpers/email_helper.php create mode 100644 system/helpers/file_helper.php create mode 100644 system/helpers/form_helper.php create mode 100644 system/helpers/html_helper.php create mode 100644 system/helpers/index.html create mode 100644 system/helpers/inflector_helper.php create mode 100644 system/helpers/language_helper.php create mode 100644 system/helpers/number_helper.php create mode 100644 system/helpers/path_helper.php create mode 100644 system/helpers/security_helper.php create mode 100644 system/helpers/smiley_helper.php create mode 100644 system/helpers/string_helper.php create mode 100644 system/helpers/text_helper.php create mode 100644 system/helpers/typography_helper.php create mode 100644 system/helpers/url_helper.php create mode 100644 system/helpers/xml_helper.php create mode 100644 system/index.html create mode 100644 system/language/english/calendar_lang.php create mode 100644 system/language/english/date_lang.php create mode 100644 system/language/english/db_lang.php create mode 100644 system/language/english/email_lang.php create mode 100644 system/language/english/form_validation_lang.php create mode 100644 system/language/english/ftp_lang.php create mode 100644 system/language/english/imglib_lang.php create mode 100644 system/language/english/index.html create mode 100644 system/language/english/number_lang.php create mode 100644 system/language/english/profiler_lang.php create mode 100644 system/language/english/scaffolding_lang.php create mode 100644 system/language/english/unit_test_lang.php create mode 100644 system/language/english/upload_lang.php create mode 100644 system/language/english/validation_lang.php create mode 100644 system/language/index.html create mode 100644 system/libraries/Benchmark.php create mode 100644 system/libraries/Calendar.php create mode 100644 system/libraries/Cart.php create mode 100644 system/libraries/Config.php create mode 100644 system/libraries/Controller.php create mode 100644 system/libraries/Email.php create mode 100644 system/libraries/Encrypt.php create mode 100644 system/libraries/Exceptions.php create mode 100644 system/libraries/Form_validation.php create mode 100644 system/libraries/Ftp.php create mode 100644 system/libraries/Hooks.php create mode 100644 system/libraries/Image_lib.php create mode 100644 system/libraries/Input.php create mode 100644 system/libraries/Language.php create mode 100644 system/libraries/Loader.php create mode 100644 system/libraries/Log.php create mode 100644 system/libraries/Model.php create mode 100644 system/libraries/Output.php create mode 100644 system/libraries/Pagination.php create mode 100644 system/libraries/Parser.php create mode 100644 system/libraries/Profiler.php create mode 100644 system/libraries/Router.php create mode 100644 system/libraries/Session.php create mode 100644 system/libraries/Sha1.php create mode 100644 system/libraries/Table.php create mode 100644 system/libraries/Trackback.php create mode 100644 system/libraries/Typography.php create mode 100644 system/libraries/URI.php create mode 100644 system/libraries/Unit_test.php create mode 100644 system/libraries/Upload.php create mode 100644 system/libraries/User_agent.php create mode 100644 system/libraries/Validation.php create mode 100644 system/libraries/Xmlrpc.php create mode 100644 system/libraries/Xmlrpcs.php create mode 100644 system/libraries/Zip.php create mode 100644 system/libraries/index.html create mode 100644 system/logs/index.html create mode 100644 system/plugins/captcha_pi.php create mode 100644 system/plugins/index.html create mode 100644 system/plugins/js_calendar_pi.php create mode 100644 system/scaffolding/Scaffolding.php create mode 100644 system/scaffolding/images/background.jpg create mode 100644 system/scaffolding/images/index.html create mode 100644 system/scaffolding/images/logo.jpg create mode 100644 system/scaffolding/index.html create mode 100644 system/scaffolding/views/add.php create mode 100644 system/scaffolding/views/delete.php create mode 100644 system/scaffolding/views/edit.php create mode 100644 system/scaffolding/views/footer.php create mode 100644 system/scaffolding/views/header.php create mode 100644 system/scaffolding/views/index.html create mode 100644 system/scaffolding/views/no_data.php create mode 100644 system/scaffolding/views/stylesheet.css create mode 100644 system/scaffolding/views/view.php create mode 100644 tiny_mce/jquery.tinymce.js create mode 100644 tiny_mce/langs/en.js create mode 100644 tiny_mce/license.txt create mode 100644 tiny_mce/plugins/advhr/css/advhr.css create mode 100644 tiny_mce/plugins/advhr/editor_plugin.js create mode 100644 tiny_mce/plugins/advhr/editor_plugin_src.js create mode 100644 tiny_mce/plugins/advhr/js/rule.js create mode 100644 tiny_mce/plugins/advhr/langs/en_dlg.js create mode 100644 tiny_mce/plugins/advhr/rule.htm create mode 100644 tiny_mce/plugins/advimage/css/advimage.css create mode 100644 tiny_mce/plugins/advimage/editor_plugin.js create mode 100644 tiny_mce/plugins/advimage/editor_plugin_src.js create mode 100644 tiny_mce/plugins/advimage/image.htm create mode 100644 tiny_mce/plugins/advimage/img/sample.gif create mode 100644 tiny_mce/plugins/advimage/js/image.js create mode 100644 tiny_mce/plugins/advimage/langs/en_dlg.js create mode 100644 tiny_mce/plugins/advlink/css/advlink.css create mode 100644 tiny_mce/plugins/advlink/editor_plugin.js create mode 100644 tiny_mce/plugins/advlink/editor_plugin_src.js create mode 100644 tiny_mce/plugins/advlink/js/advlink.js create mode 100644 tiny_mce/plugins/advlink/langs/en_dlg.js create mode 100644 tiny_mce/plugins/advlink/link.htm create mode 100644 tiny_mce/plugins/advlist/editor_plugin.js create mode 100644 tiny_mce/plugins/advlist/editor_plugin_src.js create mode 100644 tiny_mce/plugins/autoresize/editor_plugin.js create mode 100644 tiny_mce/plugins/autoresize/editor_plugin_src.js create mode 100644 tiny_mce/plugins/autosave/editor_plugin.js create mode 100644 tiny_mce/plugins/autosave/editor_plugin_src.js create mode 100644 tiny_mce/plugins/autosave/langs/en.js create mode 100644 tiny_mce/plugins/bbcode/editor_plugin.js create mode 100644 tiny_mce/plugins/bbcode/editor_plugin_src.js create mode 100644 tiny_mce/plugins/contextmenu/editor_plugin.js create mode 100644 tiny_mce/plugins/contextmenu/editor_plugin_src.js create mode 100644 tiny_mce/plugins/directionality/editor_plugin.js create mode 100644 tiny_mce/plugins/directionality/editor_plugin_src.js create mode 100644 tiny_mce/plugins/emotions/editor_plugin.js create mode 100644 tiny_mce/plugins/emotions/editor_plugin_src.js create mode 100644 tiny_mce/plugins/emotions/emotions.htm create mode 100644 tiny_mce/plugins/emotions/img/smiley-cool.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-cry.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-embarassed.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-frown.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-innocent.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-kiss.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-laughing.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-money-mouth.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-sealed.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-smile.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-surprised.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-tongue-out.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-undecided.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-wink.gif create mode 100644 tiny_mce/plugins/emotions/img/smiley-yell.gif create mode 100644 tiny_mce/plugins/emotions/js/emotions.js create mode 100644 tiny_mce/plugins/emotions/langs/en_dlg.js create mode 100644 tiny_mce/plugins/example/dialog.htm create mode 100644 tiny_mce/plugins/example/editor_plugin.js create mode 100644 tiny_mce/plugins/example/editor_plugin_src.js create mode 100644 tiny_mce/plugins/example/img/example.gif create mode 100644 tiny_mce/plugins/example/js/dialog.js create mode 100644 tiny_mce/plugins/example/langs/en.js create mode 100644 tiny_mce/plugins/example/langs/en_dlg.js create mode 100644 tiny_mce/plugins/fullpage/css/fullpage.css create mode 100644 tiny_mce/plugins/fullpage/editor_plugin.js create mode 100644 tiny_mce/plugins/fullpage/editor_plugin_src.js create mode 100644 tiny_mce/plugins/fullpage/fullpage.htm create mode 100644 tiny_mce/plugins/fullpage/js/fullpage.js create mode 100644 tiny_mce/plugins/fullpage/langs/en_dlg.js create mode 100644 tiny_mce/plugins/fullscreen/editor_plugin.js create mode 100644 tiny_mce/plugins/fullscreen/editor_plugin_src.js create mode 100644 tiny_mce/plugins/fullscreen/fullscreen.htm create mode 100644 tiny_mce/plugins/iespell/editor_plugin.js create mode 100644 tiny_mce/plugins/iespell/editor_plugin_src.js create mode 100644 tiny_mce/plugins/inlinepopups/editor_plugin.js create mode 100644 tiny_mce/plugins/inlinepopups/editor_plugin_src.js create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif create mode 100644 tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css create mode 100644 tiny_mce/plugins/inlinepopups/template.htm create mode 100644 tiny_mce/plugins/insertdatetime/editor_plugin.js create mode 100644 tiny_mce/plugins/insertdatetime/editor_plugin_src.js create mode 100644 tiny_mce/plugins/layer/editor_plugin.js create mode 100644 tiny_mce/plugins/layer/editor_plugin_src.js create mode 100644 tiny_mce/plugins/legacyoutput/editor_plugin.js create mode 100644 tiny_mce/plugins/legacyoutput/editor_plugin_src.js create mode 100644 tiny_mce/plugins/media/css/content.css create mode 100644 tiny_mce/plugins/media/css/media.css create mode 100644 tiny_mce/plugins/media/editor_plugin.js create mode 100644 tiny_mce/plugins/media/editor_plugin_src.js create mode 100644 tiny_mce/plugins/media/img/flash.gif create mode 100644 tiny_mce/plugins/media/img/flv_player.swf create mode 100644 tiny_mce/plugins/media/img/quicktime.gif create mode 100644 tiny_mce/plugins/media/img/realmedia.gif create mode 100644 tiny_mce/plugins/media/img/shockwave.gif create mode 100644 tiny_mce/plugins/media/img/trans.gif create mode 100644 tiny_mce/plugins/media/img/windowsmedia.gif create mode 100644 tiny_mce/plugins/media/js/embed.js create mode 100644 tiny_mce/plugins/media/js/media.js create mode 100644 tiny_mce/plugins/media/langs/en_dlg.js create mode 100644 tiny_mce/plugins/media/media.htm create mode 100644 tiny_mce/plugins/nonbreaking/editor_plugin.js create mode 100644 tiny_mce/plugins/nonbreaking/editor_plugin_src.js create mode 100644 tiny_mce/plugins/noneditable/editor_plugin.js create mode 100644 tiny_mce/plugins/noneditable/editor_plugin_src.js create mode 100644 tiny_mce/plugins/pagebreak/css/content.css create mode 100644 tiny_mce/plugins/pagebreak/editor_plugin.js create mode 100644 tiny_mce/plugins/pagebreak/editor_plugin_src.js create mode 100644 tiny_mce/plugins/pagebreak/img/pagebreak.gif create mode 100644 tiny_mce/plugins/pagebreak/img/trans.gif create mode 100644 tiny_mce/plugins/paste/editor_plugin.js create mode 100644 tiny_mce/plugins/paste/editor_plugin_src.js create mode 100644 tiny_mce/plugins/paste/js/pastetext.js create mode 100644 tiny_mce/plugins/paste/js/pasteword.js create mode 100644 tiny_mce/plugins/paste/langs/en_dlg.js create mode 100644 tiny_mce/plugins/paste/pastetext.htm create mode 100644 tiny_mce/plugins/paste/pasteword.htm create mode 100644 tiny_mce/plugins/preview/editor_plugin.js create mode 100644 tiny_mce/plugins/preview/editor_plugin_src.js create mode 100644 tiny_mce/plugins/preview/example.html create mode 100644 tiny_mce/plugins/preview/jscripts/embed.js create mode 100644 tiny_mce/plugins/preview/preview.html create mode 100644 tiny_mce/plugins/print/editor_plugin.js create mode 100644 tiny_mce/plugins/print/editor_plugin_src.js create mode 100644 tiny_mce/plugins/save/editor_plugin.js create mode 100644 tiny_mce/plugins/save/editor_plugin_src.js create mode 100644 tiny_mce/plugins/searchreplace/css/searchreplace.css create mode 100644 tiny_mce/plugins/searchreplace/editor_plugin.js create mode 100644 tiny_mce/plugins/searchreplace/editor_plugin_src.js create mode 100644 tiny_mce/plugins/searchreplace/js/searchreplace.js create mode 100644 tiny_mce/plugins/searchreplace/langs/en_dlg.js create mode 100644 tiny_mce/plugins/searchreplace/searchreplace.htm create mode 100644 tiny_mce/plugins/spellchecker/css/content.css create mode 100644 tiny_mce/plugins/spellchecker/editor_plugin.js create mode 100644 tiny_mce/plugins/spellchecker/editor_plugin_src.js create mode 100644 tiny_mce/plugins/spellchecker/img/wline.gif create mode 100644 tiny_mce/plugins/style/css/props.css create mode 100644 tiny_mce/plugins/style/editor_plugin.js create mode 100644 tiny_mce/plugins/style/editor_plugin_src.js create mode 100644 tiny_mce/plugins/style/js/props.js create mode 100644 tiny_mce/plugins/style/langs/en_dlg.js create mode 100644 tiny_mce/plugins/style/props.htm create mode 100644 tiny_mce/plugins/tabfocus/editor_plugin.js create mode 100644 tiny_mce/plugins/tabfocus/editor_plugin_src.js create mode 100644 tiny_mce/plugins/table/cell.htm create mode 100644 tiny_mce/plugins/table/css/cell.css create mode 100644 tiny_mce/plugins/table/css/row.css create mode 100644 tiny_mce/plugins/table/css/table.css create mode 100644 tiny_mce/plugins/table/editor_plugin.js create mode 100644 tiny_mce/plugins/table/editor_plugin_src.js create mode 100644 tiny_mce/plugins/table/js/cell.js create mode 100644 tiny_mce/plugins/table/js/merge_cells.js create mode 100644 tiny_mce/plugins/table/js/row.js create mode 100644 tiny_mce/plugins/table/js/table.js create mode 100644 tiny_mce/plugins/table/langs/en_dlg.js create mode 100644 tiny_mce/plugins/table/merge_cells.htm create mode 100644 tiny_mce/plugins/table/row.htm create mode 100644 tiny_mce/plugins/table/table.htm create mode 100644 tiny_mce/plugins/template/blank.htm create mode 100644 tiny_mce/plugins/template/css/template.css create mode 100644 tiny_mce/plugins/template/editor_plugin.js create mode 100644 tiny_mce/plugins/template/editor_plugin_src.js create mode 100644 tiny_mce/plugins/template/js/template.js create mode 100644 tiny_mce/plugins/template/langs/en_dlg.js create mode 100644 tiny_mce/plugins/template/template.htm create mode 100644 tiny_mce/plugins/visualchars/editor_plugin.js create mode 100644 tiny_mce/plugins/visualchars/editor_plugin_src.js create mode 100644 tiny_mce/plugins/wordcount/editor_plugin.js create mode 100644 tiny_mce/plugins/wordcount/editor_plugin_src.js create mode 100644 tiny_mce/plugins/xhtmlxtras/abbr.htm create mode 100644 tiny_mce/plugins/xhtmlxtras/acronym.htm create mode 100644 tiny_mce/plugins/xhtmlxtras/attributes.htm create mode 100644 tiny_mce/plugins/xhtmlxtras/cite.htm create mode 100644 tiny_mce/plugins/xhtmlxtras/css/attributes.css create mode 100644 tiny_mce/plugins/xhtmlxtras/css/popup.css create mode 100644 tiny_mce/plugins/xhtmlxtras/del.htm create mode 100644 tiny_mce/plugins/xhtmlxtras/editor_plugin.js create mode 100644 tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js create mode 100644 tiny_mce/plugins/xhtmlxtras/ins.htm create mode 100644 tiny_mce/plugins/xhtmlxtras/js/abbr.js create mode 100644 tiny_mce/plugins/xhtmlxtras/js/acronym.js create mode 100644 tiny_mce/plugins/xhtmlxtras/js/attributes.js create mode 100644 tiny_mce/plugins/xhtmlxtras/js/cite.js create mode 100644 tiny_mce/plugins/xhtmlxtras/js/del.js create mode 100644 tiny_mce/plugins/xhtmlxtras/js/element_common.js create mode 100644 tiny_mce/plugins/xhtmlxtras/js/ins.js create mode 100644 tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js create mode 100644 tiny_mce/themes/advanced/about.htm create mode 100644 tiny_mce/themes/advanced/anchor.htm create mode 100644 tiny_mce/themes/advanced/charmap.htm create mode 100644 tiny_mce/themes/advanced/color_picker.htm create mode 100644 tiny_mce/themes/advanced/editor_template.js create mode 100644 tiny_mce/themes/advanced/editor_template_src.js create mode 100644 tiny_mce/themes/advanced/image.htm create mode 100644 tiny_mce/themes/advanced/img/colorpicker.jpg create mode 100644 tiny_mce/themes/advanced/img/icons.gif create mode 100644 tiny_mce/themes/advanced/js/about.js create mode 100644 tiny_mce/themes/advanced/js/anchor.js create mode 100644 tiny_mce/themes/advanced/js/charmap.js create mode 100644 tiny_mce/themes/advanced/js/color_picker.js create mode 100644 tiny_mce/themes/advanced/js/image.js create mode 100644 tiny_mce/themes/advanced/js/link.js create mode 100644 tiny_mce/themes/advanced/js/source_editor.js create mode 100644 tiny_mce/themes/advanced/langs/en.js create mode 100644 tiny_mce/themes/advanced/langs/en_dlg.js create mode 100644 tiny_mce/themes/advanced/link.htm create mode 100644 tiny_mce/themes/advanced/skins/default/content.css create mode 100644 tiny_mce/themes/advanced/skins/default/dialog.css create mode 100644 tiny_mce/themes/advanced/skins/default/img/buttons.png create mode 100644 tiny_mce/themes/advanced/skins/default/img/items.gif create mode 100644 tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif create mode 100644 tiny_mce/themes/advanced/skins/default/img/menu_check.gif create mode 100644 tiny_mce/themes/advanced/skins/default/img/progress.gif create mode 100644 tiny_mce/themes/advanced/skins/default/img/tabs.gif create mode 100644 tiny_mce/themes/advanced/skins/default/ui.css create mode 100644 tiny_mce/themes/advanced/skins/o2k7/content.css create mode 100644 tiny_mce/themes/advanced/skins/o2k7/dialog.css create mode 100644 tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png create mode 100644 tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png create mode 100644 tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png create mode 100644 tiny_mce/themes/advanced/skins/o2k7/ui.css create mode 100644 tiny_mce/themes/advanced/skins/o2k7/ui_black.css create mode 100644 tiny_mce/themes/advanced/skins/o2k7/ui_silver.css create mode 100644 tiny_mce/themes/advanced/source_editor.htm create mode 100644 tiny_mce/themes/simple/editor_template.js create mode 100644 tiny_mce/themes/simple/editor_template_src.js create mode 100644 tiny_mce/themes/simple/img/icons.gif create mode 100644 tiny_mce/themes/simple/langs/en.js create mode 100644 tiny_mce/themes/simple/skins/default/content.css create mode 100644 tiny_mce/themes/simple/skins/default/ui.css create mode 100644 tiny_mce/themes/simple/skins/o2k7/content.css create mode 100644 tiny_mce/themes/simple/skins/o2k7/img/button_bg.png create mode 100644 tiny_mce/themes/simple/skins/o2k7/ui.css create mode 100644 tiny_mce/tiny_mce.js create mode 100644 tiny_mce/tiny_mce_popup.js create mode 100644 tiny_mce/tiny_mce_src.js create mode 100644 tiny_mce/utils/editable_selects.js create mode 100644 tiny_mce/utils/form_utils.js create mode 100644 tiny_mce/utils/mctabs.js create mode 100644 tiny_mce/utils/validate.js diff --git a/.buildpath b/.buildpath new file mode 100644 index 0000000..8bcb4b5 --- /dev/null +++ b/.buildpath @@ -0,0 +1,5 @@ + + + + + diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..4aa4304 --- /dev/null +++ b/.htaccess @@ -0,0 +1,3 @@ +RewriteEngine on +RewriteCond $1 !^(index.php|css|js|images|fotos_perfil|markitup|tiny_mce|robots.txt) +RewriteRule ^(.*)$ /sit/index.php/$1 [L] diff --git a/.project b/.project new file mode 100644 index 0000000..f2cd244 --- /dev/null +++ b/.project @@ -0,0 +1,22 @@ + + + sit + + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.dltk.core.scriptbuilder + + + + + + org.eclipse.php.core.PHPNature + + diff --git a/.settings/org.eclipse.php.core.prefs b/.settings/org.eclipse.php.core.prefs new file mode 100644 index 0000000..5ff2345 --- /dev/null +++ b/.settings/org.eclipse.php.core.prefs @@ -0,0 +1,4 @@ +#Sun Jul 04 18:51:24 CLT 2010 +eclipse.preferences.version=1 +include_path=0;/sit +org.eclipse.php.core.phpDoc=false diff --git a/.settings/org.eclipse.php.ui.prefs b/.settings/org.eclipse.php.ui.prefs new file mode 100644 index 0000000..032f688 --- /dev/null +++ b/.settings/org.eclipse.php.ui.prefs @@ -0,0 +1,3 @@ +#Sun Jul 04 18:51:23 CLT 2010 +eclipse.preferences.version=1 +org.eclipse.php.ui.text.custom_code_templates= diff --git a/application/config/autoload.php b/application/config/autoload.php new file mode 100644 index 0000000..52e6481 --- /dev/null +++ b/application/config/autoload.php @@ -0,0 +1,116 @@ + '', + 'xhtml1-strict' => '', + 'xhtml1-trans' => '', + 'xhtml1-frame' => '', + 'html5' => '', + 'html4-strict' => '', + 'html4-trans' => '', + 'html4-frame' => '' + ); + +/* End of file doctypes.php */ +/* Location: application/config/doctypes.php */ \ No newline at end of file diff --git a/application/config/hooks.php b/application/config/hooks.php new file mode 100644 index 0000000..5e98a9b --- /dev/null +++ b/application/config/hooks.php @@ -0,0 +1,16 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/config/mimes.php b/application/config/mimes.php new file mode 100644 index 0000000..438f610 --- /dev/null +++ b/application/config/mimes.php @@ -0,0 +1,105 @@ + 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'), + 'bin' => 'application/macbinary', + 'dms' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'exe' => 'application/octet-stream', + 'class' => 'application/octet-stream', + 'psd' => 'application/x-photoshop', + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => array('application/pdf', 'application/x-download'), + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'), + 'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'), + 'wbxml' => 'application/wbxml', + 'wmlc' => 'application/wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'php' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => 'application/x-javascript', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'), + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => array('audio/mpeg', 'audio/mpg'), + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'rv' => 'video/vnd.rn-realvideo', + 'wav' => 'audio/x-wav', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'jpeg' => array('image/jpeg', 'image/pjpeg'), + 'jpg' => array('image/jpeg', 'image/pjpeg'), + 'jpe' => array('image/jpeg', 'image/pjpeg'), + 'png' => array('image/png', 'image/x-png'), + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => array('text/plain', 'text/x-log'), + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'word' => array('application/msword', 'application/octet-stream'), + 'xl' => 'application/excel', + 'eml' => 'message/rfc822' + ); + + +/* End of file mimes.php */ +/* Location: ./system/application/config/mimes.php */ \ No newline at end of file diff --git a/application/config/routes.php b/application/config/routes.php new file mode 100644 index 0000000..0d41709 --- /dev/null +++ b/application/config/routes.php @@ -0,0 +1,57 @@ + array('grin.gif', '19', '19', 'grin'), + ':lol:' => array('lol.gif', '19', '19', 'LOL'), + ':cheese:' => array('cheese.gif', '19', '19', 'cheese'), + ':)' => array('smile.gif', '19', '19', 'smile'), + ';-)' => array('wink.gif', '19', '19', 'wink'), + ';)' => array('wink.gif', '19', '19', 'wink'), + ':smirk:' => array('smirk.gif', '19', '19', 'smirk'), + ':roll:' => array('rolleyes.gif', '19', '19', 'rolleyes'), + ':-S' => array('confused.gif', '19', '19', 'confused'), + ':wow:' => array('surprise.gif', '19', '19', 'surprised'), + ':bug:' => array('bigsurprise.gif', '19', '19', 'big surprise'), + ':-P' => array('tongue_laugh.gif', '19', '19', 'tongue laugh'), + '%-P' => array('tongue_rolleye.gif', '19', '19', 'tongue rolleye'), + ';-P' => array('tongue_wink.gif', '19', '19', 'tongue wink'), + ':P' => array('raspberry.gif', '19', '19', 'raspberry'), + ':blank:' => array('blank.gif', '19', '19', 'blank stare'), + ':long:' => array('longface.gif', '19', '19', 'long face'), + ':ohh:' => array('ohh.gif', '19', '19', 'ohh'), + ':grrr:' => array('grrr.gif', '19', '19', 'grrr'), + ':gulp:' => array('gulp.gif', '19', '19', 'gulp'), + '8-/' => array('ohoh.gif', '19', '19', 'oh oh'), + ':down:' => array('downer.gif', '19', '19', 'downer'), + ':red:' => array('embarrassed.gif', '19', '19', 'red face'), + ':sick:' => array('sick.gif', '19', '19', 'sick'), + ':shut:' => array('shuteye.gif', '19', '19', 'shut eye'), + ':-/' => array('hmm.gif', '19', '19', 'hmmm'), + '>:(' => array('mad.gif', '19', '19', 'mad'), + ':mad:' => array('mad.gif', '19', '19', 'mad'), + '>:-(' => array('angry.gif', '19', '19', 'angry'), + ':angry:' => array('angry.gif', '19', '19', 'angry'), + ':zip:' => array('zip.gif', '19', '19', 'zipper'), + ':kiss:' => array('kiss.gif', '19', '19', 'kiss'), + ':ahhh:' => array('shock.gif', '19', '19', 'shock'), + ':coolsmile:' => array('shade_smile.gif', '19', '19', 'cool smile'), + ':coolsmirk:' => array('shade_smirk.gif', '19', '19', 'cool smirk'), + ':coolgrin:' => array('shade_grin.gif', '19', '19', 'cool grin'), + ':coolhmm:' => array('shade_hmm.gif', '19', '19', 'cool hmm'), + ':coolmad:' => array('shade_mad.gif', '19', '19', 'cool mad'), + ':coolcheese:' => array('shade_cheese.gif', '19', '19', 'cool cheese'), + ':vampire:' => array('vampire.gif', '19', '19', 'vampire'), + ':snake:' => array('snake.gif', '19', '19', 'snake'), + ':exclaim:' => array('exclaim.gif', '19', '19', 'excaim'), + ':question:' => array('question.gif', '19', '19', 'question') // no comma after last item + + ); + +/* End of file smileys.php */ +/* Location: ./system/application/config/smileys.php */ \ No newline at end of file diff --git a/application/config/user_agents.php b/application/config/user_agents.php new file mode 100644 index 0000000..f15b007 --- /dev/null +++ b/application/config/user_agents.php @@ -0,0 +1,175 @@ + 'Windows Longhorn', + 'windows nt 5.2' => 'Windows 2003', + 'windows nt 5.0' => 'Windows 2000', + 'windows nt 5.1' => 'Windows XP', + 'windows nt 4.0' => 'Windows NT 4.0', + 'winnt4.0' => 'Windows NT 4.0', + 'winnt 4.0' => 'Windows NT', + 'winnt' => 'Windows NT', + 'windows 98' => 'Windows 98', + 'win98' => 'Windows 98', + 'windows 95' => 'Windows 95', + 'win95' => 'Windows 95', + 'windows' => 'Unknown Windows OS', + 'os x' => 'Mac OS X', + 'ppc mac' => 'Power PC Mac', + 'freebsd' => 'FreeBSD', + 'ppc' => 'Macintosh', + 'linux' => 'Linux', + 'debian' => 'Debian', + 'sunos' => 'Sun Solaris', + 'beos' => 'BeOS', + 'apachebench' => 'ApacheBench', + 'aix' => 'AIX', + 'irix' => 'Irix', + 'osf' => 'DEC OSF', + 'hp-ux' => 'HP-UX', + 'netbsd' => 'NetBSD', + 'bsdi' => 'BSDi', + 'openbsd' => 'OpenBSD', + 'gnu' => 'GNU/Linux', + 'unix' => 'Unknown Unix OS' + ); + + +// The order of this array should NOT be changed. Many browsers return +// multiple browser types so we want to identify the sub-type first. +$browsers = array( + 'Opera' => 'Opera', + 'MSIE' => 'Internet Explorer', + 'Internet Explorer' => 'Internet Explorer', + 'Shiira' => 'Shiira', + 'Firefox' => 'Firefox', + 'Chimera' => 'Chimera', + 'Phoenix' => 'Phoenix', + 'Firebird' => 'Firebird', + 'Camino' => 'Camino', + 'Netscape' => 'Netscape', + 'OmniWeb' => 'OmniWeb', + 'Safari' => 'Safari', + 'Mozilla' => 'Mozilla', + 'Konqueror' => 'Konqueror', + 'icab' => 'iCab', + 'Lynx' => 'Lynx', + 'Links' => 'Links', + 'hotjava' => 'HotJava', + 'amaya' => 'Amaya', + 'IBrowse' => 'IBrowse' + ); + +$mobiles = array( + // legacy array, old values commented out + 'mobileexplorer' => 'Mobile Explorer', +// 'openwave' => 'Open Wave', +// 'opera mini' => 'Opera Mini', +// 'operamini' => 'Opera Mini', +// 'elaine' => 'Palm', + 'palmsource' => 'Palm', +// 'digital paths' => 'Palm', +// 'avantgo' => 'Avantgo', +// 'xiino' => 'Xiino', + 'palmscape' => 'Palmscape', +// 'nokia' => 'Nokia', +// 'ericsson' => 'Ericsson', +// 'blackberry' => 'BlackBerry', +// 'motorola' => 'Motorola' + + // Phones and Manufacturers + 'motorola' => "Motorola", + 'nokia' => "Nokia", + 'palm' => "Palm", + 'iphone' => "Apple iPhone", + 'ipod' => "Apple iPod Touch", + 'sony' => "Sony Ericsson", + 'ericsson' => "Sony Ericsson", + 'blackberry' => "BlackBerry", + 'cocoon' => "O2 Cocoon", + 'blazer' => "Treo", + 'lg' => "LG", + 'amoi' => "Amoi", + 'xda' => "XDA", + 'mda' => "MDA", + 'vario' => "Vario", + 'htc' => "HTC", + 'samsung' => "Samsung", + 'sharp' => "Sharp", + 'sie-' => "Siemens", + 'alcatel' => "Alcatel", + 'benq' => "BenQ", + 'ipaq' => "HP iPaq", + 'mot-' => "Motorola", + 'playstation portable' => "PlayStation Portable", + 'hiptop' => "Danger Hiptop", + 'nec-' => "NEC", + 'panasonic' => "Panasonic", + 'philips' => "Philips", + 'sagem' => "Sagem", + 'sanyo' => "Sanyo", + 'spv' => "SPV", + 'zte' => "ZTE", + 'sendo' => "Sendo", + + // Operating Systems + 'symbian' => "Symbian", + 'SymbianOS' => "SymbianOS", + 'elaine' => "Palm", + 'palm' => "Palm", + 'series60' => "Symbian S60", + 'windows ce' => "Windows CE", + + // Browsers + 'obigo' => "Obigo", + 'netfront' => "Netfront Browser", + 'openwave' => "Openwave Browser", + 'mobilexplorer' => "Mobile Explorer", + 'operamini' => "Opera Mini", + 'opera mini' => "Opera Mini", + + // Other + 'digital paths' => "Digital Paths", + 'avantgo' => "AvantGo", + 'xiino' => "Xiino", + 'novarra' => "Novarra Transcoder", + 'vodafone' => "Vodafone", + 'docomo' => "NTT DoCoMo", + 'o2' => "O2", + + // Fallback + 'mobile' => "Generic Mobile", + 'wireless' => "Generic Mobile", + 'j2me' => "Generic Mobile", + 'midp' => "Generic Mobile", + 'cldc' => "Generic Mobile", + 'up.link' => "Generic Mobile", + 'up.browser' => "Generic Mobile", + 'smartphone' => "Generic Mobile", + 'cellphone' => "Generic Mobile" + ); + +// There are hundreds of bots but these are the most common. +$robots = array( + 'googlebot' => 'Googlebot', + 'msnbot' => 'MSNBot', + 'slurp' => 'Inktomi Slurp', + 'yahoo' => 'Yahoo', + 'askjeeves' => 'AskJeeves', + 'fastcrawler' => 'FastCrawler', + 'infoseek' => 'InfoSeek Robot 1.0', + 'lycos' => 'Lycos' + ); + +/* End of file user_agents.php */ +/* Location: ./system/application/config/user_agents.php */ \ No newline at end of file diff --git a/application/controllers/PlanificarTaller.php b/application/controllers/PlanificarTaller.php new file mode 100644 index 0000000..4da4a7a --- /dev/null +++ b/application/controllers/PlanificarTaller.php @@ -0,0 +1,366 @@ +is_logged_in(); + + $this->load->model('taller_model'); + $this->load->model('relator_model'); + $this->load->model('planificar_taller_model'); + + } + + function index(){ + //echo "sadf"; + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $sql = "SELECT tp.id_tp,t.nombre As nombre_taller, r.nombre_completo As nombre_relator, to_char(tp.fecha, 'DD-MM-YYYY') AS fecha, tp.estado, tp.cupos" + . "\n FROM sit_planificar_taller tp, sit_taller t, sit_relator r" + . "\n WHERE tp.id_relator = r.id AND tp.id_taller = t.id_taller" + . "\n ORDER BY t.nombre ASC" + ; + $data['talleresplanificados'] = $this->planificar_taller_model->custom_query($sql); + + $this->load->view('admin/PlanificarTaller/listar_planificacion_taller',$data); + } + + function activar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $id_tp = $this->uri->segment(3); + $estado = $this->uri->segment(4); + + + + $tp_result = $this->planificar_taller_model->update(array('id_tp' => $id_tp, 'estado' => $estado)); + + if(!$tp_result){ + $tipo = 'error'; + $msg = 'No se puede activar el Taller planificado'; + + $this->session->set_flashdata($tipo, $msg); + redirect('PlanificarTaller/'); + + }else{ + + $tipo = 'success'; + $msg = 'Se ha activado el Taller planificado'; + + $this->session->set_flashdata($tipo, $msg); + redirect('PlanificarTaller/'); + + + } + } + + + function eliminar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + + if ($this->uri->segment(3) === FALSE){ + + $tipo = 'error'; + $msg = 'No se ha podido eliminar el Taller Planificado'; + + }else{ + $id_tp = $this->uri->segment(3); + if($this->planificar_taller_model->delete($id_tp)){ + + $tipo = 'success'; + $msg = 'El taller Planificado se ha eliminado correctamente!'; + + }else{ + + $tipo = 'error'; + $msg = 'No existe el taller planificado que deseas eliminar'; + } + + } + + $this->session->set_flashdata($tipo, $msg); + redirect('PlanificarTaller/'); + + } + + function editar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $id_tp = $this->uri->segment(3); + //$tp_result = $this->planificar_taller_model->get_talleres_planificados(array('id_tp' => $id_tp)); + $sql = "select t.id_tp, t.id_relator,t.id_taller,to_char(t.fecha, 'DD-MM-YYYY') AS fecha, t.hora_inicio, t.hora_termino, t.lugar, t.cupos, t.estado" + . "\n from sit_planificar_taller t limit 1" + ; + + $tp_result = $this->planificar_taller_model->custom_query($sql); + + if(!$tp_result){ + + $tipo = 'error'; + $msg = 'No existe el Taller planificado que deseas eliminar'; + + $this->session->set_flashdata($tipo, $msg); + redirect('PlanificarTaller/'); + + } + + // Validate form + $this->form_validation->set_rules('hora_inicio', 'Hora de inicio', 'callback_valida_hora'); + $this->form_validation->set_rules('lugar', 'Lugar', 'trim|required'); + + + if($this->form_validation->run()) + { + //print_r($_POST) ; + $h_inicio = $this->input->post('hora_inicio').":".$this->input->post('minuto_inicio').":00"; + $h_termino = $this->input->post('hora_termino').":".$this->input->post('minuto_termino').":00"; + // print_r($_POST); + $actualizacion_pt = array( + 'id_tp' => $id_tp, + 'id_relator' => $this->input->post('relator'), + 'id_taller' => $this->input->post('taller'), + 'fecha' => $this->input->post('fecha'), + 'hora_inicio' => $h_inicio, + 'hora_termino' => $h_termino, + 'lugar' => $this->input->post('lugar'), + 'cupos' => $this->input->post('cupos'), + 'estado' => $this->input->post('estado'), + ); + + // print_r($actualizacion_pt); + + if($this->planificar_taller_model->update($actualizacion_pt)) { + + $this->session->set_flashdata('success', 'El taller Planificado se ha modificado correctamente!'); + redirect('PlanificarTaller/'); + + } else { + $this->session->set_flashdata('error', 'No se ha podido modificar el Taller Planificado!'); + redirect('PlanificarTaller/'); + } + //*/ + } + + + + + $talleres = $this->taller_model->get_talleres(array('sortBy' => 'nombre','sortDirection' => 'ASC' )); + $sql = "SELECT t.id, t.nombre_completo FROM sit_relator t ORDER BY nombre_completo ASC"; + $relatores = $this->relator_model->custom_query($sql); + + foreach ($relatores as $relator){ + $rel_op[$relator->id] = $relator->nombre_completo; + } + $data['relatores'] = $rel_op; + + foreach ($talleres as $taller){ + $taller_op[$taller->id_taller] = $taller->nombre; + } + + $this->load->helper('date'); + $cadenafecha = "%d-%m-%Y"; + + $tiempo = time(); + $cupos = array(); + for($i=1;$i<100;$i++){ + $cupos[$i] = $i; + } + //combos hora + $horas = array(); + for($i=0;$i<24;$i++){ + $h = sprintf("%02d",$i); + $horas[$h] = $h; + } + + //combos minutos + $minutos = array(); + for($i=0;$i<60;$i++){ + $m = sprintf("%02d",$i); + $minutos[$m] = $m; + } + + $data['tp'] = $tp_result[0]; + + + $hora_inicial = explode(':', $tp_result[0]->hora_inicio); + $hora_termino = explode(':', $tp_result[0]->hora_termino); + + //valores por defecto + $data['valor_defecto_inicio_hora'] = $hora_inicial[0]; + $data['valor_defecto_inicio_minuto'] = $hora_inicial[1]; + + $data['valor_defecto_termino_hora'] = $hora_termino[0]; + $data['valor_defecto_termino_minuto'] = $hora_termino[1]; + + $data['relator_sel'] = $tp_result[0]->id_relator; + $data['taller_sel'] = $tp_result[0]->id_taller; + $data['cupos_sel'] = $tp_result[0]->cupos; + + if($tp_result[0]->estado){ + $data['inactivo_checked'] = 0; + $data['activo_checked'] = 1; + }else{ + $data['inactivo_checked'] = 1; + $data['activo_checked'] = 0; + } + + + + $data['horas'] = $horas; + $data['minutos'] = $minutos; + $data['cupos'] = $cupos; + $data['hoy'] = $tp_result[0]->fecha;//mdate($cadenafecha); + $data['relatores'] = $rel_op; + $data['talleres'] = $taller_op; + + $this->load->view("admin/PlanificarTaller/editar_planificacion_taller",$data); + + } + + function agregar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + // Validate form + //$this->form_validation->set_rules('fecha', 'Fecha', 'trim|required'); + $this->form_validation->set_rules('hora_inicio', 'Hora de inicio', 'callback_valida_hora'); + //$this->form_validation->set_rules('hora_termino', 'Hora de Término', 'trim|required'); + $this->form_validation->set_rules('lugar', 'Lugar', 'trim|required'); + + + if($this->form_validation->run()) + { + $h_inicio = $this->input->post('hora_inicio').":".$this->input->post('minuto_inicio').":00"; + $h_termino = $this->input->post('hora_termino').":".$this->input->post('minuto_termino').":00"; + // print_r($_POST); + $planificacion_taller = array( + 'id_relator' => $this->input->post('relator'), + 'id_taller' => $this->input->post('taller'), + 'fecha' => $this->input->post('fecha'), + 'hora_inicio' => $h_inicio, + 'hora_termino' => $h_termino, + 'lugar' => $this->input->post('lugar'), + 'cupos' => $this->input->post('cupos'), + 'estado' => $this->input->post('estado'), + ); + + //print_r($planificacion_taller); + + $id_tp = $this->planificar_taller_model->add($planificacion_taller); + + + if($id_tp) { + $this->session->set_flashdata('success', 'La planificación del taller se ha realizado correctamente!.'); + redirect('PlanificarTaller/'); + } else { + $this->session->set_flashdata('error', 'No se pudo realizar la planificación del taller!'); + redirect('PlanificarTaller/'); + } + //*/ + + } + + + $talleres = $this->taller_model->get_talleres(array('sortBy' => 'nombre','sortDirection' => 'ASC' )); + + $sql = "SELECT t.id, t.nombre_completo FROM sit_relator t ORDER BY nombre_completo ASC"; + $relatores = $this->relator_model->custom_query($sql); + + foreach ($relatores as $relator){ + $rel_op[$relator->id] = $relator->nombre_completo; + } + $data['relatores'] = $rel_op; + + foreach ($talleres as $taller){ + $taller_op[$taller->id_taller] = $taller->nombre; + } + + $this->load->helper('date'); + $cadenafecha = "%d-%m-%Y"; + $tiempo = time(); + $cupos = array(); + for($i=1;$i<100;$i++){ + $cupos[$i] = $i; + } + //combos hora + $horas = array(); + for($i=0;$i<24;$i++){ + $h = sprintf("%02d",$i); + $horas[$h] = $h; + } + + //combos minutos + $minutos = array(); + for($i=0;$i<60;$i++){ + $m = sprintf("%02d",$i); + $minutos[$m] = $m; + } + + $data['horas'] = $horas; + $data['minutos'] = $minutos; + $data['cupos'] = $cupos; + $data['hoy'] = mdate($cadenafecha); + $data['relatores'] = $rel_op; + $data['talleres'] = $taller_op; + + $this->load->view("admin/PlanificarTaller/agregar_planificacion_taller",$data); + } + + /** + * + * valida horario de taller + * @param $hora_inicio + */ + function valida_hora($hora_inicio){ + $hora_termino = $this->input->post('hora_termino'); + + //echo ($hora_inicio > $hora_termino); + + + if($hora_inicio < $hora_termino) { + //echo $hora_inicio. " - ".$hora_termino; + //echo "hora_inicio < hora_termino"; + //die(); + return true; + } + + $this->form_validation->set_message('valida_hora', 'La hora de inicio debe ser menor que la hora de término!'); + return false; + } + function is_logged_in() + { + $is_logged_in = $this->session->userdata('is_logged_in'); + + if(!isset($is_logged_in) || $is_logged_in != true) + { + echo 'Tu no tienes permisos para acceder a esta pagina. Acceder?'; + die(); + //$this->load->view('login_form'); + } + } + +} + \ No newline at end of file diff --git a/application/controllers/admin.php b/application/controllers/admin.php new file mode 100644 index 0000000..aeabded --- /dev/null +++ b/application/controllers/admin.php @@ -0,0 +1,57 @@ +is_logged_in(); + + //cargamos los modelos necesarios + $this->load->model('admin_model'); + $this->load->model('relator_model'); + + //registramos los tipo + $this->id = $this->session->userdata('id'); + $this->tipo = $this->session->userdata('tipo'); + $this->nombre = $this->session->userdata('nombre'); + + + } + + function index(){ + + $data['id'] = $this->id; + $data['tipo'] = $this->tipo; + $data['nombre'] = $this->nombre; + + if($this->tipo == 'admin'){ + $this->load->view('admin/admin_index',$data); + }else{ + //$this->load->view('admin/relatores',$data); + redirect("relatores/editar/".$this->id); + } + + } + + + function is_logged_in() + { + $is_logged_in = $this->session->userdata('is_logged_in'); + + if(!isset($is_logged_in) || $is_logged_in != true) + { + echo 'Tu no tienes permisos para acceder a esta pagina. Acceder?'; + die(); + //$this->load->view('login_form'); + } + } + +} \ No newline at end of file diff --git a/application/controllers/administradores.php b/application/controllers/administradores.php new file mode 100644 index 0000000..297f452 --- /dev/null +++ b/application/controllers/administradores.php @@ -0,0 +1,209 @@ +is_logged_in(); + + + //cargamos los modelos necesarios + $this->load->model('admin_model'); + + } + + function index(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + $data['admins'] = $this->admin_model->get_users(array('sortBy' => 'nombre_completo','sortDirection' => 'ASC' )); + + + + $this->load->view('admin/usuarios/listar_administradores.php',$data); + + } + /** + * @return "objeto eliminado" + * Funcion encardada de elimar administradores + */ + function eliminar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + if ($this->uri->segment(3) === FALSE){ + + $tipo = 'error'; + $msg = 'No se ha definido un usuario a eliminar'; + + }else{ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $id = $this->uri->segment(3); + if($this->admin_model->delete($id)){ + + $nombres = $this->admin_model->get_users(array('id' => $id,'limit' => '1')); + $nombre = $nombres[0]->nombre_completo; + + $tipo = 'success'; + $msg = 'El usuario '.$nombre. 'Se ha eliminado correctamente!'; + }else{ + $tipo = 'error'; + $msg = 'No existe el Administrador que deseas eliminar'; + } + + } + + $this->session->set_flashdata($tipo, $msg); + redirect('administradores/'); + + } + function editar($id){ + + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $id = $this->uri->segment(3); + $result = $this->admin_model->get_users(array('id' => $id)); + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + if(!$result){ + + $tipo = 'error'; + $msg = 'No se ha definido un usuario a actualizar'; + + $this->session->set_flashdata($tipo, $msg); + redirect('administradores/'); + + } + + // Validate form + $this->form_validation->set_rules('email', 'email', 'trim|required|valid_email'); + // $this->form_validation->set_rules('contrasena', 'Contraseña', 'trim|required'); + $this->form_validation->set_rules('nombre_completo', 'Nombre', 'trim|required'); + + + if($this->form_validation->run()) + { + // agregamos el id al post + $_POST['id'] = $id; + + //si no hay contraseña nueva + if(empty($_POST['contrasena'])) unset($_POST['contrasena']); + + + if($this->admin_model->update($_POST)) { + + $this->session->set_flashdata('success', 'El usuario ha sido actualizado con exito!.'); + redirect('administradores/'); + + } else { + $this->session->set_flashdata('flashError', 'No se ha podido actualizar el administrador.'); + redirect('administradores/'); + } + //*/ + + } + + $data['admin'] = $result[0]; + $this->load->view('admin/usuarios/editar_administrador', $data); + + } + + function agregar(){ + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + + // Validate form + $this->form_validation->set_rules('email', 'email', 'trim|required|valid_email|callback_valida_unicidad'); + $this->form_validation->set_rules('nombre_completo', 'Nombre', 'trim|required'); + $this->form_validation->set_rules('contrasena', 'Contraseña', 'trim|required'); + + if($this->form_validation->run()) + { + $_POST['contrasena'] = md5($_POST['contrasena']); + unset($_POST['add']); + + // Validation passes + $id = $this->admin_model->add($_POST); + + + + if($id) { + $this->session->set_flashdata('success', 'El administrador ha sido agregado correctamente!.'); + redirect('administradores/'); + } else { + $this->session->set_flashdata('error', 'No se ha podido agregar al usuario.'); + redirect('administradores/'); + } + + + } + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + $this->load->view('admin/usuarios/agregar_administrador',$data); + } + + function valida_unicidad($email){ + + + $count = $this->admin_model->get_users(array('email' => $email, 'count' => true)); + if(!$count) { + return TRUE; + } + + $this->form_validation->set_message('valida_unicidad', 'ya existe administrador'); + + return FALSE; + } + + /** + * + * verifica si esta activa la sesion + */ + function is_logged_in() + { + $is_logged_in = $this->session->userdata('is_logged_in'); + + if(!isset($is_logged_in) || $is_logged_in != true) + { + echo 'Tu no tienes permisos para acceder a esta pagina. Acceder?'; + die(); + //$this->load->view('login_form'); + } + } + +} diff --git a/application/controllers/categorias.php b/application/controllers/categorias.php new file mode 100644 index 0000000..4a71075 --- /dev/null +++ b/application/controllers/categorias.php @@ -0,0 +1,183 @@ +is_logged_in(); + $this->load->model('categoria_model'); + } + + function index(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + $data['categorias'] = $this->categoria_model->get_categories(array('sortBy' => 'nombre_completo','sortDirection' => 'ASC' )); + + $this->load->view('admin/categorias/listar_categorias',$data); + + } + + + function eliminar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + if ($this->uri->segment(3) === FALSE){ + + $tipo = 'error'; + $msg = 'No se ha definido una categoría a eliminar'; + + }else{ + + $id_categoria = $this->uri->segment(3); + + $categorias = $this->categoria_model->get_categories(array('id_categoria' => $id,'limit' => '1')); + $nombre = $categorias[0]->nombre; + + + if($this->categoria_model->delete($id_categoria)){ + + $tipo = 'success'; + $msg = 'La Categoría '.$nombre. ' se ha eliminado correctamente!'; + + }else{ + + $tipo = 'error'; + $msg = 'No existe La categoría que deseas eliminar'; + } + + } + + $this->session->set_flashdata($tipo, $msg); + redirect('categorias/'); + + } + + function editar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $id = $this->uri->segment(3); + + $result = $this->categoria_model->get_categories(array('id_categoria' => $id)); + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + if(!$result){ + + $tipo = 'error'; + $msg = 'No existe la categoría que desa actualizar'; + + $this->session->set_flashdata($tipo, $msg); + redirect('categorias/'); + + } + + // Validate form + $this->form_validation->set_rules('nombre', 'nombre', 'trim|required'); + $this->form_validation->set_rules('descripcion', 'descripcion', 'trim|required'); + + + if($this->form_validation->run()) + { + + //print_r($_POST); + $pattern = "#<[^>]*?>#"; + $desc = $_POST['descripcion']; + $_POST['descripcion'] = preg_replace($pattern,'', $desc); + + // agregamos el id al post + $_POST['id_categoria'] = $id; + unset($_POST['editar_categoria']); + + if($this->categoria_model->update($_POST)) { + + $this->session->set_flashdata('success', 'La categoría se ha actualizado correctamente!'); + redirect('categorias/'); + + } else { + + $this->session->set_flashdata('error', 'No se ha podido actualizar La categoría'); + redirect('categorias/'); + } + + + } + + + $data['categoria'] = $result[0]; + + + $this->load->view('admin/categorias/editar_categoria', $data); + } + + function agregar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + // Validate form + $this->form_validation->set_rules('nombre', 'nombre', 'trim|required'); + $this->form_validation->set_rules('descripcion', 'descripcion', 'trim|required'); + + + if($this->form_validation->run()) + { + + unset($_POST['agregar_categoria']); + + + // Validation passes + $id = $this->categoria_model->add($_POST); + + + if($id) { + $this->session->set_flashdata('success', 'La categoría ha sido registrado correctamente!.'); + redirect('categorias/'); + } else { + $this->session->set_flashdata('error', 'No se ha registrar la categoría.'); + redirect('relatores/'); + } + + + } + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + $this->load->view('admin/categorias/agregar_categoria',$data); + } + /** + * + * verifica si esta activa la sesion + */ + function is_logged_in() + { + $is_logged_in = $this->session->userdata('is_logged_in'); + + if(!isset($is_logged_in) || $is_logged_in != true) + { + echo 'Tu no tienes permisos para acceder a esta pagina. Acceder?'; + die(); + //$this->load->view('login_form'); + } + } +} \ No newline at end of file diff --git a/application/controllers/crud.php b/application/controllers/crud.php new file mode 100644 index 0000000..c4bd9ac --- /dev/null +++ b/application/controllers/crud.php @@ -0,0 +1,14 @@ +load->scaffolding('hotel'); + } + + function index(){ + + } +} \ No newline at end of file diff --git a/application/controllers/index.html b/application/controllers/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/controllers/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/controllers/main.php b/application/controllers/main.php new file mode 100644 index 0000000..85e0ead --- /dev/null +++ b/application/controllers/main.php @@ -0,0 +1,254 @@ +load->model('admin_model'); + $this->load->model('relator_model'); + $this->load->model('taller_model'); + $this->load->model('planificar_taller_model'); + $this->load->model('participante_model'); + + $this->load->model('categoria_model'); + + + } + + function index(){ + + $sql = "SELECT tp.id_tp,t.nombre As nombre_taller, r.nombre_completo As nombre_relator,tp.lugar, to_char(tp.fecha, 'DD-MM-YYYY') AS fecha, t.id_taller" + . "\n FROM sit_planificar_taller tp, sit_taller t, sit_relator r" + . "\n WHERE tp.estado = 1 AND tp.id_relator = r.id AND tp.id_taller = t.id_taller" + . "\n ORDER BY tp.fecha ASC" + ; + + + $sql2 = "select t.id_taller, c.nombre, c.descripcion" + . "\n from sit_taller t, sit_categoria_taller ct, sit_categoria c" + . "\n where t.id_taller = ct.id_taller and c.id_categoria = ct.id_categoria" + ; + + $data['categorias'] = $this->planificar_taller_model->custom_query($sql2); + $data['talleres'] = $this->planificar_taller_model->custom_query($sql); + + $this->load->view('front/front_index',$data); + + } + + function inscribir(){ + + $id_tp = $this->uri->segment(3); + + + + $this->form_validation->set_rules('email','E-mail','required|trim|valid_email'); + $this->form_validation->set_rules('nombre_completo','Nombre Completo','required|trim'); + + + + if($this->form_validation->run()){ + //print_r($_POST); + // echo $id_tp; + //die(); + + + $participante = $this->participante_model->get_participantes(array('email' => $_POST['email'])); + //select * from sit_participante_taller_planificado ptp, sit_participante p + //where p.email = email AND ptp.id_tp = $id_tp + + //print_r($participante);die(); + if(!count($participante)){ + $id_part = $this->participante_model->add($_POST); + }else{ + + $id_part = $participante[0]->id_part; + + $sql = "select * from sit_participante_taller_planificado ptp" + . "\n where ptp.id_tp = ".$id_tp." AND ptp.id_part = ".$id_part + ; + $esta_inscrito = $this->participante_model->custom_execute_query($sql); + + if(count($esta_inscrito[0])){ + $tipo = 'error'; + $msg = 'Usted ya se encuentra inscrito en el taller!'; + $this->session->set_flashdata($tipo, $msg); + redirect('main/inscribir/'.$id_tp); + + } + } + + $sql = "INSERT INTO sit_participante_taller_planificado (id_tp, id_part) VALUES('".$id_tp."','".$id_part."')"; + + if(!$this->participante_model->custom_query($sql)){ + + $tipo = 'success'; + $msg = 'Se ha registrado el Taller correctamente!'; + $this->session->set_flashdata($tipo, $msg); + redirect('main/inscribir/'.$id_tp); + + }else{ + + $tipo = 'error'; + $msg = 'No se ha podido registrar el taller!'; + $this->session->set_flashdata($tipo, $msg); + redirect('main/inscribir/'.$id_tp); + } + + } + + + + $sql = "SELECT tp.id_tp,t.nombre As nombre_taller, r.nombre_completo As nombre_relator,tp.lugar, to_char(tp.fecha, 'DD-MM-YYYY') AS fecha, tp.hora_inicio, tp.hora_termino, tp.estado, tp.cupos, t.nivel, t.requisitos" + . "\n FROM sit_planificar_taller tp, sit_taller t, sit_relator r" + . "\n WHERE tp.estado = 1 AND tp.id_tp = ".$id_tp." AND tp.id_relator = r.id AND tp.id_taller = t.id_taller" + . "\n ORDER BY tp.fecha ASC" + ; + + + $talleres = $this->planificar_taller_model->custom_query($sql); + $data['taller'] = $talleres[0]; + //print_r($data); + //echo $id_tp; + $this->load->view('front/inscribir_taller',$data); + } + + + function relator(){ + + $id_relator = $this->uri->segment(3); + + $sql = "select c.nombre" + . "\n from sit_relator r, sit_categoria_relator cr, sit_categoria c" + . "\n where r.id = ".$id_relator." and r.id = cr.id_relator and c.id_categoria = cr.id_categoria" + ; + + + + $result = $this->relator_model->get_users(array('id' => $id_relator, 'limit' => '1')); + + $data['categorias'] = $this->planificar_taller_model->custom_query($sql); + $data['relator'] = $result[0]; + + $this->load->view('front/detalle_relator',$data); + + } + + function taller(){ + + $id_taller = $this->uri->segment(3); + $result = $this->taller_model->get_talleres(array('id_taller' => $id_taller, 'limit' => '1')); + + + + $sql = "select c.nombre" + . "\n from sit_taller t, sit_categoria_taller ct, sit_categoria c" + . "\n where t.id_taller = ".$id_taller." and t.id_taller = ct.id_taller and c.id_categoria = ct.id_categoria" + ; + + $data['categorias'] = $this->planificar_taller_model->custom_query($sql); + + + $data['taller'] = $result[0]; + $this->load->view('front/detalle_taller',$data); + + } + function planificacion(){ + + + + + $sql = "SELECT tp.id_tp,t.nombre As nombre_taller, r.nombre_completo As nombre_relator, to_char(tp.fecha, 'DD-MM-YYYY') AS fecha, tp.estado, tp.cupos, tp.id_taller, tp.id_relator" + . "\n FROM sit_planificar_taller tp, sit_taller t, sit_relator r" + . "\n WHERE tp.id_relator = r.id AND tp.id_taller = t.id_taller" + . "\n ORDER BY t.nombre ASC" + ; + $data['talleres'] = $this->planificar_taller_model->custom_query($sql); + $this->load->view('front/listar_planificacion_talleres',$data); + } + + function login(){ + + + + + $this->form_validation->set_rules('user_login','E-mail','required|trim|callback_valida_login'); + $this->form_validation->set_rules('user_pass','password','required|trim'); + + + + if($this->form_validation->run()){ + /* + if($this->_tipo == 'admin'){ + $result = $this->admin_model->get_users(array('email' => $this->id)); + }else{ + $result = $this->relator_model->get_users(array('email' => $id)); + } + $nombre = $result[0]->nombre_completo; + //*/ + $data = array( + 'id' => $this->_id, + 'nombre' => $this->_nombre, + 'tipo' => $this->_tipo, + 'is_logged_in' => true + ); + + $this->session->set_userdata($data); + + redirect('dashboard'); + } + $this->load->view('front/login_form'); + + } + + + + function salir() + { + $this->session->sess_destroy(); + $this->login(); + } + + function valida_login($user){ + + + if($this->input->post('user_pass')) + { + $pass = $this->input->post('user_pass'); + $user_result = $this->admin_model->get_users(array('email' => $user, 'contrasena' => md5($pass))); + + + if($user_result) { + $this->_tipo = 'admin'; + $this->_id = $user_result[0]->id; + $this->_nombre = $user_result[0]->nombre_completo; + + //print_r($user_result); + return TRUE; + } + + $user_result = $this->relator_model->get_users(array('email' => $user, 'contrasena' => md5($pass))); + + if($user_result) { + + $this->_tipo = 'relator'; + $this->_id = $user_result[0]->id; + $this->_nombre = $user_result[0]->nombre_completo; + + return TRUE; + } + + } + $this->form_validation->set_message('valida_login', 'Tu E-mail o Contraseñas son incorrectos'); + + return FALSE; + } + + +} \ No newline at end of file diff --git a/application/controllers/participantes.php b/application/controllers/participantes.php new file mode 100644 index 0000000..71123d3 --- /dev/null +++ b/application/controllers/participantes.php @@ -0,0 +1,115 @@ +is_logged_in(); + + + $this->load->model('participante_model'); + $this->load->model('planificar_taller_model'); + //$this->load->model('categoria_relator_model'); + } + + + function eliminar(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + if ($this->uri->segment(3) === FALSE){ + + $tipo = 'error'; + $msg = 'No se ha definido un participante a eliminar'; + + }else{ + + $id_tp = $this->uri->segment(3); + + + if($this->participante_model->delete($id_tp)){ + + $tipo = 'success'; + $msg = 'El participante ha sido eliminado correctamente'; + + }else{ + + $tipo = 'error'; + $msg = 'No se ha podido eliminar el participanteâ€.'; + } + + } + + $this->session->set_flashdata($tipo, $msg); + redirect('participantes/'); + } + + + function index(){ + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $id_tp = $this->input->post('id_tp'); + + if(!empty($id_tp)){ + + $where = "where ptp.id_tp = ".$id_tp." and p.id_part = ptp.id_part"; + $data['taller_selecionado'] = $id_tp; + }else{ + $where = "where p.id_part = ptp.id_part"; + $data['taller_selecionado'] = ""; + } + + + $sql = "select p.id_part, ptp.id_tp, p.email, p.nombre_completo" + . "\n from sit_participante p, sit_participante_taller_planificado ptp " + . $where + ; + + $data['participantes'] = $this->participante_model->custom_execute_query($sql); + //$data['participantes'] = $this->participante_model->get_participantes(array('sortBy' => 'email', 'sortDirection' => 'ASC')); + + $sql = "select pt.id_tp, t.nombre" + . "\n from sit_planificar_taller pt, sit_taller t" + . "\n where pt.id_taller = t.id_taller" + ; + + $talleres = $this->planificar_taller_model->custom_query($sql); + + $array_taller['0'] = "Todos los talleres"; + foreach ($talleres as $taller){ + $array_taller[$taller->id_tp] = $taller->nombre; + } + + $data['talleres'] = $array_taller; + + $this->load->view('admin/participantes/listar_participantes',$data); + } + + + /** + * + * verifica si esta activa la sesion + */ + function is_logged_in() + { + $is_logged_in = $this->session->userdata('is_logged_in'); + + if(!isset($is_logged_in) || $is_logged_in != true) + { + echo 'Tu no tienes permisos para acceder a esta pagina. Acceder?'; + die(); + //$this->load->view('login_form'); + } + } + +} \ No newline at end of file diff --git a/application/controllers/relatores.php b/application/controllers/relatores.php new file mode 100644 index 0000000..edfae59 --- /dev/null +++ b/application/controllers/relatores.php @@ -0,0 +1,371 @@ +is_logged_in(); + + // $this->load->model('admin_model'); + + $this->load->model('relator_model'); + $this->load->model('categoria_model'); + $this->load->model('categoria_relator_model'); + + $this->gallery_path = realpath(APPPATH . '../fotos_perfil'); + $this->gallery_path_url = base_url().'fotos_perfil/'; + + } + + function index(){ + + + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $data['relatores'] = $this->relator_model->get_users(array('sortBy' => 'nombre_completo','sortDirection' => 'ASC' )); + + + $this->load->view('admin/relatores/listar_relatores',$data); + + + } + + function agregar(){ + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + // Validate form + $this->form_validation->set_rules('email', 'email', 'trim|required|valid_email|callback_valida_unicidad'); + + $this->form_validation->set_rules('nombre_completo', 'Nombre', 'trim|required'); + $this->form_validation->set_rules('contrasena', 'Contraseña', 'trim|required'); + $this->form_validation->set_rules('categorias','Categoría','callback_valida_unicidad_categorias'); + + + if($this->form_validation->run()) + { + $categorias = $_POST['categorias']; + unset($_POST['categorias']); + + $_POST['contrasena'] = md5($_POST['contrasena']); + unset($_POST['agregar_relator']); + + + if(empty($_POST['sitio_web'])) unset($_POST['sitio_web']); + if(empty($_POST['biografia'])) unset($_POST['biografia']); + + + if(!empty($_FILES['foto']['name'])){ + $_POST['fotografia'] = $this->do_upload('foto'); + } + + // Validation passes + $id = $this->relator_model->add($_POST); + + if($id) { + + //insertamos las categorias seleccionados + foreach ($categorias as $cat){ + $add = array( + 'id_relator' =>$id, + 'id_categoria' => $cat + ); + $this->categoria_relator_model->add($add); + } + + $this->session->set_flashdata('success', 'El Relator ha sido registrado correctamente!.'); + redirect('relatores/'); + + } else { + $this->session->set_flashdata('error', 'No se ha registrar al relator.'); + redirect('relatores/'); + } + + + } + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + $data['categorias'] = $this->categoria_model->get_categories(); + + $this->load->view('admin/relatores/agregar_relator',$data); + } + + function eliminar(){ + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + if ($this->uri->segment(3) === FALSE){ + + $tipo = 'error'; + $msg = 'No se ha definido un relator a eliminar'; + + }else{ + + $id = $this->uri->segment(3); + + $nombres = $this->relator_model->get_users(array('id' => $id,'limit' => '1')); + $nombre = $nombres[0]->nombre_completo; + $foto = $nombres[0]->fotografia; + $this->load->model('planificar_taller_model'); + $tp = $this->planificar_taller_model->get_talleres_planificados(array('id_relator' => $id, 'count' => true)); + + if($tp){ + $tipo = 'error'; + $msg = 'Imposible eliminar al relator, debido a que tiene un taller programado!'; + $this->session->set_flashdata($tipo, $msg); + redirect('relatores/'); + } + + if($this->relator_model->delete($id)){ + + $tipo = 'success'; + $msg = 'El relator '.$nombre. ' se ha eliminado correctamente!'; + $this->delete_images($foto); + + }else{ + + $tipo = 'error'; + $msg = 'No existe el relator que deseas eliminar'; + } + + } + + $this->session->set_flashdata($tipo, $msg); + redirect('relatores/'); + + } + + function editar(){ + + $id = $this->uri->segment(3); + $result = $this->relator_model->get_users(array('id' => $id)); + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + if(!$result){ + + $tipo = 'error'; + $msg = 'No existe el relator que deseas editar'; + + $this->session->set_flashdata($tipo, $msg); + redirect('relatores/'); + + } + + // Validate form + $this->form_validation->set_rules('email', 'email', 'trim|required|valid_email'); + // $this->form_validation->set_rules('contrasena', 'Contraseña', 'trim|required'); + $this->form_validation->set_rules('nombre_completo', 'Nombre', 'trim|required'); + $this->form_validation->set_rules('categorias','Categoría','callback_valida_unicidad_categorias'); + + if($this->form_validation->run()) + { + + // agregamos el id al post + $_POST['id'] = $id; + unset($_POST['save']); + + //si no hay contraseña nueva + if(empty($_POST['contrasena'])) unset($_POST['contrasena']); + + if(empty($_POST['sitio_web'])) unset($_POST['sitio_web']); + + if(empty($_POST['biografia'])) unset($_POST['biografia']); + + //if(empty($_POST['fotografia'])) unset($_POST['fotografia']); + + if(!empty($_FILES['fotografia']['name'])){ + $_POST['fotografia'] = $this->do_upload('fotografia'); + } + + + + $res = $this->relator_model->get_users(array('id'=>$id)); + + + $categorias = $_POST['categorias']; + unset ($_POST['categorias']); + + if($this->relator_model->update($_POST)) { + + //delete file thumbs and full + if(!empty($_POST['fotografia'])){ + $this->delete_images($res[0]->fotografia); + } + + //eliminamos todas las categorias del relator + $this->categoria_relator_model->delete(array('id_relator' => $id)); + //insertamos las categorias seleccionados + //print_r($categorias); + + foreach ($categorias as $cat){ + $add = array( + 'id_relator' =>$id, + 'id_categoria' => $cat + ); + //print_r($add); + $id_rm = $this->categoria_relator_model->add($add); + } + + $this->session->set_flashdata('success', 'El relator se ha actualizado correctamente.'); + + if($this->session->userdata('tipo') == 'relator'){ + redirect('relatores/editar/'.$id); + }else{ + redirect('relatores/'); + } + + + } else { + + $this->session->set_flashdata('error', 'No se ha podido actualizar el relator.'); + + if($this->session->userdata('tipo') == 'relator'){ + redirect('relatores/editar/'.$id); + }else{ + redirect('relatores/'); + } + } + + //*/ + } + + $data['relator'] = $result[0]; + + $data['categorias'] = $this->categoria_model->get_categories(); + + + + $data['seleccionadas'] = $this->categoria_relator_model->get_categories_relator(array('id_relator' => $id)); + + $this->load->view('admin/relatores/editar_relator', $data); + + } + + function delete_images($name){ + + //delete file thumbs + $path = $this->gallery_path."/thumbs/".$name; + unlink($path); + + $path = $this->gallery_path."/".$name; + unlink($path); + } + + /** + * + * valida unicidad de la dirección de correo + * @param $email + */ + function valida_unicidad($email){ + + + $count = $this->relator_model->get_users(array('email' => $email, 'count' => true)); + if(!$count) { + return TRUE; + } + + $this->form_validation->set_message('valida_unicidad', 'Ya existe el relator que desea registrar'); + + return FALSE; + } + + /** + * + * Enter description here ... + * @param unknown_type $email + */ + function valida_unicidad_categorias($categorias){ + + $cont = count($categorias); + + if($cont){ + return true; + } + + $this->form_validation->set_message('valida_unicidad_categorias', 'Debes seleccionar al menos una categoría'); + return false; + } + /** + * + * Realiza el upload + */ + function do_upload($file) { + + $config = array( + 'allowed_types' => 'jpg|jpeg|gif|png', + 'upload_path' => './fotos_perfil/', + 'max_size' => 2000 + ); + + $this->load->library('upload', $config); + + $nombre_imagen = $_FILES[$file]['name']; + $nombre_imagen = str_replace(" ","_",$nombre_imagen); + + $_FILES['foto']['name'] = $nombre_imagen; + + if(!$this->upload->do_upload($file)){ + + $this->session->set_flashdata('error', $this->upload->display_errors('

','

')); + redirect('relatores/'); + + } + + //resize image + $image_data = $this->upload->data(); + + $config = array( + 'source_image' => $image_data['full_path'], + 'new_image' => $this->gallery_path . '/thumbs', + 'maintain_ration' => true, + 'width' => 200, + 'height' => 300 + ); + + $this->load->library('image_lib', $config); + $this->image_lib->resize(); + + return $image_data['file_name']; + + + } + + /** + * + * verifica si esta activa la sesion + */ + function is_logged_in() + { + $is_logged_in = $this->session->userdata('is_logged_in'); + + if(!isset($is_logged_in) || $is_logged_in != true) + { + echo 'Tu no tienes permisos para acceder a esta pagina. Acceder?'; + die(); + //$this->load->view('login_form'); + } + } + +} + \ No newline at end of file diff --git a/application/controllers/sitio.php b/application/controllers/sitio.php new file mode 100644 index 0000000..df9bf08 --- /dev/null +++ b/application/controllers/sitio.php @@ -0,0 +1,27 @@ +load->model('sitio_model'); + } + + function index(){ + + $data['titulo'] = "HOTELES DE LA ZONA DE CONCEPCION" ; + $data['hoteles'] = $this->sitio_model->test_data(); + + $this->load->view('sitio_view',$data); + + } + + function test2(){ + $data['titulo'] = "HOTELES DE LA ZONA DE CONCEPCION" ; + $data['hoteles'] = $this->sitio_model->test_data_2(); + + $this->load->view('sitio_view_2',$data); + } + } +?> diff --git a/application/controllers/talleres.php b/application/controllers/talleres.php new file mode 100644 index 0000000..96a9a33 --- /dev/null +++ b/application/controllers/talleres.php @@ -0,0 +1,263 @@ +is_logged_in(); + $this->load->model('taller_model'); + $this->load->model('categoria_model'); + $this->load->model('categoria_taller_model'); + + } + + function index(){ + + + + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $data['talleres'] = $this->taller_model->get_talleres(array('sortBy' => 'nombre','sortDirection' => 'ASC' )); + + $this->load->view('admin/talleres/listar_talleres',$data); + + + } + + function editar(){ + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + $id_taller = $this->uri->segment(3); + + + $result = $this->taller_model->get_talleres(array('id_taller' => $id_taller)); + + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + if(!$result){ + + $tipo = 'error'; + $msg = 'El Taller que desa editar no existe'; + + $this->session->set_flashdata($tipo, $msg); + redirect('talleres/'); + + } + + // Validate form + $this->form_validation->set_rules('nombre', 'nombre', 'trim|required'); + $this->form_validation->set_rules('descripcion', 'descripcion', 'trim|required'); + $this->form_validation->set_rules('requisitos', 'requisitos', 'trim|required'); + $this->form_validation->set_rules('categorias','Categorías','callback_valida_unicidad_categorias'); + + if($this->form_validation->run()) + { + + // agregamos el id al post + $_POST['id_taller'] = $id_taller; + unset($_POST['save']); + + $res = $this->taller_model->get_talleres(array('id_taller'=>$id_taller)); + + + $categorias = $_POST['categorias']; + unset ($_POST['categorias']); + + if($this->taller_model->update($_POST)) { + + + //eliminamos todas las categorias del relator + $this->categoria_taller_model->delete(array('id_taller' => $id_taller)); + + //insertamos las categorias seleccionados + + + foreach ($categorias as $cat){ + $add = array( + 'id_taller' =>$id_taller, + 'id_categoria' => $cat + ); + + $this->categoria_taller_model->add($add); + } + + $this->session->set_flashdata('success', 'El taller se ha actualizado correctamente!'); + redirect('talleres/'); + + } else { + + $this->session->set_flashdata('flashError', 'No se ha podido actualizar el taller.'); + redirect('talleres/'); + } + + + } + + $data['taller'] = $result[0]; + + $data['categorias'] = $this->categoria_model->get_categories(); + $data['seleccionadas'] = $this->categoria_taller_model->get_categoria_taller(array('id_taller' => $id_taller)); + + $this->load->view('admin/talleres/editar_taller', $data); + } + + + /** + * + * Enter description here ... + */ + function eliminar(){ + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + + if ($this->uri->segment(3) === FALSE){ + + $tipo = 'error'; + $msg = 'No existe el taller que deseas eliminar'; + + }else{ + + $id_taller = $this->uri->segment(3); + + $nombres = $this->taller_model->get_talleres(array('id_taller' => $id_taller,'limit' => '1')); + $nombre = $nombres[0]->nombre; + + + $this->load->model('planificar_taller_model'); + $tp = $this->planificar_taller_model->get_talleres_planificados(array('id_taller' => $id_taller, 'count' => true)); + + if($tp){ + $tipo = 'error'; + $msg = 'Imposible eliminar el taller, debido a que tiene un taller programado!'; + $this->session->set_flashdata($tipo, $msg); + redirect('talleres/'); + } + + if($this->taller_model->delete($id_taller)){ + + $tipo = 'success'; + $msg = 'El Taller '.$nombre. ' se ha eliminado correctamente!'; + + + }else{ + + $tipo = 'error'; + $msg = 'No existe el taller que deseas eliminar'; + } + + } + + $this->session->set_flashdata($tipo, $msg); + redirect('talleres/'); + + } + function agregar(){ + + if($this->session->userdata('tipo') == 'relator') { + die('Acceso denegado'); + } + + // Validate form + $this->form_validation->set_rules('nombre', 'nombre', 'trim|required'); + $this->form_validation->set_rules('descripcion', 'descripcion', 'trim|required'); + + $this->form_validation->set_rules('requisitos', 'requisitos', 'trim|required'); + $this->form_validation->set_rules('categorias','Categorías','callback_valida_unicidad_categorias'); + + if($this->form_validation->run()) + { + + unset($_POST['agregar_taller']); + $categorias = $_POST['categorias']; + unset($_POST['categorias']); + + + // Validation passes + + $id_taller = $this->taller_model->add($_POST); + + + if($id_taller) { + + foreach ($categorias as $cat){ + $add = array( + 'id_taller' =>$id_taller, + 'id_categoria' => $cat + ); + + $this->categoria_taller_model->add($add); + } + + $this->session->set_flashdata('success', 'El taller ha sido registrado correctamente!.'); + redirect('talleres/'); + } else { + $this->session->set_flashdata('error', 'No se ha registrar el taller'); + redirect('talleres/'); + } + + + } + + $data['id'] = $this->session->userdata('id'); + $data['tipo'] = $this->session->userdata('tipo'); + $data['nombre'] = $this->session->userdata('nombre'); + + $data['categorias'] = $this->categoria_model->get_categories(); + $this->load->view('admin/talleres/agregar_taller',$data); + } + + /** + * + * Enter description here ... + * @param unknown_type $email + */ + function valida_unicidad_categorias($categorias){ + + $cont = count($categorias); + + if($cont){ + return true; + } + + $this->form_validation->set_message('valida_unicidad_categorias', 'Debes seleccionar al menos una categoría'); + return false; + } + + /** + * + * verifica si esta activa la sesion + */ + function is_logged_in() + { + $is_logged_in = $this->session->userdata('is_logged_in'); + + if(!isset($is_logged_in) || $is_logged_in != true) + { + echo 'Tu no tienes permisos para acceder a esta pagina. Acceder?'; + die(); + //$this->load->view('login_form'); + } + } + +} + \ No newline at end of file diff --git a/application/controllers/welcome.php b/application/controllers/welcome.php new file mode 100644 index 0000000..2fb3c7a --- /dev/null +++ b/application/controllers/welcome.php @@ -0,0 +1,19 @@ +load->view('welcome_message'); + } +} + +/* End of file welcome.php */ +/* Location: ./system/application/controllers/welcome.php */ diff --git a/application/errors/error_404.php b/application/errors/error_404.php new file mode 100644 index 0000000..1c513a2 --- /dev/null +++ b/application/errors/error_404.php @@ -0,0 +1,34 @@ + + +404 Page Not Found + + + +
+

+ +
+ + \ No newline at end of file diff --git a/application/errors/error_db.php b/application/errors/error_db.php new file mode 100644 index 0000000..1ce52df --- /dev/null +++ b/application/errors/error_db.php @@ -0,0 +1,34 @@ + + +Database Error + + + +
+

+ +
+ + \ No newline at end of file diff --git a/application/errors/error_general.php b/application/errors/error_general.php new file mode 100644 index 0000000..d861070 --- /dev/null +++ b/application/errors/error_general.php @@ -0,0 +1,34 @@ + + +Error + + + +
+

+ +
+ + \ No newline at end of file diff --git a/application/errors/error_php.php b/application/errors/error_php.php new file mode 100644 index 0000000..f085c20 --- /dev/null +++ b/application/errors/error_php.php @@ -0,0 +1,10 @@ +
+ +

A PHP Error was encountered

+ +

Severity:

+

Message:

+

Filename:

+

Line Number:

+ +
\ No newline at end of file diff --git a/application/errors/index.html b/application/errors/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/errors/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/helpers/index.html b/application/helpers/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/helpers/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/hooks/index.html b/application/hooks/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/hooks/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/index.html b/application/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/language/english/index.html b/application/language/english/index.html new file mode 100644 index 0000000..9091d61 --- /dev/null +++ b/application/language/english/index.html @@ -0,0 +1,16 @@ + + + + 403 Forbidden + + + + + + + + + \ No newline at end of file diff --git a/application/libraries/index.html b/application/libraries/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/libraries/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/models/admin_model.php b/application/models/admin_model.php new file mode 100644 index 0000000..a4d4749 --- /dev/null +++ b/application/models/admin_model.php @@ -0,0 +1,139 @@ +db->insert($this->tabla, $options); + + return $this->db->insert_id(); + + } + + /** + * + * Funcion que actualiza registros + * @param $options + * @return Fila Afectada o False + */ + function update($options = array()){ + // required values + if(!$this->_required(array('id'),$options)) { + return false; + } + + if(isset($options['email'])){ + $this->db->set('email', $options['email']); + } + + if(isset($options['nombre_completo'])){ + $this->db->set('nombre_completo', $options['nombre_completo']); + } + + if(isset($options['contrasena'])){ + $this->db->set('contrasena', md5($options['contrasena'])); + } + + + $this->db->where('id', $options['id']); + + $this->db->update($this->tabla); + + return $this->db->affected_rows(); + } + + /** + * + * Elimina un usuario de la tabla administrador + * @param $id + */ + + function delete($id){ + + // Produce: + // DELETE FROM mitabla + // WHERE id = $id + $this->db->where('id', $id); + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + + /** + * + * Obtiene elemtos de la tabla administrador + * @param $options + */ + function get_users($options = array()){ + + if(isset($options['id'])){ + $this->db->where('id', $options['id']); + } + + if(isset($options['email'])){ + $this->db->where('email', $options['email']); + } + + if(isset($options['nombre_usuario'])){ + $this->db->where('nombre_usuario', $options['nombre_usuario']); + } + + if(isset($options['contrasena'])){ + $this->db->where('contrasena', $options['contrasena']); + } + + + // limit / offset + if(isset($options['limit']) && isset($options['offset'])){ + $this->db->limit($options['limit'], $options['offset']); + }else if(isset($options['limit'])){ + $this->db->limit($options['limit']); + } + + // sort + if(isset($options['sortBy']) && isset($options['sortDirection'])) + $this->db->order_by($options['sortBy'], $options['sortDirection']); + + + $query = $this->db->get($this->tabla); + + + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + + return $query->result(); + + } + + + } + + + diff --git a/application/models/categoria_model.php b/application/models/categoria_model.php new file mode 100644 index 0000000..736930c --- /dev/null +++ b/application/models/categoria_model.php @@ -0,0 +1,108 @@ +_required(array('id_categoria'),$options)) { + return false; + } + + if(isset($options['nombre'])){ + $this->db->set('nombre', $options['nombre']); + } + + if(isset($options['descripcion'])){ + $this->db->set('descripcion', $options['descripcion']); + } + + $this->db->where('id_categoria', $options['id_categoria']); + + $this->db->update($this->tabla); + + return $this->db->affected_rows(); + } + + function delete($id){ + + // Produce: + // DELETE FROM mitabla + // WHERE id = $id + $this->db->where('id_categoria', $id); + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + /** + * + * Enter description here ... + * @param unknown_type $options + */ + function add($options = array()){ + + $this->db->insert($this->tabla, $options); + + return $this->db->insert_id(); + + + } + + /** + * + * obtiene relatores + * @param array $options + */ + function get_categories($options = array()){ + + if(isset($options['id_categoria'])){ + $this->db->where('id_categoria', $options['id_categoria']); + } + + if(isset($options['nombre'])){ + $this->db->where('nombre', $options['nombre']); + } + + if(isset($options['descripcion'])){ + $this->db->where('descripcion', $options['descripcion']); + } + + $query = $this->db->get($this->tabla); + + // sort + if(isset($options['sortBy']) && isset($options['sortDirection'])) + $this->db->order_by($options['sortBy'], $options['sortDirection']); + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + return $query->result(); + + + } +} \ No newline at end of file diff --git a/application/models/categoria_relator_model.php b/application/models/categoria_relator_model.php new file mode 100644 index 0000000..3888826 --- /dev/null +++ b/application/models/categoria_relator_model.php @@ -0,0 +1,77 @@ +db->where('id_relator', $options['id_relator']); + } + + if(isset($options['id_categoria'])){ + $this->db->where('id_categoria', $options['id_categoria']); + } + + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + /** + * + * Enter description here ... + * @param unknown_type $options + */ + function add($options = array()){ + + $this->db->insert($this->tabla, $options); + + return true; + + + } + + /** + * + * obtiene relatores + * @param array $options + */ + function get_categories_relator($options = array()){ + + + if(isset($options['id_relator'])){ + $this->db->where('id_relator', $options['id_relator']); + } + + if(isset($options['id_categoria'])){ + $this->db->where('id_categoria', $options['id_categoria']); + } + + $query = $this->db->get($this->tabla); + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + return $query->result(); + + + } + +} \ No newline at end of file diff --git a/application/models/categoria_taller_model.php b/application/models/categoria_taller_model.php new file mode 100644 index 0000000..6c40c1f --- /dev/null +++ b/application/models/categoria_taller_model.php @@ -0,0 +1,77 @@ +db->where('id_taller', $options['id_taller']); + } + + if(isset($options['id_categoria'])){ + $this->db->where('id_categoria', $options['id_categoria']); + } + + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + /** + * + * inserta registros a la tabla + * @param $options + */ + + function add($options = array()){ + + $this->db->insert($this->tabla, $options); + + return true; + + } + + /** + * + * obtiene relatores + * @param array $options + */ + function get_categoria_taller($options = array()){ + + + if(isset($options['id_taller'])){ + $this->db->where('id_taller', $options['id_taller']); + } + + if(isset($options['id_categoria'])){ + $this->db->where('id_categoria', $options['id_categoria']); + } + + $query = $this->db->get($this->tabla); + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + return $query->result(); + + + } + +} \ No newline at end of file diff --git a/application/models/index.html b/application/models/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/models/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/models/participante_model.php b/application/models/participante_model.php new file mode 100644 index 0000000..7d837fd --- /dev/null +++ b/application/models/participante_model.php @@ -0,0 +1,131 @@ +_required(array('id_part'),$options)) { + return false; + } + + if(isset($options['id_part'])){ + $this->db->set('id_part', $options['id_part']); + } + + if(isset($options['nombre_completo'])){ + $this->db->set('nombre_completo', $options['nombre_completo']); + } + + $this->db->where('id_part', $options['id_part']); + + $this->db->update($this->tabla); + + return $this->db->affected_rows(); + } + + function delete($id){ + + // Produce: + // DELETE FROM mitabla + // WHERE id = $id + $this->db->where('id_part', $id); + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + /** + * + * Enter description here ... + * @param unknown_type $options + */ + function add($options = array()){ + + $this->db->insert($this->tabla, $options); + + return $this->db->insert_id(); + + + } + + /** + * + * obtiene relatores + * @param array $options + */ + function get_participantes($options = array()){ + + if(isset($options['id_part'])){ + $this->db->where('id_part', $options['id_part']); + } + + if(isset($options['nombre_completo'])){ + $this->db->where('nombre_completo', $options['nombre_completo']); + } + + if(isset($options['email'])){ + $this->db->where('email', $options['email']); + } + + $query = $this->db->get($this->tabla); + + // sort + if(isset($options['sortBy']) && isset($options['sortDirection'])) + $this->db->order_by($options['sortBy'], $options['sortDirection']); + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + return $query->result(); + + + } + + function custom_execute_query($sql){ + + $query = $this->db->query($sql); + if ($query->num_rows() > 0) + return $query->result(); + + return false; + } + + /** + * + * Enter description here ... + * @param $sql + */ + function custom_query($sql){ + $query = $this->db->query($sql); + //if ($query->num_rows() > 0) + //return $query->result(); + + //return false; + + } +} \ No newline at end of file diff --git a/application/models/planificar_taller_model.php b/application/models/planificar_taller_model.php new file mode 100644 index 0000000..1451491 --- /dev/null +++ b/application/models/planificar_taller_model.php @@ -0,0 +1,154 @@ +_required(array('id_tp'),$options)) { + return false; + } + + + + if(isset($options['id_tp'])){ + $this->db->set('id_tp', $options['id_tp']); + } + + if(isset($options['id_relator'])){ + $this->db->set('id_relator', $options['id_relator']); + } + + if(isset($options['id_taller'])){ + $this->db->set('id_taller', $options['id_taller']); + } + + if(isset($options['fecha'])){ + $this->db->set('fecha', $options['fecha']); + } + + if(isset($options['hora_inicio'])){ + $this->db->set('hora_inicio', $options['hora_inicio']); + } + + if(isset($options['hora_termino'])){ + $this->db->set('hora_termino', $options['hora_termino']); + } + + if(isset($options['lugar'])){ + $this->db->set('lugar', $options['lugar']); + } + if(isset($options['cupos'])){ + $this->db->set('cupos', $options['cupos']); + } + + if(isset($options['estado'])){ + $this->db->set('estado', $options['estado']); + } + + $this->db->where('id_tp', $options['id_tp']); + + $this->db->update($this->tabla); + + return $this->db->affected_rows(); + } + + /** + * + * funcion que elimina un Taller programado + * @param unknown_type $id + */ + function delete($id){ + + // Produce: + // DELETE FROM mitabla + // WHERE id = $id + $this->db->where('id_tp', $id); + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + //*/ + /** + * + * Eregistramos un taller a la planificación + * @param $options + */ + function add($options = array()){ + + $this->db->insert($this->tabla, $options); + + return $this->db->insert_id(); + + + } + + /** + * + * obtiene relatores + * @param array $options + */ + + function get_talleres_planificados($options = array()){ + + if(isset($options['id_tp'])){ + $this->db->where('id_tp', $options['id_tp']); + } + + if(isset($options['id_relator'])){ + $this->db->where('id_relator', $options['id_relator']); + } + + if(isset($options['id_taller'])){ + $this->db->where('id_taller', $options['id_taller']); + } + + $query = $this->db->get($this->tabla); + + + if(isset($options['sortBy']) && isset($options['sortDirection'])) + $this->db->order_by($options['sortBy'], $options['sortDirection']); + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + return $query->result(); + + + } + //*/ + function custom_query($sql){ + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) + return $query->result(); + + return false; + + } + +} \ No newline at end of file diff --git a/application/models/relator_model.php b/application/models/relator_model.php new file mode 100644 index 0000000..71009e9 --- /dev/null +++ b/application/models/relator_model.php @@ -0,0 +1,136 @@ +_required(array('id'),$options)) { + return false; + } + + if(isset($options['email'])){ + $this->db->set('email', $options['email']); + } + + if(isset($options['nombre_completo'])){ + $this->db->set('nombre_completo', $options['nombre_completo']); + } + + if(isset($options['contrasena'])){ + $this->db->set('contrasena', md5($options['contrasena'])); + } + + if(isset($options['sitio_web'])){ + $this->db->set('sitio_web', $options['sitio_web']); + } + + if(isset($options['fotografia'])){ + $this->db->set('fotografia', $options['fotografia']); + } + + if(isset($options['biografia'])){ + $this->db->set('biografia', $options['biografia']); + } + + $this->db->where('id', $options['id']); + + $this->db->update($this->tabla); + + return $this->db->affected_rows(); + } + + + function delete($id){ + + // Produce: + // DELETE FROM mitabla + // WHERE id = $id + $this->db->where('id', $id); + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + + /** + * + * Enter description here ... + * @param unknown_type $options + */ + function add($options = array()){ + + $this->db->insert($this->tabla, $options); + + return $this->db->insert_id(); + + + } + + /** + * + * obtiene relatores + * @param array $options + */ + function get_users($options = array()){ + + if(isset($options['id'])){ + $this->db->where('id', $options['id']); + } + + if(isset($options['email'])){ + $this->db->where('email', $options['email']); + } + + if(isset($options['nombre_usuario'])){ + $this->db->where('nombre_usuario', $options['nombre_usuario']); + } + + if(isset($options['contrasena'])){ + $this->db->where('contrasena', $options['contrasena']); + } + + //select * from sit_administrador a where a.nombre_usuario = 'mcantillana' AND a.contrasena = md5('2010') + $query = $this->db->get($this->tabla); + + // sort + if(isset($options['sortBy']) && isset($options['sortDirection'])) + $this->db->order_by($options['sortBy'], $options['sortDirection']); + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + return $query->result(); + + + } + + function custom_query($sql){ + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) + return $query->result(); + + return false; + + } + +} \ No newline at end of file diff --git a/application/models/sitio_model.php b/application/models/sitio_model.php new file mode 100644 index 0000000..85eca3c --- /dev/null +++ b/application/models/sitio_model.php @@ -0,0 +1,31 @@ +load->database(); + } + + function test_data(){ + + $query = $this->db->query('select * from hotel'); + + foreach ($query->result() as $row) + { + $data[] = $row; + //echo $row['name']; + //echo $row['email']; + } + return $data; + } + function test_data_2(){ + $query = $this->db->get('hotel'); + + foreach ($query->result() as $f){ + $data[] = $f; + } + return $data; + } + } + diff --git a/application/models/taller_model.php b/application/models/taller_model.php new file mode 100644 index 0000000..5a2fa17 --- /dev/null +++ b/application/models/taller_model.php @@ -0,0 +1,126 @@ +_required(array('id_taller'),$options)) { + return false; + } + + if(isset($options['nombre'])){ + $this->db->set('nombre', $options['nombre']); + } + + if(isset($options['descripcion'])){ + $this->db->set('descripcion', $options['descripcion']); + } + + + if(isset($options['requisitos'])){ + $this->db->set('requisitos', $options['requisitos']); + } + + if(isset($options['nivel'])){ + $this->db->set('nivel', $options['nivel']); + } + + $this->db->where('id_taller', $options['id_taller']); + + $this->db->update($this->tabla); + + return $this->db->affected_rows(); + } + + function delete($id){ + + // Produce: + // DELETE FROM mitabla + // WHERE id = $id + $this->db->where('id_taller', $id); + $this->db->delete($this->tabla); + + return $this->db->affected_rows(); + } + /** + * + * agrega un nuevo registro + * @param unknown_type $options + */ + function add($options = array()){ + + $this->db->insert($this->tabla, $options); + + return $this->db->insert_id(); + + + } + + /** + * + * obtiene relatores + * @param array $options + */ + function get_talleres($options = array()){ + + if(isset($options['id_taller'])){ + $this->db->where('id_taller', $options['id_taller']); + } + + if(isset($options['nombre'])){ + $this->db->where('nombre', $options['nombre']); + } + + if(isset($options['descripcion'])){ + $this->db->where('descripcion', $options['descripcion']); + } + + + if(isset($options['requisitos'])){ + $this->db->set('requisitos', $options['requisitos']); + } + + if(isset($options['nivel'])){ + $this->db->set('nivel', $options['nivel']); + } + + $query = $this->db->get($this->tabla); + + // sort + if(isset($options['sortBy']) && isset($options['sortDirection'])) + $this->db->order_by($options['sortBy'], $options['sortDirection']); + + + if(isset($options['count'])){ + return $query->num_rows(); + } + + return $query->result(); + + + } +} \ No newline at end of file diff --git a/application/views/admin/PlanificarTaller/agregar_planificacion_taller.php b/application/views/admin/PlanificarTaller/agregar_planificacion_taller.php new file mode 100644 index 0000000..f4dbbc3 --- /dev/null +++ b/application/views/admin/PlanificarTaller/agregar_planificacion_taller.php @@ -0,0 +1,124 @@ + 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'PlanificarTaller/' + ) + ); + + $data = array( + 'titulo' => 'Nueva Planificación de Taller', + 'icono' => 'icon-48-article-add', + 'ops' => $opciones, + 'miga' => 'PlanificarTaller | Agregar' + ); + + $js = ' + + '; + $data['heading'] = $js; + + $this->load->view('admin/admin_header',$data); + +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + + ','
'); ?> + + ',''); ?> + + + + + load->view('admin/admin_round',$data)?> +
+ + + + + + + +
+ + + +
+ + + +
+ + + : + +
+ + + : + +
+ + + + +
+ + + +
+ + + +
+
+ + + + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); ?> \ No newline at end of file diff --git a/application/views/admin/PlanificarTaller/editar_planificacion_taller.php b/application/views/admin/PlanificarTaller/editar_planificacion_taller.php new file mode 100644 index 0000000..8d68c21 --- /dev/null +++ b/application/views/admin/PlanificarTaller/editar_planificacion_taller.php @@ -0,0 +1,112 @@ + 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'PlanificarTaller/' + ) + ); + + $data = array( + 'titulo' => 'Editar Planificación de Taller', + 'icono' => 'icon-48-article-edit', + 'ops' => $opciones, + 'miga' => 'PlanificarTaller | editar' + ); + + $js = ' + + '; + $data['heading'] = $js; + + $this->load->view('admin/admin_header',$data); + +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + + ','
'); ?> + + ',''); ?> + + + + + load->view('admin/admin_round',$data)?> +
+ + id_tp); ?> + + + + + +
+ + + +
+ + + +
+ + + : + +
+ + + : + +
+ + + lugar,'class="inputclass"');?> + +
+ + + +
+ + + +
+
+ + + + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); ?> \ No newline at end of file diff --git a/application/views/admin/PlanificarTaller/listar_planificacion_taller.php b/application/views/admin/PlanificarTaller/listar_planificacion_taller.php new file mode 100644 index 0000000..91c52bf --- /dev/null +++ b/application/views/admin/PlanificarTaller/listar_planificacion_taller.php @@ -0,0 +1,111 @@ +load->view('admin/admin_header'); + + + + + $opciones = Array( + array( + 'titulo' => 'Volver', + 'icono' => 'icon-32-back', + 'link' => 'dashboard/' + ), + array( + 'titulo' => 'Agregar', + 'icono' => 'icon-32-new', + 'link' => 'PlanificarTaller/agregar' + ) + ); + + $data = array( + 'titulo' => 'Listado de Talleres Planificados', + 'icono' => 'icon-48-article', + 'ops' => $opciones, + 'miga' => 'Planificar Taller' + ); + + + + + + +?> + +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + +
+ + + + + + + + + + + + + + + + + + id_tp; + $eliminar = "PlanificarTaller/#"; + $editar = "PlanificarTaller/editar/".$tp->id_tp; + ?> + + + + + + + + + + + + + + + +
NºTallerRelatorFechaEstadoCuposAcción
nombre_taller; ?>nombre_relator; ?>fecha; ?> + estado){ + $img = "icon-16-checkin.png"; + $alt = "Taller Activo"; + $segment_url = $tp->id_tp."/0"; + }else{ + $img = "icon-16-deny.png"; + $alt = "taller Inactivo"; + $segment_url = $tp->id_tp."/1"; + } + + ?> + <?php echo $alt?> + cupos; ?> + Desea Eliminar a  <?php echo $tp->nombre_taller?> +
+
+ + + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/admin_footer.php b/application/views/admin/admin_footer.php new file mode 100644 index 0000000..3ef266f --- /dev/null +++ b/application/views/admin/admin_footer.php @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/application/views/admin/admin_header.php b/application/views/admin/admin_header.php new file mode 100644 index 0000000..57a2d09 --- /dev/null +++ b/application/views/admin/admin_header.php @@ -0,0 +1,91 @@ + + + + +Administración - Sistema de Inscripción de talleres [SIT] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +session->userdata('last_activity')); + $hora = $last_a['hours'].":".$last_a['minutes'].":".$last_a['seconds']; + $fecha = $last_a['mday']. "/". $last_a['mon']. "/". $last_a['year']; + $ultima_actividad = $hora. " ". $fecha; + + $id = $this->session->userdata('id'); + $nombre = $this->session->userdata('nombre'); +?> + +
+ +
+ \ No newline at end of file diff --git a/application/views/admin/admin_index.php b/application/views/admin/admin_index.php new file mode 100644 index 0000000..e2c5a1b --- /dev/null +++ b/application/views/admin/admin_index.php @@ -0,0 +1,31 @@ + +load->view('admin/admin_header',$data); ?> + + +
+
+ +
+

Panel Control

+ +
+
+ + load->view('admin/admin_menu_derecho'); ?> + +
+load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/admin_menu.php b/application/views/admin/admin_menu.php new file mode 100644 index 0000000..0a8dec6 --- /dev/null +++ b/application/views/admin/admin_menu.php @@ -0,0 +1,9 @@ +
+ + +
\ No newline at end of file diff --git a/application/views/admin/admin_menu_derecho.php b/application/views/admin/admin_menu_derecho.php new file mode 100644 index 0000000..2ed13cf --- /dev/null +++ b/application/views/admin/admin_menu_derecho.php @@ -0,0 +1,50 @@ + \ No newline at end of file diff --git a/application/views/admin/admin_round.php b/application/views/admin/admin_round.php new file mode 100644 index 0000000..29ecd5e --- /dev/null +++ b/application/views/admin/admin_round.php @@ -0,0 +1,29 @@ + +
+
+
+
+
+
+ '; +} + +if($round == 'bottom'){ +echo ' +
+ +
+
+
+
+
+
+
+
+'; +} \ No newline at end of file diff --git a/application/views/admin/admin_top.php b/application/views/admin/admin_top.php new file mode 100644 index 0000000..5b00243 --- /dev/null +++ b/application/views/admin/admin_top.php @@ -0,0 +1,59 @@ +
+ +
+
+
+
+
+ +
+ +
+
    + + +
  • + +
  • + + +
+ +
+ +
+ +

+ +
+ +
+ +
+
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/application/views/admin/categorias/agregar_categoria.php b/application/views/admin/categorias/agregar_categoria.php new file mode 100644 index 0000000..c969504 --- /dev/null +++ b/application/views/admin/categorias/agregar_categoria.php @@ -0,0 +1,110 @@ + + + + +'; + $data['heading'] = $js; + $this->load->view('admin/admin_header',$data); + + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'categorias/' + ) + ); + + $data = array( + 'titulo' => 'Nueva Categoría', + 'icono' => 'icon-48-category-add', + 'ops' => $opciones, + 'miga' => 'categorías | Agregar' + ); + +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + ','
'); ?> + ',''); ?> + + + + load->view('admin/admin_round',$data)?> +
+ + + + + + +
+
Descripción
+
+ +
+ + + + + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/categorias/categorias.php b/application/views/admin/categorias/categorias.php new file mode 100644 index 0000000..686a923 --- /dev/null +++ b/application/views/admin/categorias/categorias.php @@ -0,0 +1,23 @@ + + +
+ + +id_categoria == $s->id_categoria){ + $checked = 'checked="checked"'; + } + } + } + + +?> + + + +
\ No newline at end of file diff --git a/application/views/admin/categorias/editar_categoria.php b/application/views/admin/categorias/editar_categoria.php new file mode 100644 index 0000000..8775ddb --- /dev/null +++ b/application/views/admin/categorias/editar_categoria.php @@ -0,0 +1,114 @@ + + + + +'; + $data['heading'] = $js; + $this->load->view('admin/admin_header',$data); + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'categorias/' + ) + ); + $editar_a = "Editar: ".$categoria->nombre; + $data = array( + 'titulo' => $editar_a, + 'icono' => 'icon-48-edit', + 'ops' => $opciones, + 'miga' => 'categorías | editar' + ); +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + ','
'); ?> + ',''); ?> + + + + load->view('admin/admin_round',$data)?> +
+ + id_categoria); ?> + + + + id_categoria,'class="inputclass" disabled="disabled" style="color:#000"');?> + +
+ + + nombre,'class="inputclass"');?> + +
+ + + descripcion,'style="height:100px"');?> + + +
+ + + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/categorias/listar_categorias.php b/application/views/admin/categorias/listar_categorias.php new file mode 100644 index 0000000..7848f25 --- /dev/null +++ b/application/views/admin/categorias/listar_categorias.php @@ -0,0 +1,88 @@ +load->view('admin/admin_header'); + + + + + $opciones = Array( + array( + 'titulo' => 'Volver', + 'icono' => 'icon-32-back', + 'link' => 'dashboard/' + ), + array( + 'titulo' => 'Agregar', + 'icono' => 'icon-32-new', + 'link' => 'categorias/agregar' + ) + ); + + $data = array( + 'titulo' => 'Listado de categorias', + 'icono' => 'icon-48-category', + 'ops' => $opciones, + 'miga' => 'Categorias' + ); + + + + + + +?> + +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + +
+ + + + + + + + + + + + + + + id_categoria; + $eliminar = "categorias/#"; + $editar = "categorias/editar/".$cat->id_categoria; + ?> + + + + + + + + + + +
NºNombreDescripciónAcción
nombre; ?>descripcion; ?> + Desea Eliminar a  <?php echo $cat->descripcion?> +
+
+ + + +load->view('admin/admin_footer'); +?> diff --git a/application/views/admin/participantes/listar_participantes.php b/application/views/admin/participantes/listar_participantes.php new file mode 100644 index 0000000..f6cf0e4 --- /dev/null +++ b/application/views/admin/participantes/listar_participantes.php @@ -0,0 +1,101 @@ +load->view('admin/admin_header'); + + + + + $opciones = Array( + array( + 'titulo' => 'Volver', + 'icono' => 'icon-32-back', + 'link' => 'dashboard/' + ), + /* array( + 'titulo' => 'Agregar', + 'icono' => 'icon-32-new', + 'link' => 'categorias/agregar' + ) + //*/ + ); + + $data = array( + 'titulo' => 'Listado de Participantes', + 'icono' => 'icon-48-groups', + 'ops' => $opciones, + 'miga' => 'Participantes' + ); + + + + + + +?> + +
+ + + + + load->view('admin/admin_top',$data)?> + +
+ + + + + +
+
+
+
+ + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + + + + + + + + + + + + + id_part; + $eliminar = "participantes/#"; + //$editar = "categorias/editar/".$p->id_categoria; + $editar = "#"; + ?> + + + + + + + + + + +
NºE-MailNombreAcción
email; ?>nombre_completo; ?> + Desea Eliminar a  <?php echo $p->nombre_completo?> +
+
+ + + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/relatores/agregar_relator.php b/application/views/admin/relatores/agregar_relator.php new file mode 100644 index 0000000..33b2419 --- /dev/null +++ b/application/views/admin/relatores/agregar_relator.php @@ -0,0 +1,140 @@ + + + + +'; + $data['heading'] = $js; + $this->load->view('admin/admin_header',$data); + + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'relatores/' + ) + ); + + $data = array( + 'titulo' => 'Nuevo Usuario', + 'icono' => 'icon-48-groups-add', + 'ops' => $opciones, + 'miga' => 'relatores | Agregar' + ); + +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + ','
'); ?> + ',''); ?> + ','')?> + ','')?> + + + load->view('admin/admin_round',$data)?> +
+ + + + + * + +
+ + + * + +
+ + + + * + +
+ + + + +
+ + +
+
Categorías
+
+ + load->view('admin/categorias/categorias.php'); ?> +
+ +
+
+ + + +
+ +
+ + + + + + (*) Campos Obligatorios +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/relatores/editar_relator.php b/application/views/admin/relatores/editar_relator.php new file mode 100644 index 0000000..5af3846 --- /dev/null +++ b/application/views/admin/relatores/editar_relator.php @@ -0,0 +1,159 @@ + + + + +'; + $data['heading'] = $js; + $this->load->view('admin/admin_header',$data); + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'relatores/' + ) + ); + $editar_a = "Editar: ".$relator->nombre_completo; + $data = array( + 'titulo' => $editar_a, + 'icono' => 'icon-48-edit', + 'ops' => $opciones, + 'miga' => 'relatores | editar' + ); +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + ','
'); ?> + ',''); ?> + ','')?> + ','')?> + + + load->view('admin/admin_round',$data)?> +
+ + id); ?> + +
+ + + id,'class="inputclass" disabled="disabled" style="color:#000"');?> + +
+ + + email,'class="inputclass"');?> + +
+ + + nombre_completo,'class="inputclass"');?> + +
+ + + + +
+ + + sitio_web,'class="inputclass"');?> + +
+ + + + + + +
+
+
+ fotografia)){ + $img = 'No Foto'; + }else{ + $img = ''.$relator->nombre_completo.''; + } + + echo $img; + ?> + +
+
+
+ +
Categorías
+
+ + load->view('admin/categorias/categorias.php'); ?> +
+ +
+
+
+ + biografia,' class="tinymce" ');?> + +
+ + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/relatores/listar_relatores.php b/application/views/admin/relatores/listar_relatores.php new file mode 100644 index 0000000..883fa43 --- /dev/null +++ b/application/views/admin/relatores/listar_relatores.php @@ -0,0 +1,91 @@ +load->view('admin/admin_header'); + + + + + $opciones = Array( + + array( + 'titulo' => 'Volver', + 'icono' => 'icon-32-back', + 'link' => 'dashboard/' + ), + array( + 'titulo' => 'Agregar', + 'icono' => 'icon-32-new', + 'link' => 'relatores/agregar' + ) + + ); + + $data = array( + 'titulo' => 'Listado de relatores', + 'icono' => 'icon-48-user-add', + 'ops' => $opciones, + 'miga' => 'Relatores' + ); + + + + + + +?> + +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + +
+ + + + + + + + + + + + + + + id; + $eliminar = "relatores/#"; + $editar = "relatores/editar/".$relator->id; + ?> + + + + + + + + + + +
NºE-mail Nombre CompletoAcción
email; ?>nombre_completo; ?> + Desea Eliminar a  <?php echo $relator->nombre_completo ?> +
+
+ + + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/talleres/agregar_taller.php b/application/views/admin/talleres/agregar_taller.php new file mode 100644 index 0000000..0cde1e1 --- /dev/null +++ b/application/views/admin/talleres/agregar_taller.php @@ -0,0 +1,139 @@ + + + + +'; + $data['heading'] = $js; + $this->load->view('admin/admin_header',$data); + + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'talleres/' + ) + ); + + $data = array( + 'titulo' => 'Nuevo Taller', + 'icono' => 'icon-48-menu-add', + 'ops' => $opciones, + 'miga' => 'talleres | Agregar' + ); + +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + ','
'); ?> + ',''); ?> + ','')?> + ','')?> + + + load->view('admin/admin_round',$data)?> +
+ + + + + + +
+ + + + +
+ + 'Nivel Básico', + 'medio' => 'Nivel Medio', + 'avanzado' => 'Nivel Avanzado', + + ); + + echo form_dropdown('nivel', $options, 'basico'); + + ?> + +
+
Categorías
+
+ + load->view('admin/categorias/categorias.php'); ?> +
+ +
+
+ + + + +
+ + + + + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/talleres/editar_taller.php b/application/views/admin/talleres/editar_taller.php new file mode 100644 index 0000000..eded4b9 --- /dev/null +++ b/application/views/admin/talleres/editar_taller.php @@ -0,0 +1,147 @@ + + + + +'; + $data['heading'] = $js; + $this->load->view('admin/admin_header',$data); + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'talleres/' + ) + ); + $editar_a = "Editar: ".$taller->nombre; + $data = array( + 'titulo' => $editar_a, + 'icono' => 'icon-48-menumgr', + 'ops' => $opciones, + 'miga' => 'talleres | editar' + ); +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + ','
'); ?> + ',''); ?> + ','')?> + ','')?> + + + + load->view('admin/admin_round',$data)?> +
+ + id_taller); ?> + + + + + id_taller,'class="inputclass" disabled="disabled" style="color:#000"');?> + +
+ + + nombre,'class="inputclass"');?> + +
+ + + requisitos,'class="inputclass"');?> + +
+ + + 'Nivel Básico', + 'medio' => 'Nivel Medio', + 'avanzado' => 'Nivel Avanzado', + + ); + + echo form_dropdown('nivel', $options, $taller->nivel); + + ?> + + +
+ + + +
Categorías
+
+ + load->view('admin/categorias/categorias.php'); ?> +
+ +
+
+ + + descripcion,' class="tinymce" ');?> + +
+ + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/talleres/listar_talleres.php b/application/views/admin/talleres/listar_talleres.php new file mode 100644 index 0000000..6e06746 --- /dev/null +++ b/application/views/admin/talleres/listar_talleres.php @@ -0,0 +1,100 @@ +load->view('admin/admin_header'); + + $opciones = Array( + + array( + 'titulo' => 'Volver', + 'icono' => 'icon-32-back', + 'link' => 'dashboard/' + ), + array( + 'titulo' => 'Agregar', + 'icono' => 'icon-32-new', + 'link' => 'talleres/agregar' + ) + + ); + + $data = array( + 'titulo' => 'Listado de Talleres', + 'icono' => 'icon-48-menumgr', + 'ops' => $opciones, + 'miga' => 'Talleres' + ); + + +?> + +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + +
+ + + + + + + + + + + + + + + id_taller; + $eliminar = "talleres/#"; + $editar = "talleres/editar/".$taller->id_taller; + ?> + + + + + + + + + + +
NºNombre NivelAcción
nombre; ?> + nivel){ + case 'basico': + echo "Nivel Básico"; + break; + + case 'basico': + echo "Nivel Medio"; + break; + + case 'basico': + echo "Nivel Avanzado"; + break; + } + ?> + + Desea Eliminar el taller  <?php echo $taller->nombre?> +
+
+ + + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/usuarios/agregar_administrador.php b/application/views/admin/usuarios/agregar_administrador.php new file mode 100644 index 0000000..b58edf6 --- /dev/null +++ b/application/views/admin/usuarios/agregar_administrador.php @@ -0,0 +1,67 @@ +load->view('admin/admin_header'); + + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'administradores/' + ) + ); + + $data = array( + 'titulo' => 'Nuevo Administrador', + 'icono' => 'icon-48-groups-add', + 'ops' => $opciones, + 'miga' => 'administradores | Agregar' + ); + +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + ','
'); ?> + ',''); ?> + ','')?> + + + load->view('admin/admin_round',$data)?> +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/usuarios/editar_administrador.php b/application/views/admin/usuarios/editar_administrador.php new file mode 100644 index 0000000..1d94ec4 --- /dev/null +++ b/application/views/admin/usuarios/editar_administrador.php @@ -0,0 +1,73 @@ +load->view('admin/admin_header'); + + $opciones = Array( + + array( + 'titulo' => 'Cancelar', + 'icono' => 'icon-32-cancel', + 'link' => 'administradores/' + ) + ); + $editar_a = "Editar: ".$admin->nombre_completo; + $data = array( + 'titulo' => $editar_a, + 'icono' => 'icon-48-edit', + 'ops' => $opciones, + 'miga' => 'administradores | editar' + ); +?> +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + + ','
'); ?> + ',''); ?> + ','')?> + + + load->view('admin/admin_round',$data)?> +
+ + id); ?> + + + + id,'class="inputclass" disabled="disabled" style="color:#000"');?> + +
+ + + email,'class="inputclass"');?> + +
+ + + nombre_completo,'class="inputclass"');?> + +
+ + + + +
+ + + +
+ + load->view('admin/admin_round',$data)?> + +load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/admin/usuarios/listar_administradores.php b/application/views/admin/usuarios/listar_administradores.php new file mode 100644 index 0000000..8685591 --- /dev/null +++ b/application/views/admin/usuarios/listar_administradores.php @@ -0,0 +1,79 @@ +load->view('admin/admin_header'); + + + + $opciones = Array( + + array( + 'titulo' => 'Volver', + 'icono' => 'icon-32-back', + 'link' => 'dashboard/' + ), + array( + 'titulo' => 'Agregar', + 'icono' => 'icon-32-new', + 'link' => 'administradores/agregar' + ) + ); + + $data = array( + 'titulo' => 'Listado de Administradores', + 'icono' => 'icon-48-user', + 'ops' => $opciones, + 'miga' => 'Administradores' + ); + + +?> + +
+ + load->view('admin/admin_top',$data)?> + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + +
+ + + + + + + + + + + + + id; + $eliminar = "administradores/#"; + $editar = "administradores/editar/".$admin->id; + ?> + + + + + + + + + + +
NºE-mail Nombre CompletoAcción
email; ?>nombre_completo; ?> + Desea Eliminar a  <?php echo $admin->nombre_completo?> +
+
+load->view('admin/admin_footer'); +?> \ No newline at end of file diff --git a/application/views/front/detalle_relator.php b/application/views/front/detalle_relator.php new file mode 100644 index 0000000..c378ad9 --- /dev/null +++ b/application/views/front/detalle_relator.php @@ -0,0 +1,71 @@ + + + + +<?php echo $taller->nombre?> + + + + + +
+

nombre_completo?>

+
+ fotografia ?>" title="nombre" alt="nombre" /> +
+
+ biografia?> +
+ +
+ +
+ + \ No newline at end of file diff --git a/application/views/front/detalle_taller.php b/application/views/front/detalle_taller.php new file mode 100644 index 0000000..c098285 --- /dev/null +++ b/application/views/front/detalle_taller.php @@ -0,0 +1,52 @@ + + + + +<?php echo $taller->nombre?> + + + + + +
+

nombre?>

+
+ descripcion?> +
+ +
+ + \ No newline at end of file diff --git a/application/views/front/front_index.php b/application/views/front/front_index.php new file mode 100644 index 0000000..5e0a5bd --- /dev/null +++ b/application/views/front/front_index.php @@ -0,0 +1,218 @@ + + + + +Administración - Sistema de Inscripción de talleres [SIT] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + +
+ +
+
+
+
+
+ +
+ +
+ +
+ +
+ +

Sistema de Inscripción de Talleres

+ +
+ +
+ +
+
+
+
+
+ +
+ + + + + + + +
+
+
+
+
+
+
+ + + + + id_tp; ?> + +
+

nombre_taller?>

+
+
+

Relator: nombre_relator?>

+

Lugar: lugar?>

+

Fecha: fecha?>

+

Categorías: + id_taller == $categoria->id_taller){ + $cat .= $categoria->nombre.", "; + } + } + echo $cat; + ?> +

+

Inscribete..

+ +
+
+
+ + + +Ver todos.. + + + + + + +
+ +
+
+
+
+
+
+
+ + + +
+
+ +
+ + + + \ No newline at end of file diff --git a/application/views/front/inscribir_taller.php b/application/views/front/inscribir_taller.php new file mode 100644 index 0000000..eb360e0 --- /dev/null +++ b/application/views/front/inscribir_taller.php @@ -0,0 +1,172 @@ + + + + +Sistema de Inscripción de Talleres - Formulario de Inscripción + + + + + + + + +
+
+ +
Nombre Taller
: nombre_taller?>
+
+ +
Nombre Relator
: nombre_relator?>
+
+ nivel == 'basico'){ + $nivel = "Básico"; + } + + if($taller->nivel == 'intermedio'){ + $nivel = "Intermedio"; + } + + if ($taller->nivel == 'avanzado'){ + $nivel = "Avanzado"; + } + //*/ + + ?> +
Nivel
:
+
+ +
Requisitos
: requisitos?>
+
+ +
Lugar
: lugar?>
+
+ +
Fecha
: fecha?>
+
+ +
Hora
: hora_inicio?> a hora_termino?> hrs.
+
+ +
Cupos
: cupos?>
+
+
+
+ + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + ','
'); ?> + ','
'); ?> + +
+ + + + + + +

+ + +
+ + + + \ No newline at end of file diff --git a/application/views/front/listar_planificacion_talleres.php b/application/views/front/listar_planificacion_talleres.php new file mode 100644 index 0000000..712515b --- /dev/null +++ b/application/views/front/listar_planificacion_talleres.php @@ -0,0 +1,208 @@ + + + + +Administración - Sistema de Inscripción de talleres [SIT] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + +
+ +
+
+
+
+
+ +
+ +
+ +
+ +
+ +

Sistema de Inscripción de Talleres

+ +
+ +
+ +
+
+
+
+
+ +
+ + + + + + + + +
+ + + + session->flashdata('success')):?> +
session->flashdata('success')?>
+ + + session->flashdata('error')):?> +
session->flashdata('error')?>
+ + + +
+ + + + + + + + + + + + + + id_relator; + $ver_taller = "main/taller/".$taller->id_taller; + ?> + + + + + + + + + + + +
NºNombre Taller Nombre RelatorFechaCupos
nombre_taller; ?>nombre_relator; ?>fecha?>cupos?>
+
+ + + + + + +
+
+ +
+ + + + \ No newline at end of file diff --git a/application/views/front/login_form.php b/application/views/front/login_form.php new file mode 100644 index 0000000..eccd2ff --- /dev/null +++ b/application/views/front/login_form.php @@ -0,0 +1,76 @@ + + + + +Sistema de Inscripción de Talleres [SIT] + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + ','
'); ?> + ','
')?> + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + diff --git a/application/views/index.html b/application/views/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/application/views/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/views/sitio_view.php b/application/views/sitio_view.php new file mode 100644 index 0000000..254f050 --- /dev/null +++ b/application/views/sitio_view.php @@ -0,0 +1,25 @@ + + + + + sin título + + + + + +

+ +nombre; + echo "
"; + } + + +?> + + + diff --git a/application/views/sitio_view_2.php b/application/views/sitio_view_2.php new file mode 100644 index 0000000..cd1121e --- /dev/null +++ b/application/views/sitio_view_2.php @@ -0,0 +1,23 @@ + + + + + sin título + + + + + +

+ +nombre; + echo "
"; + } +?> + + + diff --git a/application/views/welcome_message.php b/application/views/welcome_message.php new file mode 100644 index 0000000..653b62c --- /dev/null +++ b/application/views/welcome_message.php @@ -0,0 +1,62 @@ + + +Welcome to CodeIgniter + + + + + +

Welcome to CodeIgniter!

+ +

The page you are looking at is being generated dynamically by CodeIgniter.

+ +

If you would like to edit this page you'll find it located at:

+system/application/views/welcome_message.php + +

The corresponding controller for this page is found at:

+system/application/controllers/welcome.php + +

If you are exploring CodeIgniter for the very first time, you should start by reading the User Guide.

+ + +


Page rendered in {elapsed_time} seconds

+ + + \ No newline at end of file diff --git a/css/frame.gif b/css/frame.gif new file mode 100644 index 0000000000000000000000000000000000000000..06242518ddbe988ed8cb42020dcee7bc60c889a9 GIT binary patch literal 187 zcmZ?wbhEHboX8-`Fp-&I!HWNr=KO~M#h)yU3=GT+It)Mnl4oG*nbN=V^jrSLbEY&k zY`(YWH-FnBk7)`Y7!DlR_Ky4bC!g!zdY^CGwc-~)4_EsUG5(EOTGP)w<9pfTwcKTj zqUYJH?RwhNxcRID88`m);o&&-V%zOyY5Sj-gzf38zyG=B^FIC^OTURmNGw%z$k-9_ n~s&-5&wvS7u^%$vzZUQt<9RZ?033=Gx)sT)^o literal 0 HcmV?d00001 diff --git a/css/front_style.css b/css/front_style.css new file mode 100644 index 0000000..938b570 --- /dev/null +++ b/css/front_style.css @@ -0,0 +1,40 @@ +@CHARSET "UTF-8"; + +.taller_programado{ + margin:5px 10px 10px 0; + display:block; + border-bottom:2px solid #DDD; + +} + +.taller_programado h1{ + font-size:34px; + margin:3px; + + + +} + +.taller_programado h1 a{ + text-decoration:none; + color:#0E4367; + + +} +.taller_programado h1 a:hover{ + text-decoration:none; + text-decoration:underline; + } + +.taller_programado p{ + margin:0; + margin-left:10px; + background:none; + padding:2px; + color:#333; + font-size:16px; +} + +.taller_programado .info{ + margin-top:10px; + } \ No newline at end of file diff --git a/css/ie.css b/css/ie.css new file mode 100644 index 0000000..f4152eb --- /dev/null +++ b/css/ie.css @@ -0,0 +1,36 @@ +/* ----------------------------------------------------------------------- + + + Blueprint CSS Framework 0.8 + http://blueprintcss.org + + * Copyright (c) 2007-Present. See LICENSE for more info. + * See README for instructions on how to use Blueprint. + * For credits and origins, see AUTHORS. + * This is a compressed file. See the sources in the 'src' directory. + +----------------------------------------------------------------------- */ + +/* ie.css */ +body {text-align:center;} +.container {text-align:left;} + +* html legend {margin:0px -8px 16px 0;padding:0;} + +sup {vertical-align:text-top;} +sub {vertical-align:text-bottom;} +html>body p code {*white-space:normal;} +hr {margin:-8px auto 11px;} +.clearfix, .container {display:inline-block;} +* html .clearfix, * html .container {height:1%;} +fieldset {padding-top:0;} +input[type=checkbox]{border:none;} +input[type=radio]{border:none;} +#shortcuts{padding:5px;padding-bottom:0px;width:650px;} +legend{margin-top:0px;} +.noborder{border:0px;} +#shortcuts ul li{margin-bottom:0px;padding-bottom:0px;} +#table_options ul li a {color:#000;display:block;padding-top:7px;} + +.form_sidebar ul li {margin:-5px 0px;padding:0px;list-style:none;} +.form_sidebar ul li ul{margin:0px 10px;padding:0px;list-style:none;} \ No newline at end of file diff --git a/css/ie6.css b/css/ie6.css new file mode 100644 index 0000000..2b8e0c0 --- /dev/null +++ b/css/ie6.css @@ -0,0 +1,42 @@ +/* ----------------------------------------------------------------------- + + + Blueprint CSS Framework 0.8 + http://blueprintcss.org + + * Copyright (c) 2007-Present. See LICENSE for more info. + * See README for instructions on how to use Blueprint. + * For credits and origins, see AUTHORS. + * This is a compressed file. See the sources in the 'src' directory. + +----------------------------------------------------------------------- */ + +/* ie.css */ +body {text-align:center;} +.container {text-align:left;} +* html .column, * html div.span-1, * html div.span-2, * html div.span-3, * html div.span-4, * html div.span-5, * html div.span-6, * html div.span-7, * html div.span-8, * html div.span-9, * html div.span-10, * html div.span-11, * html div.span-12, * html div.span-13, * html div.span-14, * html div.span-15, * html div.span-16, * html div.span-17, * html div.span-18, * html div.span-19, * html div.span-20, * html div.span-21, * html div.span-22, * html div.span-23, * html div.span-24 {overflow-x:hidden;} +* html legend {margin:0px -8px 16px 0;padding:0;} +ol {margin-left:2em;} +sup {vertical-align:text-top;} +sub {vertical-align:text-bottom;} +html>body p code {*white-space:normal;} +hr {margin:-8px auto 11px;} +.clearfix, .container {display:inline-block;} +* html .clearfix, * html .container {height:1%;} +fieldset {padding-top:0;} +input[type=checkbox]{border:none;} +input[type=radio]{border:none;} +#shortcuts{padding:5px;padding-bottom:0px;width:650px;} +legend{margin-top:0px;} +.noborder{border:0px;} +#shortcuts ul{margin-bottom:0px;} +ul#menu li ul li{overflow:hidden; height:35px;} +.form_sidebar ul li label input{overflow:hidden; height:15px;padding:0px;margin:0px;} +a#visit{display:block;color:#fff;background:#4780ae;border-left:1px solid #084577;border:1px solid #7ab7e8;padding:4px;margin:5px 5px 0px 0px;-moz-border-radius:3px;} + +#table_options ul li a {color:#000;display:block;padding-top:7px;} +legend span{padding:10px; display: block;} + +.form_sidebar h3{margin-bottom:15px;} +.form_sidebar ul li {margin:-5px 0px;padding:0px;list-style:none;} +.form_sidebar ul li ul{margin:0px 10px;padding:0px;list-style:none;} diff --git a/css/jquery.alerts.css b/css/jquery.alerts.css new file mode 100644 index 0000000..5c285af --- /dev/null +++ b/css/jquery.alerts.css @@ -0,0 +1,57 @@ +#popup_container { + font-family: Arial, sans-serif; + font-size: 12px; + min-width: 300px; /* Dialog will be no smaller than this */ + max-width: 600px; /* Dialog will wrap after this width */ + background: #FFF; + border: solid 5px #999; + color: #000; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +#popup_title { + font-size: 14px; + font-weight: bold; + text-align: center; + line-height: 1.75em; + color: #666; + background: #CCC url(../images/title.gif) top repeat-x; + border: solid 1px #FFF; + border-bottom: solid 1px #999; + cursor: default; + padding: 0em; + margin: 0em; +} + +#popup_content { + background: 16px 16px no-repeat url(../images/info.gif); + padding: 1em 1.75em; + margin: 0em; +} + +#popup_content.alert { + background-image: url(../images/info.gif); +} + +#popup_content.confirm { + background-image: url(../images/important.gif); +} + +#popup_content.prompt { + background-image: url(../images/help.gif); +} + +#popup_message { + padding-left: 48px; +} + +#popup_panel { + text-align: center; + margin: 1em 0em 0em 1em; +} + +#popup_prompt { + margin: .5em 0em; +} diff --git a/css/print.css b/css/print.css new file mode 100644 index 0000000..e4a7973 --- /dev/null +++ b/css/print.css @@ -0,0 +1,30 @@ +/* ----------------------------------------------------------------------- + + + Blueprint CSS Framework 0.8 + http://blueprintcss.org + + * Copyright (c) 2007-Present. See LICENSE for more info. + * See README for instructions on how to use Blueprint. + * For credits and origins, see AUTHORS. + * This is a compressed file. See the sources in the 'src' directory. + +----------------------------------------------------------------------- */ + +/* print.css */ +body {line-height:1.5;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;color:#000;background:none;font-size:10pt;} +.container {background:none;} +hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;} +hr.space {background:#fff;color:#fff;} +h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;} +code {font:.9em "Courier New", Monaco, Courier, monospace;} +img {float:left;margin:1.5em 1.5em 1.5em 0;} +a img {border:none;} +p img.top {margin-top:0;} +blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;} +.small {font-size:.9em;} +.large {font-size:1.1em;} +.quiet {color:#999;} +.hide {display:none;} +a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;} +a:link:after, a:visited:after {content:" (" attr(href) ")";font-size:90%;} \ No newline at end of file diff --git a/css/rounded.css b/css/rounded.css new file mode 100644 index 0000000..5118e5a --- /dev/null +++ b/css/rounded.css @@ -0,0 +1,163 @@ +/** + * @version $Id: rounded.css 17159 2010-05-17 14:53:19Z chdemko $ + * @package Joomla.Administrator + * @subpackage templates.bluestork + * @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +/** rounded corners **/ +div#toolbar-box { + background: #f4f4f4; +} + +div#element-box { + /*background: #f8f8f8;*/ + background-color: #f4f4f4; +} + +div#element-box div.section-box div.m { + background: #fbfbfb; + +} + +div.t, div.b { + height: 6px; + padding: 0; + margin: 0; + overflow: hidden; + background-color: #f8f8f8; +} + +div.m { + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + padding: 0 8px; + background-color: #f4f4f4; +} + +.wbg { + background-color: #fff!important; +} + +div#toolbar-box div.m { + padding: 0; +/* margin-bottom:4px; */ +} + +div#element-box div.m { + padding: 5px 10px; +} + +div#submenu-box div.t { + background: url(../images/j_border.png) 0 0 repeat-x; +} + +div#submenu-box div.t div.t { + background: url(../images/j_crn_tr_dark.png) 100% 0 no-repeat; +} + +div#submenu-box div.t div.t div.t { + background: url(../images/j_crn_tl_dark.png) 0 0 no-repeat; +} + +div#submenu-box div.b { + background: url(../images/j_border.png) 0 100% repeat-x; +} + +div#submenu-box div.b div.b { + background: url(../images/j_crn_br_dark.png) 100% 0 no-repeat; +} + +div#submenu-box div.b div.b div.b { + background: url(../images/j_crn_bl_dark.png) 0 0 no-repeat; +} + +div#toolbar-box, +div#element-box div.section-box { + background: #f4f4f4; +} + +div#toolbar-box div.t, +div#element-box div.section-box div.t { + background: url(../images/j_border.png) 0 0 repeat-x; +} + +div#toolbar-box div.t div.t, +div#element-box div.section-box div.t div.t { + background: url(../images/j_crn_tr_dark.png) 100% 0 no-repeat; +} + +div#toolbar-box div.t div.t div.t, +div#element-box div.section-box div.t div.t div.t { + background: url(../images/j_crn_tl_dark.png) 0 0 no-repeat; +} + +div#toolbar-box div.b, +div#element-box div.section-box div.b { + background: url(../images/j_border.png) 0 100% repeat-x; +} + +div#toolbar-box div.b div.b, +div#element-box div.section-box div.b div.b { + background: url(../images/j_crn_br_dark.png) 100% 0 no-repeat; +} + +div#toolbar-box div.b div.b div.b, +div#element-box div.section-box div.b div.b div.b { + background: url(../images/j_crn_bl_dark.png) 0 0 no-repeat; +} + +div#element-box div.t { + background: url(../images/j_border.png) 0 0 repeat-x; + width: 100%; +} + +div#element-box div.t div.t { + background: url(../images/j_crn_tr_dark.png) 100% 0 no-repeat; +} + +div#element-box div.t div.t div.t { + background: url(../images/j_crn_tl_dark.png) 0 0 no-repeat; +} + +div#element-box div.b { + background: url(../images/j_border.png) 0 100% repeat-x; + width: 100%; +} + +div#element-box div.b div.b { + background: url(../images/j_crn_br_dark.png) 100% 0 no-repeat; +} + +div#element-box div.b div.b div.b { + background: url(../images/j_crn_bl_dark.png) 0 0 no-repeat; +} + +/* login */ + +div#element-box.login { + background-color: #ffffff; +} + +div#element-box.login div#section-box { + background-color: #f4f4f4; +} + +div#element-box.login > div.t > div.t { + background:transparent url(../images/j_crn_tr_light.png) no-repeat scroll 100% 0; +} + +div#element-box.login > div.t > div.t > div.t { + background:transparent url(../images/j_crn_tl_light.png) no-repeat ; +} + +div#element-box.login > div.b > div.b { + background:transparent url(../images/j_crn_br_light.png) no-repeat scroll 100% 0; +} + +div#element-box.login > div.b > div.b > div.b { + background:transparent url(../images/j_crn_bl_light.png) no-repeat ; +} + + diff --git a/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 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 IrGt(7AM>E)MF0Q* literal 0 HcmV?d00001 diff --git a/css/smoothness/images/ui-icons_2e83ff_256x240.png b/css/smoothness/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..b425c446d2444bcf40bd35581d2171c63658634e GIT binary patch literal 4379 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 HV5wd5C%uu$H z$TlJ~h}^R8On7wv8_)N}Ip@_mpY!56pXgVxoVseLcO3vgCnd1P1UZS6 zt48}LY1!G+KMjBUve{q+3X5 zp{jN4vKi9R?18p+&O6yv-#B*Uo9M@Xz{Ut>s;&boljH!2agSXPA_g*t=7Ree=)#a0 zN{!MI&*Jfg>fp&^ZAsC;OmksEG-+$1Gta8gFBkLo35VV2J0Omw&7N$had{-Uzv1W6h@IhYrzu}^y`34?5d)=934$I!zAs!UM zfR@XE4CkvJWfCC&Mcq4{WdlR`<$YAN8OYSNDZ-9LG*YkG<=Rb=7Kjy- zP)uOdb>Sdz!0E~X(zQ%+`yVA?0&6$fwKU9P1a6KMYknw8P?gTdMi*4GFnWua(*MBs zv4|Fz);R5a6|D!!VLR*$5-C$+EYD5tT`sia<@K=07+*$I7oW8?yc4&%WoW{6{ z*36KdB<<3+B3bd-uP}TbJpfG@&@MChyf4FZo?HcJoV}>`Sij?%zLhZVh7EawL76ZK zUgC+L0w1-g|9&IN$F`D`5~$9GA;Zw7;%MLu^j0ZfhJ%7iYsA+pa9(=7cFATKr932< zw!@``@7e_ zq$D#ff6$bz3<-SSaESAX`X}oe`#Aq0o>Y>}+%|!{!Xq$i#mBu*^dy8d^}{Y^ z-@_Xgr>|Z2;74haoP@LAVI_XmsQPM>)3QvEWFr}l6j^la5{Oh&&#U}g%*D0@*_f6i zjI8w!{OmX0<0E%R>iQiEOqURXdknVyNof4za&$5^y;-fmSNknd-L|Ct?lD$Wc(g|A zKcx=o*v~{eY#$(C0*IgzM5mdQvOugGo+o~i_8Ol4?wWLnFUR~WQ2>%S0=b@>?fa(F zaYS@eXS*7P%9mqCrq8i6gzW_DJUW#iq0Sxf?3z1E$;T-xN7;n*irIIqgAXppwgX*| z0s?0*ldqja(Suc%WH)+%aN=REBlxv3u_5<>&oUs7P54Z}19H5aQ0#dx zWM1_Vl@s^fz{2B(ePY5Cl+ z`AyY;B#=)5|Gho zrzqq6a`O!rzt-9}!@|!soz|L*>naq247D0^QgqE#U>J$VtpbRa$9;+GP zrLH|^QHB%hYw5i8jarA%ntpY=z6(Xm1{OiSh&`i+ z6-O(@&t$V0@5m#X?jg-4sCU{q%g|+Cyl+KNEx##OL@H%gnOyAS3X zNlC+UAXUn(63h|2ZKNtfvG!jCb=FGudE%$#!}3Aa$Jqpl7WZzz4cnR9kyohB8tcZU zVs{Vv_TL=pQIG*t9O&h>(?V(-{R*zfe^U%@{YU+kwQ0OfUPjH{pXR4eRvR~SY{A@7 znz(sJRBjYmqM7vObdV{iuJh5VvJ3MtN!{s7j8o@QCNn;1+4>S`>;v^DJ+ofr%5DTw z#g6YbqR@q%;kwDSjXD*AX_&(J?y1Y7p`Vt2C8KY6F8Xx_>C@~jq%|Jd3tm*WjE0E9 zIUy%zL`-Z6q^mCHsiWG&dV{(?s?);Ffj?NM_{#jO9@fg-8^kk64*wC1{U97pSWQt& zUfWOb4_OEI^FHa@u~8g4^#!jhwF&Xu=$b8-ON{+677g-ReE_`{Xyf?IGx9#Jw{X2V zq4mgV&71eJY}`9ysiD_*zXr?C;iXTltqtOmVz5DzGq@YHG$}5=OVd|!z0LG&;{YzV ze1*j2od}!h$FVQHrzE%MpA0#_&dZ)j7s3ML^57tOxMxVujVm_>IrGZ@+2_+EOVwG$ zq3#HbwlD#e#LJoK*5zUSg&9^sJHOtBZ?Ev!Q5Oq1;MVqJrF#RL%W9HkfW-Rnes%}) zau)4yakjIgC^HH0Bqy*KmC9Z)& zor7Ag)~k#)4IJMFU-Zn#aU?s~djaZ9ZAdl)8$l>B3DkA;%8^X5OA83F-^ytj%1oxg z zV7I~tY>fVSFeyk&M*rsE5ppDiFS_BtVoK)-qK#umpzF^btLVf)St=3cUr6Fh2iTTpVNzY`peHJ?f;9%!4&Wv5$f%Uw;dhSBD3Zqc&eIY zT9uhCXTidPAmQ%<(jIG_9Ip!Xq&3zccVe?biwl1Y9ClqWy%?37*B`ndy4AZ+{HCgZ zZ?-s9i%s*}$gRPE-y#p{w~B} zVFF@xHqRNc5X?%W(D?>7EdZ!!SU6k|*g3=aSN&r6?@SR%OKsLy;|eHb}# zBmo(eYnvTHzDM3aFV(c~^TXqp7sd=~pF+gR4+vdX+Gg(GxjDm%C|r~^+yli#0#b^~M9VS5t%{xg{Fw`5>0`^@7OL>0eFCDAh-s6n znKqHJwsG~`Z?S^OmiKQUD*xy@AHyT(?i-w!D)AeMrnl-c(bNc5UIOOZZfjpo*$O3% zWX=_|*__=?pB+&+MzKE}_9h)-wiHORR(I^8ijhjsKh3Yaw}(5%=sgr?g^xKy^|sBw z9J7U*kCQaO#S5qfb?DyIn4IKyQn#)S64&N=4^*uNTDKwN=~mkLO`jo89icj}H98ml zZz)u}{5Ck*jmAIx4|?E~13m>T8;mHMLZ|J1WxREJYHdjTMOa>X;R0Q*;a|sqyQ)cT zkSr5OY2cj70h^QZsaIp^ey#_g_~0+yk3-& zre2^cZxc}7$Hk^ZHu~x^A3L$`cx6v}7&1z%Y1z*`u{V2K%)|bIPU59zCr>|cRUfNY Ise_CBAKt=5F#rGn literal 0 HcmV?d00001 diff --git a/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/css/smoothness/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..2db88b796a36dc0501745c6f90920cf601bfbccd GIT binary patch literal 4379 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 M>tS>&wXu=^1FE+S0{{R3 literal 0 HcmV?d00001 diff --git a/css/smoothness/jquery-ui-1.7.1.custom.css b/css/smoothness/jquery-ui-1.7.1.custom.css new file mode 100644 index 0000000..c6d4be8 --- /dev/null +++ b/css/smoothness/jquery-ui-1.7.1.custom.css @@ -0,0 +1,404 @@ +/* +* jQuery UI CSS Framework +* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +*/ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.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 +* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +*/ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 12px; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header a { color: #222222; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; outline: none; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; outline: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; outline: none; } +.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; outline: none; text-decoration: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } + +/* 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_222222_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_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-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; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion +----------------------------------*/ +.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 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; } +.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.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 { float:left; 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 .ui-datepicker-title select.ui-datepicker-year { float: right; } +.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*/ +}/* Dialog +----------------------------------*/ +.ui-dialog { position: relative; padding: .2em; width: 300px; } +.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } +.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 { 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 button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* Progressbar +----------------------------------*/ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable +----------------------------------*/ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.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: 0px; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; 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;}/* Slider +----------------------------------*/ +.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; } + +.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; }/* Tabs +----------------------------------*/ +.ui-tabs { padding: .2em; zoom: 1; } +.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } +.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } +.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 { padding: 1em 1.4em; display: block; border-width: 0; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..3fd9868 --- /dev/null +++ b/css/style.css @@ -0,0 +1,627 @@ +/* +Author: Åukasz Girek +Author URI: http://www.rzepak.pure.pl/ +Project: +Description: +*/ +/*--------------------------------------------------------------------------------------- +--- RESETS +---------------------------------------------------------------------------------------*/ +html, body, div, span, applet, object, iframe, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, images, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline;background: transparent;} + body {line-height: 1;} + ol, ul {list-style: none;} + blockquote, q {quotes: none;} + blockquote:before, blockquote:after, + q:before, q:after {content: '';content: none;} + :focus {outline: 0;} + ins {text-decoration: none;} + del {text-decoration: line-through;} + table {border-collapse: collapse;border-spacing: 0;} +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; + } + +.clearfix {display: inline-block;} /* for IE/Mac */ + +/*--------------------------------------------------------------------------------------- +--- BASICS +---------------------------------------------------------------------------------------*/ +body{ + font-size:12px; + font-family: Arial, Helvetica, sans-serif; + color:#000; + background:url(../images/bg_8.jpg) repeat-y center #144E74; + /*background:url(../images/background45.jpg) no-repeat center #528037;*/ + line-height:16px; + +} + + +a{ color:#162635;text-decoration:none; } +a:hover{text-decoration:underline; } +a:active{ } +a:visited{ } +.left{ float:left; } +.right{ float:right; } +.clear{ clear:both; } +images.left{ margin:0 1em 1em 0; } +images.right{ margin:0 0 1em 1em; } +.padding{ padding:10px; } + +input:focus, textarea:focus { + background-color: #FFFFE1; + border: 1px solid #999999; +} + +/* ------------------------------------------------------------------------------------ +ELEMENTS */ +h1{color:#2d2d2d;padding:0px;margin:0px;margin-top:10px;padding:10px;} +h2{color:#2d2d2d;font-family: Arial, Helvetica, sans-serif;font-size:20px;padding:10px;margin:0px;} +h3{color:#2d2d2d;padding:0px;margin:0px;padding:5px;} +h4{color:#2d2d2d;padding:0px;margin:0px;padding:5px;} +h5{color:#2d2d2d;padding:0px;margin:0px;padding:5px;} +p{padding:10px;background:#fff;} +input{padding:3px;border-left:1px solid #a8a8a8;border-top:1px solid #a8a8a8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;-moz-border-radius:3px;margin:3px;} +ul{list-style:circle;margin:10px;margin-left:20px;} +ol{list-style:decimal;margin:10px;margin-left:20px;} +p.info{border:1px solid #6aa6d6;background:#c9e3f8;} +fieldset{border:1px solid #ddd;padding:10px;background:#fff;margin:10px 0px;} +legend{border:1px solid #ddd;padding:5px;background:#fff;} +label{display:block;} +label input{margin-left:30px;} +hr { border: 1px #ddd solid; width: 80%;} +button {text-transform:uppercase;font-size:10px;padding:3px;color:#fff;background:#4780ae;border-left:1px solid #084577;border-top:1px solid #084577;border-right:1px solid #7ab7e8;border-bottom:1px solid #7ab7e8;-moz-border-radius:3px;margin:3px;margin-top:5px;} +img{border:0;} +/* ------------------------------------------------------------------------------------ +Login */ +#login{ + background:#fff; + padding-left:20px; + padding-top:30px; + padding-right:20px; + padding-bottom:20px; + text-align:left; +} +#login_container{ + overflow:hidden; + width:360px; + margin:0 auto; + margin-top:100px; +} +#login_container label{ + margin-top:10px; +} +#login label span{ + display:block; + width:100px; + float:left; + +} + +div#login { + width:260px; + margin: 10px auto; + border-top:2px solid #162635; +} +a#passwordrecoverylink{font-size:10px;text-decoration:underline;display:block;text-align:right;color:#999;} +a:hover#passwordrecoverylink{color:#000;} +.loginbutton{margin-left:160px;} +#login input#remember{margin:10px 5px 0px 10px;} +/* ------------------------------------------------------------------------------------ + MENUS */ +#navigation, #navigation ul { padding:0; margin:0; list-style:none; line-height:1; float:left; } +#navigation a { display:block; padding:6px 10px; text-decoration:none; } +#navigation a:hover{ text-decoration:underline; padding:6px 10px;} +#navigation li { float:left; width:auto; } +#navigation li{ padding:0; margin:0; } +#navigation li ul li{ padding:1px 0px;} +#navigation li ul li a{ padding:6px 10px; width:110px; } +#navigation li ul { position:absolute; padding-top:1px; width:130px; left:-999em; } +#navigation li ul ul { margin: -1.5em 0 0 130px; } +#navigation li:hover ul ul, #navigation li:hover ul ul ul, #navigation li.sfhover ul ul, #navigation li.sfhover ul ul ul { left: -999em;} +#navigation li:hover ul, #navigation li li:hover ul, #navigation li li li:hover ul, +#navigation li.sfhover ul, #navigation li li.sfhover ul, #navigation li li li.sfhover ul { left: auto; } + +#top_menu ul { + margin:0px; + padding:0px; + list-style:none; + font-size:12px; + } +#top_menu ul li{ + float:left; + display:block; +} +#top_menu ul li a{ + text-decoration:none; + color:#fff; + display:block; + padding:12px 15px 10px 15px; +} + +#top_menu ul li a:hover, #top_menu li.current a{ + background:url(../images/menutop_hover.jpg) bottom center no-repeat; +} +/* ------------------------------------------------------------------------------------ +STRUCTURE */ +#container{ + overflow:hidden; + width:960px; + margin:0 auto; + +} +#header{} +#footer{clear:both; } +#content_main{ + background:#f1f1f1; + width:940px; + padding:10px; + -moz-border-radius:3px; +} +#top_menu{ + background:url(../images/menutop.jpg) no-repeat top center; + width:960px; + margin-top:5px; + height:35px; +} +#profile_info{ + background:url(../images/loginbox.jpg) no-repeat top center; + width:231px; + height:59px; + padding:4px; + float:right; + margin-top:15px; + font-size:12px; + color:#fff; + line-height:10px; +} +#profile_info p{background:none;} +#avatar{float:left;margin:0px 10px;} +#postedit{background:#f1f1f1;width:940px;padding:10px;-moz-border-radius:3px;} +#dashboard{width:640px;background:#fff;padding:10px;border-top:1px solid #ddd;border-bottom:1px solid #ddd;} +#sidebar{width:250px;background:#fff;padding:10px;border-top:1px solid #ddd;border-bottom:1px solid #ddd;-moz-border-radius:3px;} +#footer{background:#f1f1f1;width:940px;padding:10px;-moz-border-radius:3px;margin-top:10px;} +#footer p{background:none;padding:0px;margin:0px} +.panel{min-height:285px;} +.section,.panel,#shortcuts,#chart,.quickview{background:#fff;padding:10px;border-top:1px solid #ddd;border-bottom:1px solid #ddd;-moz-border-radius:3px;} +#postedit,#panels,#shortcuts{margin-top:10px;} +.section{margin-top:10px;} +.panel {width:290px;margin:5px;} +.calendar {width:210px;margin-right:0px;} +.photo {width:375px;margin-left:0px;margin-right:10px;} +.form_sidebar{width:220px;margin-left:10px;margin-top:5px;padding:4px;background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd;} +#form_middle_cont{width:940px} +/* ------------------------------------------------------------------------------------ +ICONS */ + +.ico_mug{background:url(../images/ico_mug.jpg) no-repeat 5px center #f1f1f1; padding-left:40px;margin-bottom:20px; } +.ico_usuarios{ + background:url(../images/list_user.png) no-repeat 5px center #fff; + padding-left:40px; + margin-bottom:20px; + + +} + + +.ico_admin{background:url(../images/icon-16-user.png) no-repeat 5px center #f1f1f1; padding-left:30px;} + +.ico_taller{background:url(../images/icon-16-menumgr.png) no-repeat 5px center #f1f1f1; padding-left:30px;} + +.ico_relator{background:url(../images/icon-16-user-dd.png) no-repeat 5px center #f1f1f1; padding-left:30px;} + +.ico_posts{background:url(../images/ico_posts.jpg) no-repeat 5px center #f1f1f1; padding-left:30px;} +.ico_page{background:url(../images/ico_page.jpg) no-repeat 5px center #f1f1f1; padding-left:30px;} +.ico_settings{background:url(../images/ico_settings.jpg) no-repeat 5px center #f1f1f1; padding-left:30px;} +.ico_user{background:url(../images/ico_user.jpg) no-repeat 5px center #f1f1f1; padding-left:30px;} +.ico_success{padding-left:20px;background:url(../images/success.jpg) no-repeat left center} +.ico_cancel{padding-left:20px;background:url(../images/error.jpg) no-repeat left center} +.ico_error{padding-left:20px;background:url(../images/ico_error.jpg) no-repeat left center} +.ico_pending{padding-left:20px;background:url(../images/ico_hourglass.jpg) no-repeat left center} +.ico_chart{padding-left:20px;background:url(../images/ico_chart_bar.jpg) no-repeat left center} + +.ico_planificacion{background:url(../images/icon-16-article.png) no-repeat 5px center #f1f1f1; padding-left:30px;} +.ico_participantes{background:url(../images/icon-16-groups.png) no-repeat 5px center #f1f1f1; padding-left:30px;} + + + +/* ------------------------------------------------------------------------------------ +LOGO */ +div#logo h1{padding:0px;margin:0px;} + +/* +div#logo h1 a{ + display:block; + text-indent:-9999px; + width:367px; + height:50px; +} +*/ +/* ------------------------------------------------------------------------------------ +CUSTOM */ + +#placeholder{width:180px;height:95px;padding:10px;padding-bottom:14px;} +.more{font-size:13px;} +.approved{font-weight:bold;color:#25a21f} +#success{margin:-px 0px;border:1px solid #b2dc4d;color:#40550d;font-family:"Arial", Arial, sans-serif;font-size:12px;background:#cce297;font-weight:700;padding:5px;-moz-border-radius:3px;-webkit-border-radius: 3px;} +#fail{margin:5px 0px;border:1px solid #c82820;color:#c82820;font-family:"Arial", Arial, sans-serif;font-size:12px;font-weight:700;background:#e7928d;padding:5px;-moz-border-radius:3px;-webkit-border-radius: 3px;} +#warning{margin:5px 0px;border:1px solid #efdc90;color:#a9a014;font-family:"Arial", Arial, sans-serif;font-size:12px;font-weight:700;background:#fffecc;padding:5px;-moz-border-radius:3px;-webkit-border-radius: 3px;} + +.form_sidebar ul{margin:0px;padding:0px;list-style:none;} +.form_sidebar ul li ul{margin:0px 10px;padding:0px;list-style:none;} + +span.date{display:block;padding-left:20px; font-style:italic;font-family:10px;} +.odd{background:#eee;border-top:1px solid #DDDDDD;padding:3px;} +.even{border-top:1px solid #DDDDDD;padding:3px;} +a#visit{display:block;color:#fff;background:#4780ae;border-left:1px solid #084577;border:1px solid #7ab7e8;padding:4px;margin:5px 15px 0px 0px;-moz-border-radius:3px;} +a.add{display:block;width:80px;text-align:center;color:#fff;background:#4780ae;border:1px solid #4780ae;padding:4px;margin:10px 15px 0px 0px;-moz-border-radius:3px;text-transform:uppercase;} +#profile_info p{font-size:11px;padding-top:2px;padding-bottom:4px;} +#profile_info p a{font-size:11px;color:#f9d71c;} +#profile_info p a:hover{font-size:11px;color:#f7d202;text-decoration:underline;} +#profile_info p.last_login{font-size:10px;padding-top:5px;color:#dfdfdf} + +#table_options ul li a {color:#000;display:block;padding-top:5px;} + +.quickview ul{margin:0px;padding:0px;list-style:none;} +.quickview ul li{padding:3px;font-size:12px;} +.quickview ul li span.number{font-family:Georgia;font-size:13px;color:#629fa8} + +#shortcuts{width:640px;} +#shortcuts ul {margin:0px;padding:0px;list-style:none;margin-top:20px;} +#shortcuts ul li{float:left} +#shortcuts ul li.first_li a{margin-left:0px;} +#shortcuts ul li a{border:1px solid #999;-moz-border-radius:3px;display:block;padding:5px;margin:5px;width:70px;text-align:center;} +#shortcuts ul li a span{font-size:10px;margin-top:5px;display:block;background:#eee;padding:2px;} +#shortcuts ul li a:hover{border:1px solid #ececec;text-decoration:none;} + +.photo ul{margin:0px;padding:0px;list-style:none;} +.photo ul li{float:left; border:1px solid #999;-moz-border-radius:3px;padding:3px;margin:3px 1px;position:relative;} +.photo ul li span{font-size:10px;margin-top:5px;display:block;padding:4px 1px;width:83px;position:absolute;bottom:0px;left:0px;} +.todo ul {margin:0px;padding:0px;list-style:none;} +.todo ul li{margin-left:0px;padding-left:0px;list-style:none;} +.todo p{margin:0px;padding:0px;} +ul#menu{margin:0px;padding:0px;list-style:none;margin-top:20px;} +ul#menu, ul#menu ul {list-style-type:none; margin: 0; padding: 0; } +ul#menu a { display: block; text-decoration: none; } +ul#menu li { margin-top: 1px;} +ul#menu li a {color: #000;padding: 10px;padding-left:25px;border-bottom:1px solid #ddd} +ul#menu li a:hover { } +ul#menu li ul li a { background: #fff; color: #000; padding-left: 15px; border-bottom:none} +ul#menu li ul li a:hover { background: #eee; border-left: 5px #4780ae solid; padding-left: 10px;} + +input#post_title{width:925px;margin:0px;border-left:1px solid #a8a8a8;border-top:1px solid #a8a8a8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8;-moz-border-radius:3px;font-size:28px;padding:5px;} +.form_sidebar span{display:block;padding:5px 5px;background:#eee;margin-bottom:10px;} +#save{width:100px;color:#fff;background:#4780ae;border-left:1px solid #084577;border-top:1px solid #084577;border-right:1px solid #7ab7e8;border-bottom:1px solid #7ab7e8;} + +#table{ + width:100%; + border:1px solid #c3c3c3; +} +#table th{ + background:#eee; + padding:5px; + text-align:left; +} +#table td{padding:5px;} +#table tr:hover{ + background:#ffffcc; +} + +#table .table_date{color:#5e5e5e;width:100px;font-weight:bold;} +#table .table_check{width:20px;} +#table .table_title a{color:#26608e;text-decoration:underline;font-weight:bold;} + +#table_options{background:#fff;border:solid #c3c3c3;border-width:0px 1px 1px 1px;padding:5px;} +#table_options label{margin:0px;padding-top:2px;} +#table_options ul{list-style:none;margin:0px;padding:0px;} +#table_options ul li{float:left;padding:5px;margin-right:10px;} + +.pagination{margin-top:20px;} +.pagination a, .pagination span{background:url("../images/borderbottom.jpg") bottom repeat-x #fff;padding:5px;margin:2px;border:1px solid #d9d9d9;text-decoration:none;-moz-border-radius:3px;-webkit-border-radius: 3px;} + + +.file{ + border:1px solid #eee; +} + +.form-left{ + + float:left; + margin:5px; + width:440px; + +} +.cls{ + clear:both; +} +.rojo{ + color:#FF0000; + font-size:14px; +} + +/*formularios*/ +#edit_form label{ + width:150px; + float:left; + height:20px; + font-size:14px; + line-height:30px; +} +#edit_form .inputclass{ + height:20px; +} + +#edit_form button{ + margin-left:50px; +} + +#update-image-relator{ + margin-right:100px; + +} + +#update-image-relator img{ + padding:3px; + border:1px solid #DDD; + float:right; + background:#FFF; +} + +/* -- ELEMENT BOX --------------------------------- */ + +/* -- TOOLBAR STYLES ----------------------------- */ + +/* Page titles */ +div.pagetitle { + padding-left: 60px; + background-repeat: no-repeat; + margin-left: 10px; +} + +div.pagetitle h2 { + line-height: 48px; + font-size: 2em; + font-weight: bold; + color: #146295; + margin: 0; + padding: 0; +} + +div.pagetitle span { + color: #666; +} + + + +/* Main toolbars */ +div.toolbar-list { + float: right; + text-align: right; + padding: 0; + margin-right:5px; + + +} + +div.toolbar-list ul { + margin: 0; + padding: 0; + +} + +div.toolbar-list li { + padding: 1px 1px 3px 4px; + text-align: center; + color: #666; + height: 48px; + list-style: none; + float: left; +} + +div.toolbar-list li.spacer { + width: 10px; +} + +div.toolbar-list li.divider { + border-right: 1px solid #c7c7c7; + width: 2px; +} + +div.toolbar-list span { + float: none; + width: 32px; + height: 32px; + margin: 0 auto; + display: block; +} + +div.toolbar-list a { + display: block; + float: left; + white-space: nowrap; + border: 1px solid #F4F4F4; + padding: 1px 5px; + cursor: pointer; +} + +div.toolbar-list a:hover { + border-left: 1px solid #eee; + border-top: 1px solid #eee; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + text-decoration: none; + color: #0B55C4; +} + + + +/*toolbar style*/ +#toolbar-box { + background: #fbfbfb; + margin-bottom: 10px; +} + +#submenu-box { + background: #f4f4f4; + margin-bottom: 10px; +} + +#submenu-box .padding { + padding: 0px; +} +.clr { + clear: both; + overflow: hidden; + height: 0; +} + +/* Listar Categorias---------------------------------------------------*/ + +.col{ + float:left; + +} +.w150{ + width:150px; +} +.w400{ + width:400px; +} +.w500{ + width:500px; +} + +.w700{ + width:700px; +} + +#lista_categorias{ + +} + +#lista_categorias label { + display: block; + padding-left: 15px; + text-indent: -15px; + + width:100px; +} + +#lista_categorias input { + width: 13px; + height: 13px; + padding: 0; + margin:0; + vertical-align: bottom; + position: relative; + top: -8px; + overflow: hidden; +} + +/** ---------------------------------------------------------------------*/ + + +/*------------------------------------------------------------*****************/ +/* -- TOOLBAR ICON STYLES ----------------------------- */ +.icon-32-send { background-image: url(../images/toolbar/icon-32-send.png); } +.icon-32-delete { background-image: url(../images/toolbar/icon-32-delete.png); } +.icon-32-help { background-image: url(../images/toolbar/icon-32-help.png); } +.icon-32-cancel { background-image: url(../images/toolbar/icon-32-cancel.png); } +.icon-32-checkin { background-image: url(../images/toolbar/icon-32-checkin.png); } +.icon-32-config { background-image: url(../images/toolbar/icon-32-config.png); } +.icon-32-apply { background-image: url(../images/toolbar/icon-32-apply.png); } +.icon-32-back { background-image: url(../images/toolbar/icon-32-back.png); } +.icon-32-export { background-image: url(../images/toolbar/icon-32-export.png); } +.icon-32-forward { background-image: url(../images/toolbar/icon-32-forward.png); } +.icon-32-save { background-image: url(../images/toolbar/icon-32-save.png); } +.icon-32-edit { background-image: url(../images/toolbar/icon-32-edit.png); } +.icon-32-copy { background-image: url(../images/toolbar/icon-32-copy.png); } +.icon-32-move { background-image: url(../images/toolbar/icon-32-move.png); } +.icon-32-new { background-image: url(../images/toolbar/icon-32-new.png); } +.icon-32-upload { background-image: url(../images/toolbar/icon-32-upload.png); } +.icon-32-assign { background-image: url(../images/toolbar/icon-32-publish.png); } +.icon-32-html { background-image: url(../images/toolbar/icon-32-html.png); } +.icon-32-css { background-image: url(../images/toolbar/icon-32-css.png); } +.icon-32-menus { background-image: url(../images/toolbar/icon-32-menu.png); } +.icon-32-publish { background-image: url(../images/toolbar/icon-32-publish.png); } +.icon-32-unpublish { background-image: url(../images/toolbar/icon-32-unpublish.png); } +.icon-32-restore { background-image: url(../images/toolbar/icon-32-revert.png); } +.icon-32-trash { background-image: url(../images/toolbar/icon-32-trash.png); } +.icon-32-archive { background-image: url(../images/toolbar/icon-32-archive.png); } +.icon-32-unarchive { background-image: url(../images/toolbar/icon-32-unarchive.png); } +.icon-32-preview { background-image: url(../images/toolbar/icon-32-preview.png); } +.icon-32-default { background-image: url(../images/toolbar/icon-32-default.png); } +.icon-32-refresh { background-image: url(../images/toolbar/icon-32-refresh.png); } +.icon-32-save-new { background-image: url(../images/toolbar/icon-32-save-new.png); } +.icon-32-save-copy { background-image: url(../images/toolbar/icon-32-save-copy.png); } +.icon-32-error { background-image: url(../images/toolbar/icon-32-error.png); } +.icon-32-new-style { background-image: url(../images/toolbar/icon-32-new-style.png); } +.icon-32-delete-style { background-image: url(../images/toolbar/icon-32-delete-style.png); } +.icon-32-purge { background-image: url(../images/toolbar/icon-32-purge.png); } +.icon-32-remove { background-image: url(../images/toolbar/icon-32-remove.png); } +.toolbar-inactive { background-position: 0px 32px; } + +/* -- HEADER ICON STYLES ----------------------------- */ +.icon-48-generic { background-image: url(../images/header/icon-48-generic.png); } +.icon-48-banners { background-image: url(../images/header/icon-48-banner.png); } +.icon-48-banners-categories { background-image: url(../images/header/icon-48-banner-categories.png); } +.icon-48-banners-clients { background-image: url(../images/header/icon-48-banner-client.png); } +.icon-48-banners-tracks { background-image: url(../images/header/icon-48-banner-tracks.png); } +.icon-48-checkin { background-image: url(../images/header/icon-48-checkin.png); } +.icon-48-clear { background-image: url(../images/header/icon-48-clear.png); } +.icon-48-contact { background-image: url(../images/header/icon-48-contacts.png); } +.icon-48-contact-categories { background-image: url(../images/header/icon-48-contacts-categories.png); } +.icon-48-purge { background-image: url(../images/header/icon-48-purge.png); } +.icon-48-cpanel { background-image: url(../images/header/icon-48-cpanel.png); } +.icon-48-config { background-image: url(../images/header/icon-48-config.png); } +.icon-48-groups { background-image: url(../images/header/icon-48-groups.png); } +.icon-48-groups-add { background-image: url(../images/header/icon-48-groups-add.png); } +.icon-48-levels { background-image: url(../images/header/icon-48-levels.png); } +.icon-48-levels-add { background-image: url(../images/header/icon-48-levels-add.png); } +.icon-48-module { background-image: url(../images/header/icon-48-module.png); } +.icon-48-menu { background-image: url(../images/header/icon-48-menu.png); } +.icon-48-menu-add { background-image: url(../images/header/icon-48-menu-add.png); } +.icon-48-menumgr { background-image: url(../images/header/icon-48-menumgr.png); } +.icon-48-newsfeeds-categories { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } +.icon-48-trash { background-image: url(../images/header/icon-48-trash.png); } +.icon-48-user { background-image: url(../images/header/icon-48-user.png); } +.icon-48-user-add { background-image: url(../images/header/icon-48-user-add.png); } +.icon-48-inbox { background-image: url(../images/header/icon-48-inbox.png); } +.icon-48-new-privatemessage { background-image: url(../images/header/icon-48-new-privatemessage.png); } +.icon-48-msgconfig { background-image: url(../images/header/icon-48-message_config.png); } +.icon-48-langmanager { background-image: url(../images/header/icon-48-language.png); } +.icon-48-mediamanager { background-image: url(../images/header/icon-48-media.png); } +.icon-48-plugin { background-image: url(../images/header/icon-48-plugin.png); } +.icon-48-help_header { background-image: url(../images/header/icon-48-help_header.png); } +.icon-48-impressions { background-image: url(../images/header/icon-48-stats.png); } +.icon-48-browser { background-image: url(../images/header/icon-48-stats.png); } +.icon-48-searchtext { background-image: url(../images/header/icon-48-stats.png); } +.icon-48-thememanager { background-image: url(../images/header/icon-48-themes.png); } +.icon-48-writemess { background-image: url(../images/header/icon-48-writemess.png); } +.icon-48-featured { background-image: url(../images/header/icon-48-featured.png); } +.icon-48-sections { background-image: url(../images/header/icon-48-section.png); } +.icon-48-article-add { background-image: url(../images/header/icon-48-article-add.png); } +.icon-48-article-edit { background-image: url(../images/header/icon-48-article-edit.png); } +.icon-48-article { background-image: url(../images/header/icon-48-article.png); } +.icon-48-categories { background-image: url(../images/header/icon-48-category.png); } +.icon-48-category-add { background-image: url(../images/header/icon-48-category-add.png); } +.icon-48-install { background-image: url(../images/header/icon-48-extension.png); } +.icon-48-dbbackup { background-image: url(../images/header/icon-48-backup.png); } +.icon-48-dbrestore { background-image: url(../images/header/icon-48-dbrestore.png); } +.icon-48-dbquery { background-image: url(../images/header/icon-48-query.png); } +.icon-48-systeminfo { background-image: url(../images/header/icon-48-info.png); } +.icon-48-massmail { background-image: url(../images/header/icon-48-massmail.png); } +.icon-48-redirect { background-image: url(../images/header/icon-48-redirect.png); } +.icon-48-search { background-image: url(../images/header/icon-48-search.png); } +.icon-48-newsfeeds { background-image: url(../images/header/icon-48-newsfeeds.png); } +.icon-48-newsfeeds-cat { background-image: url(../images/header/icon-48-newsfeeds-cat.png); } +.icon-48-weblinks { background-image: url(../images/header/icon-48-links.png); } +.icon-48-weblinks-categories { background-image: url(../images/header/icon-48-links-cat.png); } +.icon-48-edit { background-image: url(../images/header/icon-48-edit.png); } +.icon-48-category { background-image: url(../images/header/icon-48-category.png); } +.icon-48-calendar { background-image: url(../images/header/icon-48-calendar); } + diff --git a/css/superfish.css b/css/superfish.css new file mode 100644 index 0000000..063095a --- /dev/null +++ b/css/superfish.css @@ -0,0 +1,137 @@ + +/*** ESSENTIAL STYLES ***/ +.sf-menu, .sf-menu * { + margin: 0; + padding: 0; + list-style: none; +} +.sf-menu { + line-height: 1.0; +} +.sf-menu ul { + position: absolute; + top: -999em; + width: 10em; /* left offset of submenus need to match (see below) */ +} +.sf-menu ul li { + width: 100%; +} +.sf-menu li:hover { + visibility: inherit; /* fixes IE7 'sticky bug' */ +} +.sf-menu li { + float: left; + position: relative; +} +.sf-menu a { + display: block; + position: relative; +} +.sf-menu li:hover ul, +.sf-menu li.sfHover ul { + left: 0; + top: 2.5em; /* match top ul list item height */ + z-index: 99; +} +ul.sf-menu li:hover li ul, +ul.sf-menu li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li:hover ul, +ul.sf-menu li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} +ul.sf-menu li li:hover li ul, +ul.sf-menu li li.sfHover li ul { + top: -999em; +} +ul.sf-menu li li li:hover ul, +ul.sf-menu li li li.sfHover ul { + left: 10em; /* match ul width */ + top: 0; +} + +/*** DEMO SKIN ***/ +.sf-menu { + + float: left; + margin-bottom: 1em; +} +.sf-menu a { + padding: .75em 1em; + text-decoration:none; +} +.sf-menu a, .sf-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/ + color: #13a; +} +.sf-menu li { + +} +.sf-menu li li { + background:#162635; + + border-bottom:1px solid #50606f; +} +.sf-menu li li li { + +} +.sf-menu li:hover, .sf-menu li.sfHover, +.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active { + + outline: 0; +} + +/*** arrows **/ +.sf-menu a.sf-with-ul { + padding-right: 2.25em; + min-width: 1px; /* trigger IE7 hasLayout so spans position accurately */ +} +.sf-sub-indicator { + position: absolute; + display: block; + right: 0em; + top: 1.2em; /* IE6 only */ + width: 10px; + height: 10px; + text-indent: -999em; + overflow: hidden; + background: url('../img/arrows-ffffff.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */ +} +a > .sf-sub-indicator { /* give all except IE6 the correct values */ + top: 1.05em; + background-position: 0 -100px; /* use translucent arrow for modern browsers*/ +} +/* apply hovers to modern browsers */ +a:focus > .sf-sub-indicator, +a:hover > .sf-sub-indicator, +a:active > .sf-sub-indicator, +li:hover > a > .sf-sub-indicator, +li.sfHover > a > .sf-sub-indicator { + background-position: -10px -100px; /* arrow hovers for modern browsers*/ +} + +/* point right for anchors in subs */ +.sf-menu ul .sf-sub-indicator { background-position: -10px 0; } +.sf-menu ul a > .sf-sub-indicator { background-position: 0 0; } +/* apply hovers to modern browsers */ +.sf-menu ul a:focus > .sf-sub-indicator, +.sf-menu ul a:hover > .sf-sub-indicator, +.sf-menu ul a:active > .sf-sub-indicator, +.sf-menu ul li:hover > a > .sf-sub-indicator, +.sf-menu ul li.sfHover > a > .sf-sub-indicator { + background-position: -10px 0; /* arrow hovers for modern browsers*/ +} + +/*** shadows for all but IE6 ***/ +.sf-shadow ul { + background: url('../images/shadow.png') no-repeat bottom right; + padding: 0 8px 9px 0; + -moz-border-radius-bottomleft: 17px; + -moz-border-radius-topright: 17px; + -webkit-border-top-right-radius: 17px; + -webkit-border-bottom-left-radius: 17px; +} +.sf-shadow ul.sf-shadow-off { + background: transparent; +} diff --git a/css/thickbox.css b/css/thickbox.css new file mode 100644 index 0000000..d24b9be --- /dev/null +++ b/css/thickbox.css @@ -0,0 +1,163 @@ +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +*{padding: 0; margin: 0;} + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_window { + font: 12px Arial, Helvetica, sans-serif; + color: #333333; +} + +#TB_secondLine { + font: 10px Arial, Helvetica, sans-serif; + color:#666666; +} + +#TB_window a:link {color: #666666;} +#TB_window a:visited {color: #666666;} +#TB_window a:hover {color: #000;} +#TB_window a:active {color: #666666;} +#TB_window a:focus{color: #666666;} + +/* ----------------------------------------------------------------------------------------------------------------*/ +/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/ +/* ----------------------------------------------------------------------------------------------------------------*/ +#TB_overlay { + position: fixed; + z-index:100; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;} +.TB_overlayBG { + background-color:#000; + filter:alpha(opacity=75); + -moz-opacity: 0.75; + opacity: 0.75; +} + +* html #TB_overlay { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_window { + position: fixed; + background: #ffffff; + z-index: 102; + color:#000000; + display:none; + border: 4px solid #525252; + text-align:left; + top:50%; + left:50%; +} + +* html #TB_window { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_window img#TB_Image { + display:block; + margin: 15px 0 0 15px; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top: 1px solid #666; + border-left: 1px solid #666; +} + +#TB_caption{ + height:25px; + padding:7px 30px 10px 25px; + float:left; +} + +#TB_closeWindow{ + height:25px; + padding:11px 25px 10px 0; + float:right; +} + +#TB_closeAjaxWindow{ + padding:7px 10px 5px 0; + margin-bottom:1px; + text-align:right; + float:right; +} + +#TB_ajaxWindowTitle{ + float:left; + padding:7px 0 5px 10px; + margin-bottom:1px; +} + +#TB_title{ + background-color:#e8e8e8; + height:27px; +} + +#TB_ajaxContent{ + clear:both; + padding:2px 15px 15px 15px; + overflow:auto; + text-align:left; + line-height:1.4em; +} + +#TB_ajaxContent.TB_modal{ + padding:15px; +} + +#TB_ajaxContent p{ + padding:5px 0px 5px 0px; +} + +#TB_load{ + position: fixed; + display:none; + height:13px; + width:208px; + z-index:103; + top: 50%; + left: 50%; + margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */ +} + +* html #TB_load { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_HideSelect{ + z-index:99; + position:fixed; + top: 0; + left: 0; + background-color:#fff; + border:none; + filter:alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; + height:100%; + width:100%; +} + +* html #TB_HideSelect { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_iframeContent{ + clear:both; + border:none; + margin-bottom:-1px; + margin-top:1px; + _margin-bottom:1px; +} diff --git a/fotos_perfil/8423_1258210815906_1248700751_770774_4683767_n.jpg b/fotos_perfil/8423_1258210815906_1248700751_770774_4683767_n.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1180fbd395e1e8d05a006de0e7904ebef27c64b7 GIT binary patch literal 37605 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 d>LxvnD;)7rwDf69JtVOfD=+N5E0`@!GJJ|!a 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ΞBKv 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 CMxl8C literal 0 HcmV?d00001 diff --git a/fotos_perfil/no_foto.jpg b/fotos_perfil/no_foto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e997aad6f9559af295fb260ba50af35ae00b4e7d GIT binary patch literal 3291 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 literal 0 HcmV?d00001 diff --git a/fotos_perfil/thumbs/back.jpg b/fotos_perfil/thumbs/back.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5704752d55651c71410fbc8a997166cbdc530a9f GIT binary patch literal 9410 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 Qf8zn>O-t>}+ft zTpXN0z`@1E0|G#jmzRe}5ClZvfRTljm4lswpNorMgpZF8E>1M#{~-oJ4h8`R0cJ)) z1|~s9WLw3oGE+|pBGC2PoUun03) z9n5581Ts^4CUh329Q^TSl9r&Q{gi7mJ9qQ-Hh!?Z^fV>)*MNZsl_V=9MN&Br5M|o^-Tm)vDs`-|-M5m>KOAYeNf`&1~Q^3@nt_ z*_wLMVQ%t`wG*^N%ULW0j^5o7`GA38g{cd~B_QR_y@H4SPUk3*hqwnMh8e9qrXI{QIRcL| zH7f{^#G}q$$Z}H#Scb^JRpZUf0Uk%724n}5>GA~`%*Uzrr csXo4D=Yj9F^Ykm{zVW|vcJIBqtj_;80Zfm;qyPW_ literal 0 HcmV?d00001 diff --git a/images/accept.png b/images/accept.png new file mode 100644 index 0000000000000000000000000000000000000000..89c8129a490b329f3165f32fa0781701aab417ea GIT binary patch literal 781 zcmV+o1M>WdP)4-QibtN)VXQDpczE`xXAkUjh%RI>;okxb7K@0kpyQ1k_Y(|Oe7$m(^ zNYX>mI||sUbmn+c3<&FnE=4u#()KBS^SH8e)Qs5i!#lY=$-1gbH6VluzU=m=EP78&5vQ z-?+fFP-G2l&l_QzYealK$;1Rl?FkzXR&Jv@fBPNjCr#AYRyJ7UJQ0v#?)7Ott=>3`#-pV!7>9}>Q1jL)H6h&gkP@3nI=+F3nA~M>u#(n* z8T!#8oEw&-mED4!h4s!N@Jo3S7N&Q6%6l3}nlcd~X@>;uelvPsSkXIgg~e+^T1zSf z3SNj(5%jK~i8@b;CW^&FmmK3GhR4OlNNRQup16~$UFNHylxbUK;) z?cDd?>*B-7Bu%D}nPGy9{cqOZd#&|<>;KnU|G&k1&;PRot7-hp?|uE_#ZvBb&hybQ zjK-~#pN~#Ve*b|lf2X}x09lCzUV7%SYN?`MZME8a0rJH%xl)-h$|2q-CT%^q?~@O| zuoeKd0!GQ^In|BRy`mIBCM3$`DHO_725Jn{Zwd3|p&$SLg=ao?QviPV{Nvw_S7DF8`gkHo3r!@KXIJXpt|nVFhmZf=IT=}9Ipy+gY( zhcTx3+7FLzTP?s17h$8>*t~Dw9;&q=wnrsYn5Wh15Cj==g*@JS&b{?FM$eummkSR8 z-(6P#tpZgp7ZDX8Is{RaDiu%~5e3e&edjJ3bF*mMU9|;n=znLBKoF5@8@y)=Z>ZNOSF87|D*#?jm#XCi{AGQv zU-cgE9QY-HY&Jr){AyhRZr^|ZKjS1`Sb7#*-vc;AJb2Tu)BHp($M_BN*7X5&zeD3>SgbOzT7up$>s zjs5q|Olf$hQkp2r66g$>AV5T;0A0QH31e)y?f_E@?YqY&=U;T0p*K3NC{|}NslnJ3 z0MP-ixS8z0@W#~GcblE=Q>n4n1f(ba`pC1N`pvzq`(HcI{OS4UessN#Whq&j+T8SP z>mg&!=kxi@PAwYeK#3p<;>6JHwhbqtQj7=_1;Ay= zs|d@|SrG)V&h;au$hNd&nC>j1QN(R?eUGaE=SHVqxoyjatcXL4CJX|=_phbdt{{Ux zar!4b{)cZdzc54KG=ou@#cm6QLYs*F$3Ecmg@{^ppgnTi{$t|3=iSNqkxnaqy;8}e z6cqAV)b+7{g=NQccW`LOJtRR7t1SUSDm}Cka*`*ba!fBYxHL1tEkj8w0O+*iFP2K# zz7O41Gp+@q7xy@Q=^Wimhhm{XE>IXcC=FSatv*p3 zEMRQk$6-d3&xXXQCCunmL-Z|?;;iR`U)#c62RE~^RNzm)eTQ?8O zfB5W$srgg(ao)?45@S5>avmuC8(K7gM~k<{nIuUY&35nY zv5AEf)|+q6&YEn}Zeb0b_XSugUw!D{dEm3}XVRyielce=*^N#I!+}|6H_V+Po~-c70Ctogt(UXFHI_K4^A$QD{S(Q&ugBuB`l+&plx<;(=&~r5 z^*CRreC2qZvh>PpnM;|sXP)z^uitN@3IFVdQ&MBb@00e$jk^lez literal 0 HcmV?d00001 diff --git a/images/avatar.jpg b/images/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..314980a8660acb542b462c0e322a6724a667baf4 GIT binary patch literal 1476 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 h+EZj#{{JljO`*0Kk)RyFKd4;>k_7(|c>dD6E& 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 literal 0 HcmV?d00001 diff --git a/images/bg_10.gif b/images/bg_10.gif new file mode 100755 index 0000000000000000000000000000000000000000..7a15990f7914563974ad4a28e96cf857066f1859 GIT binary patch literal 193311 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

h=Ookk>;)D7n}eBkeV0L66k%?lbo11 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

ey=|H?F)m`0nAq1NX-N@4R{R=lP{) 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 a$AaA_lifa(C4hPhysEK5p;r}7*QkAK?o2a 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 R^fG5){H>P>FO#qL{tur^RY?E< literal 0 HcmV?d00001 diff --git a/images/bg_9.jpg b/images/bg_9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38b00b8247139a13ba7630463b052f284af948f9 GIT binary patch literal 717071 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 z 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�K{?K5OHuC`)nN;BeKi#sFNg^6~HAyaAr01?40 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

ag#4!&xgtk)) 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 z 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

EN(dHLr{PNgK%Cc)dsgRKN^d zgH5AV>YW=I1=Ervm;#PkfQ;y%!^*%B00soNrpHrkpFfhAtD?)Vt<4B=pu{qad(i+x z!#C&UZ;ZDyv583ja2E#kU0jX&gQxGb+w0$Y^F@6B&?x1w%JvS})8Uy7sI=y2X;FYdm|G zx$hSE=9qYRG1?#Wjfkvnz4SDR{|RWKym&5FHNV^9)$6ju{#NxUt%QQ=s*4+4RB*WC zbs(e<-hH>x#{Z`|Ffwkh^)A)02Rp>rBI`Hc%qWZE7F6vRC5MtbJ6F{zWzNiDE$ptM9^ng_b*E|K7vTb zvrM8@4&BAvDyWU6Y>_+x+>H}D+>ZKp8HSz!26#TI6JQO(woZkU^s?KOb!8$5tB&Ub zxv=Nu1q7*)Dy<;XQ}RdoQ0)!cMFv9wV(Y z4)MV=(ClGOm=^ohW5hUa7Zu`oMj1`PNZFb{y~p^o%3m^Ag3d)g#=Z@1Ov!{jRQ!Bx z7j2Rckyk72Nt^!RZj``bsZVH)`1O;L_(b}Z%dd1+*r9*qq`%l_=$~`& zF5o^A@Ql+^FA&+X18#%gqT$3;Gk<9qUjZeqZ3Y)9SYoDI0Lb_K$ENHvp_vKA}b)Cf8uM zG2@I#yL=MgzR?$J?8iE5PQm&YHQa_O9x;gczWHy*Nyf*CWhi2%dAQKMuh#V+;=sm8 zWYUD)kysWT1+aK%w}1fs%GUYS-->f}WrdEN7bcZdPwJ)Y>gqY~@W5ZT?t94bTcT&r!{Kh7o=@cJ+!n=f#rS`E_7dK6_D~ zT!n%Q8lJb+Jx~nm3jh)=c(_(4YpYhRz}q2=^bNdlU-rJ3@q>(t2dK2xw#{?~xy;GK zu@%DKX$~W3qvKt(*a&a>!0!7$6%eWp0tTd)WxWUWClOQL;g$mxY z>KMz~FT7tzFX&gBz-|ZR+B1&_u$3eH4etTslBFSN0&-#v9Y{6dRLHZM!$<}y1vS3w z>PT)q6B*f9VD^JO;Xx6(dp>NF?v#e^0oU8qQ z=Z1S>tx-mohwC#kvo9`0i?TpCrhQnPvOT}A5zrBEG0**(2k(fEKK`OAP>mktS%kC~ z(d?Bq>fuuedPJ?|qb$0w)cu<4;a9_~i+GcRvWH(x^gZP@Ute&8t_I?PjO)DE;?tO2EagoXyN!_ga?G+c&;l^LX zk>~5XTc^9!@#hBuz8;U>^jC!Hv%4D?fTZl6OuNk98D8ug{DnD0ys8QnOt$qluuuQ= zR^9u~+qX-O4sh*rKQbc~8XGI7@Yh}paYb-NPikh9M>32VsZYW{3$a_%pWXzN!k-0x z+yBRdx<`}Xp^~rC0p6AqLs>svW^p2Ykf&-^rDlN^qUHdnetPpGsw!RParQrgcFyxZ zI&(V-(&Io2gMOCG z0hJ@b-rss`TkO&_hGIW>yHD;UA6ch3TkVksQIYJ(1yxFuS>R~@#c;rpt{&yNCU6zO zMOq1V#GJ7{V~iCj?`W#)4nCX}UIaAKeJpNGYQJL>^1VL#${$ly`Ym76&wW^KyEM?U zL82nQl|3d`4GO_lyRHu*z&jhjm*R}M*wYWljAj>KAfjqvGof=&=|V9-Ty}2#wFLs@ z$p^6>044nbkWx@FP2>@`#r;q!Fj*e`#bmnekuq_ca-17hKotbw6Q8>%^eoUNb`prS z2gYuFAJ{p5Mle$7{~~~p10cZxgbzU=PlI8+qzH}B_0&`Vg_ZvYeZo6q{8tUSl!>PU4G41p*#t+8&<{Nz@Fd=aTNSWU z{B44cVF-cF6fT8-!S-{={n5VkNiyvNwX|<8d0plVP@y)F0ky|ull=&E<>ycwq8yZo z#-Gl;fvt=;rw@jxGQOf}99tKY+~DCsaP9tYi00_TtB6BNU z(6!QDEs6^~vU?ry_QL?S`X_>pnbr?P14JXs+|cg-;TBA(z}~O*Zv}f=LAs*$Q?uWo ze?7N$aCt-{usPN%gmY>hXc_?|5bZd0D5(uImv#SNUcu=U6M4-9x^4W!0Umq;dc__^ z=5!!K>N|%B`VA!)jtR*HIZnyebQ$PUXU6Oq?=KISGg*IhJ>;-d+eyH z(^NMy;3Q)blr-CN?Fns=x_(MNPg(-tNtQFJTm z=bRy7c$8M|PL1j8w zTGr3(^9Kz4N@%w$l=+oZmlaA5oB||<&^phufH9{U0uS4M5BwF0W;jQ2UO^cGpK3p# z4+JXOcY|S;&w);bEOQK~c+r{DHT} zK~bN4D+wJLO6HV^}?g0 z!qV>lEfjzLS?KrvbsndWNMu*q++EQjU1di}Tz#TZm<;cN!T!_i*bTxV)Kv(x2Z}u6 zyIyuh9QWu;U6SI5yTNOMW5g-37)|g^@x~5rKdB(5P={1KPHEOY%n{}l^;7n}?oZ#g zT5yB!Qq`I13%m@oQGQy}BGu5*y9vvxPlhwgPI}}b@1I4gIla;>uA6aBl}oh9Z6J_^ ze@5Bv$_w8;HYRjCn|(|yv-wdM@H}vOg7q?PQu4ZvMMIq@l5)F~?=a5dG;5s5V&aGb zFco!)$dKam4zKbvm;_8>OgZe`cbKB#==T9;$tMRny!bSDD8AP|!vyDi`(WByp9kU0 zU{EwLa{{tv(Ih;faIr$3DNdfi4s?g|x__vKmsiCV-}LYe*|X94!ld)dGt#22CW?AB z_W>0&_&w^py1cjLWz5_k0-05kp+gkVN!(h%9lc?dCMO)^*lif|wRUY#GuywPt3ndh zeCi+87M!Nkc3(&(mR0UM{=@#|_yr zjzO0MXQ#=J9f^$dI{aWZ;l7P2cvi}D4VWoA?Q>K37te6{llWJuu?HKwf3W8+8&*)} zE|3+{@o>Olr5)$R9DoVjoDDaUKlnjBgVP<3;+uJPd4>FM4{>Vd&h%VXxhvDky~y2T z-oYMbhy#RCxehF5w7a<1GjXrv3!2k8zR88E?dfeZ1vzlmW}OEjnin28T;inkQl^ea zg>D>@J>e*%{?kiM>!ENCxe51IoC7VAz>V(Uuq0wcEwjv`>Y|VrARZC6Nd6l4K;G;Y zMeNPEzZH!migV`(ZaW3|0Jel8vUU1=O7H8M^7yZv`Q(2gd6b867WttgFD)Q`0AeRuy(UY6x&TnG2W+c9m2N`I5YFv#BL&xZhg zS0f<>Z1^)ITuE$}Y-D(q<4};77G2c)6`MCfks7+L`cmcFwx4gw z%XpO6y(>@&sY<;Ji19mNv;3-{W7u2f>xr6gl&vO26#jC%I&{Aesa)>3cMVuVK$!tG zYC#7lJA`(nr*5^rlDk-lXqQuR1tpi7{S?3*34ojtJC%@adcU=%4lEX&-b<;sH%TcdBU^@AG~<%#Th&t(RhKbq-bDZ1~Xs#>>!w^4te< z@7y>+ZoqRy0)C6D7~x_^33oDaHwoYkY$?>lMJB1fIvhWjn>#TaUX$J!^cmPfD|ew^ zCsbR@PcG&u^WACzY|hv(j$k(l24nA7PXnx$wKw+_3N`2*uw-tTHC8aZqpLdw7n;rI za2T4@!-(q9Abz^cZCOXp5}CCt*+eBS*W|wV(N{#wvelria2gI>NlGPTsd-NA)tipKwJEoj;)HB8quEKH|5>X^uO}`v*zz`uGz+R z9vs>KkPvo#bk4L)Gl$%8c${40o#RsAhJt9B{}njTUI!*8g8sl8;zx>ZtpYLq33LX= z$3^6Prd#i%vc|qRDw`;q7UJgzxys83UbOwKX-F^bml^y`kW~fx%@bV5Bh$ge8cdu4 ziq9m$c|p5X)_ioGYWS{#zWGApoY4OytYyPzO#bpJ>%;GROsm;wW`|6VHD(@k{rqtn z?b7pkIg+4uj?DpH)`_&9(#@~UC79Y|>b->(FPX=+h~y6cN4E@bZJL*GlLh}FEYD<# zh^qxG-VnN{bFWHY#>&m;g~K^H2Obf?C9w5)2%|ewjdcc_G{W`em7uospFWDY3&fmH z*MZHh%(?#gcQ4kO(6P}_V{39a$hOP5mbPzWsKyTe$dm_7Yw?Lx3BFDa<&X+^$>?}=hyXt@WkB(`XMiAfhahJ&GxI=Wx?5qutO++;&)LOe4 zmfU9#Gs<@1K&(x6$m_pEX9?L|$9Ml!v$v}VC~Dxod$lMrs}vM@Yk-}`2Qd7Z8}oh( zEf@lg5jPQKuAvqmtFOFyZI|0%1$_^!H*Ewf@MZ-T|mh*eOo!{n9bG5?Dk6@s@+$FC$1(HiDc6pg#tQ+ z)O`x>`&Hlb#(of&3og$-xVHf$8Kg`Xnb48Z&X0w}t7;-EUu&bx%|2D$3rz5v$`oJx zkIu>y^qDsEHM|9sP27+bZ03Ldy0}L&-}_2UOT?fMhwO`{%;T){l-E!MFX!;Q zIsXN%vsVkL2>0;p$?CH+T7;+cNQt+ z_L^-i09>^E7Yo;S`CRtm&Na0l#?^Y*0s77K?X1Cbc}a#0epU@R2DOsTul8yE?LwbD zzhG+E7}6!iQRF9 z>Hm9B+w_9ARAnke)NmB)tepMtgkE0x9Hs31YaT6sQ<=ooh z33Q!Jk{LR5-K*gXD>Vgro-Ac?ZW9hQk!Hg)w}aL1fMyRzX}y3EH; zMqn@CH&i!@dkn^|(V|zZ#^X*6jw-l?w=siu3Jc`) z3cR^)=Ki>I27WIqZZT$(T81PaHeIYH6I%qtY}OHjc>Kc=y!zfvC;vV@I*yrOAAq+! z(gFzRNNCsBR#B3K1jKHbq5gk?Tn^E(HQoB4vJqfZF-x&*B{W--`Kz!75_kib@GC<= zt;CLEl81WBpw)G5jJXTAWGsp0em?i1FDU*cKW7$UTo{K}hu&q@wmpou)3ma^HdN1? zh>HD!dFO6o%d(2L)%m+jgWub}$8G;LyxZXyewMFGF(x>ev^@*xw^=5jra9WP>X}x1 zciUADhm*e77t~6pj|&z_rg6zn&d#hy_-;uUnpiTt z%l7r>n9Bv27?E&YV`EK6k~McdOC8eTCgk2ajI|1{4(XYRpffaUB7!VavOq|rc+Yitd z_D*=PvE&eYK{Efi+e(H)#BabiTg!PJt&L5pniei|E51D~Z}bI6XzRFJ?K^MsUNioY zU0^}}czZT>a)S)WF zypSdLPEm<9X$M1H>07jZ6-w;(Ta%APCnxa4dOt(aNMTT+#}6O3N(=_CE*uT0@erOMbfq26O4t2|8ObBfdpFaf?@48;E|6cxZ81pK%IWcI78b zJzn>FRqD}m?<}bTNzWv6v>HOS*-W>sw(qJvIz5FufJW5l~dJ7dYxLWqr!b_vrG(ZF9^N_ZqNPJklxNBaPbz zoP=jD;(c=@W!XQj#}j^ad$F1lW4cwaP;U7xpT?2} zPx^d+qF3k>#TgvtFl)$;5rXSuZG zX5B#Ac@@pYc4klIePx3Bn|*>X1ntn)R((s`)xv(HWoW8Lrsrz6cVM(_*Ojx-<0Ddt zv&*AT$cDwY7@c0k7rdEEY{|R6#^=D*@*tjFuA#|pmR1EABDPRBxb{Q=wyt&>{CN?) zN953QSh0AcQrmg0ihGegbGMUm!DH4WdjnU*(95Al)KUL6qn>yVI8-#3UC5m0rcY>OJX zrca`$$_MW}26sFl8@OG{3R6RV!Ur#4k%NNMrly(&8Qx;w9AoaijlPA!UphIoz;>oK zdcINj)8{l&e{M$3+hjNi-8W14{KYq|G8=>E=9GkMlq?!CiG2oK#R^ZbaNZEZLPzn3 zsEL8*^WFGE7QFFZLFeoS34!i2F~ps7;~`R__HpJxe|7WgBg`hjmS6Kt&Re&>=Ncu` zUJz*eQ_*7e;w)E0KhXvKLo1>eHIHb)?tPR?e38`+g9?yG7Le5gE#u7bu zM}m&jfQnN~kn|Y>v%g(P#{)sy#U{Lq&flNYmlBd!^86y$W-6w#H#VmHB5IL#|1i(M zs(#rk(WJoEOM9>;Y<9ln{uI}=LDr1n2**`Rc5aaP(cwpnEtW|M z&?l4FbprR7qw3!^e2^^^*pZ6Mn2DL<=Yubu)m__h7iDs1(Ua;;VAt}vM+W; zcA#%{7z{6sKwb#)}Hq= zQQx=G;Taa6*;0VVQ^-*~y#Ct60cA zDnT=X4`HF^5)vEufNrL2{hw-XWhP^zA@rtnJ;0k0!6NRD4Ro((4|vu30I`}DZ@q6| z*^H!|b5%1;okqot`NNdTDy+j-<|9UT*~&f{QTyC1)$fW&lDUi92b>g1MH+Xcws&*h zz0N-9ZrNB!yD56|u)039<~i{2ImlQ2>jp(!CSQ2cs$Jf&egZK1#nYO=dsVZsVvZV| z;Gezky$IrbIA+aKllr=3$59b{Yxm)NGe0$uCY+~(7k%EtB_okiVC;<}OkaEOirj50 zZ20r2|M&9vFVC?nHOgq=;!@*>=%6@yn%R$@SX9xmw(rj&PGm=&e&PTq387j4twQL3 z(+xK3vMyOp^{fDgPFC&7cZ+^8Z!7}wfY~?L^O71Hw2EL!DRj1Gso@lp$#KTurpcb6 zFFyhL>#V0L%f4ClM6`C;+HAM(Hnu&!kX#w|2NI2_6Pa7`#$zuLVS8DZt4pjum_gPz zd^02zIwUU<07d6*+G`+T0}-HmY=-JnVvfo*|5o(7v8s`xYYrBB8m;$siMdLuyCYF^ z8D$&;ND0cxY2=%ob6F}`T=jq=krw)?3Ggg#HZ)R^O(ho&{z|!E)s^ym z3Vh>~o-%P>^MP`Kf3D>it}WfZVtN5W?r*Dsa9ZGv^|{Z1`BR`FjCXI7NozTe;kEff z*K$vwJ|TmhD2V)-T91r(U_m@&F^2t8H6Z%Ba#&HP+*~yb^A@^{8#&l0D(VwlWXA5c zNW99KRnOAs@Uc=^hxPt$EiI`Fn3eN+^0xnv?%f+~!4uw8?X&DHQuX!llLNdt#qigh z!@NNvBlCGzPz1YeqRRFAeUF*{e(95#_g`+~J6OeKH;J>8Fx6k}N`m;6J{dmhca>!n zE)Y*H(3-FUs{m}f`kqD~|78xnXPFx~P6rMUBSPWTTl}bkx$J`&YOIf+(l^P8mp4bB z{+s|N`2(OL@Y0rSL`MDUb92*ygJ18r1O230Y?bu&(KQS?;rmnt4a(dqDA=xRupzvB zpeHtTyEKYozU7doLx zRmvqtPeR5$1dTSZ#v*?;k8~|Mt>!%I$1A>xiDr9w(K>~x7JY7s+f^ru--Qg7lpOvP zFA6?j<$e^j-UgX6yei@F*#caU{GsQ$GzPV_hCp^#Ex5zG_ZRFHAt=pGn`2n;h{6U-!b;9k@S-sXpIZA56|0Q>M=to5VaL1iy@{6~ z@iUOnrU};ovq1&X}`lS%g;|!qU zVFd+{Ol~cdRA*|;@0GRf^4pTo-cVAKh`V_gt&@fFWcxrP5bZ!^9_<_c3v|&@bvJ+n z{4#r{Z<#v zP=k-M|1JeLV-D15k+iZkM6_lV8v2t(opYd*;S6vw&j9~2$sNrUt=XH3&;YwZ-LQD=L|dBWzCQ=yoC$O)7P{du0Ri4@eL??qQ3V*-Y}yq{DW^mk<~`$V9nSaR-QP~Tz3M3YxbqEM7i14ls$^KZVY?~Y-ImWImgcCUHX{JoPvD0a;lE`YP zYi_J7aU_y%%1YMNp-|Z!<5pHyn#k;LuiDzU!E?(zt}aV%iyBMonMzphuiL|Kiq_li za!(kKO6EML+-5dlxmW^adNUwUjc_6NPdMOdN95*Ay4^{Vw` z#g3%{)IwW>Z6alPZVM~)_=BE(b)nMW#Wo)oHil`;gy&s;JR`Ga&iyML03;^jA4Ht< zxc9{7B>YdB`dy2Pv5_JT)=ztPMm_1tZE;3S(W=5rGixjOohFb%JDpLIkoI1ZI5PQu zNI&#?#mA=t;`cyPPqvJ~s2=4XfN*?2d`k10^1g8Qdo zaIWKG$OkWeA#3$kh(xq8jj`AS)1>a8PMt)XPAll9Q; ztos?3frn(vPwj+U=G*_#$<}5EZ3*Xv*d1Pxq5~|_TdwmqW>rl)$^^8y$ngt}Z!Y!G za{M}RK&pktyds4C(^$R~;}7H4kRUNBEQi zGt;xg8vPl|p22|{jXw~9j6T$bgGn7?2d>@YPPupYdK^chG}Y_R7~zF;-PLBG zqI%4Et{ED}PyCsVf2;4C7jrfB+Y7?APz-rv!7}>-hx98CsGV5R#kclf12{AU0)%y3 zQt5r@n!XG--UlQsO3Ux<5gBCgXd{P-R^dF0=Ay>R`B6~ z^YVsAxn37ixPea242?mKg)7P%g-iqlTrUCRCZ0{DPM#V8Arm4&icNP1Yv|}WC+mED zrmJ)}Wo(StD(q&lj{*^iJt-MNP7M~7#}#)l|1%h>)?~G6Z%Mi|YKf2xLChX`e9l8V zRnGQZ-%S!3)%!F}9fRD7D|fmBC|)P4MRpE-Lc*~RKIZ`m;W3bkQ&{%vuuF@2x@yBb zPem)7+wR-_3p;t&_!h5etKsxiAbPnCCsXywBtsZ0(Ko6y{Odp}@sz|Fp4Z+P?hd5Z zR*OBDEVH_|>i@zPqIip4S)Gxp_1Ks(n<@vN-`T7V+{m3RpNxuj^)5U1 zjHLQ2om_n7{SaAE;5QR)40Fos7s%Q)rUO0?;lJ8zbkQq&WFN7Ln;V0Tkt_$+n`A?6 zCL2Yq^UtC!FQ2q_^le_0i)d9k>zP+(P1|7v3fUY`kcL)q6OZN$9$vpMMIr-zf46Qn zmrm;9$Y>h^N%N=LAq?P9Kv9TrGtd9vMDW3IL<8vdQ9|4~kO+tpuG@v)$xNZv+6 zyf8}#+EHHj1bt?2i{ild=Iax#yDB`kd4)RnhrXj9Af|&j(^#B6Z)D_H;muR((i`1M zE3b&&|By9+2IP+-himh5R$@0d4V|rZpr1-5<4|I39(9>tuT0fjUEKwiKo`#FEbo_V zgH503wKbq-b{EPrbus!j5=N;gjtl+YnP{BY|LCSp_bV=y_{0!85bR1Hi7s!At#Z*0 zv8>aP3Oe^%Il5Rf>kh{_IUxNa`(y&dPk9aZRkmTA3Eyl{!yLocnZC{14b(gxE{#pU z$S96IH7QeQ^DI$h8n(5ldlRJdsvc$=dFH;Pa2`*m&SLj6h5PxW<=&X6Ul?RJFQ>R_ zZ(-9*i4RCJ5Yv8oSRcnFEKlZljlQ ztJkZ}mVzz$iRwXnHS+(H|04H!EmbKr1d;6VEV05 zv+>$=jWZER;Zi-S;}FNH=OHwEZy?e3J@7xl0=Zlg+p&Bcs4Rp?7UE~=x0K2|nB>(N zqYHQE911q1%KOo7=8y39O8FRp>`mf{!Z~f>BjrSoZo%swNn8JZrJ>de0m!mo^;S(^ih3amv0rNADX7_46wy_wVc2Hww`tU6`e-?Gbyj& zJ2y`LqeC5>-WGGNB|goXo63W(CfR4pCjN0OP7`*#g$s$Z_b! zq>v_7t1iF!wM_8Th%*r_gCBCHX5!}keXf7MLUkYo_}>(6vHo%hB@e~h7KC#gi1KwO zCv{Hk0bYYX^A$FcLfces4Yh|8&Jwovx0&toC2Vsy*@^#-rh=z7>=Bn__Pua-WJ>H# zLJ0avBTD!yi2c?Z>92X1Vw6QU%4!nZ3l%qCUE>6Qyk1@LQ_Xk5V$|MUw69nv_Q6O0 zTT!K|fZx6IFDIcK@CIINV6EytA#)2Ol4g0~N_%%u*#F1XyT>!#|8L+EwJ4+mB_Whk zNIBGQj8slJA9I*fC*(}A-8P3L#2lic%y}3_kweWCLgg05+z2^l%h`<0cK=@P`}2ML zevjXuws{|3$LH&MKCkN{H!1onP#d(!)1%nzRP{NidBMO*?bk><&t%&^!ug>7+LucP zP{%E)mH83n>_K%rPb#i~$GaEjlzpxAYfX)asa#dSzP-3%rW3YDPTRG(xG-KoF6~w^FjTJbE`V5R!jm63wY<~J+l^z3&`+c zKKf%VmE#l@{|jA%2c^u51)6QNL|byBBbjsX^0-0$3JhU0JV&BR)lI%ITc)zh8=fC) zxfAN?HyVdRH6>2U*lV8hxntsY(qrTAxK|y5Xw{&In*!1NdISO}bghAoGTl1PA_zR+ zdk)N3zNoT0b}Zs=u^Zus_8dPi^OGM?q#U%EH?fK0-&%~SuKcO^QU@#azN?HYAAiTM zQX!qgtA4tZ7hB%Q{AKQumP%5u{DK+mEb*co;62Xg8fz&hvehKE87-7WI~ACN(pF(8{g8&!r=-CL!inwk7W!Fu<(VKt14K@=kqU?&NykRVX3nlqX~0_Vi5(xLx!hKM zD_bX%1AXTzA|juBYlC*)3u#BX{_Mf(p(~=3u_?iRkGXgj>S|#n)M5`m?E<#3NaRiZ z(v6VAPrr0*?P?L~mL0A;0_3c{t2Bj#oyso=3TWyYc&yeswengw$xPrj!ANlUxuD^C z5^HbhD*2+{cArCW{OyM+Gv75bLmIB@xX|`?kbXQf@vRUtz`OA6qf;vBZf9=zEJQy# z2(kAfOW#$P2wDk+`tW7 z8p0+o7&^Vvrgs8}j#)QM&yzKJkY?C=M2K|0c9jOP?ry>DRoHEM2Z%4&n8d z%8b31(gQ-C58uRZyJsN-o~Gv@8CoxA+$C=0II>}m*50zTGb0nzz&5TN^`d6M)p`Lt z-@fs-i&7`>NtvDpKW@7rCn&$l0QDs}pF($$&@H5+TX5Q?)PiZB*tY!<-y6pErIQ6} zepISn5}W@qhyEReHy8IV&nXU-gNQokB;I*ZR(sD22E<7=w0Jpz_jC4A{*2~b+*Jn1 zfTi1bRPV{Nf7||zyH9Dq;E`(!Tmp@SWs?0>9A$f}w4N{OxzFL9eksXi=M^S-jhp%h zrK8Zgm7!N{H#gdE zQLq-TRx$NvnQt!VnkjM9!vxGJ*pE86uor`r$gqlhEg~XwkUZ0EB=_*5=^OEMj_jKl z!g{YPCwjBM ze7fjLS=Wljdt$7GbR8^HUS^CM-@1>9TW;Y$p?H`z*o^(n`mK1G-u{|92X z=Od;qSC~O6dz0yOD>LD_{e3W@yDLnllkMIdOWNPL*WvikA8YV>KlZrym8#kFZAOvd zfNQ!ygpwiy;e7~MXe|59{F^EI)k$F@bw`)v3pdVY8#$*9?gwHY5$!A93nwWy7bKi2 zDmqV}zBIk2*E0H4_!MCdx#=uTy4uxF(NuJlkZz|*t8pZ^?4vXT%s9ttxJsN&L5@p)Qk|#!v z+q%A-ghd=eCQHzbZq(KxOiDzhArQgc3M>2;DlASTYhQGD^JALZ&i2Tif! zBb(q<>$zBd{7=Q0p$eVm#FtsKrKv9u_*UcrpaR;z|E_lcTxyZH{5?tCdv;KQVq1MI zMQ*h%<U2$wZ-4%oVsdDT24zhDkk!mJUL(5b8Wm?Qda%2XwV6i=99PybHGc*K z#B89`HEDJlY;x7HaJRS-a*IH9SkPb+5C+4g$9^V z{SGU<^5v;=rGYFH74)Sh(ze*ysR{S+cYG0PE$UpMdPS%i(dNR%NJZCCtBqVBM1js{ z-x=U^A&BadC-7GHBs6tz+(O<~uc|_ybIO2Dj}Y2Q?Yw6ZISC4F_!EBL&R#0Ox?&6L zMBPlu=2u0wKyi3+(h=zk>V>KD_#FK@;FBailOSuNDOY*owgV)s!I3xds0ag^zF6$_ z^mt@=g8|E0F2+|^J|H21na83AhSi_^7_=YkU2 z&ofey*rXa&VuSRdurcKnq3rr)R8&;`UYjcky?9jxZ|Fc7C6mZR+;;ORa8DD6t)||V zT@wT+ZU3dUJHMn54OS|>=FhS|XY9>_tmWS^cTdQek+K9qtuS$pJ08K9rdIG4Dy8Bp zy6v&4y!7%M6Xnv-ug7FsU3T=rHt)GubS=s#y3;YWd2ht44fc~Rwd6%(rB#Ua7Ekt1 zV=mbRWvOIezb%P#kPyCEHmjK4r7o&cG*rTK`b9kuy*OW?0$b6Y$7B9bm~8kC(bYN9 z!9k3iaP|DH_}`AAHacX9~*=0MNnYB?X}DPj^4MEW&rA_*t#ey`rGrKAyB0N zW6J`mEB?zrz$YgyAIx1actf+nuWo<1hsQ_eXN#H0WGh|`F+3Mo zbtbX@TV?USgZs5-fQ-VK$JcU16@D2w@Wt-e#IIhg(fY1*&TUEC&bSDM_<|GV#fp@v?b`|ogHwtLuO&uo0rSgxbG;pw}%hj0uhXyat5@=Dd?8R z33Ee8aG#$nu*onS;53oyF@_r~T)}4Gpidr&OIl_~+4|+}<*U1=J69`r~GbpADy%x~b@_?=H#00hsQ0iiOc~?|g$=W+8 z267Pg&)}%(G_H3GR8vOwIyF&UIR=f~?5VcZUNSJCmSyE(CY(@A1Rb#II0^7&?}>6c zwRuI7NZjH^GHKJm0GiQL#Rd3+ZICV)A3spQ3v@c23+n%<%}jZE=T$ycRY~jg z_GExmw54+auLDp!mq@{keVZ%}98aAn2O7yD8&Z}lWJwNAuYQ*LfEx|^LkH6UB%G-& z3VzhF}?nF`M5)cQjES+%g9KaF* zh7rEJ(Cu;n479^hz^r<>hQ%A$4d5-L9;Xv@buuv8>fk;HIYSb)5>o{r0$C0gB*Ma% zRE4QHCXT-RH~j~4W|cbuxUhfDDS|Dil>Sj4kBp4E@@L^%JBw#tZPospvydeU$>6pJ}mQ~{WkE>0MzL$1C?UeCU zaOQ7_R=VmZoVPH?72MNEDUCLF=8GeXDo*JwvQy3P0=?hp>QW3O<;7CIVhHmAB| zUUca+kKPiY3Y19}BqBun3PD_OZH~#ufwFrWyc$K?eO9&YZc|z#glip%Ufk&Hc)vO?L;~0-!QA~RqGV7Gq&Jmv+TScQ^VbS@ZI`OTH&Q#9p@MDn_lhE5DM(n5N zz#4~VvFooK+;j8pu{}GiZ>z=qt!r;}!al7O2zsmS!uNC@PYiNjoP?!|^kM!ry5J4m zEId*s!)L0`QkZJjf07151|jJC)8b*QRa(`mpPnnMEwwc4Vdd-Po6=riqOQwKrwMY& ztCBmvg?(2}`Dzpljagdig>p)3NY9O>Cl)X!V9{-`$RoN5qzFLZ^uH?ugS*bQ;d;ro zM8~r4wS#gEO8us-IEQ?)K93Y-oVi&zxx>FB9d55GlQkrKTrtUv|!v z=98&ylsljPL|ZPHV^r^WfmfjLPvETcNbVcj{U=?;^TfeNcKE?#3WqI&OkX?rYmq6* z!uPLV4HjM3fo51N%Tc(R10V&#nu(!TDV))Hpcn zb_;tdRV(YtmDzB_9|wHgJEB>+s1cd8+s~^^RQ5ks)z$gPR+qbDBIm*XP~~j7#F|+K zW-6+tUA;=N|IwneWU)XT%NQ8jQv^6FAyNIWok?L?f*W$NdNGM|=*xcV+|h}0Dq-N- z#rJFF2~V(&I(<8iKr?Gf;w31`^^vBcIK4aFaWlNKToEY@bi8S#1za3`=0jq^=S|5 z4%}xoZbWo6z7}o^x(PYkv!URHLTDrDeCCq7JMhqK%by;o_y)@So{fjhK;7#+Xb~>JWs@9bg-+N zKYi1TPU-sFo$n>y)cbKKrmvV&B<=qI_VO5@8Sg|zG7A(WpgflAjCbNMM5yAXh0ipN z#ph1T&#(gWiafau&5bsbtc`^!y{NmTL??yvEZsX-jyg5g-q8kiXA?h6ABPU5n$T6u zobR1+b9AuUS1JJUOP1QyVOs}YPyEgbw?X#Y{KI5lwD{aLH@VT=wLpx&iam@hPcIxea3T4y@K&B6r{;`|HBrKEXt**xy2V~M zs6gb1*`=o7qtDjT_In-oa|i^LJpsbOoT7^2JQ)h-wP$`-L6v&;t-T0oVYztDxrs%x z-j5f)kF-q+VYdgi!xs4#%*@Ni)T&&_4J%KA5kpvuWT`Gmdp4^PK6F@Rrkia zph5i+FLX(xHmMZ^vt|=Ne86fdtT`ih($7uRpm`M(Gyg)r+uTBa%wM&&-d?4LcUsG0 zjycuJX&~=wIvv#(9ptv*9^6qA350=QiQrI95o1 z=Dkq3a)Oqr;0Cm+J8k7-4#(!acuc7(Ih5*r(*%;<+dq>5eb?_kq}GbbuaC2(m2^zFG{J?F zI6souORL!C83feF} zzwko6jv1djY5Q8sof+5J{4M;LWE|eghmVyxkYxL0At#sOaI-yiB(X`(w^4paci?kT z0&g_lUeU^tLdA<*wmIsm2H6uK)Aox8g7TQ5;(cMswhzk+bFG_iw8cg^#5c|F=z~-4 z0|XzEalIQlQ0*%#VshgBzN``y&%+QF5v_{G{nn*55nb|2VD}QIZj23)t4~OpC9kzh z`giT{EPnD6Mc%hEqe{HZNy>3n2$wwm-u-)$v3Lr=-1Iod1xlL79@PrKmfnO~txPNa z{UzUBIo{*gwUnF*eIrsC#4q4o51}SJqvEBkh^6rrJ6p&N57sMrST$Tniotn*u%2@{ zLNX^?C&5CNc(sF;PfV@n)O983e5LI|r#gWWoS9tF*Ank`fZSKTi z0`%{RUz`&*?|H5E%gCZfS=~XUbSJoCQe;=&BvP+`pyU`m*Ulw&9M^r$V0ytX3XoEn zpg_4=l2{hga<%o5>hGb@BhgwnCPzcwyjkGgXGnianwE5>CMTeev^EPPzb;^ixD zx@6q~{__HK*xk0{!u6*HvY#iK2%OtZQonV}6SElFX}y*L9Q8-Rld!LL>DKK!H*Siv z;)1R=YY@g(d&MN_yw3r%wu1QUdPjuK>x*_$bq^nFeW(}te8ygdV9f#cC)CYCZDB_} zw=)zk!^6Qy$I|8f$#!vwV$Riz2QoXgfqq;sscWQs7EvXEK7_~NEM;CU{48}jpM$EM zInOAw;s=PSUjGT+BNn`PJ0EwPt(X6i{(*|PGs-tQt>vUMzndM3K%l-HmZYLc~mo7OQC%4NrsTI_~}&L zS^=Pnao2)3ui5lTJFm44vgH-6eoGdMyuErxI(*94hayioV;bugKy#rP@B8$nkW2kU z>(eaT=o}q99_yrFV6y?j+_z&Hu{Gg>t zNUse>UB>yrbLw4~13^@Kq3Q^+tTXNSb-NR|%d<{4$w0R(?#UMH%dwIi#0A()r_AbZA?JR_Hv%RJ^0C z>|#Ofy>H=4C7i>b?;miQz&#AwGq4$c&7;$CktWFR^yaeaN%Q0d%13>b%0uY9v9uvg z-mevB_?`;e+*8uDwYU2s4%exK$U%--r13y^{JDCxxnhX2#Vf}O3ghvcXXXc!B3`E3 zX>Z;~KuRyv?KFkWaH{2)2SE2tkMjA3B5+j}u&J~& zFxzNd8;dtL=B@huL(UCN(=gP{-}nFEC?E?o7e4+Fw@ZI=TK2Ys^n%csD=;S*HTY5j zJq#j}#A-|Hn21u<5+tWK1ZO;Yma0g6Rj;`<(eqJ7iV-h zCW70bQrj$UdFahnX4Z}d-9u0={InhKX$e8)E?7dvw=1|!xC^S-#uv!VBkT1|!$nDa ztNT?|lS=$CSL2?^I#O4A8~mT0kP8Jy7Q*&n)KkK<11XoTI#nONbk*mmx^|k79+?)o zgHp>d59pb*T%&tN_u|~@KHV&GdLko(Fhi%!jAp>$bkxY8jLMD^Z9;&u&3KMzy87lw ziD0_PoxND`XnDZkq*`75{=rhRz9ROuXC%eg*EKiu-ZPA!ag7`oqc_G|ccpP%zKYrv zo((IVoeetn`)H`=He?jn30C2}Nn zts)tgFh-i`5!*5^m+UjS)}YUgcgscTRn#*3oE*g*ty>or*G)JDhpXB>4d&NC7*oy+ zlPPR*h4s-T!WJYi`^2n9=M>j6E{Y0$#BOnP8&m%bns|=**;XAc-(z`@r}EZ!vcYY0 zy@KAUwjcfJUltb-A1tkCr;W0uTa%FYL}XLq8I4+yWFVe(Z}_MHMx+-(w76GWc}@2! zxjc4kPoN*BiYxhdhV$2|KO4h;ix^UzBUR-}v%2}EgYwlO%6sgMrIrzcV^%h^M(v7h zqZ_BEPpr}0?0)*Z#+as@HX*%m2R%t0@iSo22Qu>75H)>0rP_=q!!`4n<#vcR9G$Vr zV1|7}yE(}0$)pPSNSe&%U7tj>W9?HmqV2fQEfi@`Cf>unx8k#z-rIrbSIX)K`K3i3 z$i@Z0KTRaFRR@v=O2nJZ?xg?BJNFC@498~1np2NwktxAka=q2N`juXjyW&p9uuQkh zY}3ZUdb#dXH;^xeX&x>(;#M-o5^b>3PznpVa`4XUTP0%c6#f0RMl5yd3;8ub(GEp< zs$=yd09Wid+yCHN`p+0E_jnuhB%__q4OzW(CJ_O;d}DZ>yzD_#6(B0DgYDr}KXksrS?5-oT% zKyY-3NBYpUrs+|+nB!0?!BN-jShDhka<6WWZwFH3IAI(hmmg*YsOrs(=Su>scWSku z)>`t|0=)%`dIX6HwQqs|@HWbk8#^_=%Oq-wOz9qqWI-$^qm0;e)DIW~InCVjxg!Ou z#j1tU(U%+8og}Mp8e_T1K~5chy-{1o9fy~lDBJzvtU%P>mUvYY0q78S_hRvX6)vkV z2TrtqU6iPMoEj-}If~>qm%H~>61>8(FIJ=>ft*hxviu`gS`GLI!-&uimll) zL2}k}ycOyLeRee;t|ug<|3b1jg5UlEjs)U28URMy4DjWhlN@7a3yDf{$E`MK!GCt`3O>FU zor%Iw=f_*3P}S8cj3(~mapn+yTm}GBEJJA|H)#y4M#=FbDsSBL#hN9vn%x1i=bDd^T#k|!Jb>Y5W8DC#}d9= zsSBO}h&6&ECbM>#!T>O~up@N`qr+wd1B9D3Hw2_yFy)PsoJ|1b_p&-y0frY9hz8G= z$(Y_T&}!JiqC1}>wi#2`h@f>m!PhP<6!SHBrbeI=9)-pY(3dGd4R1e77{BF?Mfc*I z*XZvt`k1y|Ef#>OPq=@aUJYjKtb^Pf@jyCv6QhG#{RkdpG!?vK-@8P7ufgf~T{cQZP76P$sy%$xO(4O?SEKtE$y7l|jL_2RfnaH<|> z9-O%AIG~i)B^{{u4blg7BVsUkso$67fzBh*h3J+>rWwEou;_9I-Cj3LA0&UY;j5Nt zA|6n`lsQmdpnEv1M?&JOE1_C*06=ZeMKMe|5%e0dUtrahjn<{_-p?g@G-gZsBoG7y z-D<~J5{8>aMKrKOm;Y4XeSlHc0ggE_aFYuXJGRtVEKy>$m04&h)L=_ZiRQlB9gzj| z5d7 zenGsYlrc-KJlv%m^muIKML~@2On91`*N1_PkcdCCd7d|w;17ldajpl(U z!c`bJf0onp_ipoY0t6Gtj#bp^-)gNA9AiK@w4EQSK+=uLvYY^r1j+-?>5OT^mXPy7 zH-pU8P5O}auC_y^zU=A-la>kIQB`Gw)Kct(8bX2_NM4p*l@GyuePr?b&Y~=D_{5kxsDq{llM{^%k5)UKkv^dcvgJd z&g5Ls!w+2M{gy$0vZZKl)znXu*pWsnU%r9#tS5)UswExv+C=|R_(IwzB|?Fg*zoQj z$PeAb#y2O45pxx9Z+=Ur=T#ScDz;YC6NkYfT2logV(Nn0E0Xl$GSSZK@Qcf1(;s@s z>!-fD{jKZSv5UDI*VNJsFdRIkqNd$&4-*2`Q->HKu*jNuRO%DC7YdA>Y z5*d=snra?AT5r}tA$z$Wc5`Zc(+ENTT-a%KE|TShG@3W>AhBK}$smJjO(!?<3Y9-tXcvxH^}(5?+L3VBS(?ZOBD8&wUs^ zSx*{z9q`|^O3LiEKcAAP9b1BUYxx#0=c7<=W^|DLkIx+7Yer{js(jxZX}BK-H$ zMvZ7z{8#K>Mcg$sZjnSfvhe$U+~D9sTwArWI+@7Y^UcLl8ch)HC7GRYMn-~yiKy3} zdDkLkv|(u+OITVi){z~&NOyo-kR+YxQ64h6HS}v!M-ejS{5ueZs)U-Q)2V4p+v=HD zr}k6j=|P(A$tRWB$!4Y&pjTY30)Jz81h!MqPj8o6#y;3IGwe@>whn@R%tgWcvuE%6?BOhG@_ z)@mpo7TyG0-T$?v5_BNlPtdR*oP2<`GO()wT~6Q_Rd?9bHrK-AieGC>QLtz{9sv}R zDaZximi#C+hL9!PHY5tHAEdCi?=o9$QBr^9>%C(CO%Mk;c_QO(_4T4uFx{*5S;Hs> zSVwk8+>l_NR2Dqpo+x53-QhmQudaw>mXY#67QCKvSZJu-R#*C>xb;P zkAJq4@2yBP6x;T$J}OY-mvhCr(Cg1f$;aeIjkR{r#!Mf%!I4Ws^+%C^VB3+w>KJoBb?B_|*NO8u9=RJ)Qbre{}V73cMU+db%5c z%qmEg%7PT_za1r%XTUsmM0Ah_k%SJ=E=gfK>kmuyU6TqlS6KEQx;OjwtMcIaBwmNvAJ!;OIzPdRO|Lnv>Ryujk{+>SEut@FwwHGW zcsvi-4dL;P0>TW8Ud@|=d#V9xf(FLtZgxuN1}}}|B+L(nJ^hnBNT+0#U9~bQI2zm& zkNuv$gg=WX{5x!}bR8`(&WiMx{dz(!CR|M17^ro}*BJ{xH^0$54R0t5Hf5-PZ^7A} zi9?d)Ap2*yQRLI=Z+AY!ZYwJl=(*h@%64}4-#mOJF7|{2l~0NY$A-Nt_hkuH>4~k= zb!B<>?BfWYeZwzVxPKrBBY~pyuo~I052iZm>%BL*>~008XIi;*??61&bl1J$dq+XI z_L0_b&$FfdEw0GF`U!i8A(i{3^8~pcg#E4J+}Ac{ecCwgy=7M4R=Oz6z*EUr%@9nP zA$T(Cy+BfGb%+vd`iPRI+tPvL8bLw=)YgSFKan_z?7IZ5R-hjB`?^25R;oBfKJ^ld zJ&{gpU!~p86caH2UBxm_gb&TQ|CrPm+?33n<`OrNGfG$E-K}|4jcXAYF>eMCMW!#7 z_$uy-F7M8ibyM9N#%^YJJpW1)%8zn)-yGjLpt7GH-U0h<+FYL*ir0sKkK&i2v&RdM z=ues>saE4fi>_V8b$r~ZAI49)67Hj4_`36V3}ZlmbVJk2-|(jn^6SCR+PT-hyoYje z)||LbHio{Gk7`Ko^R zj$byP5PX=c+i#&E>1O|z50(FR{f%QPp@o;9{R63^D;I-Uk4@YQ*UN<;+I>P{n`_rT zO0NK2?SQzQ2pujzvm)I0-<7j6P(kI?sBy~Is%S<=@iDkC~aZZyAs z^dx;^VAe4dCqlQT@V)2TueTR`-ane%OIWt&wyvqS2Zdtwz*c{!F8MT?> zD|BZAkNL{58)XcrJ>xuxbmJ@4xa&(yzSp{uKDN~3w^xm<&jew1 z$kb;@ApDLEFd3b3o)OeJ!f0r&H}fV$PFGtEU2JJG5eN{`KMTA@(u#m-xTaWLIGFVe z$MQVClr!}h8%wy^o};J|9rD+qe|NG*&gUYpAuY)~UHFvn*62i8MEFuuPTJ)`zhJOR z3ok4KEatyiQrdNAUrTj}(>;;SEiywM`>{c93=Tn*>0JO$n&-2f%L6O)hq%e&IMW4f zZI)E{**fdCs+iYCyUUug^%lVH>o30p@jB&x$t&;~#IpJIJj3}xB}cuxT|Qi5<_v5Ul4ehyL&UGPO_XB5U(Xhfrn2D-FCUav-P!x!xP2~|l4 zg_;CPyu-aPP!m`Hyj+rDY0>cSo|ZUw`1(Qzko9T*`y=J}1WPh%(TQLe?jWB1I`r5< zgR@_#^SLzMh2G}xfV{)_ZwCB-cmE&%|J~n`;=Fs7|M%jLeRK+V8tv2F9vApY%V9o@ z?nM1CamHm`VmOGG>0xN=^h{VSrQu*$%0q2|(#?5J=+a8gVO@iTEo?9w)^_>GH5s^= z&5tP0)b?8WPql$G6*UK`Ny9R)vq62flS8v z9ROloAEo!i5z6K47&&{tzcC(h_TfK6wsq&21J!`Z!C(szmr(bSOpf>}n9=%8}r5?{eaYvgl3ngPvvSjQURaq}tN=s-t8V1Rp588T6AfecZ3I(5R)|urZJI zcQnno1cD#ufpz-Z%RwKLRklQ>(>cb{LGWRAg}TwfOR2kK?rwE-a13UqH z0Wz@sm!Y~W?|%Vbh);~@*(s`ys7fG%v=FYy7x{lvj2~9<8u1KB=9Rdxuv^6XBher4 zxa+|K5k#lK0o(4-yEdgW@k$o?*AfQC=aBcdtr*S^eHW_5?&MYc!9#G|?8*7f50-H) zkc?Kt+cJK3;+1l6g6ade#Wj>t_n(80bIF$X(hd*O+NU}0^EA;vXam}PkK^T1P4o&4 zxY^7HUX_Z}v@A^kT7A+exuD$eOC|Uo<-q#lXMO$W+hO$n7%Eq}T*hp#O*=PIs|h{{ zhWMrnBV0;-Af9Z~Qbasq-c!AoOr%W2VODlfKA>%_VE(;cG1Pc{>$0))VjdC=P+B`W z>a8WivGl(&rJ&#q7N&r@2?R|Qz4 znga<7rmG63Z76!ln-WocQQ}XJHyuasL|%U_oe{2ZN9W{8_7DAo$TIOdVkz=rwtiP@ zT64^MAybhq4@)Yip;=KWTnICdYvX+R$IdO@2}fTruWPE8slcG6BNA z_nM;GI@o^Ec249BkZSpVH)X`dl2(=C+KpI@Y_bY@oK*Ej^UjkMPby(Z5#Q)uE}iS^ zCAi3eFbNjji5pP7Y&ZRM*_kUNlf#$f7q&=beBGChTY~Gf1T2f(JH(e(SNS`Dzp++_ zX9GI&F0(D=S#UreQYnTiUw+r0H+h{QAq?npt7X*m+-7JPM@DixetA!lBzcj<1%7`G z#`F+FvMK6QReaBj(O9Q_Qh(Qz`r|l8RsTk>A(~gHGb628(ovW7nCt(GMcgzIG3C{P zfvW?U)&_FW|2{<=6XP5I*%JK&3I|%{vB1IMf5*xq-NzXt4m&)4x}ZqV9d%3)K|;Jg z9B(h)WEDvwQ}uq&Rfe_$1kBei9aFAz1fLsXhmK$xShxK*4I?O|XugrJy?ycAl4|&9 zGHUe{s%%-&IX=tm5J>Cxs}wIZZhD@QdvhBOq*F^zzO#x#e$`<0J-6?LnscAC+&Q(I zJufOJS&oEnC}F1|w?of3H(G0@okv>UsVp&8)%-xV0BXM_ga1lY(N8^})ZTTuMmrz^ zfPHI=4PKs^b;QV2!O!No`JZtk0u-cfxsP~?!vH- z>r>2iYMs!@pQ#i>wP_CK{`GqRD|uekrCET;Cu}SJ`Z)6! zkosci1L^7BG0}2|Di64ZSOWCzCzt%rp?ZpRd3GS`Vujk0QHdHm;G9@;RTV=FI@)ia znngF=3!6Jr$GzEW70S32ol_1FT(ykf$=Cjn4j zHDHzq9oW334WB~(yE>cZM2Y|}iUxH3$6pAB(LJ^qUy}0UAG}4F@RK@PaNlvAq%RjB zVE08pf!0B-UHn-lscUbw5#>&zW2W$hACa^65B@)QbAkt4Wlu7|F^qQ$7%y2 zB*uqo8wO(e$>jeFk_A%EQoV#Xv6NiQy>vj1w)@|6Sibjrcy|*Wc&h2$JFm9~UbjVx$fk?-#rW*#S?2q-xdkC+t*dVR;QM{4S2b?KCzY-l zD(|T*ChRGWE9H4cxFrSTe7}kOMd^+G&CCtO8AMWWQ+xT z6og02W&lVwi#F)E?Ch=L@=i1ZfG|tyJI1|a$q1m10C-lI8SrfI3Q923v_kj7Gs0HxLR1(!g z?fU_)5#(R|644;mz`LRk%E(Uwl)9WgCW+2wtp;w+k8gSJK0w2U7%LYsvB+ToIFqIf(9$i#e?tmL%z=VhUpgpmq5cC2h=31G15mL73F^Zrs~bCj-mv?%E^;!o z6OP*|A+ZubkvFwos!WV5&qF`%FoR=fhyDh%H7C-~jFP8sL`hpZi2fRVWXt6+lj z7?w$-FNcBmM?h1dTNAmMcVO}_8WDZrIQ+n`2vBc2zMGI*fe&y1Ub4jiU%Bsk|3o(Y zd-L$J36RD^V>)rDe7rN!Et7-MB7=jE=dv3Z)mD={-1gAG&D~W7K!ek{Qk%Pgwe$EU zaM?X#6RD;I-s=>cHFr&D&j;5B=+>v)yZ4FGU;Poh5K{vYzxU({mHz((z|Tl_Uy;W zB4zs*y>qnj2HDI?e_P78NyssMf%L){iC~$E>q%uv75PHefv7q9H&h*aocV{Vn`>>P zT&PX^KM?7BYkRxB_B?hF$iDo&Ja$$>FU-wcA;1qgH(B_XZWhQ7etG?1AWskg9s&F1 zFt;XB)xhF0@!a+5rcNf8kFLWL1xEn2s(2`ZUSLHYL1plUmZ@O(wBpe8;dMH>iQf|? zsnLy5(smfXG1F6l#j zTay_lu|3NeG+;R55NyCbJ#;S05e~!w*uW!+`3hT5GZ}J%JnFOxI6=F+y(&b7F`vvz zm~q7b9Fu_{QN2O~0ZT*dJz|0mazA18iJ-{Zxwg16ka%JLKvIWcvqwir+Kj0C;lY?y z9kwn1VZ}tU>MO%CAKjoe$d&i#Y&kJ`dc}0^$i%>C@TMtm)N7xh4c*8J)tgZU5e&7x zP4zMIKMq&}6E1>{cpd$dho(|SahzYQX|8bjzKLbMB?(2}NQUqCoJhvatIvu+QBR0eV^-6yZr2 z@a)}H!~#Sc{!e@MmF}b&o{ZzlW6?jUjo~vmW4Xfyax20h_A%IIdUceqbvnBS(=#aQ z64CH{F`x?oO!gK}1zkL>;^(rWdNi38AH&*RD=UBkNp@g z*wK3~_1mrOujSL8PtL`-qlgHdOW{HpR>?{wjefu2Q)rN8lAeCN?nOzLQg)e>d}krLsXPXUwFlI;byT>p)qY}iMQ;%BJz zeA+?HD7{A_Xv{FXM$d?_Cn8ev&32UYQXp5X_RRvrg}!W0cQq1fX2)Ay`5Qa*X_m;C z1D8M&or#DGu_LL(-)rWB#wOJCA|Je&nxKjsAa>K7G7$0DYwEi(|kcTyS0 zov@5;=F$gCx14NVtSwqq5WAJ3yF@}Z{-oNNRckpwV)skOULz0bZC2XH39Ht%*?do} zF}&18nU_202AT{Fb8Qz3|p`I77wX!IMEsl>KqD0&4FSjA*_q8XS68){&yn zFnb>Z-jM>v2|ZjqMmN+sdQU|Nw3HrlRJdo?U+$d+sG(Y;Cw&pa*>BHQ&sG~W*6J}p zKq9Nw_cEoU7w^s>Rl>(XuHKef&7IGUf)_cBVTmC48A_yoE~$oy0ouEHN5Y0A6Vc$V z6h3MZp#|kM0;D4o4KyEj7x3UCBa@k4ms*NC$d=Sh(5^mh#PB3Vd({)ms7o#R?*c9X zKrx~INZN=yCHyL|Ml`w5u7VQvM-V15H_m{1wbAq#nLPb)&zLr%M&+?qF}{i149mg9 zT^P~J^a9R;bi*S&&C=ttG>>Oc#57lS^fn=Ls1w1C*Op)XD5ouzJI)1fgw-Q4rD7wb zomkZvQ8^UzE2w|CEM@4~I&%^8t`?k=P$2P7afP_hd&L;ST_6Sm88;dURoy-};lfpW z0M3b$oS_A3%jCLuPXZJaMJ0mJl2{Xd>?}MCoNk9%Cv)Aog1!F_dv6-nNKhzL3#e@cq(DH6fEE!4M24VXZ52rvj78EUfG?t@5(Z}q!HNO`31~5Zgn)p- zfr3myK!OYc2{I-G9+LQ9Pwcs_^FQay`FMWkI^P6Cp8f2-_8RVWueFw1otonLu%Tg-e?Pn1Rn`1{h44u*e_$8~qbw&YV1(v$p#_kx2-mnW1&huJ zV8=}yDzi%2GVq4&Gn@`7a>^p*$_c#!Mp5WUQXNbj^|LouI4|6m zpE?%1ab9b`37rPK4^f|e`+hBCWrLDo6HVwwi)x=ySsf&T=71LJMadt?CM(akD16q{ z@LBobrnip>*X)lNACAUJ_)=aSe~Em~uf3k5x!YCpEMm{@yJ2+qdPb>>gjg;p@ZD#g z3eDCsTy>g1AZPCOzS1~8f41%RCW&!S-Dlbk)+5<&Tuk&UTWA$ft~sJ~EDZQ6gqY{? z{r5?`?(6cLG@bryo8AP?@RrDwW16Fv#V`H7Gr=D4i*QLVths?bV)hZUGgf|RLD1V? ze`)=%F!`_{U0RCYOV{C5ZkhtpER`9gc!lY}gh@3=p@G*#cKRj3n$CX=vm;OGnoKkP z%2=C73(}G~&3(vscM}QPAEdh-6tFG-g2GQTjKAv1^m!xx(3r>L@Xk1SHV|jNs#GY? z%Yf(u9G?lwRHfyJXXuvW;!+F7>Ct`!#3nl6qGLh@*DU^w`vjRmD)L*Mb4w!nMRIpP zrpzf)_fd#423Wa&bq)!c`!|i4#$6920x_KRlEG1#P@|gH8a!~gO%WH~{?#*$C7!p& z*i|49cHhI;#?5T6mHgRhvo=)sQimI6^TRZ*5t7-mu+(6&8FTfO01~AVh z-@Hms)xWC5St_F4OqNPchj)6h<3{BA$NZitGR5Wb$QFC~WcecH`DUMaw)J_8vA=1A z3|Xr7`OCFGnS*=89=`hRR?Bx3|8A8&toZl`ani5m`C*MdLBA;?cc*!Vwd7Ane7H3J zAV0q4@E*VXc*#qfq%i8U5?=8tY+nh?kA^+ zT1DGzJ4_rWyvcX?qZz=#;tSpeZ5}uw^E>>-f1If;;Xy3U(orMsVi*LOa)ZJcFf}p=@MsnwX^M>>Iy(LY)O7c`E@HlKMitm85 z<^)Uz3>&Acnd%1m+BeGo-0TZNC@6WNUO5CYxHFv0d2Tzh{Yn#}0$=u*oa)m70~!q3 z4}Ja&H&lVm<_G^hdf^zOH*q=sjr~x{61Y<%!d1>pP<#oFEtn9sF}dR=tQz|{j?MAQ%PO2iSx^?egpY6?+&VS(l}mePpI^$p zC*SfeX$}~;a3QuB?Jw!J&ShEX==Q)ii-7r|gvLeuyARzzt$I4kx_kwD z`0K*NMFXCE1(c~IdXi;R)FqEp=kHUimY4-ri8{;&qcdS-`XXhhgBIZAnWuBGvEE+0 zPseD8DHrsPb^4JCmZf2jTHdTUWP@C?!ys2_?#iysD=KHjf_5Q0dopF^NNlBrD!qA< zK$zl8Htqh2R87PB|M!{A{tE@`9o?*$^B*xYA?Gj^Gmf37QuEH2-`RN{*vVIzL)S-p zH44JJ8hw1PfHOB6aK?hzrSgb8|$c=&XFpb6v&|IfDPrsTK(C${JHpOC-2QfY)` z!W4I4kV(Kn@D3=#Y@c)o#|tOMZy)YIom_tE7wY$< z1J7cver2AY61jiV%KO6&?J1bzMnCpi!;1%WHFt!WBDW?8JiDB+GomNl17&2t(@rPW z`hIgv@6wId+spSeP7X&N+4nnpY7FPSNik;~l(Hw8-d zQ8dMaJ;{K`;+WScaOUAfp;6tcG!V9KP^c$gpJ9g=q&D0MRUU2Mc4|8QWV4!B`AF|Q41&+Bd4xp4= zpJ0(9Vvzuvv;+n<170E%2rqh@R0H7)_?NJX5D9r+G;?=~L5Af{%I&!e#zD|PP3AaX4BMh0bZZi7nQ>6q z?Hng}G6sHX6m<4$%clBD8gj_08AcphyPvX3#T}SabuV>ml^l`{`UnA5m&{H1ql~L^ z4Jn2-w!>atwFZT>6e5_03{7J7aCAw}mAEO142dEOpo&hC46ia)UUOkw={BU~^V)c1 zU&+G;oS1=cS3-1`eHtLN)?VUMQ7ZjUYWAZpYuW3e94~}M=$)lar8H^gBNuH`N&2u0+_C4C?Vl2nOsdw%e zZ2`W(1o)$EqJ3nQsd5zD^bntWEwUkH5)XB%+EdSuPQxI1xhcf=cT}L?3GJdXVb!oZ zK!sGcW&@)PfwRaR?Qah6D*KW0@`6$q4+ulOWa_Ad7RwwDSH=$XDwEY0a|NTH&YD3b zr%DdO_EsR3vw6ZKK0Yuc{kUpo>Lh$)BeQkxxC;M)?JVI?hDg9j6@Z@`g?6<#i*bq} z7x0&w(5@CQ*)90?9G4sXB^(_>Z#~?+kv-Z}Lym~{(nz?4Zj@+Com*58MNAn`SkL0; zZ=8te&+E=gW=vjI#1`wUITX9<_34L)+wcb8uiD9x<=hX2c|e$KZz%iN_D@jn-?Idp z;JMw>o@3=ZJFrzA4xSm+M2`(en*8qnzTD8=w$6hU&~c7?YLX-p9px=P*?j%S>jB~I zZ36S#)^@gHAtOVD$GiC{13}H8RY!7gx3n;8y@N zsk4&HS1*L+MS9mfz_!cqxh`-AY%5E4U$KhUI6QzCEQrR*)Ps2!*PpS=44~XT^?OrB zkapxf*GJ3j6?9tVhIRE!C)uy0f%=w$!DGueFda)6?NlWQ6O45fu4#u*rtP2KZhP}R z%d}T5T8{QZOD>`LSE^j&?(XXrsS&DPaDwB8-dn7$MQE-X;l0^TphBoZ6j(WV@|f=C z9Y(|cGlHcS)bEHJ%=}*KL6?caifyA3>Wm7s1R2f;ycVy`cS}Bq?M#aztvyW=$dVWa zUGgj^J9^E=>t9|K+i7P9DOaRHG>-*Y4+KFT=G)13L~Pi z(sD?F9S24^JIT$?#K1YEqYNgyqsS$(;#Sf`eag0Vhd$@G&iX6~_@+GHap9HA;pyoJ7Mufiq_&ZPNhWgmyL+ZhKkZ`nwC&O`G*pzq; zGcDy^vK%gKr=&l8r9iwd1Gi#JGl+B`e9>>?!rMP%O3lY~iN;Dg7OJ6Ozj7*<|0iCU zpAlHobbarR48~1#asa zsl4!u&6ko#yM_WP(^SE+RpOH|#}SgJA-vtVYT9`sdz*Dw3gynO4d({72|v$l8qP|> zra9m{y*UDz{O8vz#)8U*x~@O0xm!yyYdWNNO3LhvVa%X?X_$X!Z&FkZTB`0W|2jON zL6c#I&tJmR(IcxK?%QOvOptBIHPYaq%Hr%vZH#}$7pXdz?PLb}pxTeHZ%41aX7zOQuwx(T44vUgb z^kw!Y&7%lGU!@DVoTOxC@>jHh|0a0f*&A&ahjCHWH;InIsl&lwd8TY@za5oOGYOJ$* zOTpp1Wa5sg4(tu$XKPRCXz8sXeSwqw(@ z5kNw~tz4vZ-yGlkScjCG71CY{9k<}TWDP$efA_7lCb@&`*@GJhcWRL`{^g3Q=6Is_ zn-c0YX$J^iKOzS_<>M(`YlwoghLl!?SqdVLlLp9$M+J+0;d zyIJbr1nb^;R&(HiYUE}qw>=AkTUZhj3#5{pH@9DMiec1gt88Roqd<|RWq4u7be9d& zbuPImM}%eL!VOvlj+e z!7RKVP&#)*_nU{mI1WEdYwYgzEj8I{?-V#EmH!oAQABw668Si=6s zk|Y;$aO17=Yn!B60X_GyBT%Td`}`5 zF$HKI`i`M?ctpO!=0(z1x`tmCKO63bCBhl7uJ;!uI+&+vXr-|7A&p$a3%TL1D0-Gz zkaf*mIlP7rQ<~6oaQqgrP%sPKoNy6xKztr2?hZwZN;8CMlm$iH1jZ*FS$4ZahwDw@1>v2^F_&*0-KVJN* z53?se*2sy;LHZ}|QEnLnl@1q(b!-V<%-Z`;gFj}K4zp+$gAWl9QfVIo%CGTlA1_~M zl04$LW<=+f+3nXgM>Lni6g5EPDBlS;JeT|sc95dG@6MaO7}rY2VmEU!1z*Cyr!4Q> z?AY|MK*RQSO&+!e9BMx`sb z;8b~4JNU4^k)r!ghqV@<5w9F1hW;PtINt7y?(SdKul~p3>xGRkwg5aCHu=x#4vGJO z$I;MhySAMSCN*Re+*QAO4T)|g)V}MI2-lz1d$|Eazcw62(uwCT)yny1cT0{4*(;tM z)!Y6wCCC7~u&M=U<8L->t&S6A$6XI9z?^!>?4-N%?G#`u9wTr@tLzsxeHjt%AMZ1) z1*zjO^;zEdGb?H1K=<7JuEBxrsFbq*sEyZKy=zr%860OB7ga0m`*vpJ8E-<;aP66B zrW1UJVauvQyRyNC-mLB*+zbe85aspF3*(NJ!`cujGIn)7jGAkj8gE}LHPTiRoM7Nt zzan={fo$Y+N2Y(+wa?BS*b-@N`Yusv)EPq}n2WCX%K{|Mo^wUC@BE{hDh&taR&PBq z?Ir89_En!y=xZb~O;!?0t}Y1!6jehby0K*@Wrhe|AY_4F)OuNbF=mM91|0n*A1S^| z)mQM^hxn(>8y{ks&CcFbW4G{9y_VL@Fv#AVWpC=-zT%Wt@#X!xj{b%Z6QEm4M>>P* zckfhJXTfrlxcBWFb@tbXSPJ+dv#T7K_8FBx_c1-g0^uuk%4A~d4t*Dz*xE3 zuHZ}_P0^$6CC`YtFvrfF~TzD$Bz zAfZLpp6+gqdpZfc5`mf0x$_wX=ki$JscLr5i&uO74F@7?`}&8#wv67vKvUni!Sy>U zw7VaDuDa1l)k8T&`u(_<3MF+!XmK-nd1E3**NoZx99S(8nFoBpM7+9-#FN89{WG9G znT$HW%$sR@wZ>%_9S-R%>TL!?5K(#SR=ioka7cO>ltL2JKJxEBP8byVM>>2ZV3kY> zka{IbB2!eovv`ooiSgT8Cc(NomeHh^~J8-T(T*g6`Fn80ltLn8PM~;5agD zk~xIY%REjxZz)G}0CALd2PDJV;2vo7HsKHi?3BrCPjHOMeHCvjY$Sh6{;_wCFW%GR zRUEL1IhK>k{?g1#d*;T)*vlHPZ}|w{$iJSmoqAy`<8GTcuwd`U{tqsF_C%C#;d(ER z0Qn~K2c<_26mN}tb1?6FDp{T!bc{Q%TWncn?v>TJ-0)On;KlUMqi^2oO+32|r(hWFJh+u&VIgnrmCoD{96Qja{ zD-_%Z{VdIBE;TZM4+at$_z!$Q50(I$0mccTwwqB6=1lT3h5>q76f*@~I43cKqX=%C z(ZZ+ks2s*FRjmq(sFbsi?h`}yKDk{?TL3Vp+o)WyG$rFLB^&UB1{&t$jSY43s?4qwhdI!5p!p8FZG9#1N8l5l~pRvPSK4AWQ8p-3mKP! z=LWCEKR*NrRr`31G8W=d5ZSlCN{4dJD{%AuXm8SwuX{s969lM4mk26*i;qe;0{pud zb6{w20`yC}-{4b% z0AOffga8LmPAun;p99kmO4|8Hgs_wa_`fnU94sX6sUp=)fzKbNLcwD&i_@AzFjc?_ zmM4!UECNyn4s?~=j<aoSNHJQEJ_V8qlLc#w!l zFvMpucvN`{EN3M&5himGh~eeIfviFv-wGX-36#gcX`3h+0&P1Mgz&jewhvY!GXb|w z{0IN0;JkM=bp@+n`r3&PIn`J9W=+==JPd4mc=Nn$+|GQxHtP)k+BLD8s=4xsyi~qH zt~#~vhu;3jRNv0+1{P0#YNq|BP5vzI`xiKk*H?<;4jzS8Y@OuO;a5(q>|^X~mLUx8 zplZhSZu>ooOp@u8hz0DC~4P*8b57nhKDwr|=iWI@P>z+8V4FhZ4QPrP|YL ze1?{OV97c30$6xz5zXhms;E?T?`#?tfiBAco5k^dTFv^xRae(bb8y~#4Ch3BT+?%~ zMBM1u@I_XXS!vm@Ua!KKMS(XzEJ^>l0~1asljpI%3fB0iKabs^ErxWof95?#FF0LQ z%zf23PVg=Ly2^^O(n_vL!tp7HM_`p{DqH>_W>7RuhPw%fP?3=6(Q!xTD(kRd6f{)z zzuU9h1Dh^@S?kiuCwK^E)I0w8m?$vAC7z~JSynm-R8-pJ-F9#aWrp@YZT2kt>~I3U zHBbr2_NU*bd0&~pjds{N7~(@9{!l+kC#}CLI@a31+aOju1afl_egLKJR$qD~#%^G> zCmzNOLA5x_G&S0MX5U|oPUA;BuF+QoJu&#&`L2s3Vqg8OI*;u$%FC6inYCcxG3=W3h*{{O?4MRwf4@ zB5P4EC8yH*zcF>>wuX@F*iHcDLQ<%oBx?B%r%XCddyWdgYwl8za(B;eI4-{2$;;eBbJumv=aJPS!9`w8Zv_Da+(~5VN zuJ}T;Sw_gh&8TW7@(eYz4>M0mUQ9|}o~lqaL1Eh?Q$jcM-1*HT$%ozZ;^HL!Bf8pj z_r+zR>sA@G)>6wnN|alIaBEjZr>fKFq(CKu}L03PX0uh2*?5MMdCYbzYF)7J#C}wECwax?9in~d%D)H&2$WG%)mNzJPmIRK+Mp8X zY?@xAoS2(Bj9!|kC&ap}!xbG*2j#Lz0v;9(YAU0G*M4P}Sl0~96JC7*A&w38GR%}9 z30ew5In3NeuV7Qz3Y`|Gn3pk1U4(J)({-a1vbU%0ic;#?3&&N^ph$gKoS@tLti80x zZ0NCy83q+%oga%T+7yWp;Y^;zQbmfc%=x(S80^FC!1S$}1IX z?vEz!`G|SOLvI$PwuwS)+s3=9bzE9$&u<21iieF-w|t%Srv}f0({to zYR43#GW&`!vM+vDSS_RhKW*Az3pF_2D*iSD-vbN-9{e@DIwep{vzG-Y%f8N=QE^B6 zWm;$*!q%<>h6A{Xz7Qy?bfR{tZ5O7Y_p(kB(`*?RvOse5x@>GIz;r44MH2>h7YXg^ z1;$NBFYgRz?k}@~_kN6a;Rmb^Pki!?@r9VEu;VeL9h&tbz{WczcQ+`484VhZ`~lGi z_5K`TS2GKD>TPl?#TondIx%fvgVimBJbiLa8=#HYT;l%8J@96-EUd(^xHcVWL&7g zeE{y(X@$M{l2(XCA)?yxNi9@-iwFOdYCIZGOI9t!zPCm(7wM2hRifn=9|+ana3NonNj zrQmY4pmOlh_3h5#zF`N2I_U|IaPvJhr#Lr0VIl&h{RGH9_&Hwvc6;%87}&lVGcFzg-o5sU-!X}sY7qPl<7TcwXBn^|O1?1n0|EPS?K&TygMr}5aa5P<=xa~{l zjw{dWq56o*cFd_Ok3v%Kh8l@$VH`T(uBad7d}7w$e>JviP!7D(<5R~vS`A8OCAmZ6 z&yB3c=*iQz&L3|2Wk=jJT%^2Co2#=D=O&D!O@ff6*T=`ZQjT!2H#{qzWU9)G>Gwq; zRQ6Zcz{0k*QIfI^F{#>1pKZA+-Qa4o7p=Wc!sQ!T3)@GcsVJeKMN9LYrR?==BdaB-%2B z+)rKr^=NouO}6>c4={C@$S{?wuX4EqM$IkBVHN0C)h zRsN?-Cpj1tZgz19F(h-^m3$-hB?}=|e)lI#5o!%k%q$M7YOE-^7r(!N5b9!YDx<+6S^XzZ$CkG$i;g0N{wO_-))2@t#HkzB9J6Op#=w zF3Lh(hpNxc812RI@3C!^wr=kgz&TWFnwN)5!ebV!yj!$ESg)w%Ns^Ez=H-P^zgkv5 z9!&-+h1#)DxAU>bs# z4P?;F5OzH>z9K^DF#kUHz}0s^wOIFJXCg+`+}L8`KPRXZ?f)s9_a_hO;XMPM@4+CG9HOHnHBa(r4Az z@A(6gW4i=h&!E(64tl>*#am2M94Gu~`pLj4o%zJH*bu_96x?*gg zWD&u0paSwOl@k>MfF*v{N6aeprx1lc|6a{qC`|%bU|r= ziYj;t-Zz>t$RC;#fhPZ&0VWA0+jCG@Loy>+h^|%=>eZlE!r%aHODNz%C_Hm+`EeN+ z0aM6ZnuqErw#$EUEu&x_FU$EXqU46woC=-A1Ij2Ft-qPU3q>{kP=FKOI}18w0lLdU z3q6X;o-pC51poxGly9EK0E)J$65j7;iPVZI;2Xf_k1r0;&%-OBC=ah0TGc^&W%v-h zLxl+q3oi}i9Vng*DFosuAehkquC13iG~NXII2<3t^?xMfm(;|=JO@|x`!H*He2xh; zeSnRAL+I#DbyuQW&c8E^hgXROv~!XtdoLQ?fdGFQs6g!I7MV#9SS}eyz1NtCI)%~$ zKJ~<0<)K75rGWSO+`*kUXyVnh+Clc(P|>T<03I56)B&!%I+A+Gji)(Sm^a1!{wwsECn5yn&xlzmm!(Rpt*r2xYj`{HYxaFTs6<^1 z%03tVb;hfa)9=|YPKHaOZ>_8Rv$~ujli3_T>iaGJgO~ZEZD0-7ayTUJ*KfGS!f(7I zr!4-6ebm&L&3sj6A&ta*vEDV`E4K>I;2_56l2{vw6jkh)x}TGLbqK+)llxnq4aMn0sb45~IZY^~&C zQ(Zq|^oejmMyLSf`qY(A#2TU-UF}(FZ{LC8ci``!Y3wUCSEx!4YzjIoj05?H30&S+ zWlxszm@vKxy&4to%C*9A^~U&IG+{;yXIGkNJdn4odtti+x;zGx*}L}J!Jr!6g1)rP zL!s`V8Ps=Lzlo2zhD8F^chb#0SvzXc{v#&TM~EIfp>^eQUP551{^d4ZbP0Z)p(I^` z_!44liUl?ax<=Pf4<|awoe6bhP=HoicA!}>dbsAU_zRdM=nR-+Q($V~c*HRp6ims9 zjgFJ`X`)?=R@XtF0StL5cys?>9(KdrbsiW74~0i5k%#)xq5xK5T6vUV zRKe{U;rE|M7vXx!La$pz|FieX52%)6*OeO8aHcV6q>L4!$^9K}IiUfLwd~l*(yt0WFw`F@v6$3*04R460}wGHl(j-p>sy5t;@c z)ecjhl_d8%ejyX-qoE%Vcpi`RtQ-*kWW`b+CowZme0)(m&6aQn5K*-518y;a)A~>} zL*@X*i7WhJ8D{&{lvU!&5W1uK6cslKXgrI;uM>7zzA8y*g zH)(F%c9g&I_T1hy2eZ#B@jY0jw-QK^0~%cYMIJhI*ci`&(#J}`h*{6ygY=^)aS(}Q z6IxPh=0CmVWe5wvKbSL?xM{dYp$8o41rhL}`)O46CB0_QzNbF(vFJ9Y$^#_*X$^f@ zDW6vyBR4+<2nsE-4B~fnL?|-_OU=Bc5?SNbZJ+5b8=NN>bm&)rM8IUUH_5QQhr_$0 zb+K8{RGG~arlw?2h_!2?9Tcl|lA+uh>|QPxpX!PM+G>Ev2i_%i^_epf;aknt$ja3m zl3x$tocwcK%bD**t*B%P2i8!HBT0;B=n9A?^lSV!A^9*A<3Vaha#7WaWNc|^SK#2S zt9U%u4D0Ptd0U~M=mOl5;Aok_*||vTyhy$)WFesYSWPu0Ceo7^AEsM7z0)Y^@F4Vwd(ar#kXjQSlBqPXG3@H9h+{|Dq#Yf8Xzkk)$DopN<+;hMcQK(0GAT6`|JAtc zS86u>MYrjWawU|!akRu{K{3zuLcswU#Nh{lO+*=3IlZM>g%Z27mJLai&QqNIl-GtE zlA0@=qOl97(FcFsBS+}^oUmH-ODKcx36(XuI;vbH4pkNr(r}U3!6|5Z3oLs?$T>#a z;C`ih`vk)X9})+bU!Y%L>`(s!YA=@XR7o(UX+Zx-O^(2fDfMhxP-7NV|a0CPEcZ^a^VSbLMmY(rT0uQZ=KBkN2Kf(HD7UUm9v>s~#7v ziG*echdf%lr_q=nU82_N9Yb@`*5{qjjlPof`*jk*u|$U7F90&{+i>>IzG%_ja4nc> z0u-xF!gD4U5&Ux}E*>fwML|2q{bZ|maKEf*bI?+bpi$fPNla8er4hhL0 zQKBbbwm+h-65ZUCfZ8`Zq}|h^Df|>2ByH#?6}MygJ2IWlHI;Xj34c>TZ-jyj+qJXS z@MSemo^;1s@6w3*2NG$A2t(*!h=mm!IE}T|?>|o#QUOME4f#!A(x;{UauY#^AsLs?4@(6zBOf55HKFLuIQ+TMD%d6NOZ^*IB3tsBS0P*;)H5JT9elu?1g}HRE@rImtvFsL6T8|0J2)2?s;F* zP=@ZtiF&bq4NHPP@L^Cw9j2s7)k+YP!LD*J`W58nNnP#&P{*b?l%@n#gUZKlNCGT$ zIDwd`@Xtvant}v+fC6wW^puKM`B(}Eg0sW~xH>aFsJngEl}Pef@(ew1S=$SvJ&Dqb zmcxDiCG}c#l97@LLQ*x-GEl~y_rXuup#uxq)^{!)bG0{mMBAMkA>dP{SVYTL1P)R} ztWR@w>Vp&~S^z$-omq4^-f}oH$8lv|80Dt$(#KSeGa#baXF42?dMLLp-ABNOy=6|S<}ti@UP9JzMIF=IJ>qG_J&OR7;($wE%%YB zEJig0bjKyMnS2#j26QLRzqa&ivCYo z*pPHosQRBVbmXYPh2QXE520%NadnVOBS1k$C}WVe#Drs-w=aLLfFz9%Skx!>3L20} zv``Dj*12*8>U5aUUk7#C$c)|L|$qDA=;dD}gv1Ouu{roMj+p)ewBp^&s?o zi3(B4fw}UQ->clx0!@g(Z#c`y9YQi;T5bsHuQJLAOo{5R)h$u0(k ztb@IIK!}}HYJ|KQZAJ=FPu55cR`l$RTJFe$*fV2)ien8Qzw^6jASejkJAasfUQG~vIJ zVJ;>J5%gAHGK-@GrJf=5CIG#W?PmmMIfQoY7(%0J?fz%;m=wAmZp@a^uLS$w)2FdW zE`gxrFqH_H3J(r^J*D|sZePkYR7Kw7!3);kkmB5H{s7{g3JY&v2)A)vdr3IQ$00J8k8avo!M?i!3Uf~aVeVKG? z&k8(i9Hl7nBCA(X`@1kRN&waxp{{1K>d`E@aq4~_MyD9KC30d5apT}CQr~Kq8<=SV z;RE_ABE?$0prB0hL^ohW>d4|JN??{hR1&Pjq3)_Klv5A%fWA^6^nl(RSs;dMFph4W ze!)k~FNwAK=3;%=Esko|d8#Bza*M~?C`f@a3p+0OZ=xWV_`V%xGqU%BX%*^EMGJ@= z)2zNtepbvDJdDJK-HT{)NCkmv?M*_Zf0Q_LW8O2;1=E( zrfJyoUDD{-n4fUp@4pOVYnBeIfEl9QMxW0%IXdre{QHkXKR3<6c0l7=iUqE z3{(f8g?kiC?3oD#v zJ%n>I)pc}*Gmd9;fHD>ui$93++l2-cdWkC(xTMg&%VG)OKxN+w&5One-puxk6$Dor zJg?z#n!$CeG4i+;l8L(8lU4iOI*YRzKj?VYWU-DY4uTXMwFy_A@o2Sy3Eplo=>2ip zo;1}c?M{$Y_0inX6Q1(qEssC&%I%+z zrbY-9e*NfCH8;1IWOy2x_180@^AbqqPdZo1Pq(>46A^#94GG=rS0S_54&`z?KH;Ex z#a24}!|=GNMJS%Cnyl@WFmj!g8b}{{cmJY4uyq*DLcG~Kpy?Va(;?3-N(T%yh7CN2 zl?(vqsp9>a&REs~X|>dkbm|0E5vi>1kf%BJYQg8L26JVl=e& z!Xn;R#fKtld61h{`-9<_~<+)wF~SP83j-9H#}{C{ z4`}N&w~lHNv(TLNTnm={M(DaG^gPM-rIf_TMX!N*_!@y>Ss7~iYx=9qh{IVkq3-BN zSF|vXB1sxZ>7OsfGABf;&1i7e$;zZ}q1g>!Y(jx=0qKYtBg3$B1L@KVYy!Ak5$HjE z#0=yH3=U^8PJ#%c*XGIB5Bho4PX~;Z8Pxn?+|Vh6Ia5{+9IYX zu~29MU398mlH7)4nhfn#H>@D4CbQW)WGl(!HaEU-jE)xk3;o=&Qs~Y$(5vuAb$+S$ zgzJ7%ti2&(JR{>(pst_aPXjAmE`Er{@csr64E>v9{{0O!&I$w6&RMNE|%jq3B7}yW%bME%zI6B`_Ng z6;)20JHJ_!gS|g0M$c0u)?O9v?~iX%{g*jTqJhu|i^k3z(p-@xrqbP9spwxeXe>BsHJRz@`Av?yIi${#P_I6+CrpgPp|Bavc< zGh8c|&6_Y9QJI%~WgSuEm$60lw0bm*b@=Ms$S&Eo71*I90-z0G|Kgc$VPBR|yD|D7ps5(T39bH_vho*n9}MCFr8gi{ ze`&=;cG<}^A@y*GptgAxqnjjb5W=cF!jGhb+r7cz6vPke8vjfZALGSo?| z8q_t-K4PAQn;$?8_O+x1{(|y6e*rbK3HD{Y_>H2(dJqXYA4K^a7efz}L=!rR!ZHF{ zADbK;6IEcpQK5MVKaT3#$PuO1Yw}$~oeDw%VD05yZsL$aJ7kBZe3_t4hYt+v64@KG zRnZGBn*C8^dgKC}t%y+=5lg{vD>fpktJ8r*xY zpm~|7Ji(~f{8NR=TJtjMT*%!RB^EA0rLljGL-`dZJd!srd#x$A5T&fP#f}1>9M^IokJ4tij~ix7Qg8~fT$ z#9cW5;qr-Z)<3H0e{gf#N6fcw6)-vf zXz|)yLp7ga-y`^IsSJrnQi}^xV7>xxr1iUTtKc9!NFa6wK+g))8ZrXuz#&rSF&acj znh$VjIYKn10d3l40>)YOZ$3~~;l!wc*&}ZN2A7C=B@2dDqKYtZ`&bK5%uQDDt7J7* zpiszyRyCR?!OgSecj0D+Ng=kb0bgCZn@dM!M z)hN*}8uVE3HSP>SUsoUpFk66r8VCt)$N*DQU6P@J2pQl_IKbivDHjpI@Mm_M{6=se z-EH7s7?UvtJB<=`DU&>NP6bBdL9f~MRJI4wgG&C8z-*0b3DH1P z=;z1_ol*sqqo4}!EN+Q0F5@q#I~9y5JwPMSq|i)67$V8QEyMuS9oVn>2Y%c~@>%d# z5@4jUU_D%hZeTVHBK0`UV%KfY;^p&3ormWk9@>@SKYSjVccC(?1@v~Jjo~AUj0`4tDB$wc*w{2 zg4kAIaZh(ZCtT(Hjx5?0>Ay%m(Q|40?f0kLW;MUKrfYu1CslV*E5!Et(bV?@+rqOK zwWDe~>0Wk&wbW7WUIj9-(xKQlDKVr|J90Sg@X^BNlIK)H%40NZYFiOEMDrNvT4Ibh|oRAY*iJ}DB#(wm8 z&iS}@HB9?&8Mm54`&+-ICI>yQFfFl~p>J6j{uH?Xo~X6;Ko`<8z(TKDrEvgY8ozfd zy(etdE}*^Bg@Pb@k%28EzXM%%sTbdr^`O*@C`v(pEZ=f|#ua`S>Ns2h;%1so zQj4sT3)BZt_VbgOyVJBP)NPrlhp-pbYHBxP0_4V@9#Ln)I9P`YwI+AnE-+qDB)~s1 zD1yreH*Uhacpeh|NOGG9RWZ?En4cJ4P0`z=4geUc2mo*Foewa8JUZ^qTT^L5EDTevBByL{U`_YO?1kFKShER($Me zjt2y46{}s}KYco!R8dCo0kH4`thnNM<0a6KGIc`w9Yx2j!bX{6ZB2kzhy$xPFMG+V zqceJ9N0Eza7K14GhYdWwKftAJz{Q1-g3(?JYD#Ync?{i=*Okg25(FE&>=49T9q^?q zOMHIfuM3bXKvvWlsSiglTU-ojyfnlttUymWEHlEbwSORsRf5V?wPvB24y1!4ePo6( zloO&}J6`!p0>-8SznAqXW9`N38o9z-R@)t|PWGSRye{5yuFM`$`!Pdg9}VW0M*DO6^!sxzM}0_|9WUR{srGsZ{&;5tkz)z|1R%u3$4S)|anghP9SyC}Ox z9-IZ``a@%9u!^f5e9DmU^Wy>lY=X_i7K}jjktZrEHJ^4Vi1i9r6`zTUW^^7E9jiX~KB zW_v{OSg9f~En)%vJlmar)CBhzbLQW%pl6r!P4E2k*S@SZP)k`7DS1+8$1hk}oykx; zwSyX#O?e1qO`Ym4kmu>@qx?*FDB*!3Bcc(g4!lv}u|#^3Kj$;|MgTbRsI;HMffTqc z+Tnd$+C)=C6rqrID5@B>F(!G=&i_J7u1wCKa$J8-l>% zj4Hzx(ASn+9+dxFsY;wz=#3kquWkG=ZrNk2#5#r-A&1Uq0WHGuy?3qb6d?r$aGHOL z(+{ouPvUiMmrz@UzGqX9@FV7opFm7L9z{maqH=is&LNq9RE*N)F1n^f?**yyaDwK% z0wp>H7ak0~{}J=Q*n9K0CeL+$G!QT$doX=ByZ3Cy!1N5 zb-w2hIM+EpqIsw1xu1Ld+@HJTD4Vl{PT?rUx94k`uUk(ji~~iMXu9uu@y@0}MR|p+ z8^u2kev~)H3&T*tEw&&m(B8ayT`~}OfvB^644NEIZ>+Wpn5a;}VEZa7%QY`Rj955Y zu$ZV@xsiSJ8@Y1?^e$w)dNU0)Qa#Qu#FWe`GVnX^vG+-9nIa!R+&c6oljqu6qkogZKO( zsfG|{|3#EhhaZ|S=-8Qkx;gT1YknbxhXIz}*A z+!n?b2c2eFrTJ4$aLnKYv~bKJa`h3F0Nt$_Cbs2aI`%a(`jA|r%(Y6@1#1{r;+14Y zAdQ)qpz7)OFl8}k(D6#OX8*j#J$i;4k6SaQkUUR}JRB4TqxnkIpkjX-3jD5i$>Y(gW?Xm_>;g+%QGDN7BE5dzWzOdM@H|c_pEV zUspsf8tpPRoE#_vZ#3y_?9+%wbMR>mWFYpTxN`j(-%yXv3;~fow4mNm% zX$~gwEyO)jzQ=~^P4W4J|DQ2=Mb0m;H@4i7c#z-uVZVI&=pE((t_|s5UFdezIWlgw z<(F%X?e%YPDfY&0kSU`xH{6Tb z`}+gU)~`@FG0-5Phyrs_9;Rs`&0k&qGWZxoTW|=+Qn5;Ri^Oy@J9!BPNx`>Az2mx` z<%e5hO7z^(_D?pjD|nuc<;FUYp%ndPy!~viA&-!nKTsgO77=i!&RUdqFO#?f;9sQW zt)dD;#Ph-)h%(5W@7(}-Kch4yjL|pEgHzC2`>^m=rpEpl=Lx{+&=oO`vo&QOUZ2{O z#!$S$iuw6^p6>XyU)^S~r8_Niy|4C9Bufk2T6dgh9Cu8BdR|yKXQybK__$V4It_{B z%0(i1${!C^o}& z9l}$gZf6)ng~*eft|`tm`1CM){6|n0jL~6CfSf7;bCfxd3gjTb8~OB9kbH00_#Eo? zf0mG}ScY-vu>XhfK@*lErh>2z0kCdqbb&ZqfP$ntpjOqJInYo32oQfeafTK%%B#tg za)Y=>rDt@RajAYJ_RG{IS{?yl6;x1bR+-U!8wk;jexQuwf+1*w|B3(O$xuA1n>vh@ zlj!KvioP;t71gX)T?kl+^T2_;IBAH44oUs2c+9{Vz$&-E0?L)l0wyf25LG_wf;ad( z^C@ExDizqlWmIi~Sd0MPjY@{j%c!BiD4jWdroKLzP~>&uDBL+Fih_y5BIta}2Fx-K z5M9ZM#0UW+MUv$!C?3>D-lcY?mcSRs8a1(E5*3#LAWAuP&T z!iKXTCl`u2brjHbQFQR&(NqeczwJx!hPHZuMT=7WP0{*4D4P~;PwSt4a(V86+eEi5l;ns-|_4-H<$bn^Loc0}H!Jk3t5 zC*S=+DJY{Yld#uEdtHld>p~a;j&Ty1SZj-5@7FIJ2@l}Q<16J^MqNg+Dklpco()^H zLF*>yOFsIDz3CpSUp0Zwe)mk$+!Ew10_h;|$GnqI?oUqANyNU5ogimtWkzrjZXYU2 zS^fOPFJUjnW|q*43XD0Ie9eC?EyAFvqyjH6HvR3UMwgFExWym|g)GKIGMJ9;x^JS= zYCh9MF9&2vNX3=q=hzT<<*!ZzxI)-@bf@ikoxZ)=&B_KGv6#T?Km3=v=#-xnytL6| z4!lvSyV>%`qNQYJdF>=&L~f4U8%DHuDub13DWv>v4&^52?JY+o9)VOIAbR z#Jcx+)Jaw)I_A* z9T+V@1vDsKzxGM69UR-|)g`ZqHDm(aSrfHZ* zjz`G&`DfLKK@F*#N;kZSboE{CO70Y%2-etaU{+b7ku&g0!wvQOy|a!cCt;B;s8$^+ zJ7}7_rI=ZiuAB+ky_S+=tx_pP_429&)oS201z5Mb&2+L^RNWa<)C&A=WT7v#)ldca z9B~j@#|DEjPVH2CPTo5MJN86B?67KBsE1^u8Kuvw_V*vF%%yC-58YruFL)&lhZ5Uk ziX|FI0;Y{h?|U%V*7rJAOIBpR%>k8V7}yY0{xMU8takQyg$MhccXYM4x8%(sz~7I` z^A2~*f*sUV#|&0{*5Wc?l8bXYKd0Db9!NBfU4$_Dxze>MxW_?lk=`i=AwB^85MUK| zK0jgIkznD#d<^Ie$nA=#mAd5gqZu14a2v7^raiFa5#dM^7#f!t!t7n#x<~ZBHEv}N z_h0mD$O7A|CdaM#N2ka1I=??C7NmFjj5XSCB1DzSy&815YW*68jKYY%`zEI{ROxuW zk2~1UoPDEP86Bg7q->nNO*r|VM@-v<^L~&dggw~ExY2c*_$s~>V}T5&_SD{vqO``F zQw!en41(9PCNi6`6)rQOsB+TB|P_>et1? zG}vAMvzpK+#qj=0yK_m-tj>!Tv_iU}tm)`Zu{Y;4HVjKEF*6-Oko!N}+xi8bOVebpkt8>mLvx;c2i>7ij~QO5gdoSKR@X-tnXh(rQgM4|nn4!o zf~(#mKgzyc?qI1zM)>?6l)N323Ge3s{FxpE!Zw@BKAc=74BvWR1&|?>epgB?73MRg zc|>Cg+#zmz8n(?kx4MCr6M_=6h;U3~Z7A<)I=dzGa^5{KBIq{L$;^Z4L_j8Ef`V@0 z6`ULHE46}tS!iU06?om6BH6#=xT_X7^UKWR%If|-e2Z~?dM86o2L7~tjrm@ZBx@l2 zB#U;;c2V~@80u*h{QOhe_*+Dy=+@})pb|UQzRcNwKZ(yff6^;p6=!ka?2%xjMT05bJtAbP08%^6jg;n-1iL4vdgpSB=OKd{AOo`)kluqGRtV}2K^%YQS}8{*9y+`63-SMSGEUe9_>rc|l{(F`9wqx%p84rg`Qdr3j0l zAphe^_A6B(|B_X738#~M^WdY(b@y1V$D?^(q$jL-V8IV(#4_WJi)5up9g*ane=R0G zgBcBe3lyus6}a(4cyqke#oPPSZy_1h-(>h(adI*vZ^_qGoF#`+Z@(fY_ib5@U($uY zihYS%jI2VuEOjchxKrGw?~uvwqk#35B)=MeEm3Q6erzrkEPE#UzU|w28*xw&-wAbL z$a@{mel@`iZ#m5zL)4Q>H?C@*Bekc(o)|{QeNfT+gqy>@ z11=4#9d_)HC?(1%jqFh8qMv_sbBc{@qv@JyE$5*?MI^mBB;>D`O4alpoYmA?9v5NYGvKyNb zBQL_Pyt=XLd|x>2r5B1Tzr4ZHTyc+aq4g*={9P|0uj0wv>t2u^uuzk;NJ#2lK&s?QqJt3$w=#x^7>sv)y%3Ke zF9WGj7#*nplHgFs750|$ccHKin$^SR&-%I3U$Q{{81SG|@8{hv^GaYjn4)Y@i9XJQ zSf^~v>7mpEcM8(^Kd+H~cIW$DuBA2@P!OR^Rh-&}F~5mT$NQ1i&#dhyzeM zVYB+*d!Y>7+TT)>pN__GEW!y{4$!q{IZ_G^{_=p&W|Ae1Oh(k2W1PMSsiO&NPXxa1t(}LS%BEUdc57AajAC+A5l#mL`TUBDmYb)=%;)! z{w^SQgW#fR*FkXLJFI^i!Xdwj@BuL&&7^1K7-^4xKZwd#6-EN?4C2I@_^6}-0L@v3n%$`!zJ4S_f0rMEN4>@d z9}OJcr>PeCG5={DD7XPdJF*B*Q@M1)+;3o1hqp4<%_g$LY)%hCE)XwWwT_@qsBULVW- zGZIB29m9(l!_i3f#a`&}fgCJxN!Ef6s=g#8taq*(OgxIukFsYACCB9e11=I9XSdh5j?kd$pW?(rQWi}sRJd4lc#4cSW zl;9M7jCtt8m_m_bCUkP{u^@(#T*ToF=yL^TV7WXMk_yU3IqdO%A2W*-BWH6^`Q#El zjAp#V|It4L9HoTV0ViOV!4)BN9E;i^7#p$&>4Dp3x9O6(DoB~4Xhmd)+<+lEeC|RI)ik?XVMBkxqg#N&Q778T*$I%zFDLA&7b=fK=0?1KycI2un3ShJG7+3*;D1MxEWa12n6>2 z@IK5zg_i3jQ2lt^xPV}gnyCbYug?h+lMH#!pcIw>Q$dzJU~hJgnO~+8l7*=t0QlNO z_pnA4z{r;*TF+WcPXdUw>{zX_V+c|D*~5rpPy=8jsBQz{ zhq4x{T{78}XFqEbW$cgd`ftWFvukj}8@#WqyK-FC`54AWY|Tb&I0#Z9EI7(N6G^f~56#ApKothaiGnN6d%H+>ux50Pz>e-kpSWP{E>MTB?@`7#3yQ}O` z(&w&Ash_J8;P(_a#TeyIeDv+GT`9H z{Ig;5o1s!mRp^Tew!fOUQju=GC~3Lc4%4s$E$L)KL`?X$;TS6KzZK!~9*qz_vrZb7 za^kSE2pap_&yh(K@D7=+Rh-&EP)Wib1lF%zGOGG?0g(m88;R1KWKN|a$UF}V((nGx z+Mj*6>3pwyzDSac#ATbKA6|SGEohhi3FB*5_Hs))ta;m)H0YDL`&A!SxD3OL+6owT zgrXyvPQ%#8ys2+R)us+JxS3O*e*0~RYl;us2knBa?XaLBp;@rVoC-tQTjEG5&EG&_ z>QzFr#2&cocZt<;$8~3b!5I2eL8nc;;}MRFXazn7Uk|b^^X9sZPSw#kf(6e|XJ+I~CB- zQhS}P0zTGz;OFzQkhSEc;u}spd^{KpuUcD`g(PIKubI6-|H-CJ=U9{zPxL-pc zIJ!?y(E?p;I~~+>kT6C0z_>n3-KKMzl-pP!8PYt-(G*o}m^Y@-mAxo!^-8AP^46=IKZ>>2LdH25?sVT#J>y|q*1z8zs+8=IoO4)5wj15%F!QoNH z!I*ltls{;XbkAj`i;4Nzh-T-V)l`{jd=#aNnQ8uuE!i=>DX-AMu zAXa#n==L~dJh;6B-+*GnCq4hwIAu7{xpjn|1O0s(H$wx^dEg(_zT0o|m44{f{kkG7RT=0vW;$=H*LQX`J>Zv7@=Fb@G|0%+wH^(2Jq{LsPkhk|mNnNY_x+1U zJ^dR{z5qSsh3EUjv#Q-}7O>bNq)7~?YN+t_;Y$bOXc|AH2u?ytihs+x z>r{}*V37ga^cJ>HRcaD1w40KLim|Zy8`g>)DXIhS_V^g2Zt$^5bqAfD95OV#WTN3H zbns}3N{G}J6m_gA_wv^V# z(l$-gq0@DiNt%_hK@~(!1-{^aR!18_PG_o+pDIZQiO?x?q$4Hf%_MnvGy3pZ6*A#u24n>!=ncT_X0?;2UgRoeZu}|`V;#lpan!#siGuRgz?=? zP)oN)D{v$)<)0SLj7L$aKf^iXkSoT~wdp=83xiIgm2&zck^QxZ?VU**Y$sUA!H*Sm z)AG_np_7A2V&fVqO=rIMciztECKK8j3I6V1Sjl8C@e(|dhcb|W&T#Gzs`9S0WBCx} zj43Tr6bEzZ&c$@&bI4C7P3rHg3)xG7yhznF2l)9GP-+5y4g&^jX7@PRu{1Cw3&|re zFTM4Fkkz*x+lNxSr+C4`evpH&6`|@8IyL_)-u2<|`um#l`E48oa8>@4e|+^Iw%3nZ z(sd3r5edg>a%3Dh8g4aQ#2v8X7@^Sx&U8nVt#2?ViE0%0nj+B)KZv1N=BP@p9|7R! z2t-&-Q+l11cX34G=T_#`sI^h*P~XpXP>nj7(@==|)D{M zka^EISun{pzdjowLCHDzz~IG(tpjpp0bARMYNS8ln#%p|7EOLEHltQh!Wli1{xQs3Ajd<(b3iZm}XJGx?%^QGp*2BZqFrt@DGgn z9lO7PdJ`WACjP|fxt>v9*bw>i2%MizYI95jMB_W~BYohaY z&PP=H(pz1TVS}B2kXsAG>HB^;nQ!(EhZ6S@{l&AZ+OK3WqOsdi!UZ`jPO6(}?HT;( zZO)<@Mu);VEsr&SeC_&x_AQ}SvZ@~flPT5TXDa)qfc)1GJIh%`S98jZi6+L;H&f_bs0sm$24uG$2~yTb8eFM_Y>`ZUjkP^3&H1n>rGvwr zUGrx#qRsN8@YZxD9M0WG$&`29p{2ul=Alt|B2d5GwnxyAtC+rmrZ7ECY) z1Bq)J6z1mJR4_3xmbV5b!_5PXREEIJ*$?{>P7t&&Fd}?uU?|PV2tbkWRTI2GPEh${ z$R_a+a4~b%pC(i+4iZKP$eyJe$ELHGQ*jFr8OYe47L8Ld2ty?U7j{a=6w%7(834E( z(6@MoUP8EJh|#hkj+7Kw*8)4c5Ee(0p;DGv!`R00IR%^-`5(%m=u+%FU=6y*hbPBj z(%~~AkWobj&MIe>`Mj6`3007aXT+vtVgSMcROSab#?y8Y0lX%_nXb?Qrw%mT0U>=| z?a>Hm>4WEjyLt(}IuGVXltCrZDSfIBB{*PIBVi=*GZ|c`sPwKb0nxnt6qaoq&o4_h zLrjN;jtiN4Gfmh9;NXwbx0YhNq2~|wz$k@nv?-mLdZGZL_POqH6E?z|0~=zvp4%+ye{$ z3rGS4sZrB(SP@zKX$9lsu;r(+<)B!Y6Cg??;85Q|+NgF3K+H*unIJfH3x2+hLJc4# zc0mOHG~<3=x0^XtA)C?1erW(U@OhYg?gd0sB8&yH4M7)jW`RwAnj#s~gTU8LorJP= z`P_aOdQx&F$x;OtOtGBmGo#ntxm{ZvH?uy9+k3Czl!J@iOGpIt%zz zbiw7S>INfk4Kp~bAE^;z$ESB=C34sF6&NO8bk!j)%e`dLl-EtRY}W-ApV;L(Fie!v ztHhwMAWE#?ZoswFa*-PGY|%ldW&NaDev7ENHO~O&`{|d94L!E!>;0e^nsgxqkJek5 zoT9KCq@`>r3=l7Uh)u`2gL_u+%DnMi z*BLU0`n%Gt+YmTVV0)qEdt{2Vw_nfwq%>ut0Gszfvi**q-NSqQiVdN1@GdgJ>xNOU zd0$vgCeW|8RFquLO94yW-!$P=TDt`Oa`7)CJPMFk)BcUuzuRR8ok2A#513JHcT8Ew zzj5*PDDP6gzNj>e1cg8E)+S(n;>Q94ILl#)tUbN23Cve^>&+*amCyqS+neTENY`=h z(ej5@_+MULT1)Q}8T{N~B0VZ-D*t=q?7x2+9NY7@74SFUD$t}&%HNgVJ1NI$MhjzK zmSYfX-a<`hTB}z}ISR$HjOwV;f)m&iOMk$}XbE!ZGfOJV{^O?t|DFhSwhSpEqtV9C zoyY1mK_ec>@pAT5zLS~eJ_tbL=u#xukBA=ou&wICkU+5mdXH1`$I~Y=Y~syu@E$C~ z55CWe4Y09fub~w9w4wyv@NkE7PKYB-PdE~n|14UBNVXf*m!y_$WU(Z(^c~4Fi7$-1@xWb>G%EI}3fno! z0cT31r>~J=V3M)kl$Minr%_7gN#^ulU$QX1BkMZb(}t2wQ{p-^w$}&KDPgLg@W$yW z5LVHSMVrnBU)++uN`qFQp5|Mhn82nh&F3M@iAva_H#dFQkdXN!ec>)z!}@TST8e$b zC+4g%{h!_LwM**g0jfrX)Lu+4=qqFjcsqH zZ+$Slqr*W{7|!_Ja@-67sVbJB_1RI>@umnM1&PydJj#CKlQ-OB3N0KpRUoc4O4rE6 zKRhrjmOcyR>GHw+~BEwF22om<;_Y%g?c>+$?FkkgDu`Id54U7NdyQuokpr31^Xnz+V5w`hdX|5O zki*GW)U|o_{YCDJmp%<~e~qYzGSd-#Yk~DQ>-lFUT6tjrrv%b!@TXNDuzWY2dkbdX zS)leBPMzzIy!R_MznJ&5tp%(bh^?^i&5v4-Cqn158Qx2*blE47(2NfCj)WMGM^d}= zR^xhA90hDzEmF!SsZn|CEXSiKh4;`>#jt;EDQq2ikV}nn36kfLNB^ig%@f?XkH7!K zsgz+PO9zvUhu<%?{Xk<5myz(Y(FosFCY#@L@N@&|GQOJZOxTHA@K1=D>wC2V^}f4IjJWUPh~d?TKT=@BJ|?3|v+PIY=6g`eK9paa!bUFHXCZ z%rnR*-+Didy~YZ9Ez$mdnPjG~QtSoLM!(#|LZ`*!VsAw~Xvfu~CJU5^@O|9=tvnty znFZ2F$pGvE1G;`wS3-1Qrh{*QfcXqmTdi>byh3MHKHrnlhqTgz#?p@qBP<$sTrO`t z%49+T2x>MpFQbw+KMQ+2r0+(x)!6dAezuA+;r|heU;IwcVf9)HU;Yf!Vl(Ju{LLv> z9=9f`(38Z#D9`_BQ{a?$OtH8Dy9yh&5OY$twC>=1Z`JWe`C1ftHocHX(-m*iY?7kM z92g7^t4?4Xuo)iUdG18f444C8x?Uh^`97Q~JSq-Z&bj!U=2Cl3h3hmMEx}z%deSO~ zRcbRfP{x8RI}{s#yPo7g%YO$_^Jo$8S_yQIEqtw6%CaCi2_Mf^m03$h`w5dnY2>Vg&36D}lKX=u&p+p`lvM z3s&1%gApo({P?SeGh3g18nQpMlkyt>BS_tRAxpDTol#!@z15*{NsauLlgekUM^yz( z#^b?Zq?G@EukZf@Uf+{Pe^9muol>Tl>C0CJUGwue3yj#Qiug3u(q@ioE^dgZebnQG zO43Px7qHiu;^(G({{aZ^zq+jP6&vJodI(e-7bLjAOkW&^QUuIcm@*LMQ|F|naV4+2*=RSU#N&r(wjNFRL7{k;<6=5sK_%0vfu zLkW0aHIxYDO4BX`Py*W_UW9rs##NNZ?cxfxi3V35XAz+s?~WhZ+D7u3Su5_@(~ISKM_Grd1#ZeaXLZ;dV7%?Af= zdBG0C!@eU*6H?94Iv9K8K`~#>0sygcVagL8N}J^v1M>*qaaA?Ye=jU6$IUu2lcSsW ztsgHfr9!#43BtT?DAx@^L%mu5CRgObub6>w-ieEDFYqPK3Pp&@N}rxeIQosLY6<{H zH(uTiKWSc80Rw*gACHIPltg*YJRl$-ZicY=H)ee27=C0WRGKtHdFB}8m|D3;Ucf?Z zR5WY6gkVhYrpA>mv6(S3PEfqfT*)VK^^3r`P`S(?gNA++;I#Bmr&Yk)124JWuz7w# zheF5V2tdn{xaxK}BVG@+*E>O`?1eb-vXeOiBJO%OgcDc*tp+8yufeyUFcFh z)QWkpu5d+B40zqR6Pa?^LHNsww+m`{V<^>$3jCMlG;>nC86~40X{ZxM1fR&OlkBSKT_ULQejW}$&G|qDmE_Yj6nO1 zM;G{$q$kesx^f^er$Q*ujKf+RVHy{1kLqEl0?SndLIbWk_xKJE2-=1X;cnwp49%3=b3D_cc}1B{pUB+6+a+vpiVt!mb?fryv)bR0mwNt0%9OoFanOI~qhg}V{bUL&Q1(&DU{hIX^d$^IltYx$sI{1B7$`ceZggwuS38oHIshajI1A=G=r1>UQz-n+0H@FK>A zIHs z=0B}tRygMbePtI)W_lDwNd=iLR}PLr{!j)MReuNHkX7FovNlYagQ3li*}clSszH2{ z5E;)gpuct*I1OZLua|m#GaGHbQwBqSpj3H5cI51~Ohe3^IRZt01bWcV_xl5GN5ofe z1`;G7+W`r!<=m{@=5vhbHP#2BM->rw#`D+jie~{zBnzbpZl9nYhcQHA81;&1Z)673 z$iiEpIla&~1mVLu>(he|7!zlIk%CvPw57 z{OI$w*Y<5zoB3b;NiyRT;gQ1{)x3ro&mzQNY+)ueJUSIJxAv2v@9w+=+lgeOTNx(} zY8l)Kef~SqJMyz{?*y<&T_uizTdAm9Op39Y4cQ+lzbc1)U5Hy-MKO4tbp(nY86jtZ zB&Dv+TBYHIMBfsaA!&1ttg{!bP3FZMmjA?I?-Y-hSHfmD`|#NjzKq?Rt}YoY@+f^% zu6TkbrT;(wam()P`pt{*cxD%XhLMG z>o97J%|e$QRpTdKk8!b;j`z^Og2^iJ!>qp2^rWbPaxEFx{k8ZLFRAoy^h;X_jDf-z z;vV~tjtkNT&pYC%RwGJLRqF0ojtML0QPlEg<^~|dbsacuiq8rE6ZR2Sl(9<9uQ|ST zn7|LiW~n4EI97wO-VK>uY9@pu`onM2~YJ*DiXRrw56hgGAOe1|q4 zDliElsCWo74q&BYk`oOMj1PRcJns{rXcN&j@dC&!?SyD)LkRMk)wSuBALU#x2&WL< z6{w;!Xx(P*OvOcsSoOFW_5c>~{(R4&-p<}mx48rW&Vp?|qW^|k@^=l-n@z)2GYrUF z*BT$TEeD*rRz+AmF_`10b|Y;daWlX`o?u>>;|gr!zDf0xMLF|?Kn0e#Myb`?j2ue9 z*<}n#^z&~|Ptcs5{N0K=0J;bes*I6~4gtXpo>@=2adZk|SZ@0*x`emWjl>fKY@E;d zMeLTJYq9RyUbWfF%mY9AfljhrOB1#NvkbEYmbvb4gRN%z^-}CC`Kg-157u8F0MOZ_ zY)S+%S3sm7;OydhW}5+o2LdADOPVYFDz#{(30iYxtjwqKQwfm^@Ge-X$(FCmPV89! zL6K3-AS0CZ_s(wfOxDV4%txW#!{O^=vZp?%-umeCz)KJ=RhB~uydNLq9K8B-*)B(j zTK8k4d^vhjT76?d&4xp|aOoI~21No_6RoZJD1YD&%1`DK^dNYc2CJ2hKA;~029FUG z)#{xngAojMvcd>RQNTX%n0~U3eF^WIF$9kpwMabGKwEz6>wK4pB*43ic(PL;+~{=F!y^Uosqv7Cz%VL+tw-T)q`VZHmwh( zBhoy5jx9DgO28T{3?uy@aR1@=+^W8C2{Zoc3PR!$_DM^#|oc z4ZXARv>CL)WAy-)>%+gEsdkB ztH?%GS{!-y@z7j4Y{k>eyoZI<6qZYwzcCu=oI-kFeBl~K@lL?F&A7mtY0py%HV)e* zUv~&JV`Nr3)2qWv$Bgegc}D!(A$V-;;jr)fw@w-iD)TK8U)|7F*Z#2LBs54e4k(x` z^py3gJWRA5$NHHiWUTJe{O{X)HYB%8j{2L5mXMvwK7BzESZ%e^;kWJMn_C3Vl%2$P zWS>swi7d(&rqbad(?(bweR~%0dQ~%T0X6t~QkP~j_Xgb@GX>@CMeDL*FsiO_4<*CN zXL%K*WR$W0qVug^`M-ELEUa7v5Kv|8`qkUkT4sth(Jy!YLHP%|#dF3Uy~J16Aw_+r z=Sk4Q1H14iH5X08Q94Z-vmXiD1hyw;z&>R)R4z#3J%CV4f=aC&X^;Ri2p|<8I!;_V zVB9)9*bkU4(lGqye$j@_X7}S%w$~DJO@6Y=l&WLyd>;yB8~BuAKP_IHBN@}0^WjfL zoYm>*oN(W_Fh})<6_Ceon%EEtnSO-Qv zwl@Ob;2(%=`q#rA)dCMwFkViQmi=O3E=s`M^w7 z)oHmOZr}P=Beb!A7}T;u*3#4zyQ?cG=&a8ZxfY65zlLkln2ectfG2!;BebBv#4X9g-hm1|rn8kE5cl)hx zJ#)8qD-2sk-|Fwa{;R+EI?9(J?V$R5OhHM)$5#m}`m`BjXCZcQ47cc@z6{pHAW&LN zmV;zGAD|yF`fphUSKsAa^(eLd>-y`wOqvN4O2&hC5`WHj%I1Iz9VLL$DqN*>x%>E5 z#1Fpo&+Rf|(=#Gd?)ZF$ucI&}Kyx2SQ#fl=;_2Xakd_T{e zWJXiF;aQNZW@k1~Q5PtQ#DW@Vt8a1GqEo7w0|$FjuVQsgrM(_y%Zx{87)ef4?ClVu zGu$`ir}i6i^M^HPM9g;-VjLeV0;7$S(O z87>HRMq!@5Weu}j+of3MWOu=Dih#B5B|i@>D{m(SLcyUjekJXHuuy%bzD z%xIPSihUtIMgKQo2WRxy62z9M@wT9e3U!dwR@4kfs;5_NCQPJ3U2(DW8R?6*mynQV z%eZ({6x2TyfkR~L?^nG+*8aSOk*jR@pL5aoLAm1+o@AG;L>l~2Hc9budz zrWOK}c%yuj4#Fbiw8L@dVF(4?)Bqr8s4)#ed@GDivye1SCZ(V#rVtVsE=`U&_^M)v;3s;8z-3MqU^AAgDZhm}e?2dw zL+p&5WyZHIOu#+PGWLcUsK{{>#YC5Z-_Gck?KQr-y9!|11K_Z`?1FIMZk(#uoTLK8 z4+_P3VbFiAK;jaGnj?mw+TD!nG|>fFz|~1wb=fg&;VNNNETS>!@Uaar35$n`XmAZU zItffgel(fgZKfc$lk*VNFG76GTB@ec+7-F!7kFohIXg!kt$EY`GCI!O|H0vZPp|?7 zMrPk~Ye^5}l@p+w(at-$6Z-2%Nm3`P3t?xNdkXDJ%Oh`NmB7Ib?>LwJFRgQadcyUg zA_ygr2c!OvKPZQN<)c5}26}H2371qCv!l<_QRr0mq>-8+g6 zq3p6t^G3V1jqQSchBynF9*w{5$LHP~h(BYs-X}3>27whx{WZlu5$4L+V>3LoQkwXh zII)INnd8a7EJ1>J4yxCL8-kX=uB$&41ngT~FCHu8pcclnu{!rVh2f)JDF^3A+Yqtq zLR@U{;R^%y*klU-J4`4u!dFkGCgmlFqp1Y&(SzL=EPYzf*y~03y1)%*ZM-C#@3->8 ziJJtXQQVpA5z@dch0F_Loe(~%>pVc}ULbz%MWP0##9Hj&=wJc}HYn;<3|$Oe7s6!S z0Q-VEP~SW`DES+Om)t7eY!Yc!rt!GS2h-TJ`P*->j1*|7SH&%r-Nk>uJse+>5GfoT zMlnX6-%%{IgChd=l>$rzcI!uFo~3o3Q+_TRQp=XWCDo5l{GgLaeO(LKSbzK?S%E1B zhplc+<2i(&__GRH(G)qchFP7{P>H}h0TV0`FOB#vuVY-_fdij4c(2rB8HtMlAyk|UuWnKbf>(_y zwCVgEba+ptFb2pXhRl3VPyTl+h>HIAHokZGcJ6}QLrc1Z|9en9?@00nJ;=$3nQNt% zbR$G1w@$$LptjrLGuc$PyP3uWlK`D%XU1}1TF};h@pZSS7 zGf5}6?)DDL_p2!?+`=3xN8z)ykghZ_D?C6=qsQm;y_x@x81%gJAV^}Bs-6ZwDlUnOs2y=e~pn@$d=8@vFsI}UdK@XqMBr9?$k zS=bgdgP_*2nwTC>B>N**9y?H83lhPlU3fb7I73_}s`d2^h7%0mk1L`rz zDoF)I1!bpH><&p5(4J(A{)Qbc8_nLq0c@Uc1K2A#igWrd-GS?AUR}8*>@X$pFTmU8 z{N4PwL2%@^L6VixjoKdSq$$e1HWqANK-eM(JcJLt)Gg9Y8L6#f#dPcQK$HRk_fz(C z!p?0<2kWrkGOZZ3@*$Kl`{hw0f8+XK*=dm?FrFkaN|!A)IOp&@ebS*)j}+GSrFwUM z8KnV_Lq1pBW|N?MQ7BsGazQ8r2d%V!-F#nF5F$f;i*J5eRXiBtmcQd(^iV#XL>y*i zSbXl605-Gn9-c}-MAHuvcX`f>_78Kbo42U~f;Fy9B=vBUF@I^V{^=!Tbq z)V+D~*-uwiJs>zl8w&E6-gmdG1lB%Xau)2vT@BCEVK^!#dK%?5n$#Py>J(+2BKm;IREgzJN~liBIRzZ zpi%GwJSyc#Q-AhCZSl|l!SeNFhl6JV{&B7G5uQeOD;K%x$rgv(wilk9Rco#2S`vr* zjio=}vVlfmu`dXPN4wHZ=^W!?eFL6Ovd2VqBy@iMgUyJkyb{jILX6D4%z~L;7zzX< zaj2(eZiB^>^lpkBE0BWfgH2Yvwc^0TmlouKB?e~#?T@10sla0MJf-x=2(*FY=~J-) ztY5w6t^>2b{TnPesB8gr|8UG{oUoOeW@#ppAj77-dOz*vRI58o@nuwk0anK3*_c;T zb%0#rq2^Js^5P|pSBJ;UDO@=3iwx=ZxUpGV5obP-3JWK)NUAG*9Yp!6sf6UMYWmFG zX6 znPd>t-`FK!Dj_vOrZAi8`&Rc{r(!Pwsz8*%ZoCL)#!nMD<=rdHy41a=Jns)vm;>oh z0fNNcu@35?z~VLHMaH5KwChR5McO_lD|~aS87Q;B68$gIlj^H~P$D~`qmK8cc0U%I z4uJWH{oAt>-;d*hqgl?E5Xwoc4BJ0ok(g>|*bMVS0hEb0DMb9_BXjt^uGV@JfFD{Q zOnhE_vNZQ~!lw(+B_^^Tmv`!>+G5e!32{E#8<8|kg(n1Eaw`m-!i>nWDMUxcE;dkw zU2-ztyrDAp4VbqYW%i`gkiNG3P*B;oBlc6tzD0L9T5q1Be&Oe9mF;New9DHd%UB*G zzpviF8hwzTMnQMi^;3?=i`>E)tWMG%{7gBPL}B&Lars3kt)7|jJEN#AYDVEmRIIS_ zZK}yj|4TB0C>J~h1x5%&h zIc`

YZ~BX?0bm=w7$v)J)CQzf=2>qN~*0mBPc@>I3G# l>HC(07`1_}^?`o`7yzGI5YT}Z+!O!+002ovPDHLkV1g$Z{Vo6i literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-css.png b/images/toolbar/icon-32-css.png new file mode 100644 index 0000000000000000000000000000000000000000..b872544a461e188633096cd4e847c6346cbb2324 GIT binary patch literal 1736 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 Bgi!zh literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-delete-style.png b/images/toolbar/icon-32-delete-style.png new file mode 100644 index 0000000000000000000000000000000000000000..ea3acdd16ffb54959ce15038f8a0e3d27553444f GIT binary patch literal 2702 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 Q%K!iX07*qoM6N<$f?Q%4@&Et; literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-deny.png b/images/toolbar/icon-32-deny.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f17cee3a1d81dbd934df5c92c7ce3fb1a9ca3b GIT binary patch literal 2191 zcmV;A2ypj_P)10OR~0{ZW_EVhAIl)* zDwL$PA&na0CKgx}35l+S8kJPVj)>yP+pS1pbdXOOZ(V9BoFRGP>_=fTp zK`nBK=r&b~6$;rjDJ^k6*7jz1XXbuz&dl8P?0Rg^c!T=FBq#fI?>WEoyZ4@R?g>*$ z!58@$@C83srqMrsco_ekLfMZp-1Tb}->L z@{|OSktkUKrCx=Zf1KkK}OLhXRTp3Ig4U-^gmKDBlYhfWE!3ha~+W_DKz;`S7 z`3SsKtz-xAmWWj`uzERD|Bf9~x)n0PI`{sCk#b)Ih>9_)Ya> zY5?-!t|^1DnLwGrK;{aeVYi8%`6;%x5r8!ceK;P$HXDdl95H6Eo!kbH~MDFeD^P2*2pV;}n$zV(XQrsgdIEKCLCjfx8FpKZ-A7o{%8&eZU*5$hZ$2*SaUUy8<4g4Qx0F;OK@7 ztUiAK6{LSyT6Xxwc4*&lyE8C~{U96l8d@AF{r=yzjzDzh2Ro)r!x$#-S#mPD zZOn`jo9WXT|ITxf1j7-WQ!qQ(0YE4)O{^-9)P3ez4)c-Ua%#SaljoH-o{K`52zJhlw%=ezp zf#Fe6cx3d_H2ypbb(G9;0D@e$7DF&Mn8*U!s;pZA&Wtln9I0>+$FS)m9X_f+IALta zD2j#iXucnbvWw`wNAJ%jhT`+z{mNV^XO>rR*BEvIWGou?9Eq`rDcLsEo6YLC|8jFA zu_i>c$5**5+lZXl0IUNfhR>djV>LCv{etEl@>s*-H>JNHqjoO3KTmd8D{Y!!gxo={jDNK906lQc~p8(5AN^EM1B9#ld% zJxQr|;^6rkl??$<_6m+&^!cqvcVO`VC;AOFye2HW99AT&;8C2IJpZ3sM-{K_CIMjj13st5cRXt_^>WDor$j{!Mh425 z+_b|vRIcM3O9TfN+3{h8OIVexhR|O7$zMNzDQhzx%Om4%^x6TS`*Nx$`O$knwk!~%Q%iT~*KDyaeHygd>UJClz+=k0$EYoG&_?6e z%}u(VZ)V_s*B?kz@m|0FS*rfP&YfSqxBY=nu6;^X?29PnlzJ)Rz52keul3d+s9wEB zUY^KcI0?v+;RknR?+^Uz%2hHtgW_~wI6_&!KLcIuTC)96Fgo`2kq6WF2R{Dz%2Z^$ z!?0n5$D8JCM4SdlV`OIoE#&N`|zGxVjQ@1Y4NBw9!$pc%CSoBrI{%)QIQi7 zd&DZ)cqx&AiyvOPqR%%OC)D?0s4gue z7A_G8Ckkd={Q)T_6VL+Plzc2QY&#d;oYQ)Yh05J}0}6!#vT3%DY4AruLVrMrw)Z0D zeXH4o{revQ$8j>#zO=LiAAPh4eSLlHR2n(AzCR#@C~E+5s$JLJmT`K9hK6wd2awO_ zJNg4EsXrj3fFuB1@ZS0ZIA7~d(jQ-f!~sh7)+40(QltPNL{Pgs-2bPD8V&Ptb2s)>0Ha1SjXU?8|g)$bQO(-h1ZJhLBSf8Jo zoSfLSEXVX2uz;^)wC-5n^u$D9+%m!U{Hy3ty8giF)2E%NDhfeRcI4UX0`i&!lUWVt zP8>dbIDLQM)Tv)NQAIqZ7145NNp<|_KPxyVqZ3a*{nPFB2d1ard={0xj9)ogaj>Cc z@j_R~x*(OrA|ee^g&)F09vY%PR8=3q50$D)O-i1k&WQ_<^rl}Z6EL<9b6JjVO4vW2i^LMA`%+GpecYfA2YF;|l*%|M>bI*5v@406= z%d+6}ym~-+7EF6PTwx# zgu}pdMc`3sJkIT$PRlThRt7Mcg7>4a_tD8U1MvF<_lLzC4jc!8FM`MeP3c3Da83&U z;lT3LX9F_uQOD<|VS#Bd{K5t@4*Q0cH3Q&I-6E;afF#H?mcj4)dCL}3!w-W5?eJd- zl|#TJ1goQ#RtSh@R`I15;Rhp=Jp@Bo6Aj1u9#6xDt?TN&pSlZm1^tNC|$JpNR)B zdE+vOLP20CxyV6HXSTZA7lHyq$2)U9ukA6&QNXy8@G%(OS&2--LrXQP$T<(=o2njP zF);J>e;&fm0%!&dpyag{F}M7N1DVs|^1h9b8|v$lcF+zr5FV>FR$Z$>QQP=Yf?zQ^on zkeoy{)|HA;vK&|(4k5Pw;C1nI3ua%dl%C z>x5yS7|Xx1f1A5E@Gx;<5oT_;f_cFP!-oLSF-h>e%(IRpkAhEK`xIW-`6$R4DKYyM zH$GzDl{?EwbzFNTG(p3|bAlD5+@<7(WQ*-&IiV-d{~N zRxsQ%sLAxe23WCpU@P~iQr^?aF1#fB>2E1jR-kV~0mL-)>C0FTnph?vVVc!qQY}fG zCdTOu=u#F78Xc_KQWb|v@QVXV??vfPj>#Cq$00pfhO}(whJI*4%F-}GFkIaY$HY5N z6*7{D)ewh(bs+;yRJq=K0ML4%poU8D%Y)V4i&Fm~;m1c0;0Ey$q=#fAoG5^VnN7kX zoCyuCJxcvc$=nsJ19~d6~>O!voxLz24d~1=a*uzxt^tdi% zyrYked~I@F02V&FMN%GL1LH6tNCS1T=8< zy}6qq@g2AtjRrjVt(}qMvzOk*`Y)5@l=@0AOV^){7UhgyT7ln@LR!fUzzBcqGg91i)m8<8-`BIzo0ip=p{uWjixraT+(1 z0d)5VOlC&*bcwu0RZWd=58ya2IAKU3$+-n<;%*qFHj4LwfdLpA%HlJ1P~xQ(;GKy8)x&(xt!I0>o{&yw3y* znW38))KH4^?_2;)(|XFcG>_)fd-Q(Dy4}ZfG{HGCLnm3(HzM1%T5$gS`9u&lbDT%> zIlINgAY|Qc0O({>o(FdlbK{y)?aa)%ND%Zrjnh2Oe~=hL_Uy~ko7u$4;C$c>rzu(tlAS($6xl?BDHqf!*3=*Pj{pMz XMrZm3D%fVX00000NkvXXu0mjfd0=yF literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-edit b/images/toolbar/icon-32-edit new file mode 100644 index 0000000000000000000000000000000000000000..47c4e7c921f8a54fdbecbfcc754211e9dde7457e GIT binary patch literal 2288 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 KMNUMnLSTZ1z+4yr literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-edit.png b/images/toolbar/icon-32-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..69e245f2361deb6c7fe02d30f372debccff7a58f GIT binary patch literal 2563 zcmV+e3jFnnP) zP#;k%T9YcGkVcKc;!#7fv3W$qhP8L?-JQpso-;eM?0WVwhN}6~vChow%$ak(bM8Hl zdo9_vjgRw?@i8B&cOywsZSG?qw$r(XxSyhH`+~RQfPIdx$FXhscr8($=cU3;H2_C% zC5T}kWGMleoF)_RLUtA-Y?cgIVwkRnu>J9YMFS|F6Vh8Z+v!C=6gdG^2D3znLc~)? zKP1?m`y4P3;pa%|+-PqAOyl4Q@o0DwyF@zM2-$m(py=*&1>U1*M&;|21 zM9yJgAp&cVmr@Kwx03YHUVN=>ATR*wHxoUsa;UaIqm=jX90@c;?Wj?RKTM|xeLqjG z$?6sl%WmvkHLwtXFAAhzkHzV2Kf6`c4KzVuo&+SbCJd7V2~m^Qk=oaA5sA4;L`)O) zilea~zZy$ajDo@;h*5^77zP?t39}i?ad*(8GiKw>#+!(wQiz+kVdQk2inbx5$jF-3 zG4x;U!0t84@_FDFSNiB2hi)P!*+^$eIZq}l7_E;1{ZG^BiIuPw#S!_V`C+8Udm-{3 zjfzGF_Ek63Q2BJKZ zSjX#^H9vr#U+ST8YNvsQLK7{QpE!Xi9=eEkA5TEj&tX23!PMLwrbuLe!x|irIvpOH zJZX|=71->B9zOs}bTgwuXf1OQ%Ihv-sN)-0X5PT+t6znF_n%~K4u6{t;n0U#2`@)O zD4(dh{Q!h$XC{^0#O@E`_IQ|-uigbsq<}0vx;KkYU)h8AZ%^U1v2fXMY|FVO{81q6 z1V=mbAwaCh>;HwJPrg`CuFp{7%K%68&*R|Tl`N!E66RN0IRFkqiL;1h*H*r6k5Bnv z?s@di?XRMo)w@~E2f)q)a2Tq1ARZ&-oxOhL*{$eJ@2jf3P&bN3{yqT1Oj4!OWMNnI zKs+{zp-+)=dx7!{DWBbk64NSqzyTo24oDb+&edioLm;C_Gb}h%PITOE|X~Ul~Pc5qV3z6%UhDKyl z>2d7;LWiffv>MvR0p#WqLRD!>GQ7&hyW^q_m5DrISgc^~i#>P%ha|63?%Z&`hYj$QBlH7%#zLX5!lol@% zzI|vH6^K_5ZqkT|Q9+2hr4TjY+?aD>vFXo}LXjU&vFb?n*WIec!6(dnWwPb}iI}VNvb4apShTKY$AR190{ST3cJj zg94C(D4v+S$z3eBJc)pEIpZB#*|uWfp#Y3upJXfh7ooTuklpR8+J+Ym;M&-AR(gy` zEA1ℑ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 literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-forward.png b/images/toolbar/icon-32-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..97b0f9df697275900afc4a0982e2613a839c4c6d GIT binary patch literal 2492 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 KMNUMnLSTXnhzu+M literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-links.png b/images/toolbar/icon-32-links.png new file mode 100644 index 0000000000000000000000000000000000000000..e671a7bb65adc3335a32e84670dff0ff47cbc269 GIT binary patch literal 3123 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 literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-menu.png b/images/toolbar/icon-32-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..be4984155ac6378995a45225f8e3ed7d5cde36d1 GIT binary patch literal 1383 zcmcgriBr-E82w>ZBviYtx|VCA>$nK$!hK9Vm6wNr1O9smG4 z(H=;w)?r#YgSTka%Qv$^Yg-7eXdD;}elg=S4FDh)UoV`yLl}8uV`FqeDUe9I*$-RjHcdTl^B7?RdN=T7F{;}1O_ODbklD3sfck7_$5 zL>gyxah}EMQ7Na^*ViSY$NjwmpM>h}Znj)5=koeAnh(uQZRK@c(SMcH)-i4}#Du&y zkw_#TQ)qF!YgF<~u6nJ`FQR(I6-H*Y7S;~bR9CO8tjwuqo(}Nq?^TT{Ub#l+GdQwG zef%c2luYNWsTZFQiC@jlt*>jQ#zzDK0f)os=wK@3ibkg7!Gi}>DwR&BONHF<>&i!3`$K zUR%2(-Xn+r0FXVO2^yYC`%il`O>_@T^v9n~yd0Vk0eFXoCE#Nt!lOfBC!!M~F5?qo z2(Y8fsNpNxsNv_RTS7!=Vl+MuhKr7k0BqqlcJ?;5h;vmrn*gBm0gZIQd62}ng8jd- z)4zePW5L+~`C zZQ;oi0>&|8vw+0YJ-z65&}RKd#bg@K)@X6LvI3W3qs;23(`VwZ%nR#4sAoE@)?TTf zCgbq2$3NOmZaglY#x+>S^9+!1Fam+NlU-2$6~_Sbx;57VjZVE4HRThjKhc>{99K%e zj&<$89B-c2VKoI9-F;_)E}IwZD(D-xF#USBSQK&!f@PztT*_IiDqCo)Ud->)4HL8@ zN%m*11`b?3wYAdwU{~qoOZz8jCy%FIO?Gr}Nb1sa3Oe)4(SPM>n=B5Ylgmm@OM5@O zY{najl9}bYW_L$*7%u%8ev2MG7+3;w36koZ4a1-P&d0?z&t&8y(a4QKt~Z$gJR!9N z-`9J$ZEWTcbm7~HcRlKIn78*!UbXF{Rk(AdJ;YRlfop8PcDpfu^8wfnW4@xk z$I#fW#KKSi2hzF1Ot%lLrc>-6tJUg>3po9x)6NXQ z%0kzWH+?uD+g-+RPB5p-PkLtl7UYTp$!E!>8KWqdeQ$mSF8tJM6}CrVlfM|IM}@Q$g$x}K&hAU6D&aYPP``=*5UEcMf|Ko#;QK_w_*S?ot0ul(Z}B~$S6~E0ocJvO?2{Ue$ z;>fV7!6MWv?0DnpqS8FIfeHw_HuujM>=NY!(+Z@55~01r-RV>Wlu>~gnehg8&X`v$ z#8~Ufjzk*y<#^5j0f(%Q>F#c-A9^|JA+U#hPv&F8Q%qo?_h}DP_F{7kZ^Dh8tye>( kqLbUqurltP_=9PB6~|jPk1QguY2O4uyJL_|t|7$#0jsp}w*UYD literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-messanging.png b/images/toolbar/icon-32-messanging.png new file mode 100644 index 0000000000000000000000000000000000000000..e7077d1ffa576037fc5155c902fa89428d16eb1c GIT binary patch literal 2582 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 literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-move.png b/images/toolbar/icon-32-move.png new file mode 100644 index 0000000000000000000000000000000000000000..29e77fa23fb8c4c7e6ec02f18ec18c42155a4500 GIT binary patch literal 1055 zcmV+)1mOFLP)F9{(2EeBLgJ?JRu>eM~0{T2LR5u0^E{;zCHFX;LB$PO24S_;k^{)yEuVN)2Ih$aA zr9c?aL*Llv7`A_s{dgLPgO{fPe1{MeAOxy|5RfG}Sg&sjfeP0#-;J!+HVGT6KnaLo zOaWt28v*V7om`MLyz=`ilhC!&A?~v8=3;`m3@<)d(|RY@MoEL_dagm-ecdZE9c-YH zmUalKASJtT=1v&6pHI-aq1q-7i-A=~_Kkm)eB+Dik+$Ls_j0QLZceIsqd9?`Ofq6n z^4Z(J$Dtj1Y80x0hfSF;B*pLUtbqDH#gJU+uO#@ z&JHs_u)n{*L2>;2Kt7+3S1OeZAPPVL=II!83IHCEER{-WK==89m6a87b#*mOI;mEx zJT*?hJidYcEPzNviD!z%qVxQ~($bQB)MjTI&+|?^FlQl*OmA#$ZKVMR=LfRcEYESA z0+_&Xl=65ya5m&>(!3_{dfPvwFvgA#rl2eP{r=YcfU2q!)HrV%GQlF?#CQiC63Up@ z;x+}y@Wjn~zukTUYN9n@C zLL7`tTSH-Se*vyla?dbMGA)A#c!Zo8WBvX82j>Uo=jTP!8#V&kz`y`AKd`*KJV{eN zcA|1H7-Z)MhKGl>p`oEsm=`jH23a7&N@3;)KySosLzkgSLToqA+zBI*NCM`9L^`1R zKy71jun$Bndw?7Yg(Sey@&n)v6}%w<0h#V@1qVA}0YFGg;c(c^54Z%}{D7MuIJEo` ZU;qp?9ZM6kaT)*s002ovPDHLkV1fpF(?tLP literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-new-privatemessage.png b/images/toolbar/icon-32-new-privatemessage.png new file mode 100644 index 0000000000000000000000000000000000000000..36fd90e7fd544821c1f775d1623d081996c33070 GIT binary patch literal 2456 zcmV;J31{|+P)^a|KXnW+6k0WlUbA_{kqrJ_nzV z1l9pV3o$|rkR)Uo5`P;6bPyB7tXwS$u+`~wHkX!`R_pcp=#3jUF5}sxLgc?Dpiwk2 zslX(lb@%Sw?^jk<)-*OYR_)laV|#INan6Pf8|+0zMFen)Mx)fz({rP{yZifif9h2P zv??GqNX{0F^78UpfNg_Tl>pmhx7#ZU3JT0+Wo5)MrIutexpKd-u)q>&Zf^cI=IV!} z^a>zfb0PVx2@76w8jZ&CBS((3U~)%IO^t06Movx+6&4n*3ADVtyz)D9EG{kz3&0v? zDByVh{P`fqf?mVusVOlREG51{ zOf=oRdGo#`VA!>5SI4lqA%nJo;6qkmW zfX-kr*vw`#`Tc&u^i6;=M=TbjiHQk9P!i9rjt2y0l|n$6Ke4p5G!GKu1vb~r%*+bV zTJk#JgM)*FkXZ%Jg23Ibq^StLSZ{CdqhK&7OvM4lrXLv@A)QVq{Kn*7cd!+`UN1E@ zHLaNmEJ)81C9?zpj8Q%FY^^OeXddB@zi?5e_rVW>Z1(Q38qFGA`QX9Y;oz`y{(WvkpWJUlEWLb|>ZoSz}BY46^>-{m-v zbs*w)yIuIRA=A(N5&!0D2GdbI9;g2Peqj~qp3%`!+PrzQcs4#hPOzl-hToML#LCEf zzSb~PxIrfi5k}q7qet6cm3I6*91e^7`uchSz;VKJahkD}EEWr)$WXs~obI_1%+WCQ zjrynvtHM$=K?dCmE3W+pa%K|L$5}`T@xA0)A$ak0wTi}b) zSt?2`(Z^pUsYVy3%fk`!#I4ls8l}!^Bb659QJtfh8X6izCP)I&M~@!$G6B{=4Jyg7 zR;ZFfIMCFV;wzWgr=!y}=AEY>`|@Z?Q%EBb1bQkVUYCJQ}1=d^t3q&{1t@imFq7vYDb(VTnz>EpkT!uc9rck=Wq7e`QlI1}vB0z5e{BD~7U-qfH3Lktmkka3J)=pBh$M zVENgzXX6rp&6=N||5B~hSFW57f_j>=mQbzFL+;XA?75&@1W3!V6I z`I%*{(UQC9r=Y$-0geiAiY<^K9w4(ZDR!hK!G+KM`N>Z%s|m2Jy$>Ed_zc&BsAyhn zpL_svq0)_`26#a5ubeH)hLRN3|>UZaa41=1}UV9N^8%%QK?bzrmU_}PbkjUikf3zy}FgEWye zQ82bd+V~>bp=yc2LSG{ejM2sEqQLaUr@#5>ud}%==jGL2{;R*;Po*^ZI?`Be;aM^# zVqmVLg_MDU3Ai&B3>AF+j}JY+zj&3mirUN|dsE?Z(DZ|!TXP=&8Z&f1s|et_oZE?O4=u@H?$PfHOnenKNhJ zyg#sW=guuQo2|CBwRIcz_mu$KgcDWv`vd#;?-%`n0|ySYU?b{)CbsJ8>a6q!wr<_( z805pFx0fK7D%K`U9}!H`^Zoq4fR$ zj$7;6A3)%y_Xlp>y0xzT0bs1|54c>eb?XlxWmoqHupM95{=l(g$I|-)V85>Y0VNa6 zD+I6|?>}+kL}%uaJd+H^2a{pT@F9kW)9DmMwiD^I7Q+;NT*f7#!4G`IrcktwF~7&=W)rXFK6%_@7hx{ZA5b69*$qB* z7VrnG5wCJQ=~~SRd2VEIzH;s0chw?^u>1I4x(u0+-XB0Tzj1#+f~za2T)^Z3mqk`a zxFUr4)B6K%xBHFz11#(!89!?s=jDG)6gXpCsZd@^YW`6*20_*wbP;lHJJAvx>w6CwPf6tyh&aSSmGl*`B3`{k! zv?OO4S5l<(A5NY;`J+|+fhSL%i2eYq;f0TU$PCxyqEe{ zN!O?q;42p*#dV@TaOu*e?DYo@A3nSpo2rKh-Y~Q*labD`#NeC(93vdukZCA%@zkkP z+3ycrzkdBb;vgTsw#sZ!y8(nky}i93o1OgA?XO~P{XdFV8 zJO_#3g$ozU>PgcuuDF}Em|CUl?YMKjfZSMt zf!lvYPum9u>7x-0cG6lZP}Khibaq_B#{uA(wFhv;w%+K^M7nktYS`ir){|Sa0T_K1 zwSqNNr3<~#;=rI3#6ag|*eJkqh|@u&1SEK-!5C-yTJL^blVtSDVc1tS;D*INHa4DM z>n2ZNTUG$Xw4WGY(v(~UPU2wU{B)D=OBX4a;(Nf87w*B*z;AH+YBy&2T)6-2Yv@8H zQrAf%72b@cc=#2FG$^L-jpA2u>PR*QhBs$p%%>v+EZ7m%Ev!;dQ7#?o22 z5WNmqX}uM*rx?}qFLy?XSI6J`72NDMz*Jv+{tGP=ERgj7MzYtnP%m#k>FwbBUtvU> z3U~KC!xavz1*c|h!>T|dMszonu!2PeK2(by#7Qyo0s#=PdQQGEe?*Dk@*Tsne16Cb zVCE6D-r0%mTKd5w5vca*C<{{{xb0(oo?r+nX&WJHgcJoQTD$RXTOZ<@jvp^CLnx-< z=kIkG@7*I|!x9hxl~nw=v-Pa>81J=OOkt zLE(a>-^0A%6$;R2jIkKSNJk)u90G!PjKHXgz|C{QqPQOKMD*cqc!{f)Xr-R;pEncV zXDGuSVIP8YM&P!v$ODhdj?0|^#K=V!K~UF!ey+8mAb;aa8|F7o0HA4_7>-0lC8WS= zwfZB`D56BF8aIN@<#Mjn$d~cZpf@t`aTWKadX!b@v5L2LzuQ@S^X^C*$TFW>+O@p$ zQbmC;_bcVzCX3Y~IdgL4F#sgoABjZvlTd#+97dReO{2oV0(DJ;!6%r7=;5Dp9B|zu z5#x8h(}o2z@*$90EP@4ghXXFB6FE6KQdSqJs_G?BRVtZIquiu-sG4C$ugz+!;&}$8 zfZ>!g{%9=%EyYz;vRJKDGc2$W@slho6SYo=fu|p*PXRmy@Wd}D4jeczDPvh#S=t3f zM@Pq#y`UgKwf|QDNsV7lzOpqM2n3%2v1!vLf0D$1+Xau(ii?X|dU|>ue7J~W`?6)r zj53?}0M)T|>sH=ZTI2C}3%%E$I(16=j{($Bv)OFhsD>LKmJDM0^y!#0XAbV)zs~{< z;WTdW)3eIybkaVe?%KS0^D%nXH8wWNj}2hMh7C1#yZtaND6)W9EQZ3uLgeS?qokw+ z9*@TmIxvtp@sQSIPuf|HP08VKaIDnOTGdTWO|6dvVEy{_UNUO~Ys}j5_RI@%qb(Gq z9Rh&>+-|q=o2+Ain|LRn8*^zLUay(fU3~iVX=&0RT(@qW!OW<6^3c!_LZMJ%J0=<( z9W}u4@7~^CItMB!Dk>Tin2FdT^z@QN8XlSj#MqoT2PA~?0u0~9puzoV0YbjzKr)E~jsuVaE6vXgxT~v+&WtX@9S=F=WWJzSy?Qkl5ixbL z&*w8VHdBlRvlYe*FwHDU66VjJZ&;4g^RX%+Eg+8f8*9y4akR79jk8`BAG3Mc4V|5x zsHmtI1Db)PYyc)iF1vsQv*y_Zn?z|SleLcZ_xGc(uMg$rcu}G>Cbq~647{|o)EsBGFwdcrCr`>5EpX<{899m2 z5W<3aB3ps|Zx)(N+A}`|r%d}mRY5_)H#tzv*x>->cpz(d3Dob2r)IJ&IBqV;LRq*; zss3j$OuTrq&r84CiOzA=8yp-o0+CJ6E?{N2hVYuS&f%;8&YnGcgoA|r&)S>m$L}nV zpG@4xLB>4XpUeubpi_A~H#gUCVX8a1k9qm?Z_Ab~{;YceP1s0}Yi8{q=WFw;Y3yq% z`AunP$3=-ZD0V?=<8qK42*@C`-TaU zf3szVhlkU~vhIfG&!0c$_xm|t(=I4D6U;q7R_)L8u~WRkc*4Ek!Dz{vaxZ79>J`pb7{i zp%I`|ZfaB&RN|(mBzzPSV=zi^NWvL>=eygT*}k*0d$*U}z1t;G`O}d{H#<8s?=$cB zz9yz=!spo}_?(;K3av{{MOh{ZHz;=-J)kh)&aKAJTeQl>KpS+WhkDcWx zv^aJZhcUjX`DA9`0XqK9<1fVt^?kg;W^w}*A_Jf=t$azA-yT93g0P%G!bwgA|7y6< zu!*=e$_B=N83Li7@&l{*a2weGdqM-CFZBOaR!$Cz7pNvm2Y-PFmc$L)H6kMjO>m2r zk$#2Gj*=k(q9uUZ^UMFJDkpyk#IT8H1YuTdiKs`L)Lp%|E#&CzJEn0M{!MkJXXo z1`_AbetqFL>*s4-tAp1$y^5EC1RrmM10?GKpeUzz5H2fzdlT7jRK+-`E7^wf6KK8G z>RgGr<;V;0dDsJhu=$Oa#Ze@#Q(=9r`o$r{2+^x(4NT?Z&0bf`j4p2OAmJ1Zq4Bk1 z!~Y-{iG?){lXGO92Y>`+MaZ8Cmf5XbQNUdD5NKDd7Ob`j%H3Z9;u3+mexl(S@t0I* z019^jd|dF*$MdsZE2tACO#qDicF0_NTiXyyy1(k3q{#B|5kC%iqao0`pKMy7ne77* ziK&6y1`2*0@B%P($s~jkbOueEw3Ckm#L*qYp))T7oY*Op zuZevD9AH$Ql_i$7-kOro1*aX`DZ0CD`Wrycx(3${4up5lOfPuEX&U687BYhen^=3h zZaS2N@B<(&MlB`x1@Qa2*J6m0lGdK>Vn0AbbnXdt9+=>H4}jSA>Wj1{pA!xP6AF?H z?}#`D+BqT10a*@i3hpou_*xWl;YSv$IGZRgCR#8%KX|!8zckZET&QXi-oC~?A>7j> zJx@MxpZuz-(Ce)SH7%6UD0`JjLw&vR2{C>J&pcZQ$h(nv46Ud-%g-7oKZSwT8PNlf zWsIDXBy*vV4T2z&9hzB$WW-M66itL3yL;LG={Q%&Y6n8*2sghSz*<3CbAQw~wA=%k5(;WvQ z-tjq}!a48sd1p;wwgQ9Md!gu7-5>zO?y{|*(noi}j~6E4ml$wjP1&!k+G)Bh91+iu zIT%h9MTJwJly%sZ{tet~t0Hx)We@<#_KtD8bE4{ZRzT;k2FT6*i_BXR3M_6V`icSn zd9Mi1{$dRF?Ryh=AmMD_@qOMN>w>;N0NEyrY71%MIjm>LWgA0zh~K^z`c`zovZQLQ z;d~`W&%ng4*I@E5r=Vh=V>)RFPaCoGoQ#`O&5GzP0C3)7MhZ!r3yMAO0}cq)r3=KBHBgs4T}g!19kAr0fb8~()GY!fAc8admf$+f zy(XxrK-#SL>{SBNi2qsDLJ7O@@ZrPp?(W5_6N%)AEK4g1k-p%nEl|eT2RQr}j{lU) zEje}B>H}kAWAUDzt8b1c65C~2UL7j$HO;s1=Xbd;E!llZ0FEC0_ct;NvJZtN>_g~v zJokG`b6+e(25{`yiSH*tWv%Zb?_xHB14@^uP z-Iz{yJbf8%?$-vEEz1Yj2M!)Q7+>0(KQ2j9K2(j5*Ay!AP^nfSlUWdE3y+9PS1kXs ze|?~*XURS20rHHtPdqZ24(RL@-vyJClMrSPHol>$K2Ybt{{8#oy?y=fA}6j4bJF6) zS3oM6u*PT4o`t#6d{{A9Tv&C@%3>1-(AK|eGInKH7f9^yk;aD&4GVyCf!7E2TwE#r zHoCJYHeT0etAG|^FSgAd0O(4Wknp#_tiADdVqyjqfdjm)^Hah#)aQ`7xj9SOGMP;M z^Pk^XRn;bYUbLta+;wM+6;Lb|(Mqa8VrT|Hng0#a9VzJR>kANr`0eWI_I-~o9NwRv z4i^oBSg6Hf@LB(-5JohLOQx8!dA;AlX3$JMTncPQl9o!}vR1>AGlU=&I^Ovx0)3 z2%f^9?O{(~tU1-A(Exbs1DiJ8^csrc2zMx9y5oqf4gg{IVV@cr+Hk-(7%^(x4W@i3 z%oS#5XQ89R)&UmD5w)%lJp0^pkE3>PZJW(13gq)5YEPrBmrA8D#K%X5hnwmHiZ{rR zpHPE-9RV$GS*gWO^fz9ABZ}O4ePF~x&o3q0yLWFE=U;6HB0{t316#IiX zL^d9eKZU;GTbD?@P%f7Tw{9K%Z1sUhAARgrbU44o_Z<;a^4VIg_Q>eyEtg&&Si5#@ z=kV~zjXga*Kfoy1--@uV>u;h9-uKKiPwzW&))BRQMja6wKLQGUe#AWud2FO z6h-h^UJiW5m$$Cfr`RO^pFw&QX)^J&iS$0wF_?~;qq1Zpx!@gE!~Z`+s*T9Ef%IGW zS~PcO0N$1w9~lT{=(I5;AHSB6SbV(*0ipmu*YJ}YAkV_rqsICH{8eiGCQ?-jcE?fh z1VoX5Fz7)LhQK+eC*ZjNK04F&G%x}v5D0G*kQOdE1becrkqzK4Y(@*m70B89JTk&{ z{1ya30Ns0LVdBx>fK#f00LyvLq&K19Ifncd!{d(uJWcDh>bJS19Bf)M(tU~9|(d?faH0C)rJF5 z!mALG78PW&0uXi;W2A^E!<2$Ue@&kV2mvQv1Vo@!-(uB#0Doc!anY3A%sz*kZ-P|W zV#){rF-`h%wTb@B072BlSOA}ZRPp!0d;lB{0BI7T{{qw+15N(6$U!0D_4iW%B8&q^ zKx%!Tx~L3{D;dWIRu}+y0|QTBa*@7wV`jIB07OgiQx&$G;4;X!fTT!SQ(0jq4IqRk zfP#pl@PLE-o@46VRXlKUH|i-|Y-l=ES<%9W;!R1qBl@+hRHu-pGeKJC!$_1qiiWDD1 zh62#BTSTVYIIpbAu?PwASKvocYj{ics{{xSPlZQa4LX`@%01_#aaj=sOhCY;&}sN_ zx;gCwV7kNY1Nx-|aYVldC@c5~!qMHZj7HrG(KEV7{iAsnteG_=bejDHTJhr?$!9;pg#ESPXz^a%}qj6Hwi^ z6ZUQxgBQ@xj}#qs6ngen4_^D@d6<9hxYWAeA!-0(7y#-ZOPYNB+nko@hmS+$xv#>` zdn@p8$%VU&;Du#4{mOfA;dg(Bw&r7>i=L*?0LcU3Xn|!-zRs3Tf?;TBWCQoC^+wxJ z3-9XB7yvKbuEVm7fLo{eQK|l-L%2~ zY--^pk44dS`SR6~<^x-|-uvm!2mZZy<+kPn+qd0!XY+yP!eU}Ru%jL`&KEGuI1%rSX}%_ z{w9z%U;<&un11M?2kM3M0WSCvq$(1c5;x-?jbnl^z>W$v4|;I--POKux;AXsAVJY{ z+DBy8Mv{jx_uu@-g^T&~f%E4t928tkApsGo9R|o0dpUDYV5^qpHX-aa0}61zz|JMY zDuutRNcr;tM0mhxKusQLZfm7TF-=~bZckb)zE%-g&w6&??78#lcf&^G>PPpuMsp_a)aG3WGqM5YEvGd?u9%QM3L#y9u70muqMz0IaUAsv@F~ zVeX506v>#v50W((13=oF=;iUqjWfY#-A*R~V9jV(n3cppxmwx+oYxG1XowbTYiqH4 zH*VaJ(a!nsH&lHrs~IlfFbV+W1_7;B3#wJchX9fJ4UfXypWtu1U~~X@q{#0!fKgmf z2!L}T=L4evP}y$oC@|=&- z#%KVIEEmZ6K%|8a3&bT1ywlgN$*A^ye+o`&#Z=T{rLn{!5T5jJ5qFi)24gi@y8zP-=oafWP;R)RG-NdbB?upvHsDM{Sr{ORgcZTQbv*C4EkWLEFN;)BE@DAALUX z`s;t_&j$=65@@K%*R`F!B{=f7XwwQJYjiHV69aNQ#YgdtPqw0q8VI-U75XU@#O`syp6{(NB1 zo;{V_yK6hK5Iu|*>CXqQU%!6()TwtaoIH8*|MP)$%?JJ~zyK^JLiEAl4Z#2a002ov JPDHLkV1j+xH<$nb literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-preview.png b/images/toolbar/icon-32-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..1267df698950a0658997a0c22217bb3cb3c59407 GIT binary patch literal 1180 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 literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-purge.png b/images/toolbar/icon-32-purge.png new file mode 100644 index 0000000000000000000000000000000000000000..0f431ce90350e7dd0e1bf00eb805c6303aba0a17 GIT binary patch literal 1749 zcmV;`1}gc9P)id(L;yJ?GqWuP_XQo@bNjIkznU z5&It@gfH`#*ABy;EP|A2}w{U5)oq{l4bDO zSasbXT{Wno8YNAm^N=`ws=rXiytqV_ydCb&JO&iw1pqbs)*U5(waFRN{_T{=mpg& zMlT39l28IIFqJBI&zS=WJN#{7$>aAKwKN78BuzmMNH+UlNu3%3t^ms z0ca#r8cFeprn{}Yh>`K>fh#537@PF;2l=B}^pia2o*H#bTOR|^gMk2QhM3?zciHt4 zln;D$)!U7dtN_4~aYWwQXe0}tC*-fx&h#7FlL%2u67r?uh z2a`3xbWu*<99ztJNktAyJd?A4Lm9%%zDaAk;NCaI!U8!E`B5~oofnq&wE#0pR^M#( z_1}sgfD40*EI4iD`qSt#ZhXkJx$}k(07PEVneB9QOGtV9ry=G0;e}F=Nk9JW{hpZo zB1vMSpqFC1W&<|*a&UH%$XFPJs0J&PA?KB*j8)1)LcA|VWs?xoNj4%}i z%s8_!I&V7W(4`TxMgYd_D^V@JrU`nax2>x%e|&x*bUkqF(#VWec(j@f>g#Tp4*H)e zA=R!ciNV}EWSw5_(&=viysx$wS&({Yadf`u1|Z@QR%x*D$<<0O4bY#JD8-@dHCRK5 zsV)A0q4~2GL>{AY+H^B=*WR2LR*3$ssK70XuSNmfB1JvmLut2Prhvh&)Sx5nY-tkH4)Cqaz$>s{fX3VCAJQkG|huG z6CTwOD;ePBZr?Afy?=`|C|bDap@ z)LGDU9y?hfSO^HcoZDPGSyoL4Zh=Rd^}QF|x^=7dK7d^B`96TNCI>5f1AwBUoA+{N z>+S7TZr{Eg_&#v=?%ked9@wBL5}6I$0w^d$VaaYf8<1?Eiz`Z^TCJukl?tt`t!NH$kT`fZ3to?m}g{Z1ZU0q%Ln-8cYcv?=&d(Hrv$K(8%3RMx=6sF1XK489> z)$67*IFw1P$1P1Wzj>Jc%$+-TiXGL2n7|p2pH$j1AFq&=)oQgC@yb1v=OF9!rixNV z4WR?hsOW&EAtU`%RWV|kO?QZEybiJ}JKH$sPIX)rdw}3=nA*L2_gTv^Pg?%rRLbFd r5&W~AoCRC&16%I{&;4%rzW@UOO!VwwjMR~q00000NkvXXu0mjf5+6%G literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-read-privatemessage.png b/images/toolbar/icon-32-read-privatemessage.png new file mode 100644 index 0000000000000000000000000000000000000000..635c902b10096c68e9738a09a36bcddd449011f5 GIT binary patch literal 3267 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 BTPpwn literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-refresh.png b/images/toolbar/icon-32-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..d83c443cdddc532906c37322c0a37341fa0e9445 GIT binary patch literal 2432 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 literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-revert.png b/images/toolbar/icon-32-revert.png new file mode 100644 index 0000000000000000000000000000000000000000..3c464bd3257ef4e2cabec34332f66a63923bed39 GIT binary patch literal 1516 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 LNkvXXu0mjfkK$)` literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-save.png b/images/toolbar/icon-32-save.png new file mode 100644 index 0000000000000000000000000000000000000000..a3571efc46ba3a0095b901d53da8613dcf644107 GIT binary patch literal 1352 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 mwg0_HlisQ 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 XNl=D(9tI{400000NkvXXu0mjfzL-;L literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-unarchive.png b/images/toolbar/icon-32-unarchive.png new file mode 100644 index 0000000000000000000000000000000000000000..9576cea73902fea0edf8b8db4ae000dc7d239ad1 GIT binary patch literal 2600 zcmV+@3fJ|CP)2-dcJNNZ}|92k$IVTPgIXqk*9uJ>K z#thF4+N-$27qryhc&Y1n)g2dfXS*n$~=lj3J_gAR-EI}Ju~y( zRBvD33D0%OHKSUqlJEIcER`tZ`xJyBxsF2)-}60>Jl~W1uIKV<916pL>H&{hooe+O zt*xz7z`skSGTpp!{k4gSZ%rE@72i?;&T|Zxzs;YqMn|qgfOK?pP_bB~&5aG}?C7L? zzK=Xi>^c!xSuz8}ggUyrxP+wm! zRjW0+|6rN=`}!!8$;im%vZ=c0>guF&xs)-Bb>jfU5E&_ECdEL4!vf(#f{h$~>cA(d zu(C?^dRU-^7Y!WMYSlJwM^&I8pg@^dXLt0rV@RO}5YP=dJTxe3DOal0 z+1V+NZftCd?m=ZAGX&5fHBcA;uFmJDQRY}Dj&TWGAZ>6>6@FrTMqj~t<|yzu{g#iFrvgd1IAdKla5D)>mylOxT zoWS^o6B(mCLObukIIC=cE88oy&Az`}SfQc8yhP5G!t(nc2>@2cftLa|5Y{CQ1jaob z+er2Kkg`lYjIqqB*n0Gc_6`q`&(|9E(mY=>fI!yTFerpqe$fSprqw&G?@{Aj@qk=T z_Kv;m1sOjhYSX}E*?QOl072!^_O`_Lco_D1BkJN{<7k++>^AZkmRp-!qMrW#K4Ahz z3HyK%m&(O-1`xrHJ~t}C0~5+Mb6zf&slfX5GrR%8ew`f%uzmo^@Vx;xHtZ3z3-dJc z>4VMk(4lkyuYO}pj3s{HgD*aROvZP5x%A0S=wau+9$q5$kFVU;x zW7OT5p*Oz%H9Gd}Az>4F0^AaL1mx1vGJXGhKW-1;h0h$Kp`ih>SZp}9eCdTF^wlrD zOs{|UCp7lP>vZv#=S4Lb<7dy(CkFfIS3mm!4dbJj}WM)3k>T<;!3Ta0!%f?nh<7(lGO&~4I@AF$@#Mp}$u#Tn7+i6OY@Vps3Jn_d5;_v}?aefuThM0I0ZNGYn{#21QJ7 zNqTH4U|TvSvBZE^^`XlMx0uc<-tk)oWv$0tp!DggDGOGXtD-{bfXAn6T?_{Z(v z_QzWK2v%DLlfxq_rVIn1LZKim@N>%lzZ5dF@PBO|QPl&6@Gc7xNa_fHk28G6YJGSdNKBU2>op)#; z(jcTv=skQtl>r#j@bGZcj;H7N5JE3j7iU3@5YJ(g!sM{}fq{W0na}6b0bIOzF;U0p z1Ml0nkM{51PbW{Flub!9CP?j|+`fIAZr!>iUVz^TdqFyYQ>RV|&GFs*m$mHatym$KaY4LaME5+r~(o%YHs=7>SFlf9V8ygcA78VvnHFxgZ5!*O( z=1gRyNmY^bmv>Wv>QsYClEgD$V`gSXjOxaX8^TQVe@xoEs@0mLy-~GgK&^c@$#sNS zI?`)cH|UQ)r&Y2owe`1aj|h~hOrjL`;9A)GM@B}XRmY{h`lOVtEdU#}-6yhFiDCvT z0s~rjv|~-bSBdorTN)HQo!5|(q%wdN!2rPk>_KhB_VqYxCLE_XDENb6+NxFRhnJU^ zCFp1;L|raP9p-zxH7LTsj&NzT!U*T)=AtB|U1nrUekZ*_!B&k*HmYXYNl=eG4}t6M z-MbQ+5et%{pB>Pct>y-WDNaAO28BAM>ZNSXt52apAq@OifB^sjDZ-WZcJ3bl0000< KMNUMnLSTX~H~QHC literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-unpublish.png b/images/toolbar/icon-32-unpublish.png new file mode 100644 index 0000000000000000000000000000000000000000..644d7b69e1c9af99b94fcbef23f029cdbdd00a09 GIT binary patch literal 2437 zcmV;033~R4P)RCwCNS=(OJ3wg? zH^jNRi5rO8254Mad> zrxGPGAT|juL`iHXaZ-vMv)=VyXU;kO&RjOLv$H#EoQP3A&t+%M_xmpAyM=Jh;hQ`p z_=XR~eM1PT`!YY&-bOin+FC`z}bRG(p6pJk9`^MF!Qcq83=HB4PVF$ahOXemD}6LN^Wc_q1g00-{t;)EP0sul%Vv6!eK@g;y>LP@D5vHKA3 zDJp=bT7dFdV1;Z+;^aAU{K`?RNXGy*6J%&KSF;Gxj25JLW>()+OAFm4_ z|Jd3|g^=wOQ037$GS8xI>B{z6qzPoEgHbFlA-{FecW$H{z7?*#)U#%Q0NGxm3}`3{ zMlORI#}9>PuY|H`C=nUmLTX~14^(V@w+7NZYp=-!zQYvFdQd~{(zfq|-18(TTkkiu z#%8C$cy9!Z565b20pF7%F`&5&+LN><-o25k0Pxk`)qS!g9ifPrp!0BH_o}d^g7*9i zpzeDL%`2JAowJGe^m~x~&2zxf-o6+#bWHRIY8d^iPJS^|VFKLmy+U0S7c)Lt11^T4sA%lG0?D5N!(WuY}x_Jp`V+K z>m{&IcQ2?9?XUXYA&P(S-(DX8yvuPKU+H@em!n@$1`R*)Y;7&z`p7F@m5dlSk)czF zuwKnT+PuSL9F(w3Q*8d8DXFg?;0^EjM>W#1JJKt^j$*`7rVfvoiYG}@ubPfFu*{Zcwa%ecV927KgbN}cSfqd zcSvN@B4y{R0O%Y}ag@HKBLECUI)@6%OpHVR{SzkhdH@QaC*kI?zgB&360R>ygV!Hd zYk)|jc|^$3)&_=6@v@GZaMO+74M67PXiY6-PM?I!zj_*l(5t=`#I*<%af{>iQQuHJ zvHR|^gerHXDF;alV=mA6N}1^VA*|Zl3r!tA02!lO?!s9}eQ*-ykN>T9B*r2pp=q#` z&tKhj`sRAyZ20fp_jIWQ##E6N6|4AQrQ(VUPlDA{Q&SVrr8MLy>wjosVW?(09((Yf zml6sYD4{v@Pz=2m1BWO?R=_+SkAsq5f`y_n-aRqj?G9#Do7>dISm){%w8CpKiTAZ&=%Of5 zUPUjKRV!E-hV?#HOT;YG2`H$wup&W(>Y$YJuvj!8&B%EyDWXr$7)orl9$S5j-aVQYLg$tK<;VsCwhr&E(iI1pkj5G6Wwd+>D8Hq&TuDkDopmhYV z>h74*4MA#eibc)NnGuG)Dgi%ViJ@sC;V@*g*?P-$RRN%s?y1}JhvP2Q3aO=l0Oml$=UqmZ34l_Ta;wIB z6pJO4OtS$Hd&t4T&*2M&qF8U402ocWoujJf&!o||F`K=u0b&iFym|DiR4T{>Nk0>u zss|v0PL)CDipLWsM-zZmjaQf;pU=b1`M_9^teOwtE*M3EdNezG9Tpc;z!3UN$QZEJQQuJf&*N{2OtmM-Zlc?5X=#QS1|~5n6%kM{UszaZ#OyPVAK1UaHyNQB zM3NW_T451wEa+<X6B+&J{Z&;o5%3* zaEon<+XX_{tNZZb!^xokxHLN(d@(&YH@6pq$x#tdR!B))YZI<{&ei4-KMhD862D2W zzWT?XVe#?%<<^Lz8ZMPeuk`mn`+}z}V?ph?W|QJ{yPch#Exo;cJ!{si>BpqBt?rms z*FT$|pMPUyWO(GvnKO&7d4O(Tm)s4iw>{VFw%j4j)oz;+xTB+^Y0sXnEv>DsTQN73 z=L6Hz(;uHYHGXk&ax&|g4>--Pdp=NZ&)ondmj;|6h3c9QfJ=2ojroA1HR4jcVKXgy zh7;!Ze(kx#px}`nd~E1#%f0gi?iy(5p23Dm{}*5YITJx@uZbjO00000NkvXXu0mjf DY^0^O literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-upload.png b/images/toolbar/icon-32-upload.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef799dfa9eb693c0775dcb97f8b23440cd2e3aa GIT binary patch literal 2094 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 TvgTe~DWM4fRdx@u literal 0 HcmV?d00001 diff --git a/images/toolbar/index.html b/images/toolbar/index.html new file mode 100644 index 0000000..42682b4 --- /dev/null +++ b/images/toolbar/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/users.jpg b/images/users.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3675ced5cf95dcc0aa52d34f43c19ba8d7ed041 GIT binary patch literal 1834 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. +* Author: Drew Diller +* Email: drew.diller@gmail.com +* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ +* Version: 0.0.7a +* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license +* +* Example usage: +* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector +* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement +**/ + +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('2 E={J:\'E\',Z:{},1E:7(){4(x.1l&&!x.1l[6.J]){x.1l.23(6.J,\'24:25-26-27:3\')}4(1F.11){1F.11(\'28\',7(){E=29})}},1G:7(){2 a=x.1m(\'8\');x.1H.1b.1n(a,x.1H.1b.1b);2 b=a.1o;b.1c(6.J+\'\\\\:*\',\'{12:2a(#1I#2b)}\');b.1c(6.J+\'\\\\:9\',\'Q:1p;\');b.1c(\'1J.\'+6.J+\'1K\',\'12:y; 1q:y; Q:1p; z-2c:-1; 1d:-1r; 1L:1M;\');6.1o=b},1N:7(){2 a=13.2d;4(13.1e.K(\'2e\')!=-1||13.1e.K(\'1q\')!=-1){E.1f(a)}4(13.1e==\'8.1s\'){2 b=(a.F.1s==\'y\')?\'y\':\'2f\';G(2 v M a.3){a.3[v].9.8.1s=b}}4(13.1e.K(\'14\')!=-1){E.1t(a)}},1t:7(a){4(a.F.14.K(\'2g\')!=-1){2 b=a.F.14;b=1u(b.2h(b.1v(\'=\')+1,b.1v(\')\')),10)/2i;a.3.N.9.8.14=a.F.14;a.3.C.I.2j=b}},15:7(a){2k(7(){E.1f(a)},1)},2l:7(a){2 b=a.1O(\',\');G(2 i=0;ig.H){c.B=g.H}e.3.C.9.8.1Z=\'20(\'+c.T+\'u \'+(c.R+i)+\'u \'+c.B+\'u \'+(c.L+i)+\'u)\'}U{e.3.C.9.8.1Z=\'20(\'+p.T+\'u \'+p.R+\'u \'+p.B+\'u \'+p.L+\'u)\'}},1P:7(a){a.8.12=\'y\';4(a.17==\'32\'||a.17==\'33\'||a.17==\'34\'){1g}a.O=V;4(a.17==\'35\'){4(a.1h.21().K(/\\.22$/)!=-1){a.O=P;a.8.1L=\'1M\'}U{1g}}U 4(a.F.19.21().K(\'.22\')==-1){1g}2 b=E;a.3={N:{},C:{}};2 c={9:{},I:{}};G(2 r M a.3){G(2 e M c){2 d=b.J+\':\'+e;a.3[r][e]=x.1m(d)}a.3[r].9.36=V;a.3[r].9.37(a.3[r].I);a.38.1n(a.3[r].9,a)}a.3.C.9.39=\'y\';a.3.C.I.3a=\'3b\';a.3.N.I.1w=V;b.1T(a);b.1x(a);b.1x(a.3c);b.1f(a)}};3d{x.3e("3f",V,P)}3g(r){}E.1E();E.1G();',62,203,'||var|vml|if||this|function|style|shape|||||||||||||||||||||px|||document|none||||image|vmlBg|DD_belatedPNG|currentStyle|for||fill|ns|search||in|color|isImg|true|position||runtimeStyle||else|false||||imgSize||attachEvent|behavior|event|filter|handlePseudoHover|vmlOffsets|nodeName|backgroundColor|backgroundImage|case|firstChild|addRule|top|propertyName|applyVML|return|src|width|height|bLW|namespaces|createElement|insertBefore|styleSheet|absolute|border|10000px|display|vmlOpacity|parseInt|lastIndexOf|on|giveLayout|left|bTW|break|b1|b2|repeat|createVmlNameSpace|window|createVmlStyleSheet|documentElement|default|img|_sizeFinder|visibility|hidden|readPropertyChange|split|fixPng|cssText|vmlFill|copyImageBorders|attachHandlers|zIndex|transparent|removeAttribute|body|0l|clip|rect|toLowerCase|png|add|urn|schemas|microsoft|com|onbeforeunload|null|url|VML|index|srcElement|background|block|lpha|substring|100|opacity|setTimeout|fix|length|expression|resize|move|mouseleave|mouseenter|focus|blur|onpropertychange|zoom|static|relative|borderStyle|borderWidth|borderColor|substr|className|onload|offsetWidth|offsetHeight|clientWidth|clientHeight|offsetLeft|offsetTop|clientLeft|clientTop|coordsize|coordorigin|path|m0|l0|xe|switch|center|right|bottom|01|Math|ceil|backgroundPosition|backgroundRepeat|toUpperCase|BODY|TD|TR|IMG|stroked|appendChild|parentNode|fillcolor|type|tile|offsetParent|try|execCommand|BackgroundImageCache|catch'.split('|'),0,{})) \ No newline at end of file diff --git a/js/custom.js b/js/custom.js new file mode 100644 index 0000000..5a1871c --- /dev/null +++ b/js/custom.js @@ -0,0 +1,33 @@ +$(function(){ + + //$('#datepicker').datepicker({inline: true}); + + initMenu(); + $('.info_div').click(function() {$(this).fadeOut('slow')}); + //$("#dialog").dialog({ buttons: { "Ok": function() { $(this).dialog("close"); } } }); + //$('#tabs').tabs(); + + $("#tabledata").resizable({ maxWidth: 940 }); + //$.plot($("#placeholder"), [ [[0, 0], [1, 10]]], { yaxis: { max: 10 }, grid: { color: "#000", borderWidth:1} }); +}); + + + + + function initMenu() { + $('#menu ul').hide(); + $('#menu ul:first').show(); + $('#menu li a').click( + function() { + var checkElement = $(this).next(); + if((checkElement.is('ul')) && (checkElement.is(':visible'))) { + return false; + } + if((checkElement.is('ul')) && (!checkElement.is(':visible'))) { + $('#menu ul:visible').slideUp('normal'); + checkElement.slideDown('normal'); + return false; + } + } + ); + } diff --git a/js/excanvas.pack.js b/js/excanvas.pack.js new file mode 100644 index 0000000..71d6fbd --- /dev/null +++ b/js/excanvas.pack.js @@ -0,0 +1 @@ +if(!window.CanvasRenderingContext2D){(function(){var m=Math;var mr=m.round;var ms=m.sin;var mc=m.cos;var Z=10;var Z2=Z/2;var G_vmlCanvasManager_={init:function(opt_doc){var doc=opt_doc||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var self=this;doc.attachEvent("onreadystatechange",function(){self.init_(doc)})}},init_:function(doc){if(doc.readyState=="complete"){if(!doc.namespaces["g_vml_"]){doc.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var ss=doc.createStyleSheet();ss.cssText="canvas{display:inline-block;overflow:hidden;"+"text-align:left;width:300px;height:150px}"+"g_vml_\\:*{behavior:url(#default#VML)}";var els=doc.getElementsByTagName("canvas");for(var i=0;i"){var tagName="/"+el.tagName;var ns;while((ns=el.nextSibling)&&ns.tagName!=tagName){ns.removeNode()}if(ns){ns.removeNode()}}el.parentNode.replaceChild(newEl,el);return newEl},initElement:function(el){el=this.fixElement_(el);el.getContext=function(){if(this.context_){return this.context_}return this.context_=new CanvasRenderingContext2D_(this)};el.attachEvent('onpropertychange',onPropertyChange);el.attachEvent('onresize',onResize);var attrs=el.attributes;if(attrs.width&&attrs.width.specified){el.style.width=attrs.width.nodeValue+"px"}else{el.width=el.clientWidth}if(attrs.height&&attrs.height.specified){el.style.height=attrs.height.nodeValue+"px"}else{el.height=el.clientHeight}return el}};function onPropertyChange(e){var el=e.srcElement;switch(e.propertyName){case'width':el.style.width=el.attributes.width.nodeValue+"px";el.getContext().clearRect();break;case'height':el.style.height=el.attributes.height.nodeValue+"px";el.getContext().clearRect();break}}function onResize(e){var el=e.srcElement;if(el.firstChild){el.firstChild.style.width=el.clientWidth+'px';el.firstChild.style.height=el.clientHeight+'px'}}G_vmlCanvasManager_.init();var dec2hex=[];for(var i=0;i<16;i++){for(var j=0;j<16;j++){dec2hex[i*16+j]=i.toString(16)+j.toString(16)}}function createMatrixIdentity(){return[[1,0,0],[0,1,0],[0,0,1]]}function matrixMultiply(m1,m2){var result=createMatrixIdentity();for(var x=0;x<3;x++){for(var y=0;y<3;y++){var sum=0;for(var z=0;z<3;z++){sum+=m1[x][z]*m2[z][y]}result[x][y]=sum}}return result}function copyState(o1,o2){o2.fillStyle=o1.fillStyle;o2.lineCap=o1.lineCap;o2.lineJoin=o1.lineJoin;o2.lineWidth=o1.lineWidth;o2.miterLimit=o1.miterLimit;o2.shadowBlur=o1.shadowBlur;o2.shadowColor=o1.shadowColor;o2.shadowOffsetX=o1.shadowOffsetX;o2.shadowOffsetY=o1.shadowOffsetY;o2.strokeStyle=o1.strokeStyle;o2.arcScaleX_=o1.arcScaleX_;o2.arcScaleY_=o1.arcScaleY_}function processStyle(styleString){var str,alpha=1;styleString=String(styleString);if(styleString.substring(0,3)=="rgb"){var start=styleString.indexOf("(",3);var end=styleString.indexOf(")",start+1);var guts=styleString.substring(start+1,end).split(",");str="#";for(var i=0;i<3;i++){str+=dec2hex[Number(guts[i])]}if((guts.length==4)&&(styleString.substr(3,1)=="a")){alpha=guts[3]}}else{str=styleString}return[str,alpha]}function processLineCap(lineCap){switch(lineCap){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function CanvasRenderingContext2D_(surfaceElement){this.m_=createMatrixIdentity();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=Z*1;this.globalAlpha=1;this.canvas=surfaceElement;var el=surfaceElement.ownerDocument.createElement('div');el.style.width=surfaceElement.clientWidth+'px';el.style.height=surfaceElement.clientHeight+'px';el.style.overflow='hidden';el.style.position='absolute';surfaceElement.appendChild(el);this.element_=el;this.arcScaleX_=1;this.arcScaleY_=1}var contextPrototype=CanvasRenderingContext2D_.prototype;contextPrototype.clearRect=function(){this.element_.innerHTML="";this.currentPath_=[]};contextPrototype.beginPath=function(){this.currentPath_=[]};contextPrototype.moveTo=function(aX,aY){this.currentPath_.push({type:"moveTo",x:aX,y:aY});this.currentX_=aX;this.currentY_=aY};contextPrototype.lineTo=function(aX,aY){this.currentPath_.push({type:"lineTo",x:aX,y:aY});this.currentX_=aX;this.currentY_=aY};contextPrototype.bezierCurveTo=function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){this.currentPath_.push({type:"bezierCurveTo",cp1x:aCP1x,cp1y:aCP1y,cp2x:aCP2x,cp2y:aCP2y,x:aX,y:aY});this.currentX_=aX;this.currentY_=aY};contextPrototype.quadraticCurveTo=function(aCPx,aCPy,aX,aY){var cp1x=this.currentX_+2.0/3.0*(aCPx-this.currentX_);var cp1y=this.currentY_+2.0/3.0*(aCPy-this.currentY_);var cp2x=cp1x+(aX-this.currentX_)/3.0;var cp2y=cp1y+(aY-this.currentY_)/3.0;this.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,aX,aY)};contextPrototype.arc=function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){aRadius*=Z;var arcType=aClockwise?"at":"wa";var xStart=aX+(mc(aStartAngle)*aRadius)-Z2;var yStart=aY+(ms(aStartAngle)*aRadius)-Z2;var xEnd=aX+(mc(aEndAngle)*aRadius)-Z2;var yEnd=aY+(ms(aEndAngle)*aRadius)-Z2;if(xStart==xEnd&&!aClockwise){xStart+=0.125}this.currentPath_.push({type:arcType,x:aX,y:aY,radius:aRadius,xStart:xStart,yStart:yStart,xEnd:xEnd,yEnd:yEnd})};contextPrototype.rect=function(aX,aY,aWidth,aHeight){this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath()};contextPrototype.strokeRect=function(aX,aY,aWidth,aHeight){this.beginPath();this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath();this.stroke()};contextPrototype.fillRect=function(aX,aY,aWidth,aHeight){this.beginPath();this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath();this.fill()};contextPrototype.createLinearGradient=function(aX0,aY0,aX1,aY1){var gradient=new CanvasGradient_("gradient");return gradient};contextPrototype.createRadialGradient=function(aX0,aY0,aR0,aX1,aY1,aR1){var gradient=new CanvasGradient_("gradientradial");gradient.radius1_=aR0;gradient.radius2_=aR1;gradient.focus_.x=aX0;gradient.focus_.y=aY0;return gradient};contextPrototype.drawImage=function(image,var_args){var dx,dy,dw,dh,sx,sy,sw,sh;var oldRuntimeWidth=image.runtimeStyle.width;var oldRuntimeHeight=image.runtimeStyle.height;image.runtimeStyle.width='auto';image.runtimeStyle.height='auto';var w=image.width;var h=image.height;image.runtimeStyle.width=oldRuntimeWidth;image.runtimeStyle.height=oldRuntimeHeight;if(arguments.length==3){dx=arguments[1];dy=arguments[2];sx=sy=0;sw=dw=w;sh=dh=h}else if(arguments.length==5){dx=arguments[1];dy=arguments[2];dw=arguments[3];dh=arguments[4];sx=sy=0;sw=w;sh=h}else if(arguments.length==9){sx=arguments[1];sy=arguments[2];sw=arguments[3];sh=arguments[4];dx=arguments[5];dy=arguments[6];dw=arguments[7];dh=arguments[8]}else{throw"Invalid number of arguments";}var d=this.getCoords_(dx,dy);var w2=sw/2;var h2=sh/2;var vmlStr=[];var W=10;var H=10;vmlStr.push(' ','','');this.element_.insertAdjacentHTML("BeforeEnd",vmlStr.join(""))};contextPrototype.stroke=function(aFill){var lineStr=[];var lineOpen=false;var a=processStyle(aFill?this.fillStyle:this.strokeStyle);var color=a[0];var opacity=a[1]*this.globalAlpha;var W=10;var H=10;lineStr.push('max.x){max.x=c.x}if(min.y==null||c.ymax.y){max.y=c.y}}}lineStr.push(' ">');if(typeof this.fillStyle=="object"){var focus={x:"50%",y:"50%"};var width=(max.x-min.x);var height=(max.y-min.y);var dimension=(width>height)?width:height;focus.x=mr((this.fillStyle.focus_.x/width)*100+50)+"%";focus.y=mr((this.fillStyle.focus_.y/height)*100+50)+"%";var colors=[];if(this.fillStyle.type_=="gradientradial"){var inside=(this.fillStyle.radius1_/dimension*100);var expansion=(this.fillStyle.radius2_/dimension*100)-inside}else{var inside=0;var expansion=100}var insidecolor={offset:null,color:null};var outsidecolor={offset:null,color:null};this.fillStyle.colors_.sort(function(cs1,cs2){return cs1.offset-cs2.offset});for(var i=0;iinsidecolor.offset||insidecolor.offset==null){insidecolor.offset=fs.offset;insidecolor.color=fs.color}if(fs.offset')}else if(aFill){lineStr.push('')}else{lineStr.push('')}lineStr.push("");this.element_.insertAdjacentHTML("beforeEnd",lineStr.join(""))};contextPrototype.fill=function(){this.stroke(true)};contextPrototype.closePath=function(){this.currentPath_.push({type:"close"})};contextPrototype.getCoords_=function(aX,aY){return{x:Z*(aX*this.m_[0][0]+aY*this.m_[1][0]+this.m_[2][0])-Z2,y:Z*(aX*this.m_[0][1]+aY*this.m_[1][1]+this.m_[2][1])-Z2}};contextPrototype.save=function(){var o={};copyState(this,o);this.aStack_.push(o);this.mStack_.push(this.m_);this.m_=matrixMultiply(createMatrixIdentity(),this.m_)};contextPrototype.restore=function(){copyState(this.aStack_.pop(),this);this.m_=this.mStack_.pop()};contextPrototype.translate=function(aX,aY){var m1=[[1,0,0],[0,1,0],[aX,aY,1]];this.m_=matrixMultiply(m1,this.m_)};contextPrototype.rotate=function(aRot){var c=mc(aRot);var s=ms(aRot);var m1=[[c,s,0],[-s,c,0],[0,0,1]];this.m_=matrixMultiply(m1,this.m_)};contextPrototype.scale=function(aX,aY){this.arcScaleX_*=aX;this.arcScaleY_*=aY;var m1=[[aX,0,0],[0,aY,0],[0,0,1]];this.m_=matrixMultiply(m1,this.m_)};contextPrototype.clip=function(){};contextPrototype.arcTo=function(){};contextPrototype.createPattern=function(){return new CanvasPattern_};function CanvasGradient_(aType){this.type_=aType;this.radius1_=0;this.radius2_=0;this.colors_=[];this.focus_={x:0,y:0}}CanvasGradient_.prototype.addColorStop=function(aOffset,aColor){aColor=processStyle(aColor);this.colors_.push({offset:1-aOffset,color:aColor})};function CanvasPattern_(){}G_vmlCanvasManager=G_vmlCanvasManager_;CanvasRenderingContext2D=CanvasRenderingContext2D_;CanvasGradient=CanvasGradient_;CanvasPattern=CanvasPattern_})()} diff --git a/js/hoverIntent.js b/js/hoverIntent.js new file mode 100644 index 0000000..91da57b --- /dev/null +++ b/js/hoverIntent.js @@ -0,0 +1,84 @@ +(function($){ + /* hoverIntent by Brian Cherne */ + $.fn.hoverIntent = function(f,g) { + // default configuration options + var cfg = { + sensitivity: 7, + interval: 100, + timeout: 0 + }; + // override configuration options with user supplied object + cfg = $.extend(cfg, g ? { over: f, out: g } : f ); + + // instantiate variables + // cX, cY = current X and Y position of mouse, updated by mousemove event + // pX, pY = previous X and Y position of mouse, set by mouseover and polling interval + var cX, cY, pX, pY; + + // A private function for getting mouse position + var track = function(ev) { + cX = ev.pageX; + cY = ev.pageY; + }; + + // A private function for comparing current and previous mouse position + var compare = function(ev,ob) { + ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); + // compare mouse positions to see if they've crossed the threshold + if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) { + $(ob).unbind("mousemove",track); + // set hoverIntent state to true (so mouseOut can be called) + ob.hoverIntent_s = 1; + return cfg.over.apply(ob,[ev]); + } else { + // set previous coordinates for next time + pX = cX; pY = cY; + // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs) + ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval ); + } + }; + + // A private function for delaying the mouseOut function + var delay = function(ev,ob) { + ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); + ob.hoverIntent_s = 0; + return cfg.out.apply(ob,[ev]); + }; + + // A private function for handling mouse 'hovering' + var handleHover = function(e) { + // next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut + var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; + while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } } + if ( p == this ) { return false; } + + // copy objects to be passed into t (required for event object to be passed in IE) + var ev = jQuery.extend({},e); + var ob = this; + + // cancel hoverIntent timer if it exists + if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); } + + // else e.type == "onmouseover" + if (e.type == "mouseover") { + // set "previous" X and Y position based on initial entry point + pX = ev.pageX; pY = ev.pageY; + // update "current" X and Y position based on mousemove + $(ob).bind("mousemove",track); + // start polling interval (self-calling timeout) to compare mouse coordinates over time + if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );} + + // else e.type == "onmouseout" + } else { + // unbind expensive mousemove event + $(ob).unbind("mousemove",track); + // if hoverIntent state is true, then call the mouseOut function after the specified delay + if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );} + } + }; + + // bind the function to the two event listeners + return this.mouseover(handleHover).mouseout(handleHover); + }; + +})(jQuery); \ No newline at end of file diff --git a/js/jquery-1.3.2.min.js b/js/jquery-1.3.2.min.js new file mode 100644 index 0000000..b1ae21d --- /dev/null +++ b/js/jquery-1.3.2.min.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div

"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/js/jquery-ui-1.7.1.custom.min.js b/js/jquery-ui-1.7.1.custom.min.js new file mode 100644 index 0000000..11e49a0 --- /dev/null +++ b/js/jquery-ui-1.7.1.custom.min.js @@ -0,0 +1,273 @@ +/* + * jQuery UI 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.1",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,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}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=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)}else{j=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"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* + * jQuery UI Draggable 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * ui.core.js + */ (function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init: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")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.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"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.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)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.leftthis.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.topthis.containment[3])?g:(!(g-this.offset.click.topthis.containment[2])?f:(!(f-this.offset.click.left
').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y=p&&n<=k)||(m>=p&&m<=k)||(nk))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(ec));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d').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=j.handles||(!c(".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 k=this.handles.split(",");this.handles={};for(var f=0;f');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};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:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,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}}}));c.extend(c.ui.resizable,{version:"1.7.1",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/* + * jQuery UI Selectable 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * ui.core.js + */ (function(a){a.widget("ui.selectable",a.extend({},a.ui.mouse,{_init:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy()},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.rightg||j.bottomd&&j.righth&&j.bottom=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);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");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)f&&(e+h)m[this.floating?"width":"height"])){return g}else{return(f0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.topthis.containment[3])?g:(!(g-this.offset.click.topthis.containment[2])?f:(!(f-this.offset.click.left=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(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(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/* + * jQuery UI Accordion 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Accordion + * + * Depends: + * ui.core.js + */ (function(a){a.widget("ui.accordion",{_init:function(){var d=this.options,b=this;this.running=0;if(d.collapsible==a.ui.accordion.defaults.collapsible&&d.alwaysOpen!=a.ui.accordion.defaults.alwaysOpen){d.collapsible=!d.alwaysOpen}if(d.navigation){var c=this.element.find("a").filter(d.navigationFilter);if(c.length){if(c.filter(d.header).length){this.active=c}else{this.active=c.parent().parent().prev();c.addClass("ui-accordion-content-active")}}}this.element.addClass("ui-accordion ui-widget ui-helper-reset");if(this.element[0].nodeName=="UL"){this.element.children("li").addClass("ui-accordion-li-fix")}this.headers=this.element.find(d.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){a(this).removeClass("ui-state-focus")});this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");this.active=this._findActive(this.active||d.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");a("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);if(a.browser.msie){this.element.find("a").css("zoom","1")}this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(e){return b._keydown(e)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!this.active.length){this.headers.eq(0).attr("tabIndex","0")}else{this.active.attr("aria-expanded","true").attr("tabIndex","0")}if(!a.browser.safari){this.headers.find("a").attr("tabIndex","-1")}if(d.event){this.headers.bind((d.event)+".accordion",function(e){return b._clickHandler.call(b,e,this)})}},destroy:function(){var c=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabindex");this.headers.find("a").removeAttr("tabindex");this.headers.children(".ui-icon").remove();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");if(c.autoHeight||c.fillHeight){b.css("height","")}},_setData:function(b,c){if(b=="alwaysOpen"){b="collapsible";c=!c}a.widget.prototype._setData.apply(this,arguments)},_keydown:function(e){var g=this.options,f=a.ui.keyCode;if(g.disabled||e.altKey||e.ctrlKey){return}var d=this.headers.length;var b=this.headers.index(e.target);var c=false;switch(e.keyCode){case f.RIGHT:case f.DOWN:c=this.headers[(b+1)%d];break;case f.LEFT:case f.UP:c=this.headers[(b-1+d)%d];break;case f.SPACE:case f.ENTER:return this._clickHandler({target:e.target},e.target)}if(c){a(e.target).attr("tabIndex","-1");a(c).attr("tabIndex","0");c.focus();return false}return true},resize:function(){var e=this.options,d;if(e.fillSpace){if(a.browser.msie){var b=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}d=this.element.parent().height();if(a.browser.msie){this.element.parent().css("overflow",b)}this.headers.each(function(){d-=a(this).outerHeight()});var c=0;this.headers.next().each(function(){c=Math.max(c,a(this).innerHeight()-a(this).height())}).height(Math.max(0,d-c)).css("overflow","auto")}else{if(e.autoHeight){d=0;this.headers.next().each(function(){d=Math.max(d,a(this).outerHeight())}).height(d)}}},activate:function(b){var c=this._findActive(b)[0];this._clickHandler({target:c},c)},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,f){var d=this.options;if(d.disabled){return false}if(!b.target&&d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var h=this.active.next(),e={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:h},c=(this.active=a([]));this._toggle(c,h,e);return false}var g=a(b.currentTarget||f);var i=g[0]==this.active[0];if(this.running||(!d.collapsible&&i)){return false}this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");if(!i){g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);g.next().addClass("ui-accordion-content-active")}var c=g.next(),h=this.active.next(),e={options:d,newHeader:i&&d.collapsible?a([]):g,oldHeader:this.active,newContent:i&&d.collapsible?a([]):c.find("> *"),oldContent:h.find("> *")},j=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=i?a([]):g;this._toggle(c,h,e,i,j);return false},_toggle:function(b,i,g,j,k){var d=this.options,m=this;this.toShow=b;this.toHide=i;this.data=g;var c=function(){if(!m){return}return m._completed.apply(m,arguments)};this._trigger("changestart",null,this.data);this.running=i.size()===0?b.size():i.size();if(d.animated){var f={};if(d.collapsible&&j){f={toShow:a([]),toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}else{f={toShow:b,toHide:i,complete:c,down:k,autoHeight:d.autoHeight||d.fillSpace}}if(!d.proxied){d.proxied=d.animated}if(!d.proxiedDuration){d.proxiedDuration=d.duration}d.animated=a.isFunction(d.proxied)?d.proxied(f):d.proxied;d.duration=a.isFunction(d.proxiedDuration)?d.proxiedDuration(f):d.proxiedDuration;var l=a.ui.accordion.animations,e=d.duration,h=d.animated;if(!l[h]){l[h]=function(n){this.slide(n,{easing:h,duration:e||700})}}l[h](f)}else{if(d.collapsible&&j){b.toggle()}else{i.hide();b.show()}c(true)}i.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();b.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(b){var c=this.options;this.running=b?0:--this.running;if(this.running){return}if(c.clearStyle){this.toShow.add(this.toHide).css({height:"",overflow:""})}this._trigger("change",null,this.data)}});a.extend(a.ui.accordion,{version:"1.7.1",defaults:{active:null,alwaysOpen:true,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> 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()}},animations:{slide:function(j,h){j=a.extend({easing:"swing",duration:300},j,h);if(!j.toHide.size()){j.toShow.animate({height:"show"},j);return}if(!j.toShow.size()){j.toHide.animate({height:"hide"},j);return}var c=j.toShow.css("overflow"),g,d={},f={},e=["height","paddingTop","paddingBottom"],b;var i=j.toShow;b=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));a.each(e,function(k,m){f[m]="hide";var l=(""+a.css(j.toShow[0],m)).match(/^([\d+-.]+)(.*)$/);d[m]={value:l[1],unit:l[2]||"px"}});j.toShow.css({height:0,overflow:"hidden"}).show();j.toHide.filter(":hidden").each(j.complete).end().filter(":visible").animate(f,{step:function(k,l){if(l.prop=="height"){g=(l.now-l.start)/(l.end-l.start)}j.toShow[0].style[l.prop]=(g*d[l.prop].value)+d[l.prop].unit},duration:j.duration,easing:j.easing,complete:function(){if(!j.autoHeight){j.toShow.css("height","")}j.toShow.css("width",b);j.toShow.css({overflow:c});j.complete()}})},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1000:200})},easeslide:function(b){this.slide(b,{easing:"easeinout",duration:700})}}})})(jQuery);;/* + * jQuery UI Dialog 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * ui.core.js + * ui.draggable.js + * ui.resizable.js + */ (function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||" ",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("
")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("
")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(e){var d=this;if(false===d._trigger("beforeclose",e)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",e)}):d.uiDialog.hide()&&d._trigger("close",e));c.ui.dialog.overlay.resize();d._isOpen=false},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("
").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||" ");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.1",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("
").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove()},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e
");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("
")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a('
').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".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(d){d.preventDefault()}).hover(function(){a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},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()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((e==0&&d>=b)||(e==1&&d<=b)){d=b}if(d!=this.values(e)){var c=this.values();c[e]=d;var h=this._trigger("slide",f,{handle:this.handles[e],value:d,values:c});var b=this.values(e?0:1);if(h!==false){this.values(e,d,(f.type=="mousedown"&&this.options.animate),true)}}}else{if(d!=this.value()){var h=this._trigger("slide",f,{handle:this.handles[e],value:d});if(h!==false){this._setData("value",d,(f.type=="mousedown"&&this.options.animate))}}}},_stop:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("stop",d,b)},_change:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("change",d,b)},value:function(b){if(arguments.length){this._setData("value",b);this._change(null,0)}return this._value()},values:function(b,e,c,d){if(arguments.length>1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(cthis._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.1",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;/* + * jQuery UI Tabs 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * ui.core.js + */ (function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){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(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},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 c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(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"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.1",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"
",spinner:"Loading…",tabTemplate:'
  • #{label}
  • '}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('
    '))}},_connectDatepicker:function(target,inst){var input=$(target);inst.trigger=$([]);if(input.hasClass(this.markerClassName)){return}var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){input[isRTL?"before":"after"](''+appendText+"")}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");inst.trigger=$(this._get(inst,"buttonImageOnly")?$("").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return}divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){inst.trigger.remove();$target.siblings("."+this._appendClass).remove().end().removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return}var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return}var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).removeClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).removeClass("ui-datepicker-next-hover")}}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover");if(this.className.indexOf("ui-datepicker-prev")!=-1){$(this).addClass("ui-datepicker-prev-hover")}if(this.className.indexOf("ui-datepicker-next")!=-1){$(this).addClass("ui-datepicker-next-hover")}}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,"isRTL")?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return}if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return}var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return}this._adjustInstDate(inst,offset+(period=="M"?this._get(inst,"showCurrentAtPos"):0),period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return}var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof(inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDatenew Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)0&&iValue="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j0&&iValue-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},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",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormatmaxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDrawmaxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?''+prevText+"":(hideIfNoPrevNext?"":''+prevText+""));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?''+nextText+"":(hideIfNoPrevNext?"":''+nextText+""));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'":"");var buttonPanel=(showButtonPanel)?'
    '+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'":"")+(isRTL?"":controls)+"
    ":"";var firstDay=parseInt(this._get(inst,"firstDay"),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="=5?' class="ui-datepicker-week-end"':"")+'>'+dayNamesMin[day]+""}calender+=thead+"";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDatemaxDate);tbody+='";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+""}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="
    =currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"DP_jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():" "):(unselectable?''+printDate.getDate()+"":'=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+""))+"
    "+(isMultiMonth?""+((numMonths[0]>0&&col==numMonths[1]-1)?'
    ':""):"");group+=calender}html+=group}html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?" ":"")}if(secondary||!changeYear){html+=''+drawYear+""}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?" ":"")+monthHtml}html+="";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&datemaxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.1";window.DP_jQuery=$})(jQuery);;/* + * jQuery UI Progressbar 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * ui.core.js + */ (function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('
    ').appendTo(this.element);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").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){arguments.length&&this._setData("value",b);return this._value()},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.1",defaults:{value:0}})})(jQuery);;/* + * jQuery UI Effects 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/ + */ jQuery.effects||(function(d){d.effects={version:"1.7.1",save:function(g,h){for(var f=0;f');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(arguments[0].constructor==Function)){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={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]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/* + * jQuery UI Effects Fold 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * effects.core.js + */ (function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/* + * jQuery UI Effects Highlight 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * effects.core.js + */ (function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/* + * jQuery UI Effects Pulsate 1.7.1 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * effects.core.js + */ (function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);; \ No newline at end of file diff --git a/js/jquery.alerts.js b/js/jquery.alerts.js new file mode 100644 index 0000000..80b1c85 --- /dev/null +++ b/js/jquery.alerts.js @@ -0,0 +1,235 @@ +// jQuery Alert Dialogs Plugin +// +// Version 1.1 +// +// Cory S.N. LaViska +// A Beautiful Site (http://abeautifulsite.net/) +// 14 May 2009 +// +// Visit http://abeautifulsite.net/notebook/87 for more information +// +// Usage: +// jAlert( message, [title, callback] ) +// jConfirm( message, [title, callback] ) +// jPrompt( message, [value, title, callback] ) +// +// History: +// +// 1.00 - Released (29 December 2008) +// +// 1.01 - Fixed bug where unbinding would destroy all resize events +// +// License: +// +// This plugin is dual-licensed under the GNU General Public License and the MIT License and +// is copyright 2008 A Beautiful Site, LLC. +// +(function($) { + + $.alerts = { + + // These properties can be read/written by accessing $.alerts.propertyName from your scripts at any time + + verticalOffset: -75, // vertical offset of the dialog from center screen, in pixels + horizontalOffset: 0, // horizontal offset of the dialog from center screen, in pixels/ + repositionOnResize: true, // re-centers the dialog on window resize + overlayOpacity: .01, // transparency level of overlay + overlayColor: '#FFF', // base color of overlay + draggable: true, // make the dialogs draggable (requires UI Draggables plugin) + okButton: ' OK ', // text for the OK button + cancelButton: ' Cancel ', // text for the Cancel button + dialogClass: null, // if specified, this class will be applied to all dialogs + + // Public methods + + alert: function(message, title, callback) { + if( title == null ) title = 'Alert'; + $.alerts._show(title, message, null, 'alert', function(result) { + if( callback ) callback(result); + }); + }, + + confirm: function(message, title, callback) { + if( title == null ) title = 'Confirm'; + $.alerts._show(title, message, null, 'confirm', function(result) { + if( callback ) callback(result); + }); + }, + + prompt: function(message, value, title, callback) { + if( title == null ) title = 'Prompt'; + $.alerts._show(title, message, value, 'prompt', function(result) { + if( callback ) callback(result); + }); + }, + + // Private methods + + _show: function(title, msg, value, type, callback) { + + $.alerts._hide(); + $.alerts._overlay('show'); + + $("BODY").append( + ''); + + if( $.alerts.dialogClass ) $("#popup_container").addClass($.alerts.dialogClass); + + // IE6 Fix + var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ) ? 'absolute' : 'fixed'; + + $("#popup_container").css({ + position: pos, + zIndex: 99999, + padding: 0, + margin: 0 + }); + + $("#popup_title").text(title); + $("#popup_content").addClass(type); + $("#popup_message").text(msg); + $("#popup_message").html( $("#popup_message").text().replace(/\n/g, '
    ') ); + + $("#popup_container").css({ + minWidth: $("#popup_container").outerWidth(), + maxWidth: $("#popup_container").outerWidth() + }); + + $.alerts._reposition(); + $.alerts._maintainPosition(true); + + switch( type ) { + case 'alert': + $("#popup_message").after(''); + $("#popup_ok").click( function() { + $.alerts._hide(); + callback(true); + }); + $("#popup_ok").focus().keypress( function(e) { + if( e.keyCode == 13 || e.keyCode == 27 ) $("#popup_ok").trigger('click'); + }); + break; + case 'confirm': + $("#popup_message").after(''); + $("#popup_ok").click( function() { + $.alerts._hide(); + if( callback ) callback(true); + }); + $("#popup_cancel").click( function() { + $.alerts._hide(); + if( callback ) callback(false); + }); + $("#popup_ok").focus(); + $("#popup_ok, #popup_cancel").keypress( function(e) { + if( e.keyCode == 13 ) $("#popup_ok").trigger('click'); + if( e.keyCode == 27 ) $("#popup_cancel").trigger('click'); + }); + break; + case 'prompt': + $("#popup_message").append('
    ').after(''); + $("#popup_prompt").width( $("#popup_message").width() ); + $("#popup_ok").click( function() { + var val = $("#popup_prompt").val(); + $.alerts._hide(); + if( callback ) callback( val ); + }); + $("#popup_cancel").click( function() { + $.alerts._hide(); + if( callback ) callback( null ); + }); + $("#popup_prompt, #popup_ok, #popup_cancel").keypress( function(e) { + if( e.keyCode == 13 ) $("#popup_ok").trigger('click'); + if( e.keyCode == 27 ) $("#popup_cancel").trigger('click'); + }); + if( value ) $("#popup_prompt").val(value); + $("#popup_prompt").focus().select(); + break; + } + + // Make draggable + if( $.alerts.draggable ) { + try { + $("#popup_container").draggable({ handle: $("#popup_title") }); + $("#popup_title").css({ cursor: 'move' }); + } catch(e) { /* requires jQuery UI draggables */ } + } + }, + + _hide: function() { + $("#popup_container").remove(); + $.alerts._overlay('hide'); + $.alerts._maintainPosition(false); + }, + + _overlay: function(status) { + switch( status ) { + case 'show': + $.alerts._overlay('hide'); + $("BODY").append(''); + $("#popup_overlay").css({ + position: 'absolute', + zIndex: 99998, + top: '0px', + left: '0px', + width: '100%', + height: $(document).height(), + background: $.alerts.overlayColor, + opacity: $.alerts.overlayOpacity + }); + break; + case 'hide': + $("#popup_overlay").remove(); + break; + } + }, + + _reposition: function() { + var top = (($(window).height() / 2) - ($("#popup_container").outerHeight() / 2)) + $.alerts.verticalOffset; + var left = (($(window).width() / 2) - ($("#popup_container").outerWidth() / 2)) + $.alerts.horizontalOffset; + if( top < 0 ) top = 0; + if( left < 0 ) left = 0; + + // IE6 fix + if( $.browser.msie && parseInt($.browser.version) <= 6 ) top = top + $(window).scrollTop(); + + $("#popup_container").css({ + top: top + 'px', + left: left + 'px' + }); + $("#popup_overlay").height( $(document).height() ); + }, + + _maintainPosition: function(status) { + if( $.alerts.repositionOnResize ) { + switch(status) { + case true: + $(window).bind('resize', $.alerts._reposition); + break; + case false: + $(window).unbind('resize', $.alerts._reposition); + break; + } + } + } + + } + + // Shortuct functions + jAlert = function(message, title, callback) { + $.alerts.alert(message, title, callback); + } + + jConfirm = function(message, title, callback) { + $.alerts.confirm(message, title, callback); + }; + + jPrompt = function(message, value, title, callback) { + $.alerts.prompt(message, value, title, callback); + }; + +})(jQuery); \ No newline at end of file diff --git a/js/jquery.bgiframe.min.js b/js/jquery.bgiframe.min.js new file mode 100644 index 0000000..b5af520 --- /dev/null +++ b/js/jquery.bgiframe.min.js @@ -0,0 +1,10 @@ +/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net) + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * $LastChangedDate: 2007-06-19 20:25:28 -0500 (Tue, 19 Jun 2007) $ + * $Rev: 2111 $ + * + * Version 2.1 + */ +(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&parseInt($.browser.version)<=6){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='
    "); + $("#TB_overlay").click(tb_remove); + } + }else{//all others + if(document.getElementById("TB_overlay") === null){ + $("body").append("
    "); + $("#TB_overlay").click(tb_remove); + } + } + + if(tb_detectMacXFF()){ + $("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash + }else{ + $("#TB_overlay").addClass("TB_overlayBG");//use background and opacity + } + + if(caption===null){caption="";} + $("body").append("
    ");//add loader to the page + $('#TB_load').show();//show loader + + var baseURL; + if(url.indexOf("?")!==-1){ //ff there is a query string involved + baseURL = url.substr(0, url.indexOf("?")); + }else{ + baseURL = url; + } + + var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/; + var urlType = baseURL.toLowerCase().match(urlString); + + if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images + + TB_PrevCaption = ""; + TB_PrevURL = ""; + TB_PrevHTML = ""; + TB_NextCaption = ""; + TB_NextURL = ""; + TB_NextHTML = ""; + TB_imageCount = ""; + TB_FoundURL = false; + if(imageGroup){ + TB_TempArray = $("a[@rel="+imageGroup+"]").get(); + for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { + var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); + if (!(TB_TempArray[TB_Counter].href == url)) { + if (TB_FoundURL) { + TB_NextCaption = TB_TempArray[TB_Counter].title; + TB_NextURL = TB_TempArray[TB_Counter].href; + TB_NextHTML = "  Next >"; + } else { + TB_PrevCaption = TB_TempArray[TB_Counter].title; + TB_PrevURL = TB_TempArray[TB_Counter].href; + TB_PrevHTML = "  < Prev"; + } + } else { + TB_FoundURL = true; + TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length); + } + } + } + + imgPreloader = new Image(); + imgPreloader.onload = function(){ + imgPreloader.onload = null; + + // Resizing large images - orginal by Christian Montoya edited by me. + var pagesize = tb_getPageSize(); + var x = pagesize[0] - 150; + var y = pagesize[1] - 150; + var imageWidth = imgPreloader.width; + var imageHeight = imgPreloader.height; + if (imageWidth > x) { + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + if (imageHeight > y) { + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + } + } else if (imageHeight > y) { + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + if (imageWidth > x) { + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + } + } + // End Resizing + + TB_WIDTH = imageWidth + 30; + TB_HEIGHT = imageHeight + 60; + $("#TB_window").append(""+caption+"" + "
    "+caption+"
    " + TB_imageCount + TB_PrevHTML + TB_NextHTML + "
    close or Esc Key
    "); + + $("#TB_closeWindowButton").click(tb_remove); + + if (!(TB_PrevHTML === "")) { + function goPrev(){ + if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);} + $("#TB_window").remove(); + $("body").append("
    "); + tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); + return false; + } + $("#TB_prev").click(goPrev); + } + + if (!(TB_NextHTML === "")) { + function goNext(){ + $("#TB_window").remove(); + $("body").append("
    "); + tb_show(TB_NextCaption, TB_NextURL, imageGroup); + return false; + } + $("#TB_next").click(goNext); + + } + + document.onkeydown = function(e){ + if (e == null) { // ie + keycode = event.keyCode; + } else { // mozilla + keycode = e.which; + } + if(keycode == 27){ // close + tb_remove(); + } else if(keycode == 190){ // display previous image + if(!(TB_NextHTML == "")){ + document.onkeydown = ""; + goNext(); + } + } else if(keycode == 188){ // display next image + if(!(TB_PrevHTML == "")){ + document.onkeydown = ""; + goPrev(); + } + } + }; + + tb_position(); + $("#TB_load").remove(); + $("#TB_ImageOff").click(tb_remove); + $("#TB_window").css({display:"block"}); //for safari using css instead of show + }; + + imgPreloader.src = url; + }else{//code to show html + + var queryString = url.replace(/^[^\?]+\??/,''); + var params = tb_parseQuery( queryString ); + + TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL + TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL + ajaxContentW = TB_WIDTH - 30; + ajaxContentH = TB_HEIGHT - 45; + + if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window + urlNoQuery = url.split('TB_'); + $("#TB_iframeContent").remove(); + if(params['modal'] != "true"){//iframe no modal + $("#TB_window").append("
    "+caption+"
    close or Esc Key
    "); + }else{//iframe modal + $("#TB_overlay").unbind(); + $("#TB_window").append(""); + } + }else{// not an iframe, ajax + if($("#TB_window").css("display") != "block"){ + if(params['modal'] != "true"){//ajax no modal + $("#TB_window").append("
    "+caption+"
    close or Esc Key
    "); + }else{//ajax modal + $("#TB_overlay").unbind(); + $("#TB_window").append("
    "); + } + }else{//this means the window is already up, we are just loading new content via ajax + $("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; + $("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; + $("#TB_ajaxContent")[0].scrollTop = 0; + $("#TB_ajaxWindowTitle").html(caption); + } + } + + $("#TB_closeWindowButton").click(tb_remove); + + if(url.indexOf('TB_inline') != -1){ + $("#TB_ajaxContent").append($('#' + params['inlineId']).children()); + $("#TB_window").unload(function () { + $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished + }); + tb_position(); + $("#TB_load").remove(); + $("#TB_window").css({display:"block"}); + }else if(url.indexOf('TB_iframe') != -1){ + tb_position(); + if($.browser.safari){//safari needs help because it will not fire iframe onload + $("#TB_load").remove(); + $("#TB_window").css({display:"block"}); + } + }else{ + $("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method + tb_position(); + $("#TB_load").remove(); + tb_init("#TB_ajaxContent a.thickbox"); + $("#TB_window").css({display:"block"}); + }); + } + + } + + if(!params['modal']){ + document.onkeyup = function(e){ + if (e == null) { // ie + keycode = event.keyCode; + } else { // mozilla + keycode = e.which; + } + if(keycode == 27){ // close + tb_remove(); + } + }; + } + + } catch(e) { + //nothing here + } +} + +//helper functions below +function tb_showIframe(){ + $("#TB_load").remove(); + $("#TB_window").css({display:"block"}); +} + +function tb_remove() { + $("#TB_imageOff").unbind("click"); + $("#TB_closeWindowButton").unbind("click"); + $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();}); + $("#TB_load").remove(); + if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 + $("body","html").css({height: "auto", width: "auto"}); + $("html").css("overflow",""); + } + document.onkeydown = ""; + document.onkeyup = ""; + return false; +} + +function tb_position() { +$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'}); + if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6 + $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'}); + } +} + +function tb_parseQuery ( query ) { + var Params = {}; + if ( ! query ) {return Params;}// return empty object + var Pairs = query.split(/[;&]/); + for ( var i = 0; i < Pairs.length; i++ ) { + var KeyVal = Pairs[i].split('='); + if ( ! KeyVal || KeyVal.length != 2 ) {continue;} + var key = unescape( KeyVal[0] ); + var val = unescape( KeyVal[1] ); + val = val.replace(/\+/g, ' '); + Params[key] = val; + } + return Params; +} + +function tb_getPageSize(){ + var de = document.documentElement; + var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; + var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; + arrayPageSize = [w,h]; + return arrayPageSize; +} + +function tb_detectMacXFF() { + var userAgent = navigator.userAgent.toLowerCase(); + if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { + return true; + } +} + + diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..c2f7ca0 --- /dev/null +++ b/license.txt @@ -0,0 +1,52 @@ +Copyright (c) 2008 - 2009, EllisLab, Inc. +All rights reserved. + +This license is a legal agreement between you and EllisLab Inc. for the use +of CodeIgniter Software (the "Software"). By obtaining the Software you +agree to comply with the terms and conditions of this license. + +PERMITTED USE +You are permitted to use, copy, modify, and distribute the Software and its +documentation, with or without modification, for any purpose, provided that +the following conditions are met: + +1. A copy of this license agreement must be included with the distribution. + +2. Redistributions of source code must retain the above copyright notice in + all source code files. + +3. Redistributions in binary form must reproduce the above copyright notice + in the documentation and/or other materials provided with the distribution. + +4. Any files that have been modified must carry notices stating the nature + of the change and the names of those who changed them. + +5. Products derived from the Software must include an acknowledgment that + they are derived from CodeIgniter in their documentation and/or other + materials provided with the distribution. + +6. Products derived from the Software may not be called "CodeIgniter", + nor may "CodeIgniter" appear in their name, without prior written + permission from EllisLab, Inc. + + +INDEMNITY +You agree to indemnify and hold harmless the authors of the Software and +any contributors for any direct, indirect, incidental, or consequential +third-party claims, actions or suits, as well as any related expenses, +liabilities, damages, settlements or fees arising from your use or misuse +of the Software, or a violation of any terms of this license. + +DISCLAIMER OF WARRANTY +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR +IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF QUALITY, PERFORMANCE, +NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. + +LIMITATIONS OF LIABILITY +YOU ASSUME ALL RISK ASSOCIATED WITH THE INSTALLATION AND USE OF THE SOFTWARE. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS OF THE SOFTWARE BE LIABLE +FOR CLAIMS, DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION +WITH THE SOFTWARE. LICENSE HOLDERS ARE SOLELY RESPONSIBLE FOR DETERMINING THE +APPROPRIATENESS OF USE AND ASSUME ALL RISKS ASSOCIATED WITH ITS USE, INCLUDING +BUT NOT LIMITED TO THE RISKS OF PROGRAM ERRORS, DAMAGE TO EQUIPMENT, LOSS OF +DATA OR SOFTWARE PROGRAMS, OR UNAVAILABILITY OR INTERRUPTION OF OPERATIONS. diff --git a/markitup/jquery.markitup.js b/markitup/jquery.markitup.js new file mode 100644 index 0000000..1bdf319 --- /dev/null +++ b/markitup/jquery.markitup.js @@ -0,0 +1,553 @@ +// ---------------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// v 1.1.5 +// Dual licensed under the MIT and GPL licenses. +// ---------------------------------------------------------------------------- +// Copyright (C) 2007-2008 Jay Salvat +// http://markitup.jaysalvat.com/ +// ---------------------------------------------------------------------------- +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// ---------------------------------------------------------------------------- +(function($) { + $.fn.markItUp = function(settings, extraSettings) { + var options, ctrlKey, shiftKey, altKey; + ctrlKey = shiftKey = altKey = false; + + options = { id: '', + nameSpace: '', + root: '', + previewInWindow: '', // 'width=800, height=600, resizable=yes, scrollbars=yes' + previewAutoRefresh: true, + previewPosition: 'after', + previewTemplatePath: '~/templates/preview.html', + previewParserPath: '', + previewParserVar: 'data', + resizeHandle: true, + beforeInsert: '', + afterInsert: '', + onEnter: {}, + onShiftEnter: {}, + onCtrlEnter: {}, + onTab: {}, + markupSet: [ { /* set */ } ] + }; + $.extend(options, settings, extraSettings); + + // compute markItUp! path + if (!options.root) { + $('script').each(function(a, tag) { + miuScript = $(tag).get(0).src.match(/(.*)jquery\.markitup(\.pack)?\.js$/); + if (miuScript !== null) { + options.root = miuScript[1]; + } + }); + } + + return this.each(function() { + var $$, textarea, levels, scrollPosition, caretPosition, caretOffset, + clicked, hash, header, footer, previewWindow, template, iFrame, abort; + $$ = $(this); + textarea = this; + levels = []; + abort = false; + scrollPosition = caretPosition = 0; + caretOffset = -1; + + options.previewParserPath = localize(options.previewParserPath); + options.previewTemplatePath = localize(options.previewTemplatePath); + + // apply the computed path to ~/ + function localize(data, inText) { + if (inText) { + return data.replace(/("|')~\//g, "$1"+options.root); + } + return data.replace(/^~\//, options.root); + } + + // init and build editor + function init() { + id = ''; nameSpace = ''; + if (options.id) { + id = 'id="'+options.id+'"'; + } else if ($$.attr("id")) { + id = 'id="markItUp'+($$.attr("id").substr(0, 1).toUpperCase())+($$.attr("id").substr(1))+'"'; + + } + if (options.nameSpace) { + nameSpace = 'class="'+options.nameSpace+'"'; + } + $$.wrap('
    '); + $$.wrap('
    '); + $$.wrap('
    '); + $$.addClass("markItUpEditor"); + + // add the header before the textarea + header = $('
    ').insertBefore($$); + $(dropMenus(options.markupSet)).appendTo(header); + + // add the footer after the textarea + footer = $('
    ').insertAfter($$); + + // add the resize handle after textarea + if (options.resizeHandle === true && $.browser.safari !== true) { + resizeHandle = $('
    ') + .insertAfter($$) + .bind("mousedown", function(e) { + var h = $$.height(), y = e.clientY, mouseMove, mouseUp; + mouseMove = function(e) { + $$.css("height", Math.max(20, e.clientY+h-y)+"px"); + return false; + }; + mouseUp = function(e) { + $("html").unbind("mousemove", mouseMove).unbind("mouseup", mouseUp); + return false; + }; + $("html").bind("mousemove", mouseMove).bind("mouseup", mouseUp); + }); + footer.append(resizeHandle); + } + + // listen key events + $$.keydown(keyPressed).keyup(keyPressed); + + // bind an event to catch external calls + $$.bind("insertion", function(e, settings) { + if (settings.target !== false) { + get(); + } + if (textarea === $.markItUp.focused) { + markup(settings); + } + }); + + // remember the last focus + $$.focus(function() { + $.markItUp.focused = this; + }); + } + + // recursively build header with dropMenus from markupset + function dropMenus(markupSet) { + var ul = $('
      '), i = 0; + $('li:hover > ul', ul).css('display', 'block'); + $.each(markupSet, function() { + var button = this, t = '', title, li, j; + title = (button.key) ? (button.name||'')+' [Ctrl+'+button.key+']' : (button.name||''); + key = (button.key) ? 'accesskey="'+button.key+'"' : ''; + if (button.separator) { + li = $('
    • '+(button.separator||'')+'
    • ').appendTo(ul); + } else { + i++; + for (j = levels.length -1; j >= 0; j--) { + t += levels[j]+"-"; + } + li = $('
    • '+(button.name||'')+'
    • ') + .bind("contextmenu", function() { // prevent contextmenu on mac and allow ctrl+click + return false; + }).click(function() { + return false; + }).mouseup(function() { + if (button.call) { + eval(button.call)(); + } + markup(button); + return false; + }).hover(function() { + $('> ul', this).show(); + $(document).one('click', function() { // close dropmenu if click outside + $('ul ul', header).hide(); + } + ); + }, function() { + $('> ul', this).hide(); + } + ).appendTo(ul); + if (button.dropMenu) { + levels.push(i); + $(li).addClass('markItUpDropMenu').append(dropMenus(button.dropMenu)); + } + } + }); + levels.pop(); + return ul; + } + + // markItUp! markups + function magicMarkups(string) { + if (string) { + string = string.toString(); + string = string.replace(/\(\!\(([\s\S]*?)\)\!\)/g, + function(x, a) { + var b = a.split('|!|'); + if (altKey === true) { + return (b[1] !== undefined) ? b[1] : b[0]; + } else { + return (b[1] === undefined) ? "" : b[0]; + } + } + ); + // [![prompt]!], [![prompt:!:value]!] + string = string.replace(/\[\!\[([\s\S]*?)\]\!\]/g, + function(x, a) { + var b = a.split(':!:'); + if (abort === true) { + return false; + } + value = prompt(b[0], (b[1]) ? b[1] : ''); + if (value === null) { + abort = true; + } + return value; + } + ); + return string; + } + return ""; + } + + // prepare action + function prepare(action) { + if ($.isFunction(action)) { + action = action(hash); + } + return magicMarkups(action); + } + + // build block to insert + function build(string) { + openWith = prepare(clicked.openWith); + placeHolder = prepare(clicked.placeHolder); + replaceWith = prepare(clicked.replaceWith); + closeWith = prepare(clicked.closeWith); + if (replaceWith !== "") { + block = openWith + replaceWith + closeWith; + } else if (selection === '' && placeHolder !== '') { + block = openWith + placeHolder + closeWith; + } else { + block = openWith + (string||selection) + closeWith; + } + return { block:block, + openWith:openWith, + replaceWith:replaceWith, + placeHolder:placeHolder, + closeWith:closeWith + }; + } + + // define markup to insert + function markup(button) { + var len, j, n, i; + hash = clicked = button; + get(); + + $.extend(hash, { line:"", + root:options.root, + textarea:textarea, + selection:(selection||''), + caretPosition:caretPosition, + ctrlKey:ctrlKey, + shiftKey:shiftKey, + altKey:altKey + } + ); + // callbacks before insertion + prepare(options.beforeInsert); + prepare(clicked.beforeInsert); + if (ctrlKey === true && shiftKey === true) { + prepare(clicked.beforeMultiInsert); + } + $.extend(hash, { line:1 }); + + if (ctrlKey === true && shiftKey === true) { + lines = selection.split(/\r?\n/); + for (j = 0, n = lines.length, i = 0; i < n; i++) { + if ($.trim(lines[i]) !== '') { + $.extend(hash, { line:++j, selection:lines[i] } ); + lines[i] = build(lines[i]).block; + } else { + lines[i] = ""; + } + } + string = { block:lines.join('\n')}; + start = caretPosition; + len = string.block.length + (($.browser.opera) ? n : 0); + } else if (ctrlKey === true) { + string = build(selection); + start = caretPosition + string.openWith.length; + len = string.block.length - string.openWith.length - string.closeWith.length; + len -= fixIeBug(string.block); + } else if (shiftKey === true) { + string = build(selection); + start = caretPosition; + len = string.block.length; + len -= fixIeBug(string.block); + } else { + string = build(selection); + start = caretPosition + string.block.length ; + len = 0; + start -= fixIeBug(string.block); + } + if ((selection === '' && string.replaceWith === '')) { + caretOffset += fixOperaBug(string.block); + + start = caretPosition + string.openWith.length; + len = string.block.length - string.openWith.length - string.closeWith.length; + + caretOffset = $$.val().substring(caretPosition, $$.val().length).length; + caretOffset -= fixOperaBug($$.val().substring(0, caretPosition)); + } + $.extend(hash, { caretPosition:caretPosition, scrollPosition:scrollPosition } ); + + if (string.block !== selection && abort === false) { + insert(string.block); + set(start, len); + } else { + caretOffset = -1; + } + get(); + + $.extend(hash, { line:'', selection:selection }); + + // callbacks after insertion + if (ctrlKey === true && shiftKey === true) { + prepare(clicked.afterMultiInsert); + } + prepare(clicked.afterInsert); + prepare(options.afterInsert); + + // refresh preview if opened + if (previewWindow && options.previewAutoRefresh) { + refreshPreview(); + } + + // reinit keyevent + shiftKey = altKey = ctrlKey = abort = false; + } + + // Substract linefeed in Opera + function fixOperaBug(string) { + if ($.browser.opera) { + return string.length - string.replace(/\n*/g, '').length; + } + return 0; + } + // Substract linefeed in IE + function fixIeBug(string) { + if ($.browser.msie) { + return string.length - string.replace(/\r*/g, '').length; + } + return 0; + } + + // add markup + function insert(block) { + if (document.selection) { + var newSelection = document.selection.createRange(); + newSelection.text = block; + } else { + $$.val($$.val().substring(0, caretPosition) + block + $$.val().substring(caretPosition + selection.length, $$.val().length)); + } + } + + // set a selection + function set(start, len) { + if (textarea.createTextRange){ + // quick fix to make it work on Opera 9.5 + if ($.browser.opera && $.browser.version >= 9.5 && len == 0) { + return false; + } + range = textarea.createTextRange(); + range.collapse(true); + range.moveStart('character', start); + range.moveEnd('character', len); + range.select(); + } else if (textarea.setSelectionRange ){ + textarea.setSelectionRange(start, start + len); + } + textarea.scrollTop = scrollPosition; + textarea.focus(); + } + + // get the selection + function get() { + textarea.focus(); + + scrollPosition = textarea.scrollTop; + if (document.selection) { + selection = document.selection.createRange().text; + if ($.browser.msie) { // ie + var range = document.selection.createRange(), rangeCopy = range.duplicate(); + rangeCopy.moveToElementText(textarea); + caretPosition = -1; + while(rangeCopy.inRange(range)) { // fix most of the ie bugs with linefeeds... + rangeCopy.moveStart('character'); + caretPosition ++; + } + } else { // opera + caretPosition = textarea.selectionStart; + } + } else { // gecko + caretPosition = textarea.selectionStart; + selection = $$.val().substring(caretPosition, textarea.selectionEnd); + } + return selection; + } + + // open preview window + function preview() { + if (!previewWindow || previewWindow.closed) { + if (options.previewInWindow) { + previewWindow = window.open('', 'preview', options.previewInWindow); + } else { + iFrame = $(''); + if (options.previewPosition == 'after') { + iFrame.insertAfter(footer); + } else { + iFrame.insertBefore(header); + } + previewWindow = iFrame[iFrame.length-1].contentWindow || frame[iFrame.length-1]; + } + } else if (altKey === true) { + if (iFrame) { + iFrame.remove(); + } + previewWindow.close(); + previewWindow = iFrame = false; + } + if (!options.previewAutoRefresh) { + refreshPreview(); + } + } + + // refresh Preview window + function refreshPreview() { + if (previewWindow.document) { + try { + sp = previewWindow.document.documentElement.scrollTop + } catch(e) { + sp = 0; + } + previewWindow.document.open(); + previewWindow.document.write(renderPreview()); + previewWindow.document.close(); + previewWindow.document.documentElement.scrollTop = sp; + } + if (options.previewInWindow) { + previewWindow.focus(); + } + } + + function renderPreview() { + if (options.previewParserPath !== '') { + $.ajax( { + type: 'POST', + async: false, + url: options.previewParserPath, + data: options.previewParserVar+'='+encodeURIComponent($$.val()), + success: function(data) { + phtml = localize(data, 1); + } + } ); + } else { + if (!template) { + $.ajax( { + async: false, + url: options.previewTemplatePath, + success: function(data) { + template = localize(data, 1); + } + } ); + } + phtml = template.replace(//g, $$.val()); + } + return phtml; + } + + // set keys pressed + function keyPressed(e) { + shiftKey = e.shiftKey; + altKey = e.altKey; + ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; + + if (e.type === 'keydown') { + if (ctrlKey === true) { + li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li'); + if (li.length !== 0) { + ctrlKey = false; + li.triggerHandler('mouseup'); + return false; + } + } + if (e.keyCode === 13 || e.keyCode === 10) { // Enter key + if (ctrlKey === true) { // Enter + Ctrl + ctrlKey = false; + markup(options.onCtrlEnter); + return options.onCtrlEnter.keepDefault; + } else if (shiftKey === true) { // Enter + Shift + shiftKey = false; + markup(options.onShiftEnter); + return options.onShiftEnter.keepDefault; + } else { // only Enter + markup(options.onEnter); + return options.onEnter.keepDefault; + } + } + if (e.keyCode === 9) { // Tab key + if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. + return false; + } + if (caretOffset !== -1) { + get(); + caretOffset = $$.val().length - caretOffset; + set(caretOffset, 0); + caretOffset = -1; + return false; + } else { + markup(options.onTab); + return options.onTab.keepDefault; + } + } + } + } + + init(); + }); + }; + + $.fn.markItUpRemove = function() { + return this.each(function() { + $$ = $(this).unbind().removeClass('markItUpEditor'); + $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); + } + ); + }; + + $.markItUp = function(settings) { + var options = { target:false }; + $.extend(options, settings); + if (options.target) { + return $(options.target).each(function() { + $(this).focus(); + $(this).trigger('insertion', [options]); + }); + } else { + $('textarea').trigger('insertion', [options]); + } + }; +})(jQuery); diff --git a/markitup/jquery.markitup.pack.js b/markitup/jquery.markitup.pack.js new file mode 100644 index 0000000..f1244c9 --- /dev/null +++ b/markitup/jquery.markitup.pack.js @@ -0,0 +1,9 @@ +// ---------------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// v 1.1.5 +// Dual licensed under the MIT and GPL licenses. +// ---------------------------------------------------------------------------- +// Copyright (C) 2007-2008 Jay Salvat +// http://markitup.jaysalvat.com/ +// ---------------------------------------------------------------------------- +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(3($){$.24.T=3(f,g){E k,v,A,F;v=A=F=7;k={C:\'\',12:\'\',U:\'\',1j:\'\',1A:8,25:\'26\',1k:\'~/2Q/1B.1C\',1b:\'\',27:\'28\',1l:8,1D:\'\',1E:\'\',1F:{},1G:{},1H:{},1I:{},29:[{}]};$.V(k,f,g);2(!k.U){$(\'2R\').1c(3(a,b){1J=$(b).14(0).2S.2T(/(.*)2U\\.2V(\\.2W)?\\.2X$/);2(1J!==2a){k.U=1J[1]}})}4 G.1c(3(){E d,u,15,16,p,H,L,P,17,1m,w,1n,M,18;d=$(G);u=G;15=[];18=7;16=p=0;H=-1;k.1b=1d(k.1b);k.1k=1d(k.1k);3 1d(a,b){2(b){4 a.W(/("|\')~\\//g,"$1"+k.U)}4 a.W(/^~\\//,k.U)}3 2b(){C=\'\';12=\'\';2(k.C){C=\'C="\'+k.C+\'"\'}l 2(d.1K("C")){C=\'C="T\'+(d.1K("C").2c(0,1).2Y())+(d.1K("C").2c(1))+\'"\'}2(k.12){12=\'N="\'+k.12+\'"\'}d.1L(\'\');d.1L(\'\');d.1L(\'\');d.2d("2e");17=$(\'\').2f(d);$(1M(k.29)).1N(17);1m=$(\'\').1O(d);2(k.1l===8&&$.X.32!==8){1l=$(\'\').1O(d).1e("34",3(e){E h=d.2g(),y=e.2h,1o,1p;1o=3(e){d.2i("2g",35.36(20,e.2h+h-y)+"37");4 7};1p=3(e){$("1C").1P("2j",1o).1P("1q",1p);4 7};$("1C").1e("2j",1o).1e("1q",1p)});1m.2k(1l)}d.2l(1Q).38(1Q);d.1e("1R",3(e,a){2(a.1r!==7){14()}2(u===$.T.2m){Y(a)}});d.1f(3(){$.T.2m=G})}3 1M(b){E c=$(\'\'),i=0;$(\'B:2n > Z\',c).2i(\'39\',\'q\');$.1c(b,3(){E a=G,t=\'\',1s,B,j;1s=(a.19)?(a.1S||\'\')+\' [3a+\'+a.19+\']\':(a.1S||\'\');19=(a.19)?\'2o="\'+a.19+\'"\':\'\';2(a.2p){B=$(\'\'+(a.2p||\'\')+\'\').1N(c)}l{i++;2q(j=15.6-1;j>=0;j--){t+=15[j]+"-"}B=$(\'\'+(a.1S||\'\')+\'\').1e("3e",3(){4 7}).2s(3(){4 7}).1q(3(){2(a.2t){3f(a.2t)()}Y(a);4 7}).2n(3(){$(\'> Z\',G).3g();$(D).3h(\'2s\',3(){$(\'Z Z\',17).2u()})},3(){$(\'> Z\',G).2u()}).1N(c);2(a.2v){15.3i(i);$(B).2d(\'3j\').2k(1M(a.2v))}}});15.3k();4 c}3 2w(c){2(c){c=c.3l();c=c.W(/\\(\\!\\(([\\s\\S]*?)\\)\\!\\)/g,3(x,a){E b=a.1T(\'|!|\');2(F===8){4(b[1]!==2x)?b[1]:b[0]}l{4(b[1]===2x)?"":b[0]}});c=c.W(/\\[\\!\\[([\\s\\S]*?)\\]\\!\\]/g,3(x,a){E b=a.1T(\':!:\');2(18===8){4 7}1U=3m(b[0],(b[1])?b[1]:\'\');2(1U===2a){18=8}4 1U});4 c}4""}3 I(a){2($.3n(a)){a=a(P)}4 2w(a)}3 1g(a){J=I(L.J);1a=I(L.1a);Q=I(L.Q);O=I(L.O);2(Q!==""){q=J+Q+O}l 2(m===\'\'&&1a!==\'\'){q=J+1a+O}l{q=J+(a||m)+O}4{q:q,J:J,Q:Q,1a:1a,O:O}}3 Y(a){E b,j,n,i;P=L=a;14();$.V(P,{1t:"",U:k.U,u:u,m:(m||\'\'),p:p,v:v,A:A,F:F});I(k.1D);I(L.1D);2(v===8&&A===8){I(L.3o)}$.V(P,{1t:1});2(v===8&&A===8){R=m.1T(/\\r?\\n/);2q(j=0,n=R.6,i=0;i=9.5&&b==0){4 7}1i=u.2B();1i.3t(8);1i.2C(\'21\',a);1i.3u(\'21\',b);1i.3v()}l 2(u.2D){u.2D(a,a+b)}u.1v=16;u.1f()}3 14(){u.1f();16=u.1v;2(D.m){m=D.m.1Z().2A;2($.X.2z){E a=D.m.1Z(),1w=a.3w();1w.3x(u);p=-1;3y(1w.3z(a)){1w.2C(\'21\');p++}}l{p=u.2E}}l{p=u.2E;m=d.K().1h(p,u.3A)}4 m}3 1B(){2(!w||w.3B){2(k.1j){w=3C.2F(\'\',\'1B\',k.1j)}l{M=$(\'<2G N="3D">\');2(k.25==\'26\'){M.1O(1m)}l{M.2f(17)}w=M[M.6-1].3E||3F[M.6-1]}}l 2(F===8){2(M){M.3G()}w.2H();w=M=7}2(!k.1A){1Y()}}3 1Y(){2(w.D){3H{22=w.D.2I.1v}3I(e){22=0}w.D.2F();w.D.3J(2J());w.D.2H();w.D.2I.1v=22}2(k.1j){w.1f()}}3 2J(){2(k.1b!==\'\'){$.2K({2L:\'3K\',2M:7,2N:k.1b,28:k.27+\'=\'+3L(d.K()),2O:3(a){23=1d(a,1)}})}l{2(!1n){$.2K({2M:7,2N:k.1k,2O:3(a){1n=1d(a,1)}})}23=1n.W(//g,d.K())}4 23}3 1Q(e){A=e.A;F=e.F;v=(!(e.F&&e.v))?e.v:7;2(e.2L===\'2l\'){2(v===8){B=$("a[2o="+3N.3O(e.1x)+"]",17).1y(\'B\');2(B.6!==0){v=7;B.3P(\'1q\');4 7}}2(e.1x===13||e.1x===10){2(v===8){v=7;Y(k.1H);4 k.1H.1z}l 2(A===8){A=7;Y(k.1G);4 k.1G.1z}l{Y(k.1F);4 k.1F.1z}}2(e.1x===9){2(A==8||v==8||F==8){4 7}2(H!==-1){14();H=d.K().6-H;1X(H,0);H=-1;4 7}l{Y(k.1I);4 k.1I.1z}}}}2b()})};$.24.3Q=3(){4 G.1c(3(){$$=$(G).1P().3R(\'2e\');$$.1y(\'z\').1y(\'z.T\').1y(\'z\').Q($$)})};$.T=3(a){E b={1r:7};$.V(b,a);2(b.1r){4 $(b.1r).1c(3(){$(G).1f();$(G).2P(\'1R\',[b])})}l{$(\'u\').2P(\'1R\',[b])}}})(3S);',62,241,'||if|function|return||length|false|true|||||||||||||else|selection||string|caretPosition|block||||textarea|ctrlKey|previewWindow|||div|shiftKey|li|id|document|var|altKey|this|caretOffset|prepare|openWith|val|clicked|iFrame|class|closeWith|hash|replaceWith|lines||markItUp|root|extend|replace|browser|markup|ul||start|nameSpace||get|levels|scrollPosition|header|abort|key|placeHolder|previewParserPath|each|localize|bind|focus|build|substring|range|previewInWindow|previewTemplatePath|resizeHandle|footer|template|mouseMove|mouseUp|mouseup|target|title|line|fixIeBug|scrollTop|rangeCopy|keyCode|parent|keepDefault|previewAutoRefresh|preview|html|beforeInsert|afterInsert|onEnter|onShiftEnter|onCtrlEnter|onTab|miuScript|attr|wrap|dropMenus|appendTo|insertAfter|unbind|keyPressed|insertion|name|split|value|opera|fixOperaBug|set|refreshPreview|createRange||character|sp|phtml|fn|previewPosition|after|previewParserVar|data|markupSet|null|init|substr|addClass|markItUpEditor|insertBefore|height|clientY|css|mousemove|append|keydown|focused|hover|accesskey|separator|for|markItUpButton|click|call|hide|dropMenu|magicMarkups|undefined|insert|msie|text|createTextRange|moveStart|setSelectionRange|selectionStart|open|iframe|close|documentElement|renderPreview|ajax|type|async|url|success|trigger|templates|script|src|match|jquery|markitup|pack|js|toUpperCase|markItUpContainer|markItUpHeader|markItUpFooter|safari|markItUpResizeHandle|mousedown|Math|max|px|keyup|display|Ctrl|markItUpSeparator|className|href|contextmenu|eval|show|one|push|markItUpDropMenu|pop|toString|prompt|isFunction|beforeMultiInsert|trim|join|afterMultiInsert|version|collapse|moveEnd|select|duplicate|moveToElementText|while|inRange|selectionEnd|closed|window|markItUpPreviewFrame|contentWindow|frame|remove|try|catch|write|POST|encodeURIComponent|content|String|fromCharCode|triggerHandler|markItUpRemove|removeClass|jQuery'.split('|'),0,{})) \ No newline at end of file diff --git a/markitup/readme.txt b/markitup/readme.txt new file mode 100644 index 0000000..8e52604 --- /dev/null +++ b/markitup/readme.txt @@ -0,0 +1,62 @@ +markItUp! 1.1.5 + +CHANGE LOG +markItUp! 1.1.5 2009-05-01 +- Modified: http://drupal.org/project/wysiwyg compatibility +- Modified: Alt/Ctrl/Alt+Tab are now disabled + +markItUp! 1.1.4 2008-12-03 +- Fixed: Extra quote deleted line 95 + +markItUp! 1.1.3 2008-09-12 +- Fixed: IE7 preview problem + +markItUp! 1.1.2 2008-07-17 +- Fixed: Quick fix for Opera 9.5 caret position problem after insertion + +markItUp! 1.1.1 2008-06-02 +- Fixed: Key events status are passed to callbacks properly +- Improved: ScrollPosition is kept in the preview when its refreshed + +markItUp! 1.1.0 2008-05-04 +- Modified: Textarea's id is no more moved to the main container +- Modified: NameSpace Span become a Div to remain strict +- Added: Relative path to the script is computed +- Added: Relative path to the script passed to callbacks +- Added: Global instance ID property +- Added: $(element).markItUpRemove() to remove markItUp! +- Added: Resize handle is now optional with resizeHandle property +- Added: Property previewInWindow is added and accept window parameter +- Added: Property previewPosition is added +- Modified: Resize handle is no more displayed in Safari to avoid repetition with the native handle +- Modified: Property previewIframeRefresh become previewAutorefresh +- Modified: Built-in Html Preview call a template file +- Improved: Autorefreshing is now apply for preview in window too +- Improved: Cancel button in prompt window cancel now the whole insertion process +- Improved: Cleaner markItUp! code added to the DOM +- Removed: Depreciated preview properties as previewBaseUrl, previewCharset, previewCssPath, previewBodyId, previewBodyClassName +- Removed: Property previewIframe not longer exists +- Fixed: "Magic markups" works with line feeds +- Fixed: Key events are initialized after insertion +- Fixed: Internet Explorer line feed offset bug +- Fixed: Shortcut keys on Mac OS +- Fixed: Ctrl+click works and doesn't open Mac context menu anymore +- Fixed: Ctrl+click works and doesn't open the page in a new tab anymore +- Fixed: Minor Css modifications + +markItUp! 1.0.3 2008-04-04 +- Fixed: IE7 Preview empty baseurl problem +- Fixed: IE7 external targeted insertion +- Added: Property scrollPosition is passed to callbacks functions + +markItUp! 1.0.2 2008-03-31 +- Fixed: IE7 Html preview problems +- Fixed: Selection is kept if nothing is inserted +- Improved: Code minified + +markItUp! 1.0.1 2008-03-21 +- Removed: Global PlaceHolder +- Modified: Property previewCharset is setted to "utf-8" by default + +markItUp! 1.0.0 2008-03-01 +- First public release diff --git a/markitup/sets/default/images/bold.png b/markitup/sets/default/images/bold.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4aca6df2bc47787f26097e6901fc242d8ce49e GIT binary patch literal 465 zcmV;?0WSWDP)_D!Ahk9 z8+n+J3TPt`8$b}LOw+vGZiZnH=ch}b0>^O{i-l!bm&--dw8>-w4)qF#{GEa4c@W@< zola*uowi!7-EKD+3{I!h*Bju-+0jsj`~6PYN2Ag8dIfvATrx+11W&z|NsA_Y54c= zA2R>Tum3!3jKtaiRNZ>;%g4X}r+M%JxdjKlasB^SWzCIj1k-;Q`1t*A%f2s6EKDrF zpdw6v|Fg0(0R=yP`wLgb_~pwNpuXKVe{8t_SCE78^T)r{j$C4V%s|1{U;eco`NqS+ z^yc&5KzU|&JuZ+9KtKHa{cpqFKa$+cFF*cCGh!9tVf+UM!dwh#x~xD!2`;8J*MI%| z{TC<*auN&Ee;;Yahp&DLurN(I{O#rYKM>nrefl%)_;;Y-qgOxu6@iXr06FR5!-o*x zeER;sZ|`4bUXCwse|83eoV0q@Qq4PySYO>`6cHD8iWTY{(#VkxrOjtEAiHLtYzm02AECE!^#E1ikdn8{ydGz@Y&QHv&@82=re$FE790#%imy?7&GniO8Zfu?T v_Z84KX%X)@alc%kIOD5VuSiO*009O7PwnbgsAG?S00000NkvXXu0mjf$NLL& literal 0 HcmV?d00001 diff --git a/markitup/sets/default/images/image.png b/markitup/sets/default/images/image.png new file mode 100644 index 0000000000000000000000000000000000000000..9e34afb0c1e601aee3c1b84d9ba1ef553e428b07 GIT binary patch literal 497 zcmVlwNpEMC;OS2C{jxgm4w&m@EOx-00000NkvXXu0mjfY2?(U literal 0 HcmV?d00001 diff --git a/markitup/sets/default/images/italic.png b/markitup/sets/default/images/italic.png new file mode 100644 index 0000000000000000000000000000000000000000..08f4d9f473c78eeb274cde6c8d6aa87ceccce5ef GIT binary patch literal 380 zcmV-?0fYXDP)^x6JQP81Pxr}^t z1bVc-w~vrGjzhj!`OD;lzcP@pIF6GfnWl+zu4!5j1jOX0WJL2k51>$<@B4`Uy6lqy ze(x&ly6(CTIIimw;I08aq{_53P4|7bEDLc6K+K(i#2}(5igjI0)0F#zH;Qo_A3bTB zrfpjY>$*M+1Ko{e{%&HHWe_tAgHGg*3)DlZV9oP_utHa a3ornw&I|fZ2pAgx0000U?4*& zhF=DhQi_40m>A->m@qdtQD**u3=E_s$;_iX5_uKE{noj=cE0qj!M$g%z4qgry~X{0 z7eZ*7rYMT01E%2v%#cRK>HU6F3TYq#5FG8w1S*=RIi?)Up(Fc^tMtX8Y6d_JF_&u6pQL`*K1yI!x$ z<#I3>SS*%AB4IQdSF2UO--nsaW=$rOIGs-2Znx9v6bgk_tA#oqk0%@sLx)o9^%}Wh zf{(>w(P&g&XgD0&Y_`kgQZAPtk4HYAhcBH@r&1}HrBcc3^+GTjjnKS$JRThm$7C`= zZ`EoQ@s&yiZurn1Zdt3ahr>b6AruOsOCh-$aZpXD?#^Z6kQoG$o1$2dOi^ZbP=ffDpd_L!S(Y$$fv@C|d zP!%0CZw}xw<5_tF$gAQ9ibl@t=a=ItqYR+Z%u>ql<%3MF20#nLdj;mZ2mu}b3NQdC W!AGVauxD2Q0000+$REflIp<#JrGKZtp@-5-3cVHrg&qtgrjW!|f)mM>YOS;%ozUNAs!~d!zX5wfh{<4#|NTX!lxKtS@N$|l!8lrqhhk(?^gL?sZHH6{ zF}zCO?Daj*!`MRqi$Ws7tB+rYyIWlf=WH%q*Zc70u0WF+9z?xs-%h!bw^RSe&sIZi zQ?&B#FcLzm(vnJn2(bu8B^gJZYuEXevKbegy6(nWI6QB*osN{qbVUs*90|cp-8lAL zGEbQ(O3t~;UDwT-zv2_68&aTOGr(R0z!NT+s0z;J6)Pndkj0gff)Z_)v4F^$3{C*> z(CRF2Dr7SWjtPvNd=>;w-?9i&7|Jw5nx?9TgQUQEdO40;-l)+eF6P;7BOZrgYXca} zAd)1Z#_oH7-R=837iXvK;0g<27pv==$AK3LDUBZ8Gz`y38ca^$2dpi2^J?uG2t6Og zpR)IIDr?!FjXhM)zZQ6~`_`na7s>B@;*Gv{UY{IU_G0R_3ZfbC@-q;A8y4$qE{|JR zX#jklcove?%iccHZ05Gd??_j3UQ(^5?qR*_pMJZTWTn#5)T1jOP+(Nl^ED!lV_e7m m$fYzkz-EzLym^Q}0t^5Qq8W=3enI*G0000?Ra6NOUxWU=R{_oWJ6;u_CZS z__#Cc{m5QMSx(tv^=9t9H*-6q5keyWj;3jxb9n<6Lck4QA=CjuO0mV?6V50Lol>d- zgpgz?3uT`8G=SAY2aoz+SP}3#p^le&90M%shT?-`kDl!Q+`$MZ z5(z5kspUxT^g_nKQRp+cUDqY-?$hqa{@%XC;4tTm@J>WTY`gfQ=&mkifqg$KiJ~~R z^nAJAICILS4yTNB>%^%#wa>4=guMZ1jYb28Kp1(KTa3pCIOQhN61(zdZ%h;FU1OVL?w1Y0000u!x|6G+L(c z0v1+U36et43)qPl2&C``sq8HTs~kWJ$pOShEK(}ih$4akLj;M@Psg3jW|#en$^3j@ z=FPk(Zns-1hR5R}gh>4bDoOYxQol3tP`cmm@QBB3vK+>%5=+Tmuh-dZRwxvF-#;FY z`~BW9j3|njmPUXNS-`TaTrO9sROMimNuD8PN!3?R?{@C*=&M9bJG~Y^E?(H91I4o>xN;7VT#3Kr_(8y%T)Sk zw%hG$wVKc8@s%GAhs|cQUa#SBvfuCbdcBu`Q$Y~OvP{0?IJRwLBvn<1!y$9h0NRno zPNvf-`Hes&F>ZirNMCEzv3pJ$>c`%eJ|0Qj;Jab(9&$^ZZW07*qo IM6N<$f?=20ZU6uP literal 0 HcmV?d00001 diff --git a/markitup/sets/default/images_orginalpng/bold.png b/markitup/sets/default/images_orginalpng/bold.png new file mode 100644 index 0000000000000000000000000000000000000000..889ae80e37b6167cc15f2a89e05a183815ec18b2 GIT binary patch literal 304 zcmV-00nh%4P)b^}|6b=Y6y(;Y{!a!g z@UQp#@Aw}>L3(}s|7f5BUjeuKZvQRjV<2U7yvu*H{aAbvQ6K!@3oKzW z-{Qa8d3gae1^)HE{~f^!v<1}u>;4xnKvUpW540I-w9J3a{{r=B3T*2g{_BH1CtaZO zpZ`6V0*V5g1e5i;`_=Z#_e=H*@8|93RG@lX;D!K7TKswwko8{x0000LlS^n5Q5c2KWM*m}YV3eAws|yDY&wl?DsIf8f*>k% z<*Hc~7ec_5rHi-`yO3f)SBkFeMi8|t(GpA*#H3ciSWBp+c{r^&PVFO&3C&}i$+#MA zZCZ-`mgm3cyWAfxp=la+gJD~$f3lF*v;Jqx`Q8T$Z@WYD zo5ULg-eG}Z89L0f4Zd=*mecc6xt8;=w2x)zu;*%)sVnHZF8Gfgv50&V?aO?Vg=C`G zqt8;QwVsqD3w#sp>uk4(?#r`&eMV@ShR&fc4IOUt64yxY7gl5?KAAs}zQf1Y-^2&g z$Gu&9-`V$(R7R2uQ}2HsoE!1T1^`G5aq_1Rg+NBCRv6kqwQ}ZBXMdtuFS`d*&78wH z%FqTXD^)8WCsqSp-l}5wzGHH~3TMv4``ZJRQO3=(w6oCI`;E z`gMDg;9p*xrm`moLYyi48W1M{s};+X6Y)q)IQvrJsBPN-$Qt1?9(Dn}gMTvW8Vj;U zv~1YHR;Z*VmZrvRmZz6cE&o6XK(RnVCGj2D!Cx>lhwjfzzEPx#2?dhIYK}l!BvcK! z3)ER+Jz{0oSgT$J*kO*Aq9I~CW*s{G*(t$KS{OS+#aO%?udUme<*TTEO`Fr@r_QT zk=#}u-n~>Vm!+9S1PE{@3<)G~CPb<$Za;W?3+O}|+q)?*Pn355=}S(XIZmEANjZci zf5 zj<%@MX^bD1^BwlS^+AD|$dm-1wial0hwPI;CDM?Y9SXW#@w-UF0SQ8OgplRTleOB2 zUjkDS|0U9pI|lSN*EvXUa~*UIclJdZ#)Npbwh9>YT?Z;=B8|l&^t~P~om?<5Lre$+ z;%`P>SL7`djY#8Y9$wv9dv|3p)C#5QQ<|d}62BjvZR2H60wE-$B^mK6y(Kw&{<9vg>Q9!g~ne(gm zmj4swoA@7?D86%i^8WzK9JM17E&sp&Z#dpHfz$E-U9ks&4?Z9Gyg!%0k2Q{M-Tz#> z2OnD>vrPZ*#{EHKLq)>Jcx{H|Ovdb&|4aQZWSipI{El%e^Cxx{^9vSw28s;a3IDB= TS1%U=TF&6<>gTe~DWM4fm>N^1 literal 0 HcmV?d00001 diff --git a/markitup/sets/default/images_orginalpng/link.png b/markitup/sets/default/images_orginalpng/link.png new file mode 100644 index 0000000000000000000000000000000000000000..25eacb7c2524142262d68bf729c5e2b61adfd6d4 GIT binary patch literal 343 zcmV-d0jU0oP)$`dXYaZs9=SbAto%g@>T~?_bH&lTUn@`uo|1bXE{eSR(AO)ESb=V4`uk}mK|39Px&03WLbv~pzk+s7D@lK^ zn+aB+sp)&Y_x-B3>;6ywU--WQNUr<8>TU0P-|L#1U&;A)67w(+> pDf@fM7q9#F25QXo3rUI;002ro52U44e~JJA002ovPDHLkV1l;_q@Mr) literal 0 HcmV?d00001 diff --git a/markitup/sets/default/images_orginalpng/picture.png b/markitup/sets/default/images_orginalpng/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..4a158fef7e0da8fd19525f574f2c4966443866cf GIT binary patch literal 606 zcmV-k0-^nhP)Q2rnAt>LM%-F zK|rtwgcU)}7x~z1Hrcs5bH*ZO$!>xO8K#?==bZPQ_ecnV>#P`H`QzGaRhd62G_&rC zTLU$c7_x*nFP_dW#Q+*);mMHE?j)HexK784D4x9l_tfpz2$@1y}9rkF+ zI+J5NMWeZyObc!d+rUc=>D+uOdAOg#%+Ej6h+wn5^xPmVVH*Eu446Y0A_@ zo$rlds-+sL10DbHs{AQG2a)rMyf zFQK~pm1x3+7!nu%-M`k}``c>^00{o_1pjWJUTfl8mg=3qGEl8H@}^@w`VUx0_$uy4 z2FhRqKX}xI*?Tv1DJd8z#F#0c%*~rM30HE1@2o5m~}ZyoWhqv>ql{V z1ZGE0lgcoK^lx+eqc*rAX1Ky;Xx3U%u#zG!m-;eD1Qsn@kf3|F9qz~|95=&g3(7!X zB}JAT>RU;a%vaNOGnJ%e1=K6eAh43c(QN8RQ6~GP%O}Jju$~Ld*%`mO1pC#5QQ<|d}62BjvZR2H60wE-%c@9E+gqH#X?$N2_%qkv$?&V++! z-fX$@sb%KG-5a$|R8J4(Tcmu7`G0cYgxS-++3#dN^zA^J(=P8r|6lx9G_LLaZ+v5S z!d9iC@)!RP{FnQmdw#}3Ee(C$|NPA#|L6YmR@fBO9w|C7oMMQ$vc`Tu(RETvC<`(>OPJ!ieM-fH~m>7>j\n'}, + onCtrlEnter: {keepDefault:false, openWith:'\n

      ', closeWith:'

      '}, + onTab: {keepDefault:false, replaceWith:' '}, + markupSet: [ + {name:'Bold', key:'B', openWith:'(!(|!|)!)', closeWith:'(!(|!|)!)' }, + {name:'Italic', key:'I', openWith:'(!(|!|)!)', closeWith:'(!(|!|)!)' }, + {name:'Stroke through', key:'S', openWith:'', closeWith:'' }, + {separator:'---------------' }, + {name:'Picture', key:'P', replaceWith:'[![Alternative text]!]' }, + {name:'Link', key:'L', openWith:'', closeWith:'', placeHolder:'Your text to link...' }, + {separator:'---------------' }, + {name:'Clean', className:'clean', replaceWith:function(markitup) { return markitup.selection.replace(/<(.*?)>/g, "") } }, + {name:'Preview', className:'preview', call:'preview'} + ] +} \ No newline at end of file diff --git a/markitup/sets/default/style.css b/markitup/sets/default/style.css new file mode 100644 index 0000000..26cb927 --- /dev/null +++ b/markitup/sets/default/style.css @@ -0,0 +1,27 @@ +/* ------------------------------------------------------------------- +// markItUp! +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp .markItUpButton1 a { + background-image:url(images/bold.png); +} +.markItUp .markItUpButton2 a { + background-image:url(images/italic.png); +} +.markItUp .markItUpButton3 a { + background-image:url(images/stroke.png); +} + +.markItUp .markItUpButton4 a { + background-image:url(images/picture.png); +} +.markItUp .markItUpButton5 a { + background-image:url(images/link.png); +} + +.markItUp .markItUpButton6 a { + background-image:url(images/clean.png); +} +.markItUp .preview a { + background-image:url(images/preview.png); +} \ No newline at end of file diff --git a/markitup/skins/markitup/images/bg-container.png b/markitup/skins/markitup/images/bg-container.png new file mode 100644 index 0000000000000000000000000000000000000000..a28e0188aa0ef2cefe9b65b815a6c6c97b89feb1 GIT binary patch literal 28455 zcmb@u2UJtfw=fD8kRqr^k*cB;X;P$%B z4k5JA6H*_)|9AiQzW3Js*8A3ach){ulrhW#MW~qG4g_>g;H3WoPkF(azP{%h}c5?V)7-rwQ*X)WR>W28Q0*2e9hf zA;G5aEfmcsAz_ntwAa(U;(@8L*MeeVuhsf&qV-&)n~2|N z$5FOi>**%-;S&x8o#gv_f8zD{;XULxD6;5`26s}uz0n{qVvm8o#LK*K64LLCJz-X5 zuf&+ss!BU5D=W$3%p?wbD@I2@m1{@?+2VRV+e@V@e`$@o*}{;GnEPrB|j z{b0XAX`@BX?u@yvv2S#FuO^DM`m}oeLo2O7>~ZCk%IO=H7<=s<@67FpR|-^~yV^VD z≀|{c$i2n-fXUK}JNk@K}LetuB)J#?n`kX|=rysCBD_ABcC~chKV%uVm>`)EH-O z?ENi#w&+`sLCqfCwej5hGc}kwq*xr$017TU<6aUJTHp@K-0Gz1NVwf8K(iX_N@3$g z@%-y}uvAzabqEDFmzW3NZ4K`0nO}bv<@0{Z6gAi2yya+o&7yJX!wXY`utx!Z9y#98 zjk%w89g}^1{^oPJv7X3@;0oheiSz;6xBM@l*+K;moL(uqoyc7Rj<+YGRyQ!(U=(JTX(jxPKP=uu$ZsKh zLgz493pB`X9)N5c#A>7BiTq!#U>gD$g#W#AhLjUd z2lHoX2vTOJhRlRHBbc5jWa<4g`NUhK31<_EP@SP^`;2O_&;G2ApF$RAi&)$}I`hh! zshiib7b#ziRE$w2nu_;FUOS_kMcj&uB(Zu={jfr4CzS)Q`#{ktGyli?;TeI)fA46D zBkwE!Vj$5oX}l&c@HvmIl|B!>;NJR`$=W#N_9f7NrNiqlan zMuQW*!`BzS?sxx<<6mW>T@Z|%d9Nu?So4nfdA(gYMxzkt4m9snn>6M9cx}ya3HQwU z%61&* zAJ}>O-6s;;sc4q({HJQT7)__|97@-1d{&D9mfPN6r=%o0{5r#C*4NoH%<^U+QR{C6i6JCX3C_-j~PjTGHN2`Rto?=S2#= zHskpZZr`O;EU#s%G21Ysysawo!+J-g&LJ#yWUMBGSM=K7m=5lAkqhA*JgX#trj1_d z(nIl6VXt<%==}i&s{E2=MunvOem!+c&QXfTvA&eC47AsSjC)=`@rZq5D4S&ucH|0v zFg$$u!S|$Jx907|C*N89z!A%yj5?7l6u+UGh|PWp)(sBa{m>s4@K9zA9Cj`@u!|72 zih3*d8{c*i>1lScb)R&PLT{92DcJV`VRJ9TOGZtM9Z3BR!DHVe&6 z#FM4cS8jBYJQ*)!*6!zcD~;yfOnT(r85q7stE`-Fxm1$^rS-xp2e#}exiN;x08y}B3JmfgIh2`_)M za7^{TITm9g2#^L^##01ZJfzFZWzNw&;?X$N$)xt{ww~3s(^gRyyl zc55@%i~I{mxGQRoo$DVGZFYa6N&4NsW!$GJo{Jl+;w>=e&`jXw2he^#j?m^Q(A6C_ zL_UAn%BDGj6TMd9^Hw#mH#kuK0j9UiK0g{glw)-93oXwHDA~!Oi%olgRlD0|??e+nr+lbA2 z0LmQTwwE~%yXO9?2-SnIOluM91D-HVnp=*)*h@uj8KFy*JHAzgj#K;Ols!rzOBwcc zbn2LUjY)w@}>*PUN!3Eo(a|3D$sVDbC*47M{U z@f^@Jej&V%iPh-(`wrs@~}N|7A2kHgT6WDNzKK$R*LEZt2@OV+Yl1PaM>dF^Sa2u z8QbXtq)3%ga1*2l)i_HaQQfU5YpbmkxqbfV>CGkESY3c6NX`2vN^qQAdUDZ{YbpA@ zpLynIZgj@P^3wrFt;iZBTbJf%iNK6_El)~qQ*EUHwGg(I2qHKHEh@DyXsu&DSqh+b zTz~t6a^&bEI1qEAP|T)pd#HAl;z4Z)uT!$t0ApnM+hLOp&E*Id*%dm~Kk4BsKA%E$ zp25FQmyUGwtk`JYL$BH*WGie0_NKd#!QawTok4UqQ$(l zntQt0FBMSzNSqv-uw7iPK<-qydX~nu%DO&SSk1DE@iQxyV71F&5%cGRve8?*5x?gY z4@`ZRlK>l*;|pJ^Ei0P)vya10H9b>jQ-b(A+n$XQPhknaMTE_jl!{cb9O z#@T;s=$_;~Q_f!}m;SR9AG2KIM9N5WI|(eijy4rHvcgG?=Qb3sg`Ll}H|4rLjCS6( z>gb>$TRL9%crGp{c#t3CE5MwEDr^t)Z;|hx|FU(T$8D@9bZW9h){C#(LgHuTQILMr zrHUuOF@WKlh@hRrC20`c#~C3l134G6!@Fx_qN0O;-C6eq2e~B9h=kX&aHK$Ae-Zt* z%5h)6OnZk%A}qNq)$*o%P=S<8gARK77E@dQ7=?~re}!sIG!J*MCz_>$Zf<*74)8b& zNZE`P8yB`?6G!$|98sFYS&bJ3E%Ma88Q^@tI!SdMkm#;SXWyj$o;sdEw}(NuWJWM} zW>*XmuNgjlP`geYrNSp0X({oS5x4$bqp9f2h}}nxYU7DHfmhXxi{lK7aV%{?A3Moq zB=S+bCgeYnCl7S2-Wy)hPtAZ#73`6=Bn0p992`jlY939Q%HY=%sR~TePT4j*Mpb=S zGA`Feg4iood2!EhcA=AZWx;7Le#{;U$U%4-X_SO2Ro5~{LyK2Qt)M zZFrj>H}pUGBEMG8$05|ku+^7sBe`w1UusvReEQve*I4Roxz?_xrcWM6AWVM4_x!aM zb}=fdi&QSt&@5zmA9Z-#RRiOGLAFIpsp_*4ozhGVW%NWZkTPe#m z7md|51(TAD2YKVNXTEl^%~Sf}VCvXKP2TtvR{0YO%Cy}&bdmCCv z%xBJ-+|d#t&m`u!vyXFAufI2B`feuOy|hvUoFA1Z4Y1$*9aVzRt^6rT*SoHV{!cDNC}G9aH^3{Z4oL~`knbXoWroUQ7X$FJmZ?70*M?=l6|65R5MmQ|FXMPtQdx1Pawv1z_#;P1 zg_YCB55bye-mq)VWaf-sO3QQ9*GgGD#-g53iF@EQYF0a@B{1*5-dym^X8y?_%d}o~ z|Atk}djs3;S1W|l)?Fcsef?W`jE{nXJSExMiv+W*uR$L^&Q&d9O?cgP#CcB6=#ijL z+V+%$^{XcXjQG4g0uU{cT?ps!)@G|Hj}p+e0H1~$+&t$BXST;Mp??mKO7_3S=;;@5 zVLs?$z8#w_{o)$u<|)n*VUCul_$fC1S7z`pffjRNcyQyxi1YoKTQa0S>liCC8@QN) z?lQduX}bwneBhXxuLMkOR-(sP&X!)8B$qXZ>Z4w?)>(ah`<|Bw{1Rw8S5nFB#BWB& z(>zmUSRa^}XfHo0T5;oPV@`hAXBAa;U^UmW4i`(nSR*iQ73oywBeColy8R-&keNJr zAo}r@0U+bs{R=20PMsPeIXGg~xYW)f;pKS@wP${M@QhtxzBgzy*mVR3i$O~yi+Kfx z6?ANOseX}{cg$6sXCGJdrb*^v%#iygPXDug`4W_dp#!b#IS0oHW0`yCC z5U?MdWk-e~%s8xfqJ>AY?wfa?S}z|} zZ7}J8)*2_i893ByyeTeD?lYD%AW$8lnzr9mwW`?ff#95hbzfhViv z-*Mro&2|iByLF|zrD!b&4}nwfKg|_QJ74#uG#VPqp_)B75xPYpKsw~rzilJuXTsT1 zI0OlKf*Ay6q?|UytvXe^HOC6S4k`4MznFYF(yB5QEdUaJ0z7%9W7(5x|4MDVvWJsM zql}|Otvu$X<}LB>DRQ|6lO$iV79zvklJ-$y0Nup?8TO>?g}0;Uftsy25M%NR$d zJqMBoDiCZ?_)1Jei-ykmCR<#F=+AHRiu3Cy)xAr)#H z&1$>`mY@2;KO#Lwmm%@=glq5sT2H+ikAaye8~a+Ty~GN&2EqG`6xCN%JT(-`E{jPl zQ>zqge*b6sUJl{$DXK29n1e(s?b7e57RX3;q=VrLyDZ*%6PY55zvJC9yu$Ynx&E^F ztu17V3I0ygKUvK!o4X%P@LN|{|Mx6^6Vq*E%0B-2Z0i-$KNR}!i@#VtgzF!euQkZ1YUTbw1e%H=m=W-S%o*mxn%92mNltSNohkvw( zz52PU2YsN16j_lXMT9oFb#71(F(-8{ygb0IaN6P0V$5-QRy%gC?d$&4vAcc$7{Z`!71 z;A1PH5&U)J_E&hp;A^e@+xyvuEn9 z(T2!Q$n>gsi+z54vQ844%TEd`zRL#*Jq-#lByhWK5x?0wbT-Sih;(DvOg19j?_92W zq5bI=8Rrp@5I)%-ww0?Z{YD(Tv7L_QU7|_?n-L=YOcZ`M>Je8u)9W`f;z6e5tA2|U z^v@otoj@3!ayw`bIr8Xs>=y6+L}!8{6CUddNZC?cdj0COB`UrN7{k5aKvjYiH ze`4DD(?Zf%lG)_!!J}0O8K)tnxLwfUbVoRSr;%=Acw?I6mD=N*0Yz`$g+n=g&9Wgl z`Hw4ELETS{%GC_5&AMdJI5Pxy>_mYh;LAcx1BMS#y2E+9zr|U^3}Li`-ZwM~@qM$# ziKB;BS^HxwKI(BDAc`w$fB`2diC_T!+4^KSw2Gpf4}?KQ63>GMWQCMoI`FnaG$<%* zE72yAZ&J(TV)E`nVwqGDIVTKf4KumU%~ZVKEDRhXGj7D3l{u=^ zs+CVjef&D*x$a6( zc?Z|YbQli06pRRDfkOiRy^=#u5#qgb8_LvAEvp407wIEHWVsQc(A=WwUBxw-zb#&8 z-%iIPEb{1jLnbMDW6^){V{}SV;5N3`#KgXxN^U>LAor@JR+e10!_~A9h;@%ui&i6l z1EU02wcA%(VVIkfy5D*;81-wVYUI2;Y67X0N7V!lVA>_VcZW)DtlIkAe^Bq8yzt{| z?8mro``hEPf7}K2i*%@V$4iw2*h)F?f310K*c4WyWy^f4AazS+^QNr{(eXMxpmZ@z zlo;mr`etE4l8O5|P564CU^3ST;agua!-#;*kk2&MU$($yU4Pa;(X~{gZ>(j|bIQ`<|fk@jPmVq*?9aQ$yFl^k(DW^Brdic9Rv{<3e(zyd-teCGCnr ztji7Y3xQMd{u2xXc!&ICH3@W(;(gOTIGXQC7oSQX$c#fB)Crhn@NN-Yg5TUKRPW=a z?=k-2b&(FwGu633D#RCgs`9PlGF9W{-c4OANEGJyZAAzH@@2tZixXrNG>U6fhm_w_ zOF*8Gfd@C(dKRke0xo3BWe;#Q?49>~gOIxOD}@!@19?&F%eWSJqM}9NwOSXW#jh0; z5q$!seADgql6>XyH^qPWA$x|It#f_FLjJmT?`~%3TV5dHuc}nZgo=h`gDekA!h6O? zuurY`<-Yp0>dk(ZFy~s>%rW@+B2>ypd1rn8*4a1HNTy$6T)qk~0s!3BLBnFq*0sYP zXA$9>MjNwsMk1Ho)nghD*l;Y%U!xeTsc4o0~7uMTg)*ec3rb4^wo(72e| zs$r8}=`|~H0@)WE7v1b>6ihS}MIT}0BPQS9TOgP#S`uDUH#ewCpYB%A$5)`$g7%)$ zZK5Um9^bt?|DD5DlLGG&xI+FQZQZVj17$+_S^2J4Q;abj_I?f6Admtj-ce)@Iv;I=I&jt^YQTg(x8f z`HQ$G+eU8={iMA2>#e3nimUxml}133!t%JQfpe5r>+=Zp*p`QhDt@hA5>ET9vAtjk zrgdat51=|%rHoDakYYrzJ*xxG`9VU6;en(^IYLYeW9c!m`$F;EenZI)drYsi|87k0 zeBrd+#G@RVvIX0o2MkHeMjKAUg1B4Ro{BieBgracuk-vDb&Z_;(;685=4kPsUQ$^F zWS$hWVS6xQ9A||B;P#tQW79eY(z_Ng>r}>Spj_Q-t zKCFq8lU<5iA|v&i<$4o$ynWFU-h}+^7pag$A8wl1sfoIkb#Ul@Y!SQSc|2*61~@>) z9zDUfvp=v%n!1y6>Gh2Frl;%74`W%GA6TTvj{DfXsM>AuoHh?KZf&kUrR^mqLUixN zH_AAAWheA6PT?Mt2`H z=HaVQM@CvQ)ZrgQb|a}VAVjm7i|gz2yzW@fl27b+p2&oMdeZ9Mn*(bCp^k33?|l-Q zb@80|A?s_PO@`+i(kkP2oNQ{a(@*+kEKu(FV%jyV_nSSqDA@W0Uux8C5$McfC6(c! z;&z!PmI_h{xJ;W$4OHw0VD9G0}=ctG`{E_N_|YchgS@PhqSGGi12s zONPWzBUG@+TBK{Xh|4c$d&wKQNu97D})h3{W2>sPl1j#ww=q=q3V*k zOpl(}T^#UaY#ZvGpCst=br#R=()N02^PRtbL&+!7MA5>5= zvb9ti6T7p5pwhOPohBzmzj%g*BHQ?#Z?6*E$tG)<92WKdBuEZ2{-I<#I||}%Tcfc* zQkhvvr!cl`-m95-&>T!!wm62a( zi;cp^$B6D64h>N>8}U545w9|jNrms5H+{c--|))i{^_bMdYI8GFEdDo`2Wkr{2vcr zd6&nVZ~uKseWPm#Xxh#fuDUAA{O!4Q^2$qCgX8p-W!+JBx=ci#0<(y7IOsM=oLGCA zTX7M9Oh4=c;r?6Dg8zdx?ZV17iATo~|64%dpayUsPj%D=knrC^@hQ;Q6gDlq^uMV9 zom+W`J^cS9;(eKA3kUJ|zXf0pac6BXYoJH=;togPvt4;WRkEqIH9r+32(Z{7Pr5|6ob zV+ynQPw-ah01*ib$i6rZB3moBeym^G+T7*QTDLQ#${a!{Ma_5E;ti!rsk^bkZP4|L zqf|n3YeVd`GdHMG$?&!xAP_e@Gp$NEBszdFX9(De^GXLEcd|7E!u+^ktgkxZeI_)z z#RN~##G6#kL#yYVFOxiTjP2f=Pgh$&RY!9OLeiHY0`3wfey&9nXilb%mlF91gzFLd z?`OaW4vc5^qfdd2bo1A?ST6QA%|%YoRXdwd;my~edg=tXdU}-6X5WidK!4P>(?DK4Sv=DI~y=CtB*N&R_)?=OER>xsF@-EwvquAUQ%WGt`%u9=L+%|>z@Tb+3 zJI+7!4HF*N&HN8udMhyXtt2V^h7}V}orRD_CrcQ1lU@53@$*XWZ$mo=pUI)yw#qq2 zsTUossi@N&9CY?L&OgitjPmICE7+cbBZd)98B7RgwHDCspRpQTcrV04H{+%~f-?si zk9h(dHNCv90e3EpHi^UccknL=9jwe3rJXc#tm`bi99#($=Wqk^21JbVH$P-?=-7v6 zpHa=)zI({I?|Boh1Fxe^y0C3zo2N#-24^sw9PZC$m<_IYoRw?@R}!y#d}?3qa0JE% z_?bqJ2?q8DjCq=)h^jJs-f-t(Th)ubGb7W)<=Q>a%Lc@C!TmDcj5TK$kbEi*k^~G` z0le(PzRT?#T}eOT7Qm5gP7V-x+6@zc&l%qASG-0pM7F9tHg{1Q&!7$>vhfZzt?`)xFBi_aVIUfL;i zzwz|N&UXY6{%!zNL^Sj~Ix8yHVq@Vwc#N&Kd_KxL@hTpuGEXQE5kpz@ckg-wR{4 z0Nn#R{6(3`Z=|f;^|Y@jpKa%?T)kq3H8%c`mslq%D{2NKUtnoy{$qbsZsl-k3F_i% z{H(^8mA&N*dTf1ykrmt+1b@it+BM@5^&LKeUhH^K=63ybSl|AKygW^~OXHjNJk2B}{<&`6QC)t&OV2k~K_t@`DV~;vW7T=KsTG!L1 zyc@Z{JyUVvGa3q~WNQa5e@y_z1u!+_Z)G#TyM%ik^fV;QdkzCvwtinN*`eMX5rg9{ z-!CK`3AhNQ0#|B}o7A-e zqO;>nA=UfW^(R02`(Z_~(}`m*Xz{npBPuG%J2ieu*xHo}>G3OUM0g zdBCPiAyJo57o(npzSDP0wgw2lC+qYhZoJCr5%CW|4h3J5J!uo~1Ib)&^p%~t;ZQq- z#s8eH{8qh(qBBf-K+BO!*xfH|-tY$Cb68XxBPa0%cx4ssyWKY)ml0wKG5uLvlkZJq zhS_xpKWWQLp&jevp@Z36RuiQIIdXpvP0kgVkvinr(e^mOUocBm)&61x8}>m18%<>H zF91CWPO)hRtrze_aqD5%qLpzxY$8KqCHC85Q0wSR-}QWuI)I>U+i z17~dxIO>RFsD@|2KG)bZlwlxL1nS(QNl2Z`9lVkTx&$dAEYK>}q70r6KRKKUUmRF* zyssQ3ezEV^`HpBzTv8>3;^PBH-2^x8&0qJ)9w){-hKS8IXe}Nf>HS}`6DzE6;1d*D z2#%g3PbYMJd_hkFo=Elp7FjFJingp)HMFO(K4+5rY zA&qND-e&eiCsVCftm`tH8Ot!L_H%e(*yF}SKaMZk&FhyUQeHvg$*j{tV}h)?z5<>H z(pWxxAF<%HM#FE}FpV7_hgCIdu6mEE7~HM@@!@G>^zDO*LI2J3Vc zlv4|;@5{H-rB4LP9OCIN-D2U3R+)k9p2w@2jalJua^Mor1dZTjEPS5QlRnlmXK2Zx zfS-W~;*x)8V+~(-!g8o4K?+o`y3`qv;`h22%;`>6g-C~aAI5J?SGdK!8-UnXMeCMx z7#w8bgr?!G9;$NAyVOc}$dPQ+bgMcyv7qKuz5GO)cJqyCjrii{a+{ot6I=E4y&Jwc zLREaT?Z$qw87pipu18DqXBw48FqfZ!YdglRtbTDmQEdg4CnG-06qYypeP2O}m(N(N#0k?!&S)B0umA$*ncUo ziNXJK3M?xxbtv0+I+uque!n>-^pKV+1?%caI76ML7 z>-zAViJC0r-_a@%hdJNdfME!{b{MKZ#*1w8H z{4Yq4!I^iPN=*vKi9!{ruwF2xPReiJP1PbIz$`U4R0h zP>Hes7een4okulaGsp(h<0!Qi$UP2#5irB_)Z2#oP}0tO!eQS|yb_{(_c(8>cMQkb!+hp;1y;XFUwEFz@f1K8F( z8)oGQipCGGniv>Xex@@Y_4+hlGehvGQIPK-q1ntDWHkkE$EiE>8JqM7Tokj}w<0%h zTU{7}!jU5wo`5BM+^+bc%M$)c2WKtNcT7AL@p|&th#g};@}duTqK?~oFd|X;XhU>g z%Uma5ESJ>d9J%ZKV1+f4Jp*Bkkpmaey4x4^M`6(#oy3G*u=FJsFh2w z-$#AI?i_vYj7xglpI@VuJ5B43$VX+p4P~~^MoUjP^i6ylamJT*O0TwNIPfWI06M+zX-@nGyqggB%Owh@?zL;!oA}|{j;wdA<8F$d+A$k+3i4Q8`&m3 zK6Z;{mfQN6$rIVms97@at-D<4&PmJZrzt74lDLA;z6a?p=F7nG(O{e=CW1Av%nsoo62P- z>S=-hB6w75BD^5_6Ybdx@KQY__5t`pkG%K-Lci<0%AD*~<*#eQSczTin#@fG@#W4S zcxxL+Wgalr?GG!GZZXu>$w+(O#_r7y^r6;yg}!U)j#By5?CE2Y{-IuEdDQy)Ag_V7 zD7RN-GCaXn$u=Wa4yj70H2cr7N%^?K!AOzr(b%;a5LJ!H6>z(5Ylt->2FWuaiNm;Rz3z*HHgiQ;0sR3To33 z?vfmGBw2Ad4TGx`0LXLr(h81WZtW-2e#tmv)#=GyJMCApB)m^6#pRrs^p+0qVq)9= zvgr5HmG7_QG~O^Bp12f3OCJz-2BD%>aG8NJY1`LQ{cm$(`p=O5N``?cX@@Yc2W28< zdom|BzOt|S;u2OOZTI)h5g@q3-AhdI5Tnl+J{CGb0Qaodp2$_@)PB>?m_BFo5tRc! zWFe*)pNX3vV4LTOqNe(I^P$6iBi9xXffUvb(cYg$$ zFU{@+p={BK7zAD`8_l(Cc|T(0FMBSm>C;p0uOLCN$NaCBpne0-D`$wlLiSmUFufnLD!8$`m{rdI=_dfCFrKY#I7gSd|Z!S5{3}`Lh0d@I2dDGyxh)b}AJl z4#7A$NTKW3j9Rhm!_(4V@e|ND^tNRemL0aTQB=bhB78MXL5FkGcp~?nVLg4dcstm| zX*SmnOzyhl0e|e(Bs-yJe>N(Z!G30v=USN3;k3n~wTeYf1N8Uf(&+*%!#VYU1;>1q zdtjdnq+grPgruA!D+LxgHIO;&BryHO2 z$(NPHXo}%z9&>D{o0Gp`fSxUvx0&VMSrWhE0Y0>$?~?v^_jpAU%}Lo=J>Nzom2B4_ zk&`b#XhYvi^7ZK3Pv+1;1RPoG&>U9iG;UTi3kC z5XRVYjCa)@jZz7+ei#FZT`?uDR0C~g&iUa^D--S4=bgPITTCl!CtxXrD(K2b5Q^A; zxBOZ0s=J zU`KYqW;-c7twCBQ_wCIjNoJDcO0Ij#lJ33#=-X0Nvp{Y_8oPF%S!@4GQEb)Cj|?47 zPXZZ^0?IpR`kZ%sQ$(4L$J1{+s%=p1lx=wG_l^=w&06j1G+Stwx0(#uUR|_u)}g#( z_mayH*AliruME2XJ>O@ga-oW;l_oEMKo#W1Zu>r+30-lyEj}}w&98x&RqaUk{2tvGtc>$Z046KB zKOI4)XEGIw=VO$aZ9@`$fxgPj04Sws;m$*m5qhRHGDbQGskDm!(OIyM2Y|CWOQrZ z9+N3_(Vl(oKqcBEzJt%YSlzVj9&&W%E0Watm02A8_o0lO(%bx6U^WTDbHA#ZVMaz4 z#c<~Hweg`dL);V1Ltz$p-FG?Zl_Kp!gAIC8ut#ozY+c_&S*|i1WLH$J%!f|?R}+&E z5xvd=2(ufORQ4!t(YP&KzFm>R>~TctYYc;>1oVp zmjNNywML}fX>QrUnK&CWTioYg?bzU))o_h_-R0wc#lerssG&pGoDbHZ{atIDY9f8y zjyUCW@)8H%#9X&m%jPw0WlX;hX(zlTs%Q2a3!WY72gDp!ysdnC`hc&!2_j!fSB`@$ zn8PU==W_#9Oz=7vu)u125RS~}7nIYyk@(q}Jn)T={uXU#rCBKk{NV+$0Q@Dog?x(v zYu|hr?pzO)E@Yh^s>Bb-_tDfhA9~FVkb^35xkGyZ;G~)-bW8eG1K~74LAtSj)V$1z zmCtXS;6dz`+pju>>@K?I)n=hwMv^*)YfS+F;*iyN025z38VB8C_E&EUJzrlve||x1 z6~+<%QBe;=9q^5j)ZwXNNWRF)}BCWn$~gCL<*}N zjD{Tsju`(gu-78q!Wv%M?JHT*2ln!A++zDHAPc7P`q?Ikj}vtn4oIQh0E4(aOFfRf zo)}aomOC*gjeD-0@YJ~0wEQ79RlbNtiu`K-t}A2M6g5b+k2Z&@jYE@9D#$9UEO-c>~a|&(m7s zuI1{ve5=&Ofndbztpu8tWQ1&1Hxdo1Fy?~F;XpRTSY!V%B8v7L<@Ve6P#ezsKxt=d zXRfO>!0$aQbX2sgHp5Ax=QDxv3)b)yGU{cs<$i%|Qh<0tFISBF+F>#wsL*QS2M6H4 zrRKjUxqs}5Bh=bmzwtTjSwdGJ9kKkPy|!;+#qRD0XY~u8ZvYSHU)?KqCN2^CYN!4I z#9K&`30kZKctF?FLuy0`b#VM^zY1dcr-Soi4gqN7hkkZGsyOlTJD(22u-^%vVOgpP zSI6GClq+*I+}StgIqWO==CnwzWYN%nav;z}&OE<^#HX}Fqjm8ZJ~u}?(uYc|+U$$7 zCy=@qBR}fOiELy2izcd}K6RS&<^ft&ht{ymiLp;{(H?;bqgU)AB(APD`dkg!^U3 z{>IBdcO{lloODYWt`zRKwd4^zNZ6Gibrg=G-^tK1UC}no;V^)+h+uUqW4C-wp+&yA z6K)(i_=JH4nCMuKsVAHv;jnaZ$=hoJe6}P#p9YxsiM;Cd{A1ehPd@+H^J-_fI&kUp zUncGk@&6$cH#5R<@A;jZrvDEg&3B+U+EUg*d9KpZ9=~2aB>%X6g|8_2tt#(7 zH#`i5LJ{`%>{UZoLTcF4)Uo#v=DPa1OHLA7r>Aa232QdQL^j*j`d-$^8&v*0nOk1@SLsM8a zIAcV?i2cOUVepjS_-C$Owh@bRt6s;|-_bN=T@nut4vu2K2V5QD=u_tmc$M|AZDKw9 zLJ0>pU>lNXOG_|A1pt!lCcrH<0&rIJ4k6cWo479%09IE;|K5Lhz}2TWsErcE>n(Fu zovoCx*%B*{R5>_iE*)qdvRiNBxsh^_GiYGwNV+oue(4l+P;GIsx1V*^?k~XG(0aYtGUUCt!$Jxu#;5x_FiVUIygnb%+V)C0?U7d)BL2ketXq&wJk^wW$Z#2cCwuowUJeTq^^ zYd*sTm8=0u0R&(V@d4<95bwF3-TojJElM1CM;G|H9h05rcMa{U zSA6!WQOgW^GWdHOK!>UYy5;!94fqKjsYxfqWm5ZO}&x zx7so_Y~rQi7QJ8AKf>!?_~oEQQ9N-eAt3wXM~>W%gW$P-Vu48RsbGJg@eFT((#mMd z$GGu#3XAGha2S3L+m-p{PwH-p#Z*XhAyxu@GA_XcMZpz)&Y#b}T!~U=p#z?RQ<_or zYM<=dU&?iyLH=Vv{%cg4YRKIE9}fvKn;hY3v7hH;VzaND^Sb{fgo;A{hlJ3~nqA0; z`(ZldE_caY?l8LC`6p4`7EIOn^ARzU0v;@%rG?$oa2VD7&tvNUncx_AVTE@fwct`i z^u$eQ&%rv`O|yCZ8XQvzx&JS#@9a`m8T z2?!zP(7a*K&p>J~cgr^?0NXnUX)&9`54m+9&51C$PvATdwoeSOUhqAHAr~6(m|+wg zf`?RL*kPzL)XU0gFKo8LbS@jr{y&Mrp#J%2!2el5zXVcVmN&hfe`a&_odL%GV(-+^ zRRyH~XO;Z#v99($1n@QO^UPc%D)Zlq`1?3P`3b{=tC%z4-IIF{B4VPWqht6pKswm$ zLogU|IYpfM{@x7%(D#E;{1!yE3hHgc1H{23^R)>Ay)eZO;RW5-zL@shv?o~!4eUPs z$hI0xd55%tl4T71q|0k5X|DQP*YSwI8}3-%nIt7^=@s9!i)cfKgBJb$RqvdaYdnbO zM;6Uhd_WY%y}U&|{zCJZ>s1oLO>QPR3(L@Sv)2y7yg2#0rzsP(w0u+c3p|I4KAMju z&r_|m<%i9s82TpwT4c|;9LmI+;#3^@2#0%4@m_}uN{n%?J-^X08LOnSI;9~l6tv^_ zDfp_=YC@Hh0;nr`*rfSa`W`q*<4@MjFT4%(59u%dW(%-Rvx|J`ck zt)p(lym57YyOU#Ds3`+0juT^(4I~Mrs$-Xs(A{MT?pxDbntrVVTbnsJ-779h_Rv^G z`NhRzU-Ul}eEm~%Ad-s7UYd!*K1;K+%`sSNmKF!U_N>?=Sii?#q$F(asmwU?Zg5r^ zTa&5cnguM87fMz7R^h3#q2+T8+v~l6Ry41WyWOWGoAmQ(it(m*VSvFw){=We3PU|7 z8@%+XQ?j)D2=NOyv7WU~(9DZ0-_?&tz``G@97n4cCM>cKv{*HsYH{*NY>KZ+7cC!@%XUKODJgec!`D7zJ}p64c>HF{km_I)2QTj7 zN}v>?f=r*Sd6J>PDOq5SfH308mmDopITAd``#$r%Xe#17o`St z>E(i!Xy>1Lg}nc6=c}maO%{CT?Aw#O!BzI!7m`^Djq#2rXo}CTv@(vTV3_5gGB7J3 zkdPR*wYWMPme4|mcrAsgU#AG8nkl>{sb5j1#!4gK?OFHv;~uR#)y@`NzU>+^$fxRN zJ{6ojMyAk_@iUdS;MC2BY3L2)8~bDWKf7Lpe0`$ApFcsOXNx6W$q6ZmlHPmzouR6O zxMsI|asO8{Ul|l<(=3Vw7I#T-2o~JkJvb5EHMqMk8r&_oCO8Cl3GTMIyZd6xUhw`yvptEZ>Cr=NLhW@@^-04E|_H@FUfaWIq=;0ewo#Pt3~5YpJw;Bvi1uyOEQsd z?Q|j-8F(O{+?HBkA;uBD8BzGXa&`>(BetrsI#8p81OLRf8xRM-{d9V;)5bQgi@0>< z;U9Nh={DiGuB@GpDngCWj}8ou+K`Y=MNThbNDgYD^;{75b=eh_csfGWI>Pt3b;gV@@eNtWjugv=yEjPQJk(Z#M!LyHO{-(5WOMk7Sm>tXb&hjCqhUzy9|kp z2C9ErzX|LI+KQN_$p;?3*u30a(J7-Fg_`!|%W^i;M2EIfmobPQv`xH!1M5sqvW^UI zz%7hhd#Xh;AfZmpY)$1TtI9lShVw$TZ(h+2=-H&1|H(X&$VtX~G`TZ6$TzFRpZ+#* z;``h0OvL2}I|d)@1m%LdAN!>VB>HPYN#{*$I{og)&uaG3N3wK)F|5u;ITlUw_=M5` zj$I}%_-XbfLYF{dfdp&C{+a#pZp6H?QTe(N6hC~HuAM;8<6^}W|EwcUR|ZEyBS_&I2TE*>g*b3!q|6Tp9LP$Qt^%xBR7R{DeTD z<>LUbBkMb4$W6$?D`q?D0O6A25(;3K`QT`q&McUSE`Jq`2g8dl3cp6SrE)^A<%GUy zYBqo}F(iXHOo+aljy(N1RRm3O`m-RHf<->kZFDj)u$*^LBtq1W1;dn=+*HL0jU<*j z(FQ~|OJ5H6SHey^I$oSC@H!9&iZ%fUqt+D45#zvrXfOs#-UkX|ZncS$LDb5fh@yGw z98}?X4cm;;Lz@oug@ciTAw%l>4F-gvx9N2ZwgtfhB3)9P)MPycXl({`==<_7J)}bw zu9#zylHJ41>d|&sX4_T4b+r@Mwv%_#7vl&PXP(%T>%*PIB>IS#saj6@}ltgO1P6$I=DF zpGT#K(EFlp*dy1T3g{h_mn`#?$XMFA*Mzo-MNND4d-JrY8l;P&!8V{v9}`cn5=~mx z<=?G07XW+R^7jTtFcz3QHUBk6*nE%iwm&6`) zQRQo4Aq&&VheF0lfqWN@2Snbj>9*m-imZOY&9QHRJ(Mr815Z$vZHe>BjfJUEapBVJ z`~9{Wt@IHzA1{QP3jy;8V(Ol9e|yVj4o$1T`++ujANKi$Z=AT|^ga(IZdm5*f8cS8 z=FycE0>U#CyT;1iEwSVr&m4M18Yrh z`+W=FNdl@?!h}0wksZ6z^3n&tA$j;BC;^w3U_;?0bL;_%L97eRk5tM8k6fWL`KX$s zeZ8H}y|WIAr^{4sxiKD1V$FLmt(@Ha3q=lI9Q1ANNexvv$d#F#_4A&ZxDF9+ag`MjG=QH6~# zDiAA{41cIe>*Qd-GY5aAgWClj5>h;kjS8}r1_pX%Gd}+!Jy#;G>4+35RqV7L5RPgcRdB$V4fM8}wcRAs_bor@<5*6D?tn1`f>RRaFd*_vfC0M*G*w$KxcT>;N zpd$_qL-Cd|tF~o7UxSVEMul5-??8fAgw6@Zk@A+(zK`F3@pv>@y6>H2%Rvo{$+la) zi?}|e#eQ6J{UgThEO~$@Iag!*lYJ+a2(h!st zlDmuEfJgJbY$Ku-{FvwiLskWUXIPBloGbbn(d+G2tx-x?xgF3?nO_auk{5I~-{>}8 zOYFY!O%QjL1FPp1=3*m`!@V*fN&)i85OWdRE$PS*Wp!bilsR)IIoDK>v<4XC34Mo7xGVf~^7#Gw^syz5> zJC}@iqPQE!(Wc)ntBpq`dFrl(tB0kL>)z&)RgleLgfImZ5l>aB45HNjxMgd$d~pjK zdA(sI2$Bi6oZl*ar76O_17{BZ3U_)gf$7@m;mVRDLMP>O+F6`MR5*za81iU26(_k7 z80J7>jkDkM>I{2W(l285DgJ<#iX-+EB0#;e#e`kf7{yQ z5nf!kus0BU6m9tt!aUc1tJO!DZ4M;G#K@* z+&AQF2gG!FMChu!xMjdj>uY~JT{Y6BhaDyx)J|8GPKiB+o>8!W&sZyXlV=&T0nR${ zL}UYhf{9b49Q4E(Q-fE<9L>f$rB)Z4siEbnGRon{f}`UYg3a!W+-Q);FP9$R(;T{& zcbe-%;VQ*V`QVuiF(#kzj~r>6dB;i}f$mYgI<+F$&!PTm&tH+Sw_9)LH&u8iPV+6# z6X(*t#9ZqGN~{rX&|5Q#woB-DI&ztc!gDx?!k$446Ou?^0s6%_!Bi48PLcK(u1$tV zn(&8NW1cfY2|ieeZY~~q9gIW$ZN|_^nVHa0%ju`XW~{iNg_9-587t?DK8L8_Ccrw4 z5bawRZ%)yu0zkQsG9rTmFSc>|ES&$@_MzykQQ@~8DcpJu8-RZT0c>9TMYv{a4qTV^ zl8B(|eHKHZwLLrowZ`V)*ryD;N)z>VkDDZKoi1lhH}=AEe(nftgYtLfYzl`&x7|eF zu^Z;nd6z`8VLm(Lafd}VE&eXFdB<7w>6vOF>qzmeJzO*HC}cmYOlOnZ_Ac)p1FfY~ z4Mv#C)%PyG-(e!{gGaRS-CRV=*>>tS^*1HPx(BgVZOS<0m&S=oKdX&tt)$g*e4_Zg z-_!5OM7h5w=h`B=9Jz+;QH0UNh{b?cLj*9mEcup!O=)?pF0LnpoLz#CDC6-eh3w+2 zPLZ7m9qDgSi2Jc8)IV@{y>4kEC*M|Rt*8;S$T$RA-fIKsjVes{#MVXVyil_75Q9OA zSmjl9<;!q{$6*aW+j+F(rn>li42k=BR;l22qcmaJ*9`(Nz24Aap`Xbx{{**A#XgBv zKWgg3U7?B#h_VCnkpve;Em;+avcF2u-6EkqyQ$dWkiVTkkoj~K)HZ~6i`ZXyRDC|W zrsgedZONP7MX0n})#a|K_TccW>vletIIhA9ZD9Fxw{+Qzauco0**GSrpnfrA^Iai@ zD$|h^^D2ofLSJJAq0Ta}josblfowY$)lv)zuB3d5^TG^=oaaT^CnbTfq5Ef~yrAb< z?6oL4JfDjWB2ed$G9LA@sQx_@`FN#bMWa~?RqPwD;$0f~wNUXR>y=SLZ1o)*N>0~D zzKx|oPu%rmQCx#;jX#I&3_x*X$?4m}Ta^b&C$G+6qx?edPc>t9^Qi@O;n>tYctQ{^ zPS4mC9;#pXxzp;9qp6#9pk!c>8p3WTtw@tjY#TL-1dQC+K>ND4Tb|j*8<4e1FX;1- zjU#>R7diNgv3ko`OtjY3BtEPbCNY=l`n$p2xgf=5ZwJ8dx5>}s5v&UzMii-{@k|Xo z(a6vJbF7)T&QN7XQy^2uQX)*<6D;=DI8+cR!B8LG6de|Pl6t9m$x}k{A34}N)DhnX z_6}{J&s7lk%PVpea#6{|_l?L; z`YD$#eX-z9epC8*J_6O%5WS^_i~^9m4o*I-yA9FdgkXJ?Y4WUHDk${Eeq5pKAlmc+ zP3~RsS}?uTV^v7i>zwSKldUrdjHO3y+ zL{X!rz87Up&SW<-|D-9`UV%6qae)yJ93BzH6M+(Cn3^Xd!0yxX)cHR@x9dy$<9|%C zjl{wGb?CA-=v^e4TA$fIDp?L^V%UDR$Tl3}M#fFr+v6d$1H9Jd*Me(Yg_>+WfhKo+ z*_YUOs6f9d=VPyPj`@#FZ3O62(4N@ksJeyZlpEk^^-%k`C+=c-8u$k&3FJ@N1*zhO z$nMXyJj5qJ3e2gVxBj+1mj2`!Xr?6S`BZur6CmjFaWmjcGmDXRnT4^jI|o;JbTK3i z*k#4sOreJHYqSSO#WaO^9$~&)K>0f!vZ-uI>PV5&;!Dxx?mak99{KCNtZ<#iy+0+a z6VG9$`;;8#bq!G~!PB$@)g>utIg$_!wmC1TfZBrRgGUiR`9)>$xwW@kT&0jkT84zu_ek)%H8bdrwf@0GDk5iUrzHp^?Mr9*0gAQ{JvLaF$I%|PE}I3SC=oCj3dfE zCt71#&*?Ed5G&$TCwTTLc6@8D`^Rr|nnQ1&&4IcCD`u5zZD5KOzh+hbjNNJW)Ai`s zI+Q!|P+Hy?KD9g}2eaFO%k$8KyKrs_etYL)r6tc)ZFORlFM2f1z!fiQkZ|9}LgxWP&QyO53NtUEXjOUHD@@76 zpvotRQS0yvM25)IBtvjWDlrG%<1P&*_)N8FK=(CtJG(SB_;bsT}(X& zNNz&!6%C{M1NlmBj}J{PoIh`gVk+_YGNHj4WMw2$kf-PdSud6&tlekZxQqweR5|BH z3fNL{fVR0CjbY7n^#Hn8Xd{^`JKi2f>x%Zxk!mykHmdFlywN9zuZ+%$B4G55nC8e0 zUTlo%XS>+LL@zs!frzKq7!#a{q`|9E`n>tecLEn!AtP(R-d_C{SLgDH3`dD(z7O5e z2bKY{9#Q1gS}(7&v*m^ZD*2syef}cE0e6sMd<0a8YY2FLrEC1A`03SBq1dTX zqI%{^-d}k>1bx~O3d>wvHcO9YW6Gs0TR<28J+jczwtpA0lXn-T&;-b_E&O4d)!n}y z-Rl&Y)&BZMBAHlGnDN}k5rG0A2m8-&QUiM(=-&U9i5uw@qn!3;%O?C9j9sjy@pGZa z-mHS@=Xbhak#ck`onXU#CkXra*3tn!kUC@Rb$zOTN_n@6g{##PyY8Q$EkQbI+2@nu zQQIhYEr!mstmXAhgWM+AT@AMz4Vz@sH^|cwlhApi;-rq!u&j>U&yzZzS%qj7buRwb zU1OenzGgBw&UStT8_&P(1?jSM)N|r8aOyV4=luBto4r_mAhF(ZVuU`up(-Z!u;Xc2 z574cl!pyu8_He@Oj4ne(Tv#IDi7X1Z8sxBZE}8g|8l|li3vE6-JGKPsn7qebgRVZ+ zdq&t2a2)9VmG(4*0d4jtaM4c8!TvmYzgBN`)SI*1tw8|w5rb&pu|9OIS1bNt%>09q z#`&~C7%d&jM{72_qKNz|sV0wu*e8F~Bwbdy#Ffz@DYQ*j_;E)}?G)XmC|Snc7& zPPpnB@ZAdEo-X$%-($%Z5{%={T+FWi$ckMafSpVxB8#fJu;io*?5ga!Pijm=9Pn-< z!Go>IAR`kLocEK-y;C^j>h+ON|yS+%_w}$P8+Shi5U-8 z@@npn-S6ZjX0U^q4gmbzL%5rzu#twxkR>Jd9J6T;6TlgbhssBTUuYZ9HRfpKE|>UE!&Dq%4VRfp4Tahkm=b2*w62yx__gEv(`_N z{7Ua4=J2e+F$1o}xb}Wc$Q>w`Dywc+i!c@uWrmF)Y5eH%W;UWa@Yf-aYm#Lw_&!7MpH$!-H(IzVReDztO-fR$;v7p zn<$?&gfBc3)l+=9e~0ixjRqDnc3vHBM8MB!Ecv);>@+Y!B0p<$iEEHC!)>5;oehz| zF`Dyc8%8q)UoC*UtLx)!hKL{Z+wZ_1fpL@9Y4SpG)>)?*Jq_sLi-p_z`JX@@89I>% zNVW6M7y%WsQiM&L1YO(op)iaQsZ`Ph&2@5i^P%DfnVY&Y)u`GJ?Tc?|rbme*6Z)n_ z*PvX6^$6wV?pYu*1MfxNJQ5O|W-O|kRkkv%Q^d8v7X{##R!6i3= zbG1P-((q1%^XWAw<&G*H_tBdyuZ<6PHQ%{O0Ffr5`BvmP&|RXW@+9*t-un7fQ3Zpk zcdA)abW9Y^+Vu9H(S72NdJ}b-X^sw(5}quB6HYvV-S>a4hjo!n6j%w7M@qD0XIq!z zUP7aBro3oPsL(zP&@-)1`L945Jx`@`9O*MWkNo)Q)VQ9snE|0) z2ngyJTe%D~Gq_-Hz$bnF;c##O-uDHUv9sT-%23CzYiR-l9qvYwgIlyEL8i@U2f=77U|KJ`ywKu&@0Zv2+JHTDeE{3 z$!&W0;byEJ;IG-_=o`?dA=t*y^4T9g2k6)wYTeKLTtDeA+eKAm@siazxkAv*k4;SK z8dU8a;6Ddw839u?=nF*12cTjVF58-1;f5EAvc-$p4#|MXq2O(!^X-g3)iz|hg*yB} zCQlqZ*IQpO{Lz$n%$ZugU$u?E&}9-9Vuv7ROHR&Ta@~Iuk^CXD)Erwf-hFPaXG1$DXs1ylgHHJoDR9pu2CY4r)(ezWDP+iOz% z^8wp8DLS@`KO~WY!;ZMk3F)8Fl;(Hl7nQ%kcgARGPI^q1;uh`A372r8c=pK=sl*HI zWV88X#P0i(;Bwv+jbZ^tb)a_=$O8VR?D16Eiz@FK6+FP-MiYe3ozr$dHoXMQS`>#5 zqP_83|E8nvMHfocmVwkSi=RzhR!|{*0=AeYdYdI?U35CyZTw9?~zsJ-FX@ zM-7mgd0Vf96uwDtuW4?;Cq&~z27}9IaFQP3fTMcN9vZTJ7Oe5oWn;SzOiTQ3F3Ob+ zX=@c|zZwn1Of)E%O>(1niY0wg+7PtP7H}Aw_pc?#*dmEGn19%GwpxgBbk}3WWc^B6s=_S z-w{PzTRe=Eu}QvSey(9w)g~@klCzH+x2i0EwCEuoP*6;4Zac`UUX&MytzSb^W~HFR zo)|ugxV^C|lG6(#GVpr<8^FJspc1Rwgs)V+;7GP6--0}oZQ~9X4X*fe>X+kp_gBH~ ztq74>?iEz5Ty<;nv9DLvjx)&)HA9^@-YRv82rVXqc2#=G@C}T~-pk$<`)zA;A&@xw7~o>r!X*!?FD2r9icO;}C+!oGXJRM+NrIb%f2&&C`N zFGBCZ{U1!a+V%i;*5JA%128Bq`J!wR+)3>%#VCO#luo%d@cfCj%>oMF8*6yapH#u3 zkEE9q+nbZ#FL^r3D3X4{c@AVuegom|Kh`Tmbj%71?sF)%qC;`2;;(O$ks2&#@Do7W zKEQ3sN#&QdT{%hg;7BNXU>0>oOmQ-jrSf$9QWxl8B&d#w30JoN`tH{U{6R=DDxRZD zOZeEFhyoRjrtU*Ju|r-yWm_^ci*Em&XzFL5;JDjRQAG(uIZ&&rFUKI#VPAhd7|&AK z*9M56Z4j38Y<BEOy-Z~?5XsA2mD_Fpv@~i>&_R;B_`5eiKy)Hk0)=5&&)N${F8Do%-Oy$4l_9%*3 z(XfInp;ISO+9@-7sV4L-CE;!%cPn67Y}IzJeU^@5Lh6C-ei%3wtt;|A)K~W}m0B$l z{*9ns3u6{5LPL`mi z^j(9Ri3~U!*;?i`Lyu%RP4xH4_EPy=`LEmRlZm&Q!qobGG(@Gc5EL{GMMjH7u+UEkDU?e!)nLr(zf9 zmLcR^rJ!e(!&ZUUfeJZ@YE>kaZ8F<1- zGx9;}|5iFWCKB0_<8g@x~sn;*lG9wy<` zo-?JW`~3k}GczJ^?;wp#HdUs&$cBtFOj)q#=3aoc>$=qRQ%wJZtHg3eR3OllYE8um$}WhZ^$yA(rI8V5UQ zs{U=n*ZOcH3yty()tI_k$LRL`vWdZj2~_wo0_P-hQU9KXWU*ZfDu!RDzxIDR>&}0^ z+Pd*xgFPxU=d=Jv*uzb|OpxkhxeMqYw^6|)uX;BV{W7Jl!zZGg2zA-;{mEq4@2Mf9 z;0B283D!));YtDe2t7qhFe2n0RQB+Ne-n;n7W@sU(?sSbu@PqVusOPpaZgU!1(Vv< z>77uZyxm~@v^>+syP^4VZFKHs}|?c{iXR37x4$H((>~fd|%II zpl}vy;as%?q+@tbc>jAGfNWgf<57ZOBo<7#wxr-uRx%@Yp%ZsCE}z~pt0kdF@cCEq zR(2dxdh9;*aZ17Q%@7ORW_y6@{IWYSw5@kWTvqocL!)ORGH_vw|6v=x$@(}w>wfL3Z80&>fs>BiDMfA=#eAp z0zpcbj2WMP_!U+)H&nH~JU^EQ`X9Gkxzn89LZ9Z(&(HgA{BGzDpgtnFGf&7*{=U96 z#bDe!=<~Cp;yK+3^zt%3ZB1nXdg<~0FTQjAJmL@%3|U`a|A&6vuJM&Y&&x>de{}1z z{L{^wsbuUW`iOh;8lWNnmrv)a-9Pl_Zms{&KS4y;+jFX+n+|gSh_(zO~5ba+v z{@&gSfARhTSvY^y@`f7Nw(D2@!`t^YJorV07cAP!4|TnM1}Q=99^Gd;GhbG3&Wrtd zA+3k&{~bzaV&D0%UjKF}6!;7No3T*;v;POvees1J1-eGgv{po zCF%>^_|yTS?M8RY061J1n0f6X+#UD_iwhwYKsXfDdE9iP#aIVVbF<@o2e~I~0cH@2 z(ZkqwP7I$fkBao>RZa}-=7;^NzY8qjV?g9z%m>(CXs-=a78e#qj9P3O=6~0uV)3u= zKXn(o*lUWw|Lpw_{6Ca18x$13UI#m1VSRaRU`XERGW~5~KEtn!2hesQJ)^P<$rupu P{l&>kD@#>M7zX_>Y$iK| literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor-bbcode.png b/markitup/skins/markitup/images/bg-editor-bbcode.png new file mode 100644 index 0000000000000000000000000000000000000000..39cdbd832bfc3ab8d3dc1d00ef45298ed6b06c25 GIT binary patch literal 1642 zcmeAS@N?(olHy`uVBq!ia0y~yV15B)pWt8ul3!Y5B!Coiv6E*A2M5RPhyD+MT+RZI z$YKTtZXpn6ymYtj4^U9P#5JNMI6tkVJh3R1!8b9vC_gtfB{NaMEwd=KJijQrSixdz z#-$3NQZbNH=c3falFa-(g^b+fH8Q=U1+?g}A&6w0wS4*Vjo*Q$h(N5^ zdlu+0hQlj?dfvUuyS4i3*RTJ~fFgg+tl$BfHKRP_*b-hKmpOK^(e~}zC(BDqOMhO& z$iVO{C4>#=Iu1}cDBNLWP;j_U;` zkknkTvA2hW?*VXFWLV#ejgP4;k3yjVM z&Oo=D*31DWU|29spFSNqn7}bna#yRku+Z@5#=U!O&r2~dB>07HKlNoRFc@a^21>%h z0pi;

      ?i$Qwcb98o&x3poNUX)t=u!e^wUuN&|Pa}YFDaLwi*~qJjcOt^+Iau&n>%mTmLMqswC=M+$Y0jvU?IH6(pkMZ)!lb#(0i|Ni}ZvVZa7#hL!V zr2P;nX@iqUKbP0l+XkKOrq?L literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor-dotclear.png b/markitup/skins/markitup/images/bg-editor-dotclear.png new file mode 100644 index 0000000000000000000000000000000000000000..b3188dcd5625c7c0a137ee1315a0e6ccf755fb20 GIT binary patch literal 1682 zcmd^<>rdNd6vt1C8{LIVw#m(Lc{5zdfNn#_Hc}|1796rFWe7!A2wlNh+flH!P}(qs zY$R4kx-bOGrjZQ|mkjBaIAGKSk<@|UFq_p?KoM3JV9h490!i@dx;Ii#$C~ z0kCZc^`d=mt#;yJP&xP2a!#4Ju)I|ER+OMrDhB4^_ydXY%tP%tnMRBVp(3(nr^=Ou zWny3#%ZkKNFO-&vm9nzaisRQKvj8?d%1C1iRLyp4|FQWuLxyY(oXxk{@|;~S@7^tV z82Rwzr>!+L$${Kpwy&=*TV0!4>zJ5+M>^gdUog4r9{=M-v!&&;BP^C{6M*ynoWWqY zdwPxcXf*c!^@dbxPj)0wz7&!iyiaE+0T}$AslL8G)=iaK z-Bgh9%mGU-Uead%M1v@u+!u5pb;pbk)?%uC7tT?c_o@?D9#wwTy9Egj6Ky0<6m=tI zWoc>2s?_WCGs!*O-TU>+SS`Eph7Y6w(RS~I7(k~@8*}3snA?SYl`7R<_hpO4awz~$ zG9^QlTat0KH)g!#uBd4yw0=K8S2{PK&85-v@@XLY@QZIzr6(n^+ciZw_fkDbr4e*? zcK)JKYPBa_9HCISoEQMWk9>*K;6D$MfYbbYM!$^3mn!E5(TwL55%NK1AuE+5; z)z$u<%4EVyDic?n&Z@HR{{H?C2+vD|_|0271U9QDL0+Bc)f!5hTUsi9R>kIbc+J-afssPY*1n$st${y!gT;kx+@J=)ZSqYjY4%}VP?71jI$B!UcS literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor-html.png b/markitup/skins/markitup/images/bg-editor-html.png new file mode 100644 index 0000000000000000000000000000000000000000..11bff456808bf9f846ae0af5b4b0a7c3cfc020fc GIT binary patch literal 1534 zcmeAS@N?(olHy`uVBq!ia0y~yV15B)pWt8ul3!Y5B!Coiv6E*A2M5RPhyD+MT+RZI z$YKTtZXpn6ymYtj4^U9P#5JNMI6tkVJh3R1!8b9vC_gtfB{NaMEwd=KJijQrSixdz z#-$3NQZbNH=c3falFa-(g^6968`{@d_u)A# zSPitA#bPQWLqo&EmoGElNir}r2%3S6*sx6+Xk0>Z*xt}*|Nhne;(z=8eSI}BViGKu z8-c7Sod8nx3h0J|2M@L#2O1Yvs0H*b;~|h|)#jeMbN6m<-Em7^28Nuz_F$l|4y**( z=3_P0(#Gb_7a5?ZxxiK_fZUmI>F~!JO4Z;h68)l_J*dN0=l;0ERqYrVFV768D9!sef|3NMR{L;|8+xt28Im~ zQ+#gi@P9aUB9L#n`XBQ$eRXy9+4F!th&Tv#C?YrwUOo(g*aQyJgo?__nP{%LdiClT z`CmUjKi}TY$iOgdb0ILm8$9!;&O9_b9Tbdh*RNlHd4J!YJ%9cbR8{SoSqXHl>YP&y z3=ZJ9X|Uf@Sbh;0KlPIlQCR>EPUKLiuKvA#e{4*Q&;Ny+H*YRI19Ys;$9D5~`-{H< z_0E1A0t_Oiw(sA+?*v-P;C2I)jF93!yBZYV8!QnbEH;^DfgaO!ANCNrs z&?%fm4C$FzJKp;2$bK@)N9Saz`{|^z`zkv z9`dZexw(120WcUph)RRR1Q5EfNPagw4>WOhGT8P*vJ4DNEeOqhl`met%=|F(@ZrPq z{LBmtYs_A)HA=4d%)`Kt)3?|N=!gv!m6bEWZfgKr>QirTJ4UYieZvySlr( z+sgsn9&t8M5@`1aD-R$k@s)o@Uw{ApUoRd$Ok5Snz|gSXLJMdGMi7zAv|6=zsH#eU>59p7Gu=>(i63~ojP zEoeBqu@E(|=YaVLvmdMg1`rF@cmewv$r<283UTr2l~_UzVfll#p!9?usuqX<2OD(& z9GV-@90*RbI(Bw;$XN*yH3&d{w^BkBf O89ZJ6T-G@yGywn>7PO22 literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor-markdown.png b/markitup/skins/markitup/images/bg-editor-markdown.png new file mode 100644 index 0000000000000000000000000000000000000000..c1997152233017b54827cc41e07d0a2870c3ddba GIT binary patch literal 1783 zcmds1`%hD682)Gxk;zK7F_25kE+ojZ70Wh?a;ZpB!d=R6p$r-=f(#0!P}maMm@RTC zb0(`(Afp*k3L$z*w?BU_bQhIp2A|_kG^y zdEPHSJoLDwg`EXL$TIMR|4D?%26*l=C&9Y(E!P(Q$Qgct9CLH?kw;-Vc-@zF;`0oI zUV8)kne>n4uEQox#6Bg86eNhmJRu*2@Jl6F4A@pr5 z^q7#(6D0{!oj6G;eB|ayXE5n*9#v7nWeAyt1o|K4WS7p21qC^Tyk(}V^$p-QT8*B| zv&qwa`2LG{$)$pZyaEruPd}>bdiM)fkKYwGV<7fU@JP!uuNw(f*FC#`Y_FU;mz+H9 zi;ym5IwUMi97{&1SK;CAK9FgN5R2?6M##Lkq_}uWZHAEIs6Z&Jo3=wpYNpB0&#y@a zpmyupOcRK8|J@NGlKCt`R*LATK~=p#+ahmG%*x7gScWjNp^=PO2oHKtba$zzr$^&= z5TQ1=!`Km4+Fm3@=Z_#{>QbCe{}XWhdc1Qh@!WV3cRxaIr}}O( zoJYOj$jl*ESWT)*N=gW9cv0yuJy09XR5nLFF&fqD>^W^KtqC-XcPnQ=?Y7MCG0>@; zgxuVg`OWC)Xuazmgls#Mkloa3)C4)P#+0%{a3cFXhtNF$G=Pur&3m_R`{_67bb4nr zhUCh3SOYIlJbF-ASh!&0Sqiq9=}X`0PuU{b9N$52xcK5)oMUJ#m+OFoQmJG3FA8Fy zg2MY%onUQ$f4}P5;^N}GHMFw-y8d{DZ7sRWCS_D45-lyL z)at`eZ7}L^TPYGdG;{ZR0!B=b&YB|@iyt>rD3mzr(9qCuC6KFxu_AaNk;F1Q;T8@wQUd;8Xz z$xXN>WMhA{luo6&g0DMqE|m82$+gvaeRuo#__%@g`a( z_^(Y!IeWHZon7WDp%N2uAriAs!~x7%9GbAKk`R4@y(h9!8U1}Jt#%JW^>#KPSF2e@SaCzIwtUhJ%on=Nx z(k`Y_aTD*jM*g)ixVV_{@DnI$xm(`dsCQg6IFSEn@c$GljZ1o-Pw9SYp$C#sAUo8* I#xMT--?jQjjsO4v literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor-textile.png b/markitup/skins/markitup/images/bg-editor-textile.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab1e9f6e21ebbedd072bef63d352d26720801df GIT binary patch literal 1659 zcmeHGe^8Tk7=M70`2+I2+!?UgU#6%Hu^$7HEgdK-8_LGf4Tw2klCv=yQ$(BYOkG_V zSEPr8wZl6hV?cH0&O308+!WXmDCcmSFtxQNEUyJP&q2@o-F2?I{_dat*t>n-J>Tc~ z{CYmf7jBAMkgxy%;&L|&b^ye9@%L3mG(LYnR=fZIjOInmu&k2;OU`U!RzAv&67^is(B?zR`*+<=P;Rlr*;V5 z{~>YulY62S+s&3E$GW;6tUlLXxz4(NrtxR#%?nMQ=QH|6tz+pULqkJ60Mneb+i2uY zCje;Ur-p}z?R#)~hW(vb(8842Y!07q1OfqhXB2=pf6!(-(LE19-+Nik!CLQfXB4ot zRrH0u5(zIf{qUjvwbdNXOc1NQ*FMSwcxtg9V6k2y_Bh&mu**5Ql?4#Zr~zQ)&-w1_ zbUKfWqA2YZY}k;Oez){DyxX|+Y#LtU8)JYE?s$Nxqjawomn5Fq*`7cgKx%V~l-gpH zVDWLe7@yH%kw_EEfF#VTn|F zzZ+vx_RV)v>d+Mf@=8r2?DPj}Yo9xaT==o1i+-}oXS3x6x_WwMUm!qNWi`l(YS&(izVk*qTnd8FI!izm21M(_O47gIqGyK9Y87g3;#`2 z%Zas!s>3%mwKq(lt`Ez@!rv-)c6M|$=?n%#))QT@<4dXOc@wOJ8}$;c)P} zQQYH^{=SqFupLF@buE(_SDDvCOK}P-%>Bin_s*S`TKni|@E6+7zX%x$g<8k9cw_?u z7}I2Qy}XbfeSIx4?tFcH{nt0~tPTr;2nPoTKhwEfu74mj#^V}Bhcite-?;qf(Zoc1 zt=-{BEJN0&UHfQnO`oD-x3TB9JD=o}xX#D?w6?aMQR14opJfTxxT{hC7FmfSZCN~? zwG`9zoKV&b3M3e{iLCCV`a#W@uGxiJJzBe6?yvG3i?tStXy z&-l20W+zU%MjX(#Y(KrkQh^t_*=N&mRW^2FyWKL9_lRH~B=KaCoziGD;U#^KoFkG; m21eW>d;9-OTDAXHr3cCP;w#&V1Vs`IAmnBX1sxm8j{E@>bO@OM literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor-wiki.png b/markitup/skins/markitup/images/bg-editor-wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..7887181cc73d3c653ed7c3e92e2307accacfb502 GIT binary patch literal 1488 zcmeAS@N?(olHy`uVBq!ia0y~yV15B)pWt8ul3!Y5B!Coiv6E*A2M5RPhyD+MT+RZI z$YKTtZXpn6ymYtj4^U9P#5JNMI6tkVJh3R1!8b9vC_gtfB{NaMEwd=KJijQrSixdz z#-$3NQZbNH=c3falFa-(g^=1J_Eyp z|J!cdzd!#s4+F!2mZJv`9=wwdv{h}!4rT_214;S$`R|N@d||QOyLT7QXJlZQvEjze zn=>KG?-$DhvB-TU|d|4~pm-Fx@e{aY}3@?@wJLnVQ(`|)hmnfp5DL1y#l>+3_j zn-I!|?9iP%BmX)sU%otBj+KES;@IhxAcMh5+OA)}z7wdK!N;Hw=q84Td<+bX($$ut z3=B8sZG5e;e*OCJ`U^L2-n`Wg@>m+e+@7_k)@=Iw$^W$p(CY7ykUy3;wa}WEfg$Jo zja6r^UcK5s7w9F4L=;VP=Fj*4x4%>h7{-ioeyl({R~rGHV_;Uef6tznzm94^UvIDl zkpc>!C`zcPuAU8!ITm41Y}~j}Isr8xA&x!-kD47|`+VT>3l41tYj9{j0{IWDbj>LS z28RYjEF*j(YfHmFG0(yuM;W%*mX^;iE3n~1gTe~DWM4fEfK1( literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor-xml.png b/markitup/skins/markitup/images/bg-editor-xml.png new file mode 100644 index 0000000000000000000000000000000000000000..33b1c5d83a4dde90e6b7f6312d4d046bf5532e22 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV15B)pWt8ul3!Y5B!Coiv6E*A2M5RPhyD+MT+RZI z$YKTtZXpn6ymYtj4^U9P#5JNMI6tkVJh3R1!8b9vC_gtfB{NaMEwd=KJijQrSixdz z#-$3NQZbNH=c3falFa-(g^x7mgDH6kK3elg8cN?3f7=a|Lw=B=v~B@f5f<$UWo{PgKlc?O0D z|F_+^e}DdO9tMU39Y+ryJa{J^Xsz3f9n1_42a@vh^WPZ*`O0FuckeEq&&a?avGK;u zn=>KG_ZI^VV362;N-P^Y`!HFY;DaR=0i_0KIbk&+`zFsaimljIYB| z?PTQT^MA_#WuzvDrLH*$Wb9dUiUH`yC80Bce!E!h=jUf;1B}`YT?or&d?|SK^5si? z8CC{{h@%Mme5zKTdHeS53)^d%3=9d?K41r5I=nLY$NN=46KoHE{`?sdjuBHCVcvdy zPpi1Nc=H|$YwO!j29C_p}^Q>xSbpd z3{Xfo`9w|qncxiMrWw9`c;&oJ7tpo)Pp$&S9E;Da9r3ZTy83#0dSSJ|)R@zc@PtHM ze0+GVd8+)eb3mnkn1n&W4f2`)U0~qUod59co7s0s28ISfaKt!(V!ojO9$S;|fx__2 zX@u{w#@7L`JHW{XNpl$}WYD8p03OK)qKQcg*o{5}Nkt7t hst_2Y0~0)dn0tRZOT~)rWdUX_22WQ%mvv4FO#ntjreOd8 literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/bg-editor.png b/markitup/skins/markitup/images/bg-editor.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7cde4850e081e787aef81f3893cc55ead0470b GIT binary patch literal 1745 zcmdT^YfMuI6h5WuYI$Y>VI5S0KV;pbh%lHaREC`h0)v)`P@$oQnC<_5^!E1Tob#RYec$PK zQ4wF*GFeOjunpZA5)D8f!}r?^D}27lO>n_4x*|AKz+f=?9!C!1&$a10;}iha?-C!{ zJyZ4q2G=Wh>`}(Z4k$Ckaw+THZY4J3mD(&5+4c74H7^$@elbbsdrVxm+q% zrpOMu3sTag;Pn~T+n?*@S1k-L2UxQ)G-SIVvux7TuzS+Utga%OrcPG z?1-IhVh_9R&owS$vG&#_8-P`pSf@Ye=OQgFz_34y*3h=f>3Rz+b0tF<`{>DhAhQhhlr(*5Y5MgKl+wr|CKoG1JInTB} zwY7znYy_Zip&5Ger0Ojv6f~CMnJL4_6-nt{&$@XE$tbr^O-&8zLBSSIEKk6je)Vea zuTMutMrOonwfZ3!msME=uo$Dja4P&Z1~-yH-u-P;PW*XiWQes=8b_H-*7iqXQBi4A zvP2?reTnv_Ycu^{2DA%lP_c~^hc~^r_~@`LHnd%?*X;Yf*Jw1>RdsZ9a8-sxl=ABP z)3GJbm*iJajBD-x*f=dMO&#dUW@mrvc?Pp)EtkgMJmsX){z8XlZn6(&#xy%Sn>m5# z92e3e8ww3)PoP%@E)El3Uqv~n;bFO09 z&Te{(>xTS#v)Me#?KPRqhc=;WlPD)Ctn{vu+x+1A{U#TryD4;~Af)Fhw?Ucc!oYL; z_z#2h-A5z6X>UqVO%SLF3SRD3@zvGQShU*Q28v>sw(C|BKt()dq5{73Tmn~8MjUD7 zG7E!5HKXD`0#PsK&6Gbi%FS53_3x|v|5NAe)%v^%v6qu4dI>^zM1<4^Cms14pj9C; literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/handle.png b/markitup/skins/markitup/images/handle.png new file mode 100644 index 0000000000000000000000000000000000000000..3993b20337e33a36c9125d139f1f53a279a4c128 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{X#0(?@t!)i}6mzkYX9x!e$L)vy4}e^r0G|-o z4LkP#|NsB{_wSo_?oZ!X{TC?CQWE4B{GZ|f|H~VSrU3bz1s;*b3=G^tAk28_ZrvZC zpje4(M2T}zYGO%dex5=|W^O8jfw{hsp}v86ds2l5P=!25MR0yvNqJ&XDuZuga#4P6 zYD#9Jf?H-$YI%N9cCmuR){ILPK&1wrE{-7_Gm{H=1WS1m6Eb=Pa(faIBBVrjnVf1= soMNglKFuA6ghUcX`bbD&-ZPgg&ebxsLQ0Hz~TmH+?% literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/images/menu.png b/markitup/skins/markitup/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..44a07afd30f499cdba30847094a1e92f13e1320e GIT binary patch literal 27151 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

      +35?Hj$O) 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 literal 0 HcmV?d00001 diff --git a/markitup/skins/markitup/style.css b/markitup/skins/markitup/style.css new file mode 100644 index 0000000..9a524c7 --- /dev/null +++ b/markitup/skins/markitup/style.css @@ -0,0 +1,147 @@ +/* ------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp * { + margin:0px; padding:0px; + outline:none; +} +.markItUp a:link, +.markItUp a:visited { + color:#000; + text-decoration:none; +} +.markItUp { + width:700px; + margin:5px 0 5px 0; + +} +.markItUpContainer { + border-left:1px solid #a8a8a8;border-top:1px solid #a8a8a8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8; + background:#FFF url(images/bg-container.png) repeat-x top left; + padding:5px 5px 2px 5px; + font:11px Verdana, Arial, Helvetica, sans-serif; +} +.markItUpEditor { + font:12px 'Courier New', Courier, monospace; + padding:5px 5px 5px 5px; + border-left:1px solid #a8a8a8;border-top:1px solid #a8a8a8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8; + width:673px; + height:320px; + + clear:both; display:block; + line-height:18px; + overflow:auto; +} +.markItUpPreviewFrame { + overflow:auto; + background-color:#FFFFFF; + border-left:1px solid #a8a8a8;border-top:1px solid #a8a8a8;border-right:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8; + width:99.9%; + height:300px; + margin:5px 0; +} +.markItUpFooter { + width:100%; + cursor:n-resize; +} +.markItUpResizeHandle { + overflow:hidden; + width:22px; height:5px; + margin-left:auto; + margin-right:auto; + background-image:url(images/handle.png); + cursor:n-resize; +} +/***************************************************************************************/ +/* first row of buttons */ +.markItUpHeader ul li { + list-style:none; + float:left; + position:relative; +} +.markItUpHeader ul li ul{ + display:none; +} +.markItUpHeader ul li:hover > ul{ + display:block; +} +.markItUpHeader ul .markItUpDropMenu { + background:transparent url(images/menu.png) no-repeat 115% 50%; + margin-right:5px; +} +.markItUpHeader ul .markItUpDropMenu li { + margin-right:0px; +} +.markItUpHeader ul .markItUpSeparator { + margin:0 10px; + width:1px; + height:16px; + overflow:hidden; + background-color:#CCC; +} +.markItUpHeader ul ul .markItUpSeparator { + width:auto; height:1px; + margin:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul { + display:none; + position:absolute; + top:18px; left:0px; + background:#F5F5F5; + border:1px solid #3C769D; + height:inherit; +} +.markItUpHeader ul ul li { + float:none; + border-bottom:1px solid #3C769D; +} +.markItUpHeader ul ul .markItUpDropMenu { + background:#F5F5F5 url(images/submenu.png) no-repeat 100% 50%; +} +/* next rows of buttons */ +.markItUpHeader ul ul ul { + position:absolute; + top:-1px; left:150px; +} +.markItUpHeader ul ul ul li { + float:none; +} +.markItUpHeader ul a { + display:block; + width:16px; height:16px; + text-indent:-10000px; + background-repeat:no-repeat; + padding:3px; + margin:0px; +} +.markItUpHeader ul ul a { + display:block; + padding-left:0px; + text-indent:0; + width:120px; + padding:5px 5px 5px 25px; + background-position:2px 50%; +} +.markItUpHeader ul ul a:hover { + color:#FFF; + background-color:#3C769D; +} +/***************************************************************************************/ +.html .markItUpEditor { + +} +.markdown .markItUpEditor { + background-image:url(images/bg-editor-markdown.png); +} +.textile .markItUpEditor { + background-image:url(images/bg-editor-textile.png); +} +.bbcode .markItUpEditor { + background-image:url(images/bg-editor-bbcode.png); +} +.wiki .markItUpEditor, +.dotclear .markItUpEditor { + background-image:url(images/bg-editor-wiki.png); +} \ No newline at end of file diff --git a/markitup/skins/simple/images/handle.png b/markitup/skins/simple/images/handle.png new file mode 100644 index 0000000000000000000000000000000000000000..3993b20337e33a36c9125d139f1f53a279a4c128 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{X#0(?@t!)i}6mzkYX9x!e$L)vy4}e^r0G|-o z4LkP#|NsB{_wSo_?oZ!X{TC?CQWE4B{GZ|f|H~VSrU3bz1s;*b3=G^tAk28_ZrvZC zpje4(M2T}zYGO%dex5=|W^O8jfw{hsp}v86ds2l5P=!25MR0yvNqJ&XDuZuga#4P6 zYD#9Jf?H-$YI%N9cCmuR){ILPK&1wrE{-7_Gm{H=1WS1m6Eb=Pa(faIBBVrjnVf1= soMNglKFuA6ghUcX`bbD&-ZPgg&ebxsLQ0Hz~TmH+?% literal 0 HcmV?d00001 diff --git a/markitup/skins/simple/images/menu.png b/markitup/skins/simple/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..44a07afd30f499cdba30847094a1e92f13e1320e GIT binary patch literal 27151 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

      +35?Hj$O) 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 literal 0 HcmV?d00001 diff --git a/markitup/skins/simple/style.css b/markitup/skins/simple/style.css new file mode 100644 index 0000000..1838ded --- /dev/null +++ b/markitup/skins/simple/style.css @@ -0,0 +1,118 @@ +/* ------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp * { + margin:0px; padding:0px; + outline:none; +} +.markItUp a:link, +.markItUp a:visited { + color:#000; + text-decoration:none; +} +.markItUp { + width:700px; + margin:5px 0 5px 0; +} +.markItUpContainer { + font:11px Verdana, Arial, Helvetica, sans-serif; +} +.markItUpEditor { + font:12px 'Courier New', Courier, monospace; + padding:5px; + width:690px; + height:320px; + clear:both; display:block; + line-height:18px; + overflow:auto; +} +.markItUpPreviewFrame { + overflow:auto; + background-color:#FFF; + width:99.9%; + height:300px; + margin:5px 0; +} +.markItUpFooter { + width:100%; +} +.markItUpResizeHandle { + overflow:hidden; + width:22px; height:5px; + margin-left:auto; + margin-right:auto; + background-image:url(images/handle.png); + cursor:n-resize; +} +/***************************************************************************************/ +/* first row of buttons */ +.markItUpHeader ul li { + list-style:none; + float:left; + position:relative; +} +.markItUpHeader ul li:hover > ul{ + display:block; +} +.markItUpHeader ul .markItUpDropMenu { + background:transparent url(images/menu.png) no-repeat 115% 50%; + margin-right:5px; +} +.markItUpHeader ul .markItUpDropMenu li { + margin-right:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul { + display:none; + position:absolute; + top:18px; left:0px; + background:#FFF; + border:1px solid #000; +} +.markItUpHeader ul ul li { + float:none; + border-bottom:1px solid #000; +} +.markItUpHeader ul ul .markItUpDropMenu { + background:#FFF url(images/submenu.png) no-repeat 100% 50%; +} +.markItUpHeader ul .markItUpSeparator { + margin:0 10px; + width:1px; + height:16px; + overflow:hidden; + background-color:#CCC; +} +.markItUpHeader ul ul .markItUpSeparator { + width:auto; height:1px; + margin:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul ul { + position:absolute; + top:-1px; left:150px; +} +.markItUpHeader ul ul ul li { + float:none; +} +.markItUpHeader ul a { + display:block; + width:16px; height:16px; + text-indent:-10000px; + background-repeat:no-repeat; + padding:3px; + margin:0px; +} +.markItUpHeader ul ul a { + display:block; + padding-left:0px; + text-indent:0; + width:120px; + padding:5px 5px 5px 25px; + background-position:2px 50%; +} +.markItUpHeader ul ul a:hover { + color:#FFF; + background-color:#000; +} diff --git a/markitup/templates/preview.css b/markitup/templates/preview.css new file mode 100644 index 0000000..ad91a87 --- /dev/null +++ b/markitup/templates/preview.css @@ -0,0 +1,5 @@ +/* preview style examples */ +body { + background-color:#EFEFEF; + font:70% Verdana, Arial, Helvetica, sans-serif; +} \ No newline at end of file diff --git a/markitup/templates/preview.html b/markitup/templates/preview.html new file mode 100644 index 0000000..b8b3702 --- /dev/null +++ b/markitup/templates/preview.html @@ -0,0 +1,11 @@ + + + + +markItUp! preview template + + + + + + diff --git a/system/cache/index.html b/system/cache/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/cache/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/codeigniter/Base4.php b/system/codeigniter/Base4.php new file mode 100644 index 0000000..91a4350 --- /dev/null +++ b/system/codeigniter/Base4.php @@ -0,0 +1,69 @@ +load->library('email') to instantiate + * classes that can then be used within controllers as $this->email->send() + * + * PHP 4 also has trouble referencing the CI super object within application + * constructors since objects do not exist until the class is fully + * instantiated. Basically PHP 4 sucks... + * + * Since PHP 5 doesn't suffer from this problem so we load one of + * two files based on the version of PHP being run. + * + * @package CodeIgniter + * @subpackage codeigniter + * @category front-controller + * @author ExpressionEngine Dev Team + * @link http://codeigniter.com/user_guide/ + */ + class CI_Base extends CI_Loader { + + function CI_Base() + { + // This allows syntax like $this->load->foo() to work + parent::CI_Loader(); + $this->load =& $this; + + // This allows resources used within controller constructors to work + global $OBJ; + $OBJ = $this->load; // Do NOT use a reference. + } +} + +function &get_instance() +{ + global $CI, $OBJ; + + if (is_object($CI)) + { + return $CI; + } + + return $OBJ->load; +} + + +/* End of file Base4.php */ +/* Location: ./system/codeigniter/Base4.php */ \ No newline at end of file diff --git a/system/codeigniter/Base5.php b/system/codeigniter/Base5.php new file mode 100644 index 0000000..a2cca72 --- /dev/null +++ b/system/codeigniter/Base5.php @@ -0,0 +1,56 @@ +mark('total_execution_time_start'); +$BM->mark('loading_time_base_classes_start'); + +/* + * ------------------------------------------------------ + * Instantiate the hooks class + * ------------------------------------------------------ + */ + +$EXT =& load_class('Hooks'); + +/* + * ------------------------------------------------------ + * Is there a "pre_system" hook? + * ------------------------------------------------------ + */ +$EXT->_call_hook('pre_system'); + +/* + * ------------------------------------------------------ + * Instantiate the base classes + * ------------------------------------------------------ + */ + +$CFG =& load_class('Config'); +$URI =& load_class('URI'); +$RTR =& load_class('Router'); +$OUT =& load_class('Output'); + +/* + * ------------------------------------------------------ + * Is there a valid cache file? If so, we're done... + * ------------------------------------------------------ + */ + +if ($EXT->_call_hook('cache_override') === FALSE) +{ + if ($OUT->_display_cache($CFG, $URI) == TRUE) + { + exit; + } +} + +/* + * ------------------------------------------------------ + * Load the remaining base classes + * ------------------------------------------------------ + */ + +$IN =& load_class('Input'); +$LANG =& load_class('Language'); + +/* + * ------------------------------------------------------ + * Load the app controller and local controller + * ------------------------------------------------------ + * + * Note: Due to the poor object handling in PHP 4 we'll + * conditionally load different versions of the base + * class. Retaining PHP 4 compatibility requires a bit of a hack. + * + * Note: The Loader class needs to be included first + * + */ +if ( ! is_php('5.0.0')) +{ + load_class('Loader', FALSE); + require(BASEPATH.'codeigniter/Base4'.EXT); +} +else +{ + require(BASEPATH.'codeigniter/Base5'.EXT); +} + +// Load the base controller class +load_class('Controller', FALSE); + +// Load the local application controller +// Note: The Router class automatically validates the controller path. If this include fails it +// means that the default controller in the Routes.php file is not resolving to something valid. +if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT)) +{ + show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.'); +} + +include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT); + +// Set a mark point for benchmarking +$BM->mark('loading_time_base_classes_end'); + + +/* + * ------------------------------------------------------ + * Security check + * ------------------------------------------------------ + * + * None of the functions in the app controller or the + * loader class can be called via the URI, nor can + * controller functions that begin with an underscore + */ +$class = $RTR->fetch_class(); +$method = $RTR->fetch_method(); + +if ( ! class_exists($class) + OR $method == 'controller' + OR strncmp($method, '_', 1) == 0 + OR in_array(strtolower($method), array_map('strtolower', get_class_methods('Controller'))) + ) +{ + show_404("{$class}/{$method}"); +} + +/* + * ------------------------------------------------------ + * Is there a "pre_controller" hook? + * ------------------------------------------------------ + */ +$EXT->_call_hook('pre_controller'); + +/* + * ------------------------------------------------------ + * Instantiate the controller and call requested method + * ------------------------------------------------------ + */ + +// Mark a start point so we can benchmark the controller +$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_start'); + +$CI = new $class(); + +// Is this a scaffolding request? +if ($RTR->scaffolding_request === TRUE) +{ + if ($EXT->_call_hook('scaffolding_override') === FALSE) + { + $CI->_ci_scaffolding(); + } +} +else +{ + /* + * ------------------------------------------------------ + * Is there a "post_controller_constructor" hook? + * ------------------------------------------------------ + */ + $EXT->_call_hook('post_controller_constructor'); + + // Is there a "remap" function? + if (method_exists($CI, '_remap')) + { + $CI->_remap($method); + } + else + { + // is_callable() returns TRUE on some versions of PHP 5 for private and protected + // methods, so we'll use this workaround for consistent behavior + if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($CI)))) + { + show_404("{$class}/{$method}"); + } + + // Call the requested method. + // Any URI segments present (besides the class/function) will be passed to the method for convenience + call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2)); + } +} + +// Mark a benchmark end point +$BM->mark('controller_execution_time_( '.$class.' / '.$method.' )_end'); + +/* + * ------------------------------------------------------ + * Is there a "post_controller" hook? + * ------------------------------------------------------ + */ +$EXT->_call_hook('post_controller'); + +/* + * ------------------------------------------------------ + * Send the final rendered output to the browser + * ------------------------------------------------------ + */ + +if ($EXT->_call_hook('display_override') === FALSE) +{ + $OUT->_display(); +} + +/* + * ------------------------------------------------------ + * Is there a "post_system" hook? + * ------------------------------------------------------ + */ +$EXT->_call_hook('post_system'); + +/* + * ------------------------------------------------------ + * Close the DB connection if one exists + * ------------------------------------------------------ + */ +if (class_exists('CI_DB') AND isset($CI->db)) +{ + $CI->db->close(); +} + + +/* End of file CodeIgniter.php */ +/* Location: ./system/codeigniter/CodeIgniter.php */ \ No newline at end of file diff --git a/system/codeigniter/Common.php b/system/codeigniter/Common.php new file mode 100644 index 0000000..eb9dce6 --- /dev/null +++ b/system/codeigniter/Common.php @@ -0,0 +1,421 @@ + 5 +* we'll set a static variable. +* +* @access public +* @param string +* @return bool +*/ +function is_php($version = '5.0.0') +{ + static $_is_php; + $version = (string)$version; + + if ( ! isset($_is_php[$version])) + { + $_is_php[$version] = (version_compare(PHP_VERSION, $version) < 0) ? FALSE : TRUE; + } + + return $_is_php[$version]; +} + +// ------------------------------------------------------------------------ + +/** + * Tests for file writability + * + * is_writable() returns TRUE on Windows servers when you really can't write to + * the file, based on the read-only attribute. is_writable() is also unreliable + * on Unix servers if safe_mode is on. + * + * @access private + * @return void + */ +function is_really_writable($file) +{ + // If we're on a Unix server with safe_mode off we call is_writable + if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE) + { + return is_writable($file); + } + + // For windows servers and safe_mode "on" installations we'll actually + // write a file then read it. Bah... + if (is_dir($file)) + { + $file = rtrim($file, '/').'/'.md5(rand(1,100)); + + if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) + { + return FALSE; + } + + fclose($fp); + @chmod($file, DIR_WRITE_MODE); + @unlink($file); + return TRUE; + } + elseif (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) + { + return FALSE; + } + + fclose($fp); + return TRUE; +} + +// ------------------------------------------------------------------------ + +/** +* Class registry +* +* This function acts as a singleton. If the requested class does not +* exist it is instantiated and set to a static variable. If it has +* previously been instantiated the variable is returned. +* +* @access public +* @param string the class name being requested +* @param bool optional flag that lets classes get loaded but not instantiated +* @return object +*/ +function &load_class($class, $instantiate = TRUE) +{ + static $objects = array(); + + // Does the class exist? If so, we're done... + if (isset($objects[$class])) + { + return $objects[$class]; + } + + // If the requested class does not exist in the application/libraries + // folder we'll load the native class from the system/libraries folder. + if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT)) + { + require(BASEPATH.'libraries/'.$class.EXT); + require(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT); + $is_subclass = TRUE; + } + else + { + if (file_exists(APPPATH.'libraries/'.$class.EXT)) + { + require(APPPATH.'libraries/'.$class.EXT); + $is_subclass = FALSE; + } + else + { + require(BASEPATH.'libraries/'.$class.EXT); + $is_subclass = FALSE; + } + } + + if ($instantiate == FALSE) + { + $objects[$class] = TRUE; + return $objects[$class]; + } + + if ($is_subclass == TRUE) + { + $name = config_item('subclass_prefix').$class; + + $objects[$class] =& instantiate_class(new $name()); + return $objects[$class]; + } + + $name = ($class != 'Controller') ? 'CI_'.$class : $class; + + $objects[$class] =& instantiate_class(new $name()); + return $objects[$class]; +} + +/** + * Instantiate Class + * + * Returns a new class object by reference, used by load_class() and the DB class. + * Required to retain PHP 4 compatibility and also not make PHP 5.3 cry. + * + * Use: $obj =& instantiate_class(new Foo()); + * + * @access public + * @param object + * @return object + */ +function &instantiate_class(&$class_object) +{ + return $class_object; +} + +/** +* Loads the main config.php file +* +* @access private +* @return array +*/ +function &get_config() +{ + static $main_conf; + + if ( ! isset($main_conf)) + { + if ( ! file_exists(APPPATH.'config/config'.EXT)) + { + exit('The configuration file config'.EXT.' does not exist.'); + } + + require(APPPATH.'config/config'.EXT); + + if ( ! isset($config) OR ! is_array($config)) + { + exit('Your config file does not appear to be formatted correctly.'); + } + + $main_conf[0] =& $config; + } + return $main_conf[0]; +} + +/** +* Gets a config item +* +* @access public +* @return mixed +*/ +function config_item($item) +{ + static $config_item = array(); + + if ( ! isset($config_item[$item])) + { + $config =& get_config(); + + if ( ! isset($config[$item])) + { + return FALSE; + } + $config_item[$item] = $config[$item]; + } + + return $config_item[$item]; +} + + +/** +* Error Handler +* +* This function lets us invoke the exception class and +* display errors using the standard error template located +* in application/errors/errors.php +* This function will send the error page directly to the +* browser and exit. +* +* @access public +* @return void +*/ +function show_error($message, $status_code = 500) +{ + $error =& load_class('Exceptions'); + echo $error->show_error('An Error Was Encountered', $message, 'error_general', $status_code); + exit; +} + + +/** +* 404 Page Handler +* +* This function is similar to the show_error() function above +* However, instead of the standard error template it displays +* 404 errors. +* +* @access public +* @return void +*/ +function show_404($page = '') +{ + $error =& load_class('Exceptions'); + $error->show_404($page); + exit; +} + + +/** +* Error Logging Interface +* +* We use this as a simple mechanism to access the logging +* class and send messages to be logged. +* +* @access public +* @return void +*/ +function log_message($level = 'error', $message, $php_error = FALSE) +{ + static $LOG; + + $config =& get_config(); + if ($config['log_threshold'] == 0) + { + return; + } + + $LOG =& load_class('Log'); + $LOG->write_log($level, $message, $php_error); +} + + +/** + * Set HTTP Status Header + * + * @access public + * @param int the status code + * @param string + * @return void + */ +function set_status_header($code = 200, $text = '') +{ + $stati = array( + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 307 => 'Temporary Redirect', + + 400 => 'Bad Request', + 401 => 'Unauthorized', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Requested Range Not Satisfiable', + 417 => 'Expectation Failed', + + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported' + ); + + if ($code == '' OR ! is_numeric($code)) + { + show_error('Status codes must be numeric', 500); + } + + if (isset($stati[$code]) AND $text == '') + { + $text = $stati[$code]; + } + + if ($text == '') + { + show_error('No status text available. Please check your status code number or supply your own message text.', 500); + } + + $server_protocol = (isset($_SERVER['SERVER_PROTOCOL'])) ? $_SERVER['SERVER_PROTOCOL'] : FALSE; + + if (substr(php_sapi_name(), 0, 3) == 'cgi') + { + header("Status: {$code} {$text}", TRUE); + } + elseif ($server_protocol == 'HTTP/1.1' OR $server_protocol == 'HTTP/1.0') + { + header($server_protocol." {$code} {$text}", TRUE, $code); + } + else + { + header("HTTP/1.1 {$code} {$text}", TRUE, $code); + } +} + + +/** +* Exception Handler +* +* This is the custom exception handler that is declaired at the top +* of Codeigniter.php. The main reason we use this is permit +* PHP errors to be logged in our own log files since we may +* not have access to server logs. Since this function +* effectively intercepts PHP errors, however, we also need +* to display errors based on the current error_reporting level. +* We do that with the use of a PHP error template. +* +* @access private +* @return void +*/ +function _exception_handler($severity, $message, $filepath, $line) +{ + // We don't bother with "strict" notices since they will fill up + // the log file with information that isn't normally very + // helpful. For example, if you are running PHP 5 and you + // use version 4 style class functions (without prefixes + // like "public", "private", etc.) you'll get notices telling + // you that these have been deprecated. + + if ($severity == E_STRICT) + { + return; + } + + $error =& load_class('Exceptions'); + + // Should we display the error? + // We'll get the current error_reporting level and add its bits + // with the severity bits to find out. + + if (($severity & error_reporting()) == $severity) + { + $error->show_php_error($severity, $message, $filepath, $line); + } + + // Should we log the error? No? We're done... + $config =& get_config(); + if ($config['log_threshold'] == 0) + { + return; + } + + $error->log_exception($severity, $message, $filepath, $line); +} + + + +/* End of file Common.php */ +/* Location: ./system/codeigniter/Common.php */ \ No newline at end of file diff --git a/system/codeigniter/Compat.php b/system/codeigniter/Compat.php new file mode 100644 index 0000000..958ab4c --- /dev/null +++ b/system/codeigniter/Compat.php @@ -0,0 +1,93 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/DB.php b/system/database/DB.php new file mode 100644 index 0000000..0f734d7 --- /dev/null +++ b/system/database/DB.php @@ -0,0 +1,146 @@ + $dns['scheme'], + 'hostname' => (isset($dns['host'])) ? rawurldecode($dns['host']) : '', + 'username' => (isset($dns['user'])) ? rawurldecode($dns['user']) : '', + 'password' => (isset($dns['pass'])) ? rawurldecode($dns['pass']) : '', + 'database' => (isset($dns['path'])) ? rawurldecode(substr($dns['path'], 1)) : '' + ); + + // were additional config items set? + if (isset($dns['query'])) + { + parse_str($dns['query'], $extra); + + foreach($extra as $key => $val) + { + // booleans please + if (strtoupper($val) == "TRUE") + { + $val = TRUE; + } + elseif (strtoupper($val) == "FALSE") + { + $val = FALSE; + } + + $params[$key] = $val; + } + } + } + + // No DB specified yet? Beat them senseless... + if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '') + { + show_error('You have not selected a database type to connect to.'); + } + + // Load the DB classes. Note: Since the active record class is optional + // we need to dynamically create a class that extends proper parent class + // based on whether we're using the active record class or not. + // Kudos to Paul for discovering this clever use of eval() + + if ($active_record_override == TRUE) + { + $active_record = TRUE; + } + + require_once(BASEPATH.'database/DB_driver'.EXT); + + if ( ! isset($active_record) OR $active_record == TRUE) + { + require_once(BASEPATH.'database/DB_active_rec'.EXT); + + if ( ! class_exists('CI_DB')) + { + eval('class CI_DB extends CI_DB_active_record { }'); + } + } + else + { + if ( ! class_exists('CI_DB')) + { + eval('class CI_DB extends CI_DB_driver { }'); + } + } + + require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver'.EXT); + + // Instantiate the DB adapter + $driver = 'CI_DB_'.$params['dbdriver'].'_driver'; + $DB =& instantiate_class(new $driver($params)); + + if ($DB->autoinit == TRUE) + { + $DB->initialize(); + } + + return $DB; +} + + + +/* End of file DB.php */ +/* Location: ./system/database/DB.php */ \ No newline at end of file diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php new file mode 100644 index 0000000..0702199 --- /dev/null +++ b/system/database/DB_active_rec.php @@ -0,0 +1,1820 @@ +_protect_identifiers = $escape; + } + + if (is_string($select)) + { + $select = explode(',', $select); + } + + foreach ($select as $val) + { + $val = trim($val); + + if ($val != '') + { + $this->ar_select[] = $val; + + if ($this->ar_caching === TRUE) + { + $this->ar_cache_select[] = $val; + $this->ar_cache_exists[] = 'select'; + } + } + } + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Select Max + * + * Generates a SELECT MAX(field) portion of a query + * + * @access public + * @param string the field + * @param string an alias + * @return object + */ + function select_max($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'MAX'); + } + + // -------------------------------------------------------------------- + + /** + * Select Min + * + * Generates a SELECT MIN(field) portion of a query + * + * @access public + * @param string the field + * @param string an alias + * @return object + */ + function select_min($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'MIN'); + } + + // -------------------------------------------------------------------- + + /** + * Select Average + * + * Generates a SELECT AVG(field) portion of a query + * + * @access public + * @param string the field + * @param string an alias + * @return object + */ + function select_avg($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'AVG'); + } + + // -------------------------------------------------------------------- + + /** + * Select Sum + * + * Generates a SELECT SUM(field) portion of a query + * + * @access public + * @param string the field + * @param string an alias + * @return object + */ + function select_sum($select = '', $alias = '') + { + return $this->_max_min_avg_sum($select, $alias, 'SUM'); + } + + // -------------------------------------------------------------------- + + /** + * Processing Function for the four functions above: + * + * select_max() + * select_min() + * select_avg() + * select_sum() + * + * @access public + * @param string the field + * @param string an alias + * @return object + */ + function _max_min_avg_sum($select = '', $alias = '', $type = 'MAX') + { + if ( ! is_string($select) OR $select == '') + { + $this->display_error('db_invalid_query'); + } + + $type = strtoupper($type); + + if ( ! in_array($type, array('MAX', 'MIN', 'AVG', 'SUM'))) + { + show_error('Invalid function type: '.$type); + } + + if ($alias == '') + { + $alias = $this->_create_alias_from_table(trim($select)); + } + + $sql = $type.'('.$this->_protect_identifiers(trim($select)).') AS '.$alias; + + $this->ar_select[] = $sql; + + if ($this->ar_caching === TRUE) + { + $this->ar_cache_select[] = $sql; + $this->ar_cache_exists[] = 'select'; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Determines the alias name based on the table + * + * @access private + * @param string + * @return string + */ + function _create_alias_from_table($item) + { + if (strpos($item, '.') !== FALSE) + { + return end(explode('.', $item)); + } + + return $item; + } + + // -------------------------------------------------------------------- + + /** + * DISTINCT + * + * Sets a flag which tells the query string compiler to add DISTINCT + * + * @access public + * @param bool + * @return object + */ + function distinct($val = TRUE) + { + $this->ar_distinct = (is_bool($val)) ? $val : TRUE; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * From + * + * Generates the FROM portion of the query + * + * @access public + * @param mixed can be a string or array + * @return object + */ + function from($from) + { + foreach ((array)$from as $val) + { + if (strpos($val, ',') !== FALSE) + { + foreach (explode(',', $val) as $v) + { + $v = trim($v); + $this->_track_aliases($v); + + $this->ar_from[] = $this->_protect_identifiers($v, TRUE, NULL, FALSE); + + if ($this->ar_caching === TRUE) + { + $this->ar_cache_from[] = $this->_protect_identifiers($v, TRUE, NULL, FALSE); + $this->ar_cache_exists[] = 'from'; + } + } + + } + else + { + $val = trim($val); + + // Extract any aliases that might exist. We use this information + // in the _protect_identifiers to know whether to add a table prefix + $this->_track_aliases($val); + + $this->ar_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE); + + if ($this->ar_caching === TRUE) + { + $this->ar_cache_from[] = $this->_protect_identifiers($val, TRUE, NULL, FALSE); + $this->ar_cache_exists[] = 'from'; + } + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Join + * + * Generates the JOIN portion of the query + * + * @access public + * @param string + * @param string the join condition + * @param string the type of join + * @return object + */ + function join($table, $cond, $type = '') + { + if ($type != '') + { + $type = strtoupper(trim($type)); + + if ( ! in_array($type, array('LEFT', 'RIGHT', 'OUTER', 'INNER', 'LEFT OUTER', 'RIGHT OUTER'))) + { + $type = ''; + } + else + { + $type .= ' '; + } + } + + // Extract any aliases that might exist. We use this information + // in the _protect_identifiers to know whether to add a table prefix + $this->_track_aliases($table); + + // Strip apart the condition and protect the identifiers + if (preg_match('/([\w\.]+)([\W\s]+)(.+)/', $cond, $match)) + { + $match[1] = $this->_protect_identifiers($match[1]); + $match[3] = $this->_protect_identifiers($match[3]); + + $cond = $match[1].$match[2].$match[3]; + } + + // Assemble the JOIN statement + $join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).' ON '.$cond; + + $this->ar_join[] = $join; + if ($this->ar_caching === TRUE) + { + $this->ar_cache_join[] = $join; + $this->ar_cache_exists[] = 'join'; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Where + * + * Generates the WHERE portion of the query. Separates + * multiple calls with AND + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function where($key, $value = NULL, $escape = TRUE) + { + return $this->_where($key, $value, 'AND ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * OR Where + * + * Generates the WHERE portion of the query. Separates + * multiple calls with OR + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function or_where($key, $value = NULL, $escape = TRUE) + { + return $this->_where($key, $value, 'OR ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * orwhere() is an alias of or_where() + * this function is here for backwards compatibility, as + * orwhere() has been deprecated + */ + function orwhere($key, $value = NULL, $escape = TRUE) + { + return $this->or_where($key, $value, $escape); + } + + // -------------------------------------------------------------------- + + /** + * Where + * + * Called by where() or orwhere() + * + * @access private + * @param mixed + * @param mixed + * @param string + * @return object + */ + function _where($key, $value = NULL, $type = 'AND ', $escape = NULL) + { + if ( ! is_array($key)) + { + $key = array($key => $value); + } + + // If the escape value was not set will will base it on the global setting + if ( ! is_bool($escape)) + { + $escape = $this->_protect_identifiers; + } + + foreach ($key as $k => $v) + { + $prefix = (count($this->ar_where) == 0 AND count($this->ar_cache_where) == 0) ? '' : $type; + + if (is_null($v) && ! $this->_has_operator($k)) + { + // value appears not to have been set, assign the test to IS NULL + $k .= ' IS NULL'; + } + + if ( ! is_null($v)) + { + if ($escape === TRUE) + { + $k = $this->_protect_identifiers($k, FALSE, $escape); + + $v = ' '.$this->escape($v); + } + + if ( ! $this->_has_operator($k)) + { + $k .= ' ='; + } + } + else + { + $k = $this->_protect_identifiers($k, FALSE, $escape); + } + + $this->ar_where[] = $prefix.$k.$v; + + if ($this->ar_caching === TRUE) + { + $this->ar_cache_where[] = $prefix.$k.$v; + $this->ar_cache_exists[] = 'where'; + } + + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Where_in + * + * Generates a WHERE field IN ('item', 'item') SQL query joined with + * AND if appropriate + * + * @access public + * @param string The field to search + * @param array The values searched on + * @return object + */ + function where_in($key = NULL, $values = NULL) + { + return $this->_where_in($key, $values); + } + + // -------------------------------------------------------------------- + + /** + * Where_in_or + * + * Generates a WHERE field IN ('item', 'item') SQL query joined with + * OR if appropriate + * + * @access public + * @param string The field to search + * @param array The values searched on + * @return object + */ + function or_where_in($key = NULL, $values = NULL) + { + return $this->_where_in($key, $values, FALSE, 'OR '); + } + + // -------------------------------------------------------------------- + + /** + * Where_not_in + * + * Generates a WHERE field NOT IN ('item', 'item') SQL query joined + * with AND if appropriate + * + * @access public + * @param string The field to search + * @param array The values searched on + * @return object + */ + function where_not_in($key = NULL, $values = NULL) + { + return $this->_where_in($key, $values, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Where_not_in_or + * + * Generates a WHERE field NOT IN ('item', 'item') SQL query joined + * with OR if appropriate + * + * @access public + * @param string The field to search + * @param array The values searched on + * @return object + */ + function or_where_not_in($key = NULL, $values = NULL) + { + return $this->_where_in($key, $values, TRUE, 'OR '); + } + + // -------------------------------------------------------------------- + + /** + * Where_in + * + * Called by where_in, where_in_or, where_not_in, where_not_in_or + * + * @access public + * @param string The field to search + * @param array The values searched on + * @param boolean If the statement would be IN or NOT IN + * @param string + * @return object + */ + function _where_in($key = NULL, $values = NULL, $not = FALSE, $type = 'AND ') + { + if ($key === NULL OR $values === NULL) + { + return; + } + + if ( ! is_array($values)) + { + $values = array($values); + } + + $not = ($not) ? ' NOT' : ''; + + foreach ($values as $value) + { + $this->ar_wherein[] = $this->escape($value); + } + + $prefix = (count($this->ar_where) == 0) ? '' : $type; + + $where_in = $prefix . $this->_protect_identifiers($key) . $not . " IN (" . implode(", ", $this->ar_wherein) . ") "; + + $this->ar_where[] = $where_in; + if ($this->ar_caching === TRUE) + { + $this->ar_cache_where[] = $where_in; + $this->ar_cache_exists[] = 'where'; + } + + // reset the array for multiple calls + $this->ar_wherein = array(); + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Like + * + * Generates a %LIKE% portion of the query. Separates + * multiple calls with AND + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function like($field, $match = '', $side = 'both') + { + return $this->_like($field, $match, 'AND ', $side); + } + + // -------------------------------------------------------------------- + + /** + * Not Like + * + * Generates a NOT LIKE portion of the query. Separates + * multiple calls with AND + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function not_like($field, $match = '', $side = 'both') + { + return $this->_like($field, $match, 'AND ', $side, 'NOT'); + } + + // -------------------------------------------------------------------- + + /** + * OR Like + * + * Generates a %LIKE% portion of the query. Separates + * multiple calls with OR + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function or_like($field, $match = '', $side = 'both') + { + return $this->_like($field, $match, 'OR ', $side); + } + + // -------------------------------------------------------------------- + + /** + * OR Not Like + * + * Generates a NOT LIKE portion of the query. Separates + * multiple calls with OR + * + * @access public + * @param mixed + * @param mixed + * @return object + */ + function or_not_like($field, $match = '', $side = 'both') + { + return $this->_like($field, $match, 'OR ', $side, 'NOT'); + } + + // -------------------------------------------------------------------- + + /** + * orlike() is an alias of or_like() + * this function is here for backwards compatibility, as + * orlike() has been deprecated + */ + function orlike($field, $match = '', $side = 'both') + { + return $this->or_like($field, $match, $side); + } + + // -------------------------------------------------------------------- + + /** + * Like + * + * Called by like() or orlike() + * + * @access private + * @param mixed + * @param mixed + * @param string + * @return object + */ + function _like($field, $match = '', $type = 'AND ', $side = 'both', $not = '') + { + if ( ! is_array($field)) + { + $field = array($field => $match); + } + + foreach ($field as $k => $v) + { + $k = $this->_protect_identifiers($k); + + $prefix = (count($this->ar_like) == 0) ? '' : $type; + + $v = $this->escape_like_str($v); + + if ($side == 'before') + { + $like_statement = $prefix." $k $not LIKE '%{$v}'"; + } + elseif ($side == 'after') + { + $like_statement = $prefix." $k $not LIKE '{$v}%'"; + } + else + { + $like_statement = $prefix." $k $not LIKE '%{$v}%'"; + } + + // some platforms require an escape sequence definition for LIKE wildcards + if ($this->_like_escape_str != '') + { + $like_statement = $like_statement.sprintf($this->_like_escape_str, $this->_like_escape_char); + } + + $this->ar_like[] = $like_statement; + if ($this->ar_caching === TRUE) + { + $this->ar_cache_like[] = $like_statement; + $this->ar_cache_exists[] = 'like'; + } + + } + return $this; + } + + // -------------------------------------------------------------------- + + /** + * GROUP BY + * + * @access public + * @param string + * @return object + */ + function group_by($by) + { + if (is_string($by)) + { + $by = explode(',', $by); + } + + foreach ($by as $val) + { + $val = trim($val); + + if ($val != '') + { + $this->ar_groupby[] = $this->_protect_identifiers($val); + + if ($this->ar_caching === TRUE) + { + $this->ar_cache_groupby[] = $this->_protect_identifiers($val); + $this->ar_cache_exists[] = 'groupby'; + } + } + } + return $this; + } + + // -------------------------------------------------------------------- + + /** + * groupby() is an alias of group_by() + * this function is here for backwards compatibility, as + * groupby() has been deprecated + */ + function groupby($by) + { + return $this->group_by($by); + } + + // -------------------------------------------------------------------- + + /** + * Sets the HAVING value + * + * Separates multiple calls with AND + * + * @access public + * @param string + * @param string + * @return object + */ + function having($key, $value = '', $escape = TRUE) + { + return $this->_having($key, $value, 'AND ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * orhaving() is an alias of or_having() + * this function is here for backwards compatibility, as + * orhaving() has been deprecated + */ + + function orhaving($key, $value = '', $escape = TRUE) + { + return $this->or_having($key, $value, $escape); + } + // -------------------------------------------------------------------- + + /** + * Sets the OR HAVING value + * + * Separates multiple calls with OR + * + * @access public + * @param string + * @param string + * @return object + */ + function or_having($key, $value = '', $escape = TRUE) + { + return $this->_having($key, $value, 'OR ', $escape); + } + + // -------------------------------------------------------------------- + + /** + * Sets the HAVING values + * + * Called by having() or or_having() + * + * @access private + * @param string + * @param string + * @return object + */ + function _having($key, $value = '', $type = 'AND ', $escape = TRUE) + { + if ( ! is_array($key)) + { + $key = array($key => $value); + } + + foreach ($key as $k => $v) + { + $prefix = (count($this->ar_having) == 0) ? '' : $type; + + if ($escape === TRUE) + { + $k = $this->_protect_identifiers($k); + } + + if ( ! $this->_has_operator($k)) + { + $k .= ' = '; + } + + if ($v != '') + { + $v = ' '.$this->escape_str($v); + } + + $this->ar_having[] = $prefix.$k.$v; + if ($this->ar_caching === TRUE) + { + $this->ar_cache_having[] = $prefix.$k.$v; + $this->ar_cache_exists[] = 'having'; + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Sets the ORDER BY value + * + * @access public + * @param string + * @param string direction: asc or desc + * @return object + */ + function order_by($orderby, $direction = '') + { + if (strtolower($direction) == 'random') + { + $orderby = ''; // Random results want or don't need a field name + $direction = $this->_random_keyword; + } + elseif (trim($direction) != '') + { + $direction = (in_array(strtoupper(trim($direction)), array('ASC', 'DESC'), TRUE)) ? ' '.$direction : ' ASC'; + } + + + if (strpos($orderby, ',') !== FALSE) + { + $temp = array(); + foreach (explode(',', $orderby) as $part) + { + $part = trim($part); + if ( ! in_array($part, $this->ar_aliased_tables)) + { + $part = $this->_protect_identifiers(trim($part)); + } + + $temp[] = $part; + } + + $orderby = implode(', ', $temp); + } + else if ($direction != $this->_random_keyword) + { + $orderby = $this->_protect_identifiers($orderby); + } + + $orderby_statement = $orderby.$direction; + + $this->ar_orderby[] = $orderby_statement; + if ($this->ar_caching === TRUE) + { + $this->ar_cache_orderby[] = $orderby_statement; + $this->ar_cache_exists[] = 'orderby'; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * orderby() is an alias of order_by() + * this function is here for backwards compatibility, as + * orderby() has been deprecated + */ + function orderby($orderby, $direction = '') + { + return $this->order_by($orderby, $direction); + } + + // -------------------------------------------------------------------- + + /** + * Sets the LIMIT value + * + * @access public + * @param integer the limit value + * @param integer the offset value + * @return object + */ + function limit($value, $offset = '') + { + $this->ar_limit = $value; + + if ($offset != '') + { + $this->ar_offset = $offset; + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Sets the OFFSET value + * + * @access public + * @param integer the offset value + * @return object + */ + function offset($offset) + { + $this->ar_offset = $offset; + return $this; + } + + // -------------------------------------------------------------------- + + /** + * The "set" function. Allows key/value pairs to be set for inserting or updating + * + * @access public + * @param mixed + * @param string + * @param boolean + * @return object + */ + function set($key, $value = '', $escape = TRUE) + { + $key = $this->_object_to_array($key); + + if ( ! is_array($key)) + { + $key = array($key => $value); + } + + foreach ($key as $k => $v) + { + if ($escape === FALSE) + { + $this->ar_set[$this->_protect_identifiers($k)] = $v; + } + else + { + $this->ar_set[$this->_protect_identifiers($k)] = $this->escape($v); + } + } + + return $this; + } + + // -------------------------------------------------------------------- + + /** + * Get + * + * Compiles the select statement based on the other functions called + * and runs the query + * + * @access public + * @param string the table + * @param string the limit clause + * @param string the offset clause + * @return object + */ + function get($table = '', $limit = null, $offset = null) + { + if ($table != '') + { + $this->_track_aliases($table); + $this->from($table); + } + + if ( ! is_null($limit)) + { + $this->limit($limit, $offset); + } + + $sql = $this->_compile_select(); + + $result = $this->query($sql); + $this->_reset_select(); + return $result; + } + + /** + * "Count All Results" query + * + * Generates a platform-specific query string that counts all records + * returned by an Active Record query. + * + * @access public + * @param string + * @return string + */ + function count_all_results($table = '') + { + if ($table != '') + { + $this->_track_aliases($table); + $this->from($table); + } + + $sql = $this->_compile_select($this->_count_string . $this->_protect_identifiers('numrows')); + + $query = $this->query($sql); + $this->_reset_select(); + + if ($query->num_rows() == 0) + { + return '0'; + } + + $row = $query->row(); + return $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * Get_Where + * + * Allows the where clause, limit and offset to be added directly + * + * @access public + * @param string the where clause + * @param string the limit clause + * @param string the offset clause + * @return object + */ + function get_where($table = '', $where = null, $limit = null, $offset = null) + { + if ($table != '') + { + $this->from($table); + } + + if ( ! is_null($where)) + { + $this->where($where); + } + + if ( ! is_null($limit)) + { + $this->limit($limit, $offset); + } + + $sql = $this->_compile_select(); + + $result = $this->query($sql); + $this->_reset_select(); + return $result; + } + + // -------------------------------------------------------------------- + + /** + * getwhere() is an alias of get_where() + * this function is here for backwards compatibility, as + * getwhere() has been deprecated + */ + function getwhere($table = '', $where = null, $limit = null, $offset = null) + { + return $this->get_where($table, $where, $limit, $offset); + } + + // -------------------------------------------------------------------- + + /** + * Insert + * + * Compiles an insert string and runs the query + * + * @access public + * @param string the table to retrieve the results from + * @param array an associative array of insert values + * @return object + */ + function insert($table = '', $set = NULL) + { + if ( ! is_null($set)) + { + $this->set($set); + } + + if (count($this->ar_set) == 0) + { + if ($this->db_debug) + { + return $this->display_error('db_must_use_set'); + } + return FALSE; + } + + if ($table == '') + { + if ( ! isset($this->ar_from[0])) + { + if ($this->db_debug) + { + return $this->display_error('db_must_set_table'); + } + return FALSE; + } + + $table = $this->ar_from[0]; + } + + $sql = $this->_insert($this->_protect_identifiers($table, TRUE, NULL, FALSE), array_keys($this->ar_set), array_values($this->ar_set)); + + $this->_reset_write(); + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Update + * + * Compiles an update string and runs the query + * + * @access public + * @param string the table to retrieve the results from + * @param array an associative array of update values + * @param mixed the where clause + * @return object + */ + function update($table = '', $set = NULL, $where = NULL, $limit = NULL) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + if ( ! is_null($set)) + { + $this->set($set); + } + + if (count($this->ar_set) == 0) + { + if ($this->db_debug) + { + return $this->display_error('db_must_use_set'); + } + return FALSE; + } + + if ($table == '') + { + if ( ! isset($this->ar_from[0])) + { + if ($this->db_debug) + { + return $this->display_error('db_must_set_table'); + } + return FALSE; + } + + $table = $this->ar_from[0]; + } + + if ($where != NULL) + { + $this->where($where); + } + + if ($limit != NULL) + { + $this->limit($limit); + } + + $sql = $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $this->ar_set, $this->ar_where, $this->ar_orderby, $this->ar_limit); + + $this->_reset_write(); + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Empty Table + * + * Compiles a delete string and runs "DELETE FROM table" + * + * @access public + * @param string the table to empty + * @return object + */ + function empty_table($table = '') + { + if ($table == '') + { + if ( ! isset($this->ar_from[0])) + { + if ($this->db_debug) + { + return $this->display_error('db_must_set_table'); + } + return FALSE; + } + + $table = $this->ar_from[0]; + } + else + { + $table = $this->_protect_identifiers($table, TRUE, NULL, FALSE); + } + + $sql = $this->_delete($table); + + $this->_reset_write(); + + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Truncate + * + * Compiles a truncate string and runs the query + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table to truncate + * @return object + */ + function truncate($table = '') + { + if ($table == '') + { + if ( ! isset($this->ar_from[0])) + { + if ($this->db_debug) + { + return $this->display_error('db_must_set_table'); + } + return FALSE; + } + + $table = $this->ar_from[0]; + } + else + { + $table = $this->_protect_identifiers($table, TRUE, NULL, FALSE); + } + + $sql = $this->_truncate($table); + + $this->_reset_write(); + + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Delete + * + * Compiles a delete string and runs the query + * + * @access public + * @param mixed the table(s) to delete from. String or array + * @param mixed the where clause + * @param mixed the limit clause + * @param boolean + * @return object + */ + function delete($table = '', $where = '', $limit = NULL, $reset_data = TRUE) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + if ($table == '') + { + if ( ! isset($this->ar_from[0])) + { + if ($this->db_debug) + { + return $this->display_error('db_must_set_table'); + } + return FALSE; + } + + $table = $this->ar_from[0]; + } + elseif (is_array($table)) + { + foreach($table as $single_table) + { + $this->delete($single_table, $where, $limit, FALSE); + } + + $this->_reset_write(); + return; + } + else + { + $table = $this->_protect_identifiers($table, TRUE, NULL, FALSE); + } + + if ($where != '') + { + $this->where($where); + } + + if ($limit != NULL) + { + $this->limit($limit); + } + + if (count($this->ar_where) == 0 && count($this->ar_wherein) == 0 && count($this->ar_like) == 0) + { + if ($this->db_debug) + { + return $this->display_error('db_del_must_use_where'); + } + + return FALSE; + } + + $sql = $this->_delete($table, $this->ar_where, $this->ar_like, $this->ar_limit); + + if ($reset_data) + { + $this->_reset_write(); + } + + return $this->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * DB Prefix + * + * Prepends a database prefix if one exists in configuration + * + * @access public + * @param string the table + * @return string + */ + function dbprefix($table = '') + { + if ($table == '') + { + $this->display_error('db_table_name_required'); + } + + return $this->dbprefix.$table; + } + + // -------------------------------------------------------------------- + + /** + * Track Aliases + * + * Used to track SQL statements written with aliased tables. + * + * @access private + * @param string The table to inspect + * @return string + */ + function _track_aliases($table) + { + if (is_array($table)) + { + foreach ($table as $t) + { + $this->_track_aliases($t); + } + return; + } + + // Does the string contain a comma? If so, we need to separate + // the string into discreet statements + if (strpos($table, ',') !== FALSE) + { + return $this->_track_aliases(explode(',', $table)); + } + + // if a table alias is used we can recognize it by a space + if (strpos($table, " ") !== FALSE) + { + // if the alias is written with the AS keyword, remove it + $table = preg_replace('/ AS /i', ' ', $table); + + // Grab the alias + $table = trim(strrchr($table, " ")); + + // Store the alias, if it doesn't already exist + if ( ! in_array($table, $this->ar_aliased_tables)) + { + $this->ar_aliased_tables[] = $table; + } + } + } + + // -------------------------------------------------------------------- + + /** + * Compile the SELECT statement + * + * Generates a query string based on which functions were used. + * Should not be called directly. The get() function calls it. + * + * @access private + * @return string + */ + function _compile_select($select_override = FALSE) + { + // Combine any cached components with the current statements + $this->_merge_cache(); + + // ---------------------------------------------------------------- + + // Write the "select" portion of the query + + if ($select_override !== FALSE) + { + $sql = $select_override; + } + else + { + $sql = ( ! $this->ar_distinct) ? 'SELECT ' : 'SELECT DISTINCT '; + + if (count($this->ar_select) == 0) + { + $sql .= '*'; + } + else + { + // Cycle through the "select" portion of the query and prep each column name. + // The reason we protect identifiers here rather then in the select() function + // is because until the user calls the from() function we don't know if there are aliases + foreach ($this->ar_select as $key => $val) + { + $this->ar_select[$key] = $this->_protect_identifiers($val); + } + + $sql .= implode(', ', $this->ar_select); + } + } + + // ---------------------------------------------------------------- + + // Write the "FROM" portion of the query + + if (count($this->ar_from) > 0) + { + $sql .= "\nFROM "; + + $sql .= $this->_from_tables($this->ar_from); + } + + // ---------------------------------------------------------------- + + // Write the "JOIN" portion of the query + + if (count($this->ar_join) > 0) + { + $sql .= "\n"; + + $sql .= implode("\n", $this->ar_join); + } + + // ---------------------------------------------------------------- + + // Write the "WHERE" portion of the query + + if (count($this->ar_where) > 0 OR count($this->ar_like) > 0) + { + $sql .= "\n"; + + $sql .= "WHERE "; + } + + $sql .= implode("\n", $this->ar_where); + + // ---------------------------------------------------------------- + + // Write the "LIKE" portion of the query + + if (count($this->ar_like) > 0) + { + if (count($this->ar_where) > 0) + { + $sql .= "\nAND "; + } + + $sql .= implode("\n", $this->ar_like); + } + + // ---------------------------------------------------------------- + + // Write the "GROUP BY" portion of the query + + if (count($this->ar_groupby) > 0) + { + $sql .= "\nGROUP BY "; + + $sql .= implode(', ', $this->ar_groupby); + } + + // ---------------------------------------------------------------- + + // Write the "HAVING" portion of the query + + if (count($this->ar_having) > 0) + { + $sql .= "\nHAVING "; + $sql .= implode("\n", $this->ar_having); + } + + // ---------------------------------------------------------------- + + // Write the "ORDER BY" portion of the query + + if (count($this->ar_orderby) > 0) + { + $sql .= "\nORDER BY "; + $sql .= implode(', ', $this->ar_orderby); + + if ($this->ar_order !== FALSE) + { + $sql .= ($this->ar_order == 'desc') ? ' DESC' : ' ASC'; + } + } + + // ---------------------------------------------------------------- + + // Write the "LIMIT" portion of the query + + if (is_numeric($this->ar_limit)) + { + $sql .= "\n"; + $sql = $this->_limit($sql, $this->ar_limit, $this->ar_offset); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Object to Array + * + * Takes an object as input and converts the class variables to array key/vals + * + * @access public + * @param object + * @return array + */ + function _object_to_array($object) + { + if ( ! is_object($object)) + { + return $object; + } + + $array = array(); + foreach (get_object_vars($object) as $key => $val) + { + // There are some built in keys we need to ignore for this conversion + if ( ! is_object($val) && ! is_array($val) && $key != '_parent_name' && $key != '_ci_scaffolding' && $key != '_ci_scaff_table') + { + $array[$key] = $val; + } + } + + return $array; + } + + // -------------------------------------------------------------------- + + /** + * Start Cache + * + * Starts AR caching + * + * @access public + * @return void + */ + function start_cache() + { + $this->ar_caching = TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Stop Cache + * + * Stops AR caching + * + * @access public + * @return void + */ + function stop_cache() + { + $this->ar_caching = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Flush Cache + * + * Empties the AR cache + * + * @access public + * @return void + */ + function flush_cache() + { + $this->_reset_run( + array( + 'ar_cache_select' => array(), + 'ar_cache_from' => array(), + 'ar_cache_join' => array(), + 'ar_cache_where' => array(), + 'ar_cache_like' => array(), + 'ar_cache_groupby' => array(), + 'ar_cache_having' => array(), + 'ar_cache_orderby' => array(), + 'ar_cache_set' => array(), + 'ar_cache_exists' => array() + ) + ); + } + + // -------------------------------------------------------------------- + + /** + * Merge Cache + * + * When called, this function merges any cached AR arrays with + * locally called ones. + * + * @access private + * @return void + */ + function _merge_cache() + { + if (count($this->ar_cache_exists) == 0) + { + return; + } + + foreach ($this->ar_cache_exists as $val) + { + $ar_variable = 'ar_'.$val; + $ar_cache_var = 'ar_cache_'.$val; + + if (count($this->$ar_cache_var) == 0) + { + continue; + } + + $this->$ar_variable = array_unique(array_merge($this->$ar_cache_var, $this->$ar_variable)); + } + + // If we are "protecting identifiers" we need to examine the "from" + // portion of the query to determine if there are any aliases + if ($this->_protect_identifiers === TRUE AND count($this->ar_cache_from) > 0) + { + $this->_track_aliases($this->ar_from); + } + } + + // -------------------------------------------------------------------- + + /** + * Resets the active record values. Called by the get() function + * + * @access private + * @param array An array of fields to reset + * @return void + */ + function _reset_run($ar_reset_items) + { + foreach ($ar_reset_items as $item => $default_value) + { + if ( ! in_array($item, $this->ar_store_array)) + { + $this->$item = $default_value; + } + } + } + + // -------------------------------------------------------------------- + + /** + * Resets the active record values. Called by the get() function + * + * @access private + * @return void + */ + function _reset_select() + { + $ar_reset_items = array( + 'ar_select' => array(), + 'ar_from' => array(), + 'ar_join' => array(), + 'ar_where' => array(), + 'ar_like' => array(), + 'ar_groupby' => array(), + 'ar_having' => array(), + 'ar_orderby' => array(), + 'ar_wherein' => array(), + 'ar_aliased_tables' => array(), + 'ar_distinct' => FALSE, + 'ar_limit' => FALSE, + 'ar_offset' => FALSE, + 'ar_order' => FALSE, + ); + + $this->_reset_run($ar_reset_items); + } + + // -------------------------------------------------------------------- + + /** + * Resets the active record "write" values. + * + * Called by the insert() update() and delete() functions + * + * @access private + * @return void + */ + function _reset_write() + { + $ar_reset_items = array( + 'ar_set' => array(), + 'ar_from' => array(), + 'ar_where' => array(), + 'ar_like' => array(), + 'ar_orderby' => array(), + 'ar_limit' => FALSE, + 'ar_order' => FALSE + ); + + $this->_reset_run($ar_reset_items); + } + +} + +/* End of file DB_active_rec.php */ +/* Location: ./system/database/DB_active_rec.php */ \ No newline at end of file diff --git a/system/database/DB_cache.php b/system/database/DB_cache.php new file mode 100644 index 0000000..8b0ad4f --- /dev/null +++ b/system/database/DB_cache.php @@ -0,0 +1,195 @@ +CI + // and load the file helper since we use it a lot + $this->CI =& get_instance(); + $this->db =& $db; + $this->CI->load->helper('file'); + } + + // -------------------------------------------------------------------- + + /** + * Set Cache Directory Path + * + * @access public + * @param string the path to the cache directory + * @return bool + */ + function check_path($path = '') + { + if ($path == '') + { + if ($this->db->cachedir == '') + { + return $this->db->cache_off(); + } + + $path = $this->db->cachedir; + } + + // Add a trailing slash to the path if needed + $path = preg_replace("/(.+?)\/*$/", "\\1/", $path); + + if ( ! is_dir($path) OR ! is_really_writable($path)) + { + // If the path is wrong we'll turn off caching + return $this->db->cache_off(); + } + + $this->db->cachedir = $path; + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Retrieve a cached query + * + * The URI being requested will become the name of the cache sub-folder. + * An MD5 hash of the SQL statement will become the cache file name + * + * @access public + * @return string + */ + function read($sql) + { + if ( ! $this->check_path()) + { + return $this->db->cache_off(); + } + + $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1); + + $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2); + + $filepath = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'.md5($sql); + + if (FALSE === ($cachedata = read_file($filepath))) + { + return FALSE; + } + + return unserialize($cachedata); + } + + // -------------------------------------------------------------------- + + /** + * Write a query to a cache file + * + * @access public + * @return bool + */ + function write($sql, $object) + { + if ( ! $this->check_path()) + { + return $this->db->cache_off(); + } + + $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1); + + $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2); + + $dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'; + + $filename = md5($sql); + + if ( ! @is_dir($dir_path)) + { + if ( ! @mkdir($dir_path, DIR_WRITE_MODE)) + { + return FALSE; + } + + @chmod($dir_path, DIR_WRITE_MODE); + } + + if (write_file($dir_path.$filename, serialize($object)) === FALSE) + { + return FALSE; + } + + @chmod($dir_path.$filename, DIR_WRITE_MODE); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Delete cache files within a particular directory + * + * @access public + * @return bool + */ + function delete($segment_one = '', $segment_two = '') + { + if ($segment_one == '') + { + $segment_one = ($this->CI->uri->segment(1) == FALSE) ? 'default' : $this->CI->uri->segment(1); + } + + if ($segment_two == '') + { + $segment_two = ($this->CI->uri->segment(2) == FALSE) ? 'index' : $this->CI->uri->segment(2); + } + + $dir_path = $this->db->cachedir.$segment_one.'+'.$segment_two.'/'; + + delete_files($dir_path, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Delete all existing cache files + * + * @access public + * @return bool + */ + function delete_all() + { + delete_files($this->db->cachedir, TRUE); + } + +} + + +/* End of file DB_cache.php */ +/* Location: ./system/database/DB_cache.php */ \ No newline at end of file diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php new file mode 100644 index 0000000..014dfd4 --- /dev/null +++ b/system/database/DB_driver.php @@ -0,0 +1,1366 @@ + $val) + { + $this->$key = $val; + } + } + + log_message('debug', 'Database Driver Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * Initialize Database Settings + * + * @access private Called by the constructor + * @param mixed + * @return void + */ + function initialize() + { + // If an existing connection resource is available + // there is no need to connect and select the database + if (is_resource($this->conn_id) OR is_object($this->conn_id)) + { + return TRUE; + } + + // ---------------------------------------------------------------- + + // Connect to the database and set the connection ID + $this->conn_id = ($this->pconnect == FALSE) ? $this->db_connect() : $this->db_pconnect(); + + // No connection resource? Throw an error + if ( ! $this->conn_id) + { + log_message('error', 'Unable to connect to the database'); + + if ($this->db_debug) + { + $this->display_error('db_unable_to_connect'); + } + return FALSE; + } + + // ---------------------------------------------------------------- + + // Select the DB... assuming a database name is specified in the config file + if ($this->database != '') + { + if ( ! $this->db_select()) + { + log_message('error', 'Unable to select database: '.$this->database); + + if ($this->db_debug) + { + $this->display_error('db_unable_to_select', $this->database); + } + return FALSE; + } + else + { + // We've selected the DB. Now we set the character set + if ( ! $this->db_set_charset($this->char_set, $this->dbcollat)) + { + return FALSE; + } + + return TRUE; + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access public + * @param string + * @param string + * @return resource + */ + function db_set_charset($charset, $collation) + { + if ( ! $this->_db_set_charset($this->char_set, $this->dbcollat)) + { + log_message('error', 'Unable to set database connection charset: '.$this->char_set); + + if ($this->db_debug) + { + $this->display_error('db_unable_to_set_charset', $this->char_set); + } + + return FALSE; + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * The name of the platform in use (mysql, mssql, etc...) + * + * @access public + * @return string + */ + function platform() + { + return $this->dbdriver; + } + + // -------------------------------------------------------------------- + + /** + * Database Version Number. Returns a string containing the + * version of the database being used + * + * @access public + * @return string + */ + function version() + { + if (FALSE === ($sql = $this->_version())) + { + if ($this->db_debug) + { + return $this->display_error('db_unsupported_function'); + } + return FALSE; + } + + if ($this->dbdriver == 'oci8') + { + return $sql; + } + + $query = $this->query($sql); + return $query->row('ver'); + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * Accepts an SQL string as input and returns a result object upon + * successful execution of a "read" type query. Returns boolean TRUE + * upon successful execution of a "write" type query. Returns boolean + * FALSE upon failure, and if the $db_debug variable is set to TRUE + * will raise an error. + * + * @access public + * @param string An SQL query string + * @param array An array of binding data + * @return mixed + */ + function query($sql, $binds = FALSE, $return_object = TRUE) + { + if ($sql == '') + { + if ($this->db_debug) + { + log_message('error', 'Invalid query: '.$sql); + return $this->display_error('db_invalid_query'); + } + return FALSE; + } + + // Verify table prefix and replace if necessary + if ( ($this->dbprefix != '' AND $this->swap_pre != '') AND ($this->dbprefix != $this->swap_pre) ) + { + $sql = preg_replace("/(\W)".$this->swap_pre."(\S+?)/", "\\1".$this->dbprefix."\\2", $sql); + } + + // Is query caching enabled? If the query is a "read type" + // we will load the caching class and return the previously + // cached query if it exists + if ($this->cache_on == TRUE AND stristr($sql, 'SELECT')) + { + if ($this->_cache_init()) + { + $this->load_rdriver(); + if (FALSE !== ($cache = $this->CACHE->read($sql))) + { + return $cache; + } + } + } + + // Compile binds if needed + if ($binds !== FALSE) + { + $sql = $this->compile_binds($sql, $binds); + } + + // Save the query for debugging + if ($this->save_queries == TRUE) + { + $this->queries[] = $sql; + } + + // Start the Query Timer + $time_start = list($sm, $ss) = explode(' ', microtime()); + + // Run the Query + if (FALSE === ($this->result_id = $this->simple_query($sql))) + { + if ($this->save_queries == TRUE) + { + $this->query_times[] = 0; + } + + // This will trigger a rollback if transactions are being used + $this->_trans_status = FALSE; + + if ($this->db_debug) + { + // grab the error number and message now, as we might run some + // additional queries before displaying the error + $error_no = $this->_error_number(); + $error_msg = $this->_error_message(); + + // We call this function in order to roll-back queries + // if transactions are enabled. If we don't call this here + // the error message will trigger an exit, causing the + // transactions to remain in limbo. + $this->trans_complete(); + + // Log and display errors + log_message('error', 'Query error: '.$error_msg); + return $this->display_error( + array( + 'Error Number: '.$error_no, + $error_msg, + $sql + ) + ); + } + + return FALSE; + } + + // Stop and aggregate the query time results + $time_end = list($em, $es) = explode(' ', microtime()); + $this->benchmark += ($em + $es) - ($sm + $ss); + + if ($this->save_queries == TRUE) + { + $this->query_times[] = ($em + $es) - ($sm + $ss); + } + + // Increment the query counter + $this->query_count++; + + // Was the query a "write" type? + // If so we'll simply return true + if ($this->is_write_type($sql) === TRUE) + { + // If caching is enabled we'll auto-cleanup any + // existing files related to this particular URI + if ($this->cache_on == TRUE AND $this->cache_autodel == TRUE AND $this->_cache_init()) + { + $this->CACHE->delete(); + } + + return TRUE; + } + + // Return TRUE if we don't need to create a result object + // Currently only the Oracle driver uses this when stored + // procedures are used + if ($return_object !== TRUE) + { + return TRUE; + } + + // Load and instantiate the result driver + + $driver = $this->load_rdriver(); + $RES = new $driver(); + $RES->conn_id = $this->conn_id; + $RES->result_id = $this->result_id; + + if ($this->dbdriver == 'oci8') + { + $RES->stmt_id = $this->stmt_id; + $RES->curs_id = NULL; + $RES->limit_used = $this->limit_used; + $this->stmt_id = FALSE; + } + + // oci8 vars must be set before calling this + $RES->num_rows = $RES->num_rows(); + + // Is query caching enabled? If so, we'll serialize the + // result object and save it to a cache file. + if ($this->cache_on == TRUE AND $this->_cache_init()) + { + // We'll create a new instance of the result object + // only without the platform specific driver since + // we can't use it with cached data (the query result + // resource ID won't be any good once we've cached the + // result object, so we'll have to compile the data + // and save it) + $CR = new CI_DB_result(); + $CR->num_rows = $RES->num_rows(); + $CR->result_object = $RES->result_object(); + $CR->result_array = $RES->result_array(); + + // Reset these since cached objects can not utilize resource IDs. + $CR->conn_id = NULL; + $CR->result_id = NULL; + + $this->CACHE->write($sql, $CR); + } + + return $RES; + } + + // -------------------------------------------------------------------- + + /** + * Load the result drivers + * + * @access public + * @return string the name of the result class + */ + function load_rdriver() + { + $driver = 'CI_DB_'.$this->dbdriver.'_result'; + + if ( ! class_exists($driver)) + { + include_once(BASEPATH.'database/DB_result'.EXT); + include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result'.EXT); + } + + return $driver; + } + + // -------------------------------------------------------------------- + + /** + * Simple Query + * This is a simplified version of the query() function. Internally + * we only use it when running transaction commands since they do + * not require all the features of the main query() function. + * + * @access public + * @param string the sql query + * @return mixed + */ + function simple_query($sql) + { + if ( ! $this->conn_id) + { + $this->initialize(); + } + + return $this->_execute($sql); + } + + // -------------------------------------------------------------------- + + /** + * Disable Transactions + * This permits transactions to be disabled at run-time. + * + * @access public + * @return void + */ + function trans_off() + { + $this->trans_enabled = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Enable/disable Transaction Strict Mode + * When strict mode is enabled, if you are running multiple groups of + * transactions, if one group fails all groups will be rolled back. + * If strict mode is disabled, each group is treated autonomously, meaning + * a failure of one group will not affect any others + * + * @access public + * @return void + */ + function trans_strict($mode = TRUE) + { + $this->trans_strict = is_bool($mode) ? $mode : TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Start Transaction + * + * @access public + * @return void + */ + function trans_start($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return FALSE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + $this->_trans_depth += 1; + return; + } + + $this->trans_begin($test_mode); + } + + // -------------------------------------------------------------------- + + /** + * Complete Transaction + * + * @access public + * @return bool + */ + function trans_complete() + { + if ( ! $this->trans_enabled) + { + return FALSE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 1) + { + $this->_trans_depth -= 1; + return TRUE; + } + + // The query() function will set this flag to FALSE in the event that a query failed + if ($this->_trans_status === FALSE) + { + $this->trans_rollback(); + + // If we are NOT running in strict mode, we will reset + // the _trans_status flag so that subsequent groups of transactions + // will be permitted. + if ($this->trans_strict === FALSE) + { + $this->_trans_status = TRUE; + } + + log_message('debug', 'DB Transaction Failure'); + return FALSE; + } + + $this->trans_commit(); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Lets you retrieve the transaction flag to determine if it has failed + * + * @access public + * @return bool + */ + function trans_status() + { + return $this->_trans_status; + } + + // -------------------------------------------------------------------- + + /** + * Compile Bindings + * + * @access public + * @param string the sql statement + * @param array an array of bind data + * @return string + */ + function compile_binds($sql, $binds) + { + if (strpos($sql, $this->bind_marker) === FALSE) + { + return $sql; + } + + if ( ! is_array($binds)) + { + $binds = array($binds); + } + + // Get the sql segments around the bind markers + $segments = explode($this->bind_marker, $sql); + + // The count of bind should be 1 less then the count of segments + // If there are more bind arguments trim it down + if (count($binds) >= count($segments)) { + $binds = array_slice($binds, 0, count($segments)-1); + } + + // Construct the binded query + $result = $segments[0]; + $i = 0; + foreach ($binds as $bind) + { + $result .= $this->escape($bind); + $result .= $segments[++$i]; + } + + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Determines if a query is a "write" type. + * + * @access public + * @param string An SQL query string + * @return boolean + */ + function is_write_type($sql) + { + if ( ! preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD DATA|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK)\s+/i', $sql)) + { + return FALSE; + } + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Calculate the aggregate query elapsed time + * + * @access public + * @param integer The number of decimal places + * @return integer + */ + function elapsed_time($decimals = 6) + { + return number_format($this->benchmark, $decimals); + } + + // -------------------------------------------------------------------- + + /** + * Returns the total number of queries + * + * @access public + * @return integer + */ + function total_queries() + { + return $this->query_count; + } + + // -------------------------------------------------------------------- + + /** + * Returns the last query that was executed + * + * @access public + * @return void + */ + function last_query() + { + return end($this->queries); + } + + // -------------------------------------------------------------------- + + /** + * "Smart" Escape String + * + * Escapes data based on type + * Sets boolean and null types + * + * @access public + * @param string + * @return mixed + */ + function escape($str) + { + if (is_string($str)) + { + $str = "'".$this->escape_str($str)."'"; + } + elseif (is_bool($str)) + { + $str = ($str === FALSE) ? 0 : 1; + } + elseif (is_null($str)) + { + $str = 'NULL'; + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Escape LIKE String + * + * Calls the individual driver for platform + * specific escaping for LIKE conditions + * + * @access public + * @param string + * @return mixed + */ + function escape_like_str($str) + { + return $this->escape_str($str, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Primary + * + * Retrieves the primary key. It assumes that the row in the first + * position is the primary key + * + * @access public + * @param string the table name + * @return string + */ + function primary($table = '') + { + $fields = $this->list_fields($table); + + if ( ! is_array($fields)) + { + return FALSE; + } + + return current($fields); + } + + // -------------------------------------------------------------------- + + /** + * Returns an array of table names + * + * @access public + * @return array + */ + function list_tables($constrain_by_prefix = FALSE) + { + // Is there a cached result? + if (isset($this->data_cache['table_names'])) + { + return $this->data_cache['table_names']; + } + + if (FALSE === ($sql = $this->_list_tables($constrain_by_prefix))) + { + if ($this->db_debug) + { + return $this->display_error('db_unsupported_function'); + } + return FALSE; + } + + $retval = array(); + $query = $this->query($sql); + + if ($query->num_rows() > 0) + { + foreach($query->result_array() as $row) + { + if (isset($row['TABLE_NAME'])) + { + $retval[] = $row['TABLE_NAME']; + } + else + { + $retval[] = array_shift($row); + } + } + } + + $this->data_cache['table_names'] = $retval; + return $this->data_cache['table_names']; + } + + // -------------------------------------------------------------------- + + /** + * Determine if a particular table exists + * @access public + * @return boolean + */ + function table_exists($table_name) + { + return ( ! in_array($this->_protect_identifiers($table_name, TRUE, FALSE, FALSE), $this->list_tables())) ? FALSE : TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Fetch MySQL Field Names + * + * @access public + * @param string the table name + * @return array + */ + function list_fields($table = '') + { + // Is there a cached result? + if (isset($this->data_cache['field_names'][$table])) + { + return $this->data_cache['field_names'][$table]; + } + + if ($table == '') + { + if ($this->db_debug) + { + return $this->display_error('db_field_param_missing'); + } + return FALSE; + } + + if (FALSE === ($sql = $this->_list_columns($this->_protect_identifiers($table, TRUE, NULL, FALSE)))) + { + if ($this->db_debug) + { + return $this->display_error('db_unsupported_function'); + } + return FALSE; + } + + $query = $this->query($sql); + + $retval = array(); + foreach($query->result_array() as $row) + { + if (isset($row['COLUMN_NAME'])) + { + $retval[] = $row['COLUMN_NAME']; + } + else + { + $retval[] = current($row); + } + } + + $this->data_cache['field_names'][$table] = $retval; + return $this->data_cache['field_names'][$table]; + } + + // -------------------------------------------------------------------- + + /** + * Determine if a particular field exists + * @access public + * @param string + * @param string + * @return boolean + */ + function field_exists($field_name, $table_name) + { + return ( ! in_array($field_name, $this->list_fields($table_name))) ? FALSE : TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Returns an object with field data + * + * @access public + * @param string the table name + * @return object + */ + function field_data($table = '') + { + if ($table == '') + { + if ($this->db_debug) + { + return $this->display_error('db_field_param_missing'); + } + return FALSE; + } + + $query = $this->query($this->_field_data($this->_protect_identifiers($table, TRUE, NULL, FALSE))); + + return $query->field_data(); + } + + // -------------------------------------------------------------------- + + /** + * Generate an insert string + * + * @access public + * @param string the table upon which the query will be performed + * @param array an associative array data of key/values + * @return string + */ + function insert_string($table, $data) + { + $fields = array(); + $values = array(); + + foreach($data as $key => $val) + { + $fields[] = $this->_escape_identifiers($key); + $values[] = $this->escape($val); + } + + return $this->_insert($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $values); + } + + // -------------------------------------------------------------------- + + /** + * Generate an update string + * + * @access public + * @param string the table upon which the query will be performed + * @param array an associative array data of key/values + * @param mixed the "where" statement + * @return string + */ + function update_string($table, $data, $where) + { + if ($where == '') + { + return false; + } + + $fields = array(); + foreach($data as $key => $val) + { + $fields[$this->_protect_identifiers($key)] = $this->escape($val); + } + + if ( ! is_array($where)) + { + $dest = array($where); + } + else + { + $dest = array(); + foreach ($where as $key => $val) + { + $prefix = (count($dest) == 0) ? '' : ' AND '; + + if ($val !== '') + { + if ( ! $this->_has_operator($key)) + { + $key .= ' ='; + } + + $val = ' '.$this->escape($val); + } + + $dest[] = $prefix.$key.$val; + } + } + + return $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $dest); + } + + // -------------------------------------------------------------------- + + /** + * Tests whether the string has an SQL operator + * + * @access private + * @param string + * @return bool + */ + function _has_operator($str) + { + $str = trim($str); + if ( ! preg_match("/(\s|<|>|!|=|is null|is not null)/i", $str)) + { + return FALSE; + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Enables a native PHP function to be run, using a platform agnostic wrapper. + * + * @access public + * @param string the function name + * @param mixed any parameters needed by the function + * @return mixed + */ + function call_function($function) + { + $driver = ($this->dbdriver == 'postgre') ? 'pg_' : $this->dbdriver.'_'; + + if (FALSE === strpos($driver, $function)) + { + $function = $driver.$function; + } + + if ( ! function_exists($function)) + { + if ($this->db_debug) + { + return $this->display_error('db_unsupported_function'); + } + return FALSE; + } + else + { + $args = (func_num_args() > 1) ? array_splice(func_get_args(), 1) : null; + + return call_user_func_array($function, $args); + } + } + + // -------------------------------------------------------------------- + + /** + * Set Cache Directory Path + * + * @access public + * @param string the path to the cache directory + * @return void + */ + function cache_set_path($path = '') + { + $this->cachedir = $path; + } + + // -------------------------------------------------------------------- + + /** + * Enable Query Caching + * + * @access public + * @return void + */ + function cache_on() + { + $this->cache_on = TRUE; + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Disable Query Caching + * + * @access public + * @return void + */ + function cache_off() + { + $this->cache_on = FALSE; + return FALSE; + } + + + // -------------------------------------------------------------------- + + /** + * Delete the cache files associated with a particular URI + * + * @access public + * @return void + */ + function cache_delete($segment_one = '', $segment_two = '') + { + if ( ! $this->_cache_init()) + { + return FALSE; + } + return $this->CACHE->delete($segment_one, $segment_two); + } + + // -------------------------------------------------------------------- + + /** + * Delete All cache files + * + * @access public + * @return void + */ + function cache_delete_all() + { + if ( ! $this->_cache_init()) + { + return FALSE; + } + + return $this->CACHE->delete_all(); + } + + // -------------------------------------------------------------------- + + /** + * Initialize the Cache Class + * + * @access private + * @return void + */ + function _cache_init() + { + if (is_object($this->CACHE) AND class_exists('CI_DB_Cache')) + { + return TRUE; + } + + if ( ! class_exists('CI_DB_Cache')) + { + if ( ! @include(BASEPATH.'database/DB_cache'.EXT)) + { + return $this->cache_off(); + } + } + + $this->CACHE = new CI_DB_Cache($this); // pass db object to support multiple db connections and returned db objects + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @return void + */ + function close() + { + if (is_resource($this->conn_id) OR is_object($this->conn_id)) + { + $this->_close($this->conn_id); + } + $this->conn_id = FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Display an error message + * + * @access public + * @param string the error message + * @param string any "swap" values + * @param boolean whether to localize the message + * @return string sends the application/error_db.php template + */ + function display_error($error = '', $swap = '', $native = FALSE) + { + $LANG =& load_class('Language'); + $LANG->load('db'); + + $heading = $LANG->line('db_error_heading'); + + if ($native == TRUE) + { + $message = $error; + } + else + { + $message = ( ! is_array($error)) ? array(str_replace('%s', $swap, $LANG->line($error))) : $error; + } + + $error =& load_class('Exceptions'); + echo $error->show_error($heading, $message, 'error_db'); + exit; + } + + // -------------------------------------------------------------------- + + /** + * Protect Identifiers + * + * This function adds backticks if appropriate based on db type + * + * @access private + * @param mixed the item to escape + * @return mixed the item with backticks + */ + function protect_identifiers($item, $prefix_single = FALSE) + { + return $this->_protect_identifiers($item, $prefix_single); + } + + // -------------------------------------------------------------------- + + /** + * Protect Identifiers + * + * This function is used extensively by the Active Record class, and by + * a couple functions in this class. + * It takes a column or table name (optionally with an alias) and inserts + * the table prefix onto it. Some logic is necessary in order to deal with + * column names that include the path. Consider a query like this: + * + * SELECT * FROM hostname.database.table.column AS c FROM hostname.database.table + * + * Or a query with aliasing: + * + * SELECT m.member_id, m.member_name FROM members AS m + * + * Since the column name can include up to four segments (host, DB, table, column) + * or also have an alias prefix, we need to do a bit of work to figure this out and + * insert the table prefix (if it exists) in the proper position, and escape only + * the correct identifiers. + * + * @access private + * @param string + * @param bool + * @param mixed + * @param bool + * @return string + */ + function _protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE) + { + if ( ! is_bool($protect_identifiers)) + { + $protect_identifiers = $this->_protect_identifiers; + } + + if (is_array($item)) + { + $escaped_array = array(); + + foreach($item as $k => $v) + { + $escaped_array[$this->_protect_identifiers($k)] = $this->_protect_identifiers($v); + } + + return $escaped_array; + } + + // Convert tabs or multiple spaces into single spaces + $item = preg_replace('/[\t ]+/', ' ', $item); + + // If the item has an alias declaration we remove it and set it aside. + // Basically we remove everything to the right of the first space + $alias = ''; + if (strpos($item, ' ') !== FALSE) + { + $alias = strstr($item, " "); + $item = substr($item, 0, - strlen($alias)); + } + + // This is basically a bug fix for queries that use MAX, MIN, etc. + // If a parenthesis is found we know that we do not need to + // escape the data or add a prefix. There's probably a more graceful + // way to deal with this, but I'm not thinking of it -- Rick + if (strpos($item, '(') !== FALSE) + { + return $item.$alias; + } + + // Break the string apart if it contains periods, then insert the table prefix + // in the correct location, assuming the period doesn't indicate that we're dealing + // with an alias. While we're at it, we will escape the components + if (strpos($item, '.') !== FALSE) + { + $parts = explode('.', $item); + + // Does the first segment of the exploded item match + // one of the aliases previously identified? If so, + // we have nothing more to do other than escape the item + if (in_array($parts[0], $this->ar_aliased_tables)) + { + if ($protect_identifiers === TRUE) + { + foreach ($parts as $key => $val) + { + if ( ! in_array($val, $this->_reserved_identifiers)) + { + $parts[$key] = $this->_escape_identifiers($val); + } + } + + $item = implode('.', $parts); + } + return $item.$alias; + } + + // Is there a table prefix defined in the config file? If not, no need to do anything + if ($this->dbprefix != '') + { + // We now add the table prefix based on some logic. + // Do we have 4 segments (hostname.database.table.column)? + // If so, we add the table prefix to the column name in the 3rd segment. + if (isset($parts[3])) + { + $i = 2; + } + // Do we have 3 segments (database.table.column)? + // If so, we add the table prefix to the column name in 2nd position + elseif (isset($parts[2])) + { + $i = 1; + } + // Do we have 2 segments (table.column)? + // If so, we add the table prefix to the column name in 1st segment + else + { + $i = 0; + } + + // This flag is set when the supplied $item does not contain a field name. + // This can happen when this function is being called from a JOIN. + if ($field_exists == FALSE) + { + $i++; + } + + // Verify table prefix and replace if necessary + if ($this->swap_pre != '' && strncmp($parts[$i], $this->swap_pre, strlen($this->swap_pre)) === 0) + { + $parts[$i] = preg_replace("/^".$this->swap_pre."(\S+?)/", $this->dbprefix."\\1", $parts[$i]); + } + + // We only add the table prefix if it does not already exist + if (substr($parts[$i], 0, strlen($this->dbprefix)) != $this->dbprefix) + { + $parts[$i] = $this->dbprefix.$parts[$i]; + } + + // Put the parts back together + $item = implode('.', $parts); + } + + if ($protect_identifiers === TRUE) + { + $item = $this->_escape_identifiers($item); + } + + return $item.$alias; + } + + // Is there a table prefix? If not, no need to insert it + if ($this->dbprefix != '') + { + // Verify table prefix and replace if necessary + if ($this->swap_pre != '' && strncmp($item, $this->swap_pre, strlen($this->swap_pre)) === 0) + { + $item = preg_replace("/^".$this->swap_pre."(\S+?)/", $this->dbprefix."\\1", $item); + } + + // Do we prefix an item with no segments? + if ($prefix_single == TRUE AND substr($item, 0, strlen($this->dbprefix)) != $this->dbprefix) + { + $item = $this->dbprefix.$item; + } + } + + if ($protect_identifiers === TRUE AND ! in_array($item, $this->_reserved_identifiers)) + { + $item = $this->_escape_identifiers($item); + } + + return $item.$alias; + } + + +} + + +/* End of file DB_driver.php */ +/* Location: ./system/database/DB_driver.php */ \ No newline at end of file diff --git a/system/database/DB_forge.php b/system/database/DB_forge.php new file mode 100644 index 0000000..4050e30 --- /dev/null +++ b/system/database/DB_forge.php @@ -0,0 +1,375 @@ +db + $CI =& get_instance(); + $this->db =& $CI->db; + log_message('debug', "Database Forge Class Initialized"); + } + + // -------------------------------------------------------------------- + + /** + * Create database + * + * @access public + * @param string the database name + * @return bool + */ + function create_database($db_name) + { + $sql = $this->_create_database($db_name); + + if (is_bool($sql)) + { + return $sql; + } + + return $this->db->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access public + * @param string the database name + * @return bool + */ + function drop_database($db_name) + { + $sql = $this->_drop_database($db_name); + + if (is_bool($sql)) + { + return $sql; + } + + return $this->db->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Add Key + * + * @access public + * @param string key + * @param string type + * @return void + */ + function add_key($key = '', $primary = FALSE) + { + if (is_array($key)) + { + foreach($key as $one) + { + $this->add_key($one, $primary); + } + + return; + } + + if ($key == '') + { + show_error('Key information is required for that operation.'); + } + + if ($primary === TRUE) + { + $this->primary_keys[] = $key; + } + else + { + $this->keys[] = $key; + } + } + + // -------------------------------------------------------------------- + + /** + * Add Field + * + * @access public + * @param string collation + * @return void + */ + function add_field($field = '') + { + if ($field == '') + { + show_error('Field information is required.'); + } + + if (is_string($field)) + { + if ($field == 'id') + { + $this->add_field(array( + 'id' => array( + 'type' => 'INT', + 'constraint' => 9, + 'auto_increment' => TRUE + ) + )); + $this->add_key('id', TRUE); + } + else + { + if (strpos($field, ' ') === FALSE) + { + show_error('Field information is required for that operation.'); + } + + $this->fields[] = $field; + } + } + + if (is_array($field)) + { + $this->fields = array_merge($this->fields, $field); + } + + } + + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @access public + * @param string the table name + * @return bool + */ + function create_table($table = '', $if_not_exists = FALSE) + { + if ($table == '') + { + show_error('A table name is required for that operation.'); + } + + if (count($this->fields) == 0) + { + show_error('Field information is required.'); + } + + $sql = $this->_create_table($this->db->dbprefix.$table, $this->fields, $this->primary_keys, $this->keys, $if_not_exists); + + $this->_reset(); + return $this->db->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * @access public + * @param string the table name + * @return bool + */ + function drop_table($table_name) + { + $sql = $this->_drop_table($this->db->dbprefix.$table_name); + + if (is_bool($sql)) + { + return $sql; + } + + return $this->db->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Rename Table + * + * @access public + * @param string the old table name + * @param string the new table name + * @return bool + */ + function rename_table($table_name, $new_table_name) + { + if ($table_name == '' OR $new_table_name == '') + { + show_error('A table name is required for that operation.'); + } + + $sql = $this->_rename_table($table_name, $new_table_name); + return $this->db->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Column Add + * + * @access public + * @param string the table name + * @param string the column name + * @param string the column definition + * @return bool + */ + function add_column($table = '', $field = array(), $after_field = '') + { + if ($table == '') + { + show_error('A table name is required for that operation.'); + } + + // add field info into field array, but we can only do one at a time + // so we cycle through + + foreach ($field as $k => $v) + { + $this->add_field(array($k => $field[$k])); + + if (count($this->fields) == 0) + { + show_error('Field information is required.'); + } + + $sql = $this->_alter_table('ADD', $this->db->dbprefix.$table, $this->fields, $after_field); + + $this->_reset(); + + if ($this->db->query($sql) === FALSE) + { + return FALSE; + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Column Drop + * + * @access public + * @param string the table name + * @param string the column name + * @return bool + */ + function drop_column($table = '', $column_name = '') + { + + if ($table == '') + { + show_error('A table name is required for that operation.'); + } + + if ($column_name == '') + { + show_error('A column name is required for that operation.'); + } + + $sql = $this->_alter_table('DROP', $this->db->dbprefix.$table, $column_name); + + return $this->db->query($sql); + } + + // -------------------------------------------------------------------- + + /** + * Column Modify + * + * @access public + * @param string the table name + * @param string the column name + * @param string the column definition + * @return bool + */ + function modify_column($table = '', $field = array()) + { + if ($table == '') + { + show_error('A table name is required for that operation.'); + } + + // add field info into field array, but we can only do one at a time + // so we cycle through + + foreach ($field as $k => $v) + { + $this->add_field(array($k => $field[$k])); + + if (count($this->fields) == 0) + { + show_error('Field information is required.'); + } + + $sql = $this->_alter_table('CHANGE', $this->db->dbprefix.$table, $this->fields); + + $this->_reset(); + + if ($this->db->query($sql) === FALSE) + { + return FALSE; + } + } + + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Reset + * + * Resets table creation vars + * + * @access private + * @return void + */ + function _reset() + { + $this->fields = array(); + $this->keys = array(); + $this->primary_keys = array(); + } + +} + +/* End of file DB_forge.php */ +/* Location: ./system/database/DB_forge.php */ \ No newline at end of file diff --git a/system/database/DB_result.php b/system/database/DB_result.php new file mode 100644 index 0000000..4614e29 --- /dev/null +++ b/system/database/DB_result.php @@ -0,0 +1,342 @@ +result_object() : $this->result_array(); + } + + // -------------------------------------------------------------------- + + /** + * Query result. "object" version. + * + * @access public + * @return object + */ + function result_object() + { + if (count($this->result_object) > 0) + { + return $this->result_object; + } + + // In the event that query caching is on the result_id variable + // will return FALSE since there isn't a valid SQL resource so + // we'll simply return an empty array. + if ($this->result_id === FALSE OR $this->num_rows() == 0) + { + return array(); + } + + $this->_data_seek(0); + while ($row = $this->_fetch_object()) + { + $this->result_object[] = $row; + } + + return $this->result_object; + } + + // -------------------------------------------------------------------- + + /** + * Query result. "array" version. + * + * @access public + * @return array + */ + function result_array() + { + if (count($this->result_array) > 0) + { + return $this->result_array; + } + + // In the event that query caching is on the result_id variable + // will return FALSE since there isn't a valid SQL resource so + // we'll simply return an empty array. + if ($this->result_id === FALSE OR $this->num_rows() == 0) + { + return array(); + } + + $this->_data_seek(0); + while ($row = $this->_fetch_assoc()) + { + $this->result_array[] = $row; + } + + return $this->result_array; + } + + // -------------------------------------------------------------------- + + /** + * Query result. Acts as a wrapper function for the following functions. + * + * @access public + * @param string + * @param string can be "object" or "array" + * @return mixed either a result object or array + */ + function row($n = 0, $type = 'object') + { + if ( ! is_numeric($n)) + { + // We cache the row data for subsequent uses + if ( ! is_array($this->row_data)) + { + $this->row_data = $this->row_array(0); + } + + // array_key_exists() instead of isset() to allow for MySQL NULL values + if (array_key_exists($n, $this->row_data)) + { + return $this->row_data[$n]; + } + // reset the $n variable if the result was not achieved + $n = 0; + } + + return ($type == 'object') ? $this->row_object($n) : $this->row_array($n); + } + + // -------------------------------------------------------------------- + + /** + * Assigns an item into a particular column slot + * + * @access public + * @return object + */ + function set_row($key, $value = NULL) + { + // We cache the row data for subsequent uses + if ( ! is_array($this->row_data)) + { + $this->row_data = $this->row_array(0); + } + + if (is_array($key)) + { + foreach ($key as $k => $v) + { + $this->row_data[$k] = $v; + } + + return; + } + + if ($key != '' AND ! is_null($value)) + { + $this->row_data[$key] = $value; + } + } + + // -------------------------------------------------------------------- + + /** + * Returns a single result row - object version + * + * @access public + * @return object + */ + function row_object($n = 0) + { + $result = $this->result_object(); + + if (count($result) == 0) + { + return $result; + } + + if ($n != $this->current_row AND isset($result[$n])) + { + $this->current_row = $n; + } + + return $result[$this->current_row]; + } + + // -------------------------------------------------------------------- + + /** + * Returns a single result row - array version + * + * @access public + * @return array + */ + function row_array($n = 0) + { + $result = $this->result_array(); + + if (count($result) == 0) + { + return $result; + } + + if ($n != $this->current_row AND isset($result[$n])) + { + $this->current_row = $n; + } + + return $result[$this->current_row]; + } + + + // -------------------------------------------------------------------- + + /** + * Returns the "first" row + * + * @access public + * @return object + */ + function first_row($type = 'object') + { + $result = $this->result($type); + + if (count($result) == 0) + { + return $result; + } + return $result[0]; + } + + // -------------------------------------------------------------------- + + /** + * Returns the "last" row + * + * @access public + * @return object + */ + function last_row($type = 'object') + { + $result = $this->result($type); + + if (count($result) == 0) + { + return $result; + } + return $result[count($result) -1]; + } + + // -------------------------------------------------------------------- + + /** + * Returns the "next" row + * + * @access public + * @return object + */ + function next_row($type = 'object') + { + $result = $this->result($type); + + if (count($result) == 0) + { + return $result; + } + + if (isset($result[$this->current_row + 1])) + { + ++$this->current_row; + } + + return $result[$this->current_row]; + } + + // -------------------------------------------------------------------- + + /** + * Returns the "previous" row + * + * @access public + * @return object + */ + function previous_row($type = 'object') + { + $result = $this->result($type); + + if (count($result) == 0) + { + return $result; + } + + if (isset($result[$this->current_row - 1])) + { + --$this->current_row; + } + return $result[$this->current_row]; + } + + // -------------------------------------------------------------------- + + /** + * The following functions are normally overloaded by the identically named + * methods in the platform-specific driver -- except when query caching + * is used. When caching is enabled we do not load the other driver. + * These functions are primarily here to prevent undefined function errors + * when a cached result object is in use. They are not otherwise fully + * operational due to the unavailability of the database resource IDs with + * cached results. + */ + function num_rows() { return $this->num_rows; } + function num_fields() { return 0; } + function list_fields() { return array(); } + function field_data() { return array(); } + function free_result() { return TRUE; } + function _data_seek() { return TRUE; } + function _fetch_assoc() { return array(); } + function _fetch_object() { return array(); } + +} +// END DB_result class + +/* End of file DB_result.php */ +/* Location: ./system/database/DB_result.php */ \ No newline at end of file diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php new file mode 100644 index 0000000..33c68fa --- /dev/null +++ b/system/database/DB_utility.php @@ -0,0 +1,389 @@ +db + $CI =& get_instance(); + $this->db =& $CI->db; + + log_message('debug', "Database Utility Class Initialized"); + } + + // -------------------------------------------------------------------- + + /** + * List databases + * + * @access public + * @return bool + */ + function list_databases() + { + // Is there a cached result? + if (isset($this->data_cache['db_names'])) + { + return $this->data_cache['db_names']; + } + + $query = $this->db->query($this->_list_databases()); + $dbs = array(); + if ($query->num_rows() > 0) + { + foreach ($query->result_array() as $row) + { + $dbs[] = current($row); + } + } + + $this->data_cache['db_names'] = $dbs; + return $this->data_cache['db_names']; + } + + // -------------------------------------------------------------------- + + /** + * Optimize Table + * + * @access public + * @param string the table name + * @return bool + */ + function optimize_table($table_name) + { + $sql = $this->_optimize_table($table_name); + + if (is_bool($sql)) + { + show_error('db_must_use_set'); + } + + $query = $this->db->query($sql); + $res = $query->result_array(); + + // Note: Due to a bug in current() that affects some versions + // of PHP we can not pass function call directly into it + return current($res); + } + + // -------------------------------------------------------------------- + + /** + * Optimize Database + * + * @access public + * @return array + */ + function optimize_database() + { + $result = array(); + foreach ($this->db->list_tables() as $table_name) + { + $sql = $this->_optimize_table($table_name); + + if (is_bool($sql)) + { + return $sql; + } + + $query = $this->db->query($sql); + + // Build the result array... + // Note: Due to a bug in current() that affects some versions + // of PHP we can not pass function call directly into it + $res = $query->result_array(); + $res = current($res); + $key = str_replace($this->db->database.'.', '', current($res)); + $keys = array_keys($res); + unset($res[$keys[0]]); + + $result[$key] = $res; + } + + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Repair Table + * + * @access public + * @param string the table name + * @return bool + */ + function repair_table($table_name) + { + $sql = $this->_repair_table($table_name); + + if (is_bool($sql)) + { + return $sql; + } + + $query = $this->db->query($sql); + + // Note: Due to a bug in current() that affects some versions + // of PHP we can not pass function call directly into it + $res = $query->result_array(); + return current($res); + } + + // -------------------------------------------------------------------- + + /** + * Generate CSV from a query result object + * + * @access public + * @param object The query result object + * @param string The delimiter - comma by default + * @param string The newline character - \n by default + * @param string The enclosure - double quote by default + * @return string + */ + function csv_from_result($query, $delim = ",", $newline = "\n", $enclosure = '"') + { + if ( ! is_object($query) OR ! method_exists($query, 'list_fields')) + { + show_error('You must submit a valid result object'); + } + + $out = ''; + + // First generate the headings from the table column names + foreach ($query->list_fields() as $name) + { + $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim; + } + + $out = rtrim($out); + $out .= $newline; + + // Next blast through the result array and build out the rows + foreach ($query->result_array() as $row) + { + foreach ($row as $item) + { + $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim; + } + $out = rtrim($out); + $out .= $newline; + } + + return $out; + } + + // -------------------------------------------------------------------- + + /** + * Generate XML data from a query result object + * + * @access public + * @param object The query result object + * @param array Any preferences + * @return string + */ + function xml_from_result($query, $params = array()) + { + if ( ! is_object($query) OR ! method_exists($query, 'list_fields')) + { + show_error('You must submit a valid result object'); + } + + // Set our default values + foreach (array('root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t") as $key => $val) + { + if ( ! isset($params[$key])) + { + $params[$key] = $val; + } + } + + // Create variables for convenience + extract($params); + + // Load the xml helper + $CI =& get_instance(); + $CI->load->helper('xml'); + + // Generate the result + $xml = "<{$root}>".$newline; + foreach ($query->result_array() as $row) + { + $xml .= $tab."<{$element}>".$newline; + + foreach ($row as $key => $val) + { + $xml .= $tab.$tab."<{$key}>".xml_convert($val)."".$newline; + } + $xml .= $tab."".$newline; + } + $xml .= "".$newline; + + return $xml; + } + + // -------------------------------------------------------------------- + + /** + * Database Backup + * + * @access public + * @return void + */ + function backup($params = array()) + { + // If the parameters have not been submitted as an + // array then we know that it is simply the table + // name, which is a valid short cut. + if (is_string($params)) + { + $params = array('tables' => $params); + } + + // ------------------------------------------------------ + + // Set up our default preferences + $prefs = array( + 'tables' => array(), + 'ignore' => array(), + 'filename' => '', + 'format' => 'gzip', // gzip, zip, txt + 'add_drop' => TRUE, + 'add_insert' => TRUE, + 'newline' => "\n" + ); + + // Did the user submit any preferences? If so set them.... + if (count($params) > 0) + { + foreach ($prefs as $key => $val) + { + if (isset($params[$key])) + { + $prefs[$key] = $params[$key]; + } + } + } + + // ------------------------------------------------------ + + // Are we backing up a complete database or individual tables? + // If no table names were submitted we'll fetch the entire table list + if (count($prefs['tables']) == 0) + { + $prefs['tables'] = $this->db->list_tables(); + } + + // ------------------------------------------------------ + + // Validate the format + if ( ! in_array($prefs['format'], array('gzip', 'zip', 'txt'), TRUE)) + { + $prefs['format'] = 'txt'; + } + + // ------------------------------------------------------ + + // Is the encoder supported? If not, we'll either issue an + // error or use plain text depending on the debug settings + if (($prefs['format'] == 'gzip' AND ! @function_exists('gzencode')) + OR ($prefs['format'] == 'zip' AND ! @function_exists('gzcompress'))) + { + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_compression'); + } + + $prefs['format'] = 'txt'; + } + + // ------------------------------------------------------ + + // Set the filename if not provided - Only needed with Zip files + if ($prefs['filename'] == '' AND $prefs['format'] == 'zip') + { + $prefs['filename'] = (count($prefs['tables']) == 1) ? $prefs['tables'] : $this->db->database; + $prefs['filename'] .= '_'.date('Y-m-d_H-i', time()); + } + + // ------------------------------------------------------ + + // Was a Gzip file requested? + if ($prefs['format'] == 'gzip') + { + return gzencode($this->_backup($prefs)); + } + + // ------------------------------------------------------ + + // Was a text file requested? + if ($prefs['format'] == 'txt') + { + return $this->_backup($prefs); + } + + // ------------------------------------------------------ + + // Was a Zip file requested? + if ($prefs['format'] == 'zip') + { + // If they included the .zip file extension we'll remove it + if (preg_match("|.+?\.zip$|", $prefs['filename'])) + { + $prefs['filename'] = str_replace('.zip', '', $prefs['filename']); + } + + // Tack on the ".sql" file extension if needed + if ( ! preg_match("|.+?\.sql$|", $prefs['filename'])) + { + $prefs['filename'] .= '.sql'; + } + + // Load the Zip class and output it + + $CI =& get_instance(); + $CI->load->library('zip'); + $CI->zip->add_data($prefs['filename'], $this->_backup($prefs)); + return $CI->zip->get_zip(); + } + + } + +} + + +/* End of file DB_utility.php */ +/* Location: ./system/database/DB_utility.php */ \ No newline at end of file diff --git a/system/database/drivers/index.html b/system/database/drivers/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/mssql/index.html b/system/database/drivers/mssql/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/mssql/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php new file mode 100644 index 0000000..97ac971 --- /dev/null +++ b/system/database/drivers/mssql/mssql_driver.php @@ -0,0 +1,667 @@ +port != '') + { + $this->hostname .= ','.$this->port; + } + + return @mssql_connect($this->hostname, $this->username, $this->password); + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_pconnect() + { + if ($this->port != '') + { + $this->hostname .= ','.$this->port; + } + + return @mssql_pconnect($this->hostname, $this->username, $this->password); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @access public + * @return void + */ + function reconnect() + { + // not implemented in MSSQL + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @access private called by the base class + * @return resource + */ + function db_select() + { + // Note: The brackets are required in the event that the DB name + // contains reserved characters + return @mssql_select_db('['.$this->database.']', $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access public + * @param string + * @param string + * @return resource + */ + function db_set_charset($charset, $collation) + { + // @todo - add support if needed + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @access private called by the base class + * @param string an SQL query + * @return resource + */ + function _execute($sql) + { + $sql = $this->_prep_query($sql); + return @mssql_query($sql, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @access private called by execute() + * @param string an SQL query + * @return string + */ + function _prep_query($sql) + { + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE; + + $this->simple_query('BEGIN TRAN'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('COMMIT TRAN'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('ROLLBACK TRAN'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @access public + * @param string + * @param bool whether or not the string will be used in a LIKE condition + * @return string + */ + function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + // Access the CI object + $CI =& get_instance(); + + // Escape single quotes + $str = str_replace("'", "''", $CI->input->_remove_invisible_characters($str)); + + // escape LIKE condition wildcards + if ($like === TRUE) + { + $str = str_replace( array('%', '_', $this->_like_escape_chr), + array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr), + $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @access public + * @return integer + */ + function affected_rows() + { + return @mssql_rows_affected($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * Returns the last id created in the Identity column. + * + * @access public + * @return integer + */ + function insert_id() + { + $ver = self::_parse_major_version($this->version()); + $sql = ($ver >= 8 ? "SELECT SCOPE_IDENTITY() AS last_id" : "SELECT @@IDENTITY AS last_id"); + $query = $this->query($sql); + $row = $query->row(); + return $row->last_id; + } + + // -------------------------------------------------------------------- + + /** + * Parse major version + * + * Grabs the major version number from the + * database server version string passed in. + * + * @access private + * @param string $version + * @return int16 major version number + */ + function _parse_major_version($version) + { + preg_match('/([0-9]+)\.([0-9]+)\.([0-9]+)/', $version, $ver_info); + return $ver_info[1]; // return the major version b/c that's all we're interested in. + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @access public + * @return string + */ + function _version() + { + return "SELECT @@VERSION AS ver"; + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @access public + * @param string + * @return string + */ + function count_all($table = '') + { + if ($table == '') + { + return 0; + } + + $query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE)); + + if ($query->num_rows() == 0) + { + return 0; + } + + $row = $query->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @access private + * @param boolean + * @return string + */ + function _list_tables($prefix_limit = FALSE) + { + $sql = "SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name"; + + // for future compatibility + if ($prefix_limit !== FALSE AND $this->dbprefix != '') + { + //$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char); + return FALSE; // not currently supported + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * List column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @access private + * @param string the table name + * @return string + */ + function _list_columns($table = '') + { + return "SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '".$table."'"; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @access public + * @param string the table name + * @return object + */ + function _field_data($table) + { + return "SELECT TOP 1 * FROM ".$table; + } + + // -------------------------------------------------------------------- + + /** + * The error message string + * + * @access private + * @return string + */ + function _error_message() + { + return mssql_get_last_message(); + } + + // -------------------------------------------------------------------- + + /** + * The error message number + * + * @access private + * @return integer + */ + function _error_number() + { + // Are error numbers supported? + return ''; + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @access private + * @param string + * @return string + */ + function _escape_identifiers($item) + { + if ($this->_escape_char == '') + { + return $item; + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item); + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + } + + if (strpos($item, '.') !== FALSE) + { + $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char; + } + else + { + $str = $this->_escape_char.$item.$this->_escape_char; + } + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + + // -------------------------------------------------------------------- + + /** + * From Tables + * + * This function implicitly groups FROM tables so there is no confusion + * about operator precedence in harmony with SQL standards + * + * @access public + * @param type + * @return type + */ + function _from_tables($tables) + { + if ( ! is_array($tables)) + { + $tables = array($tables); + } + + return implode(', ', $tables); + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @access public + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + function _insert($table, $keys, $values) + { + return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")"; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @access public + * @param string the table name + * @param array the update data + * @param array the where clause + * @param array the orderby clause + * @param array the limit clause + * @return string + */ + function _update($table, $values, $where, $orderby = array(), $limit = FALSE) + { + foreach($values as $key => $val) + { + $valstr[] = $key." = ".$val; + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + $orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):''; + + $sql = "UPDATE ".$table." SET ".implode(', ', $valstr); + + $sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : ''; + + $sql .= $orderby.$limit; + + return $sql; + } + + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table name + * @return string + */ + function _truncate($table) + { + return "TRUNCATE ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @access public + * @param string the table name + * @param array the where clause + * @param string the limit clause + * @return string + */ + function _delete($table, $where = array(), $like = array(), $limit = FALSE) + { + $conditions = ''; + + if (count($where) > 0 OR count($like) > 0) + { + $conditions = "\nWHERE "; + $conditions .= implode("\n", $this->ar_where); + + if (count($where) > 0 && count($like) > 0) + { + $conditions .= " AND "; + } + $conditions .= implode("\n", $like); + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$table.$conditions.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Limit string + * + * Generates a platform-specific LIMIT clause + * + * @access public + * @param string the sql query string + * @param integer the number of rows to limit the query to + * @param integer the offset value + * @return string + */ + function _limit($sql, $limit, $offset) + { + $i = $limit + $offset; + + return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$i.' ', $sql); + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @param resource + * @return void + */ + function _close($conn_id) + { + @mssql_close($conn_id); + } + +} + + + +/* End of file mssql_driver.php */ +/* Location: ./system/database/drivers/mssql/mssql_driver.php */ \ No newline at end of file diff --git a/system/database/drivers/mssql/mssql_forge.php b/system/database/drivers/mssql/mssql_forge.php new file mode 100644 index 0000000..632b4d9 --- /dev/null +++ b/system/database/drivers/mssql/mssql_forge.php @@ -0,0 +1,248 @@ +db->_escape_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @access private + * @param string the table name + * @param array the fields + * @param mixed primary key(s) + * @param mixed key(s) + * @param boolean should 'IF NOT EXISTS' be added to the SQL + * @return bool + */ + function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists) + { + $sql = 'CREATE TABLE '; + + if ($if_not_exists === TRUE) + { + $sql .= 'IF NOT EXISTS '; + } + + $sql .= $this->db->_escape_identifiers($table)." ("; + $current_field_count = 0; + + foreach ($fields as $field=>$attributes) + { + // Numeric field names aren't allowed in databases, so if the key is + // numeric, we know it was assigned by PHP and the developer manually + // entered the field information, so we'll simply add it to the list + if (is_numeric($field)) + { + $sql .= "\n\t$attributes"; + } + else + { + $attributes = array_change_key_case($attributes, CASE_UPPER); + + $sql .= "\n\t".$this->db->_protect_identifiers($field); + + $sql .= ' '.$attributes['TYPE']; + + if (array_key_exists('CONSTRAINT', $attributes)) + { + $sql .= '('.$attributes['CONSTRAINT'].')'; + } + + if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE) + { + $sql .= ' UNSIGNED'; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\''; + } + + if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $sql .= ' AUTO_INCREMENT'; + } + } + + // don't add a comma on the end of the last field + if (++$current_field_count < count($fields)) + { + $sql .= ','; + } + } + + if (count($primary_keys) > 0) + { + $primary_keys = $this->db->_protect_identifiers($primary_keys); + $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")"; + } + + if (is_array($keys) && count($keys) > 0) + { + foreach ($keys as $key) + { + if (is_array($key)) + { + $key = $this->db->_protect_identifiers($key); + } + else + { + $key = array($this->db->_protect_identifiers($key)); + } + + $sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")"; + } + } + + $sql .= "\n)"; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Alter table query + * + * Generates a platform-specific query so that a table can be altered + * Called by add_column(), drop_column(), and column_alter(), + * + * @access private + * @param string the ALTER type (ADD, DROP, CHANGE) + * @param string the column name + * @param string the table name + * @param string the column definition + * @param string the default value + * @param boolean should 'NOT NULL' be added + * @param string the field after which we should add the new field + * @return object + */ + function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '') + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name); + + // DROP has everything it needs now. + if ($alter_type == 'DROP') + { + return $sql; + } + + $sql .= " $column_definition"; + + if ($default_value != '') + { + $sql .= " DEFAULT \"$default_value\""; + } + + if ($null === NULL) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if ($after_field != '') + { + $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field); + } + + return $sql; + + } + + // -------------------------------------------------------------------- + + /** + * Rename a table + * + * Generates a platform-specific query so that a table can be renamed + * + * @access private + * @param string the old table name + * @param string the new table name + * @return string + */ + function _rename_table($table_name, $new_table_name) + { + // I think this syntax will work, but can find little documentation on renaming tables in MSSQL + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name); + return $sql; + } + +} + +/* End of file mssql_forge.php */ +/* Location: ./system/database/drivers/mssql/mssql_forge.php */ \ No newline at end of file diff --git a/system/database/drivers/mssql/mssql_result.php b/system/database/drivers/mssql/mssql_result.php new file mode 100644 index 0000000..a56a3a9 --- /dev/null +++ b/system/database/drivers/mssql/mssql_result.php @@ -0,0 +1,169 @@ +result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @access public + * @return integer + */ + function num_fields() + { + return @mssql_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @access public + * @return array + */ + function list_fields() + { + $field_names = array(); + while ($field = mssql_fetch_field($this->result_id)) + { + $field_names[] = $field->name; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @access public + * @return array + */ + function field_data() + { + $retval = array(); + while ($field = mssql_fetch_field($this->result_id)) + { + $F = new stdClass(); + $F->name = $field->name; + $F->type = $field->type; + $F->max_length = $field->max_length; + $F->primary_key = 0; + $F->default = ''; + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return null + */ + function free_result() + { + if (is_resource($this->result_id)) + { + mssql_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero + * + * @access private + * @return array + */ + function _data_seek($n = 0) + { + return mssql_data_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @access private + * @return array + */ + function _fetch_assoc() + { + return mssql_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @access private + * @return object + */ + function _fetch_object() + { + return mssql_fetch_object($this->result_id); + } + +} + + +/* End of file mssql_result.php */ +/* Location: ./system/database/drivers/mssql/mssql_result.php */ \ No newline at end of file diff --git a/system/database/drivers/mssql/mssql_utility.php b/system/database/drivers/mssql/mssql_utility.php new file mode 100644 index 0000000..9fa257a --- /dev/null +++ b/system/database/drivers/mssql/mssql_utility.php @@ -0,0 +1,123 @@ +db->display_error('db_unsuported_feature'); + } + + /** + * + * The functions below have been deprecated as of 1.6, and are only here for backwards + * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation + * is STRONGLY discouraged in favour if using dbforge. + * + */ + + /** + * Create database + * + * @access private + * @param string the database name + * @return bool + */ + function _create_database($name) + { + return "CREATE DATABASE ".$name; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + return "DROP DATABASE ".$name; + } + +} + + +/* End of file mssql_utility.php */ +/* Location: ./system/database/drivers/mssql/mssql_utility.php */ \ No newline at end of file diff --git a/system/database/drivers/mysql/index.html b/system/database/drivers/mysql/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/mysql/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php new file mode 100644 index 0000000..fe18598 --- /dev/null +++ b/system/database/drivers/mysql/mysql_driver.php @@ -0,0 +1,670 @@ +port != '') + { + $this->hostname .= ':'.$this->port; + } + + return @mysql_connect($this->hostname, $this->username, $this->password, TRUE); + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_pconnect() + { + if ($this->port != '') + { + $this->hostname .= ':'.$this->port; + } + + return @mysql_pconnect($this->hostname, $this->username, $this->password); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @access public + * @return void + */ + function reconnect() + { + if (mysql_ping($this->conn_id) === FALSE) + { + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @access private called by the base class + * @return resource + */ + function db_select() + { + return @mysql_select_db($this->database, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access public + * @param string + * @param string + * @return resource + */ + function db_set_charset($charset, $collation) + { + return @mysql_query("SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'", $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @access public + * @return string + */ + function _version() + { + return "SELECT version() AS ver"; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @access private called by the base class + * @param string an SQL query + * @return resource + */ + function _execute($sql) + { + $sql = $this->_prep_query($sql); + return @mysql_query($sql, $this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @access private called by execute() + * @param string an SQL query + * @return string + */ + function _prep_query($sql) + { + // "DELETE FROM TABLE" returns 0 affected rows This hack modifies + // the query so that it returns the number of affected rows + if ($this->delete_hack === TRUE) + { + if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $sql)) + { + $sql = preg_replace("/^\s*DELETE\s+FROM\s+(\S+)\s*$/", "DELETE FROM \\1 WHERE 1=1", $sql); + } + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE; + + $this->simple_query('SET AUTOCOMMIT=0'); + $this->simple_query('START TRANSACTION'); // can also be BEGIN or BEGIN WORK + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('COMMIT'); + $this->simple_query('SET AUTOCOMMIT=1'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('ROLLBACK'); + $this->simple_query('SET AUTOCOMMIT=1'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @access public + * @param string + * @param bool whether or not the string will be used in a LIKE condition + * @return string + */ + function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id)) + { + $str = mysql_real_escape_string($str, $this->conn_id); + } + elseif (function_exists('mysql_escape_string')) + { + $str = mysql_escape_string($str); + } + else + { + $str = addslashes($str); + } + + // escape LIKE condition wildcards + if ($like === TRUE) + { + $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @access public + * @return integer + */ + function affected_rows() + { + return @mysql_affected_rows($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @access public + * @return integer + */ + function insert_id() + { + return @mysql_insert_id($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @access public + * @param string + * @return string + */ + function count_all($table = '') + { + if ($table == '') + { + return 0; + } + + $query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE)); + + if ($query->num_rows() == 0) + { + return 0; + } + + $row = $query->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @access private + * @param boolean + * @return string + */ + function _list_tables($prefix_limit = FALSE) + { + $sql = "SHOW TABLES FROM ".$this->_escape_char.$this->database.$this->_escape_char; + + if ($prefix_limit !== FALSE AND $this->dbprefix != '') + { + $sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%'"; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @access public + * @param string the table name + * @return string + */ + function _list_columns($table = '') + { + return "SHOW COLUMNS FROM ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @access public + * @param string the table name + * @return object + */ + function _field_data($table) + { + return "SELECT * FROM ".$table." LIMIT 1"; + } + + // -------------------------------------------------------------------- + + /** + * The error message string + * + * @access private + * @return string + */ + function _error_message() + { + return mysql_error($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * The error message number + * + * @access private + * @return integer + */ + function _error_number() + { + return mysql_errno($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @access private + * @param string + * @return string + */ + function _escape_identifiers($item) + { + if ($this->_escape_char == '') + { + return $item; + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item); + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + } + + if (strpos($item, '.') !== FALSE) + { + $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char; + } + else + { + $str = $this->_escape_char.$item.$this->_escape_char; + } + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + + // -------------------------------------------------------------------- + + /** + * From Tables + * + * This function implicitly groups FROM tables so there is no confusion + * about operator precedence in harmony with SQL standards + * + * @access public + * @param type + * @return type + */ + function _from_tables($tables) + { + if ( ! is_array($tables)) + { + $tables = array($tables); + } + + return '('.implode(', ', $tables).')'; + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @access public + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + function _insert($table, $keys, $values) + { + return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")"; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @access public + * @param string the table name + * @param array the update data + * @param array the where clause + * @param array the orderby clause + * @param array the limit clause + * @return string + */ + function _update($table, $values, $where, $orderby = array(), $limit = FALSE) + { + foreach($values as $key => $val) + { + $valstr[] = $key." = ".$val; + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + $orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):''; + + $sql = "UPDATE ".$table." SET ".implode(', ', $valstr); + + $sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : ''; + + $sql .= $orderby.$limit; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table name + * @return string + */ + function _truncate($table) + { + return "TRUNCATE ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @access public + * @param string the table name + * @param array the where clause + * @param string the limit clause + * @return string + */ + function _delete($table, $where = array(), $like = array(), $limit = FALSE) + { + $conditions = ''; + + if (count($where) > 0 OR count($like) > 0) + { + $conditions = "\nWHERE "; + $conditions .= implode("\n", $this->ar_where); + + if (count($where) > 0 && count($like) > 0) + { + $conditions .= " AND "; + } + $conditions .= implode("\n", $like); + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$table.$conditions.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Limit string + * + * Generates a platform-specific LIMIT clause + * + * @access public + * @param string the sql query string + * @param integer the number of rows to limit the query to + * @param integer the offset value + * @return string + */ + function _limit($sql, $limit, $offset) + { + if ($offset == 0) + { + $offset = ''; + } + else + { + $offset .= ", "; + } + + return $sql."LIMIT ".$offset.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @param resource + * @return void + */ + function _close($conn_id) + { + @mysql_close($conn_id); + } + +} + + +/* End of file mysql_driver.php */ +/* Location: ./system/database/drivers/mysql/mysql_driver.php */ \ No newline at end of file diff --git a/system/database/drivers/mysql/mysql_forge.php b/system/database/drivers/mysql/mysql_forge.php new file mode 100644 index 0000000..d343b36 --- /dev/null +++ b/system/database/drivers/mysql/mysql_forge.php @@ -0,0 +1,254 @@ +$attributes) + { + // Numeric field names aren't allowed in databases, so if the key is + // numeric, we know it was assigned by PHP and the developer manually + // entered the field information, so we'll simply add it to the list + if (is_numeric($field)) + { + $sql .= "\n\t$attributes"; + } + else + { + $attributes = array_change_key_case($attributes, CASE_UPPER); + + $sql .= "\n\t".$this->db->_protect_identifiers($field); + + if (array_key_exists('NAME', $attributes)) + { + $sql .= ' '.$this->db->_protect_identifiers($attributes['NAME']).' '; + } + + if (array_key_exists('TYPE', $attributes)) + { + $sql .= ' '.$attributes['TYPE']; + } + + if (array_key_exists('CONSTRAINT', $attributes)) + { + $sql .= '('.$attributes['CONSTRAINT'].')'; + } + + if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE) + { + $sql .= ' UNSIGNED'; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\''; + } + + if (array_key_exists('NULL', $attributes)) + { + $sql .= ($attributes['NULL'] === TRUE) ? ' NULL' : ' NOT NULL'; + } + + if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $sql .= ' AUTO_INCREMENT'; + } + } + + // don't add a comma on the end of the last field + if (++$current_field_count < count($fields)) + { + $sql .= ','; + } + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @access private + * @param string the table name + * @param mixed the fields + * @param mixed primary key(s) + * @param mixed key(s) + * @param boolean should 'IF NOT EXISTS' be added to the SQL + * @return bool + */ + function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists) + { + $sql = 'CREATE TABLE '; + + if ($if_not_exists === TRUE) + { + $sql .= 'IF NOT EXISTS '; + } + + $sql .= $this->db->_escape_identifiers($table)." ("; + + $sql .= $this->_process_fields($fields); + + if (count($primary_keys) > 0) + { + $key_name = $this->db->_protect_identifiers(implode('_', $primary_keys)); + $primary_keys = $this->db->_protect_identifiers($primary_keys); + $sql .= ",\n\tPRIMARY KEY ".$key_name." (" . implode(', ', $primary_keys) . ")"; + } + + if (is_array($keys) && count($keys) > 0) + { + foreach ($keys as $key) + { + if (is_array($key)) + { + $key_name = $this->db->_protect_identifiers(implode('_', $key)); + $key = $this->db->_protect_identifiers($key); + } + else + { + $key_name = $this->db->_protect_identifiers($key); + $key = array($key_name); + } + + $sql .= ",\n\tKEY {$key_name} (" . implode(', ', $key) . ")"; + } + } + + $sql .= "\n) DEFAULT CHARACTER SET {$this->db->char_set} COLLATE {$this->db->dbcollat};"; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * @access private + * @return string + */ + function _drop_table($table) + { + return "DROP TABLE IF EXISTS ".$this->db->_escape_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * Alter table query + * + * Generates a platform-specific query so that a table can be altered + * Called by add_column(), drop_column(), and column_alter(), + * + * @access private + * @param string the ALTER type (ADD, DROP, CHANGE) + * @param string the column name + * @param array fields + * @param string the field after which we should add the new field + * @return object + */ + function _alter_table($alter_type, $table, $fields, $after_field = '') + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type "; + + // DROP has everything it needs now. + if ($alter_type == 'DROP') + { + return $sql.$this->db->_protect_identifiers($fields); + } + + $sql .= $this->_process_fields($fields); + + if ($after_field != '') + { + $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Rename a table + * + * Generates a platform-specific query so that a table can be renamed + * + * @access private + * @param string the old table name + * @param string the new table name + * @return string + */ + function _rename_table($table_name, $new_table_name) + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name); + return $sql; + } + +} + +/* End of file mysql_forge.php */ +/* Location: ./system/database/drivers/mysql/mysql_forge.php */ \ No newline at end of file diff --git a/system/database/drivers/mysql/mysql_result.php b/system/database/drivers/mysql/mysql_result.php new file mode 100644 index 0000000..2e95507 --- /dev/null +++ b/system/database/drivers/mysql/mysql_result.php @@ -0,0 +1,169 @@ +result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @access public + * @return integer + */ + function num_fields() + { + return @mysql_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @access public + * @return array + */ + function list_fields() + { + $field_names = array(); + while ($field = mysql_fetch_field($this->result_id)) + { + $field_names[] = $field->name; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @access public + * @return array + */ + function field_data() + { + $retval = array(); + while ($field = mysql_fetch_field($this->result_id)) + { + $F = new stdClass(); + $F->name = $field->name; + $F->type = $field->type; + $F->default = $field->def; + $F->max_length = $field->max_length; + $F->primary_key = $field->primary_key; + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return null + */ + function free_result() + { + if (is_resource($this->result_id)) + { + mysql_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero + * + * @access private + * @return array + */ + function _data_seek($n = 0) + { + return mysql_data_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @access private + * @return array + */ + function _fetch_assoc() + { + return mysql_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @access private + * @return object + */ + function _fetch_object() + { + return mysql_fetch_object($this->result_id); + } + +} + + +/* End of file mysql_result.php */ +/* Location: ./system/database/drivers/mysql/mysql_result.php */ \ No newline at end of file diff --git a/system/database/drivers/mysql/mysql_utility.php b/system/database/drivers/mysql/mysql_utility.php new file mode 100644 index 0000000..2c8b264 --- /dev/null +++ b/system/database/drivers/mysql/mysql_utility.php @@ -0,0 +1,245 @@ +db->_escape_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * Repair table query + * + * Generates a platform-specific query so that a table can be repaired + * + * @access private + * @param string the table name + * @return object + */ + function _repair_table($table) + { + return "REPAIR TABLE ".$this->db->_escape_identifiers($table); + } + + // -------------------------------------------------------------------- + /** + * MySQL Export + * + * @access private + * @param array Preferences + * @return mixed + */ + function _backup($params = array()) + { + if (count($params) == 0) + { + return FALSE; + } + + // Extract the prefs for simplicity + extract($params); + + // Build the output + $output = ''; + foreach ((array)$tables as $table) + { + // Is the table in the "ignore" list? + if (in_array($table, (array)$ignore, TRUE)) + { + continue; + } + + // Get the table schema + $query = $this->db->query("SHOW CREATE TABLE `".$this->db->database.'`.'.$table); + + // No result means the table name was invalid + if ($query === FALSE) + { + continue; + } + + // Write out the table schema + $output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline; + + if ($add_drop == TRUE) + { + $output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline; + } + + $i = 0; + $result = $query->result_array(); + foreach ($result[0] as $val) + { + if ($i++ % 2) + { + $output .= $val.';'.$newline.$newline; + } + } + + // If inserts are not needed we're done... + if ($add_insert == FALSE) + { + continue; + } + + // Grab all the data from the current table + $query = $this->db->query("SELECT * FROM $table"); + + if ($query->num_rows() == 0) + { + continue; + } + + // Fetch the field names and determine if the field is an + // integer type. We use this info to decide whether to + // surround the data with quotes or not + + $i = 0; + $field_str = ''; + $is_int = array(); + while ($field = mysql_fetch_field($query->result_id)) + { + // Most versions of MySQL store timestamp as a string + $is_int[$i] = (in_array( + strtolower(mysql_field_type($query->result_id, $i)), + array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'), + TRUE) + ) ? TRUE : FALSE; + + // Create a string of field names + $field_str .= '`'.$field->name.'`, '; + $i++; + } + + // Trim off the end comma + $field_str = preg_replace( "/, $/" , "" , $field_str); + + + // Build the insert string + foreach ($query->result_array() as $row) + { + $val_str = ''; + + $i = 0; + foreach ($row as $v) + { + // Is the value NULL? + if ($v === NULL) + { + $val_str .= 'NULL'; + } + else + { + // Escape the data if it's not an integer + if ($is_int[$i] == FALSE) + { + $val_str .= $this->db->escape($v); + } + else + { + $val_str .= $v; + } + } + + // Append a comma + $val_str .= ', '; + $i++; + } + + // Remove the comma at the end of the string + $val_str = preg_replace( "/, $/" , "" , $val_str); + + // Build the INSERT string + $output .= 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline; + } + + $output .= $newline.$newline; + } + + return $output; + } + + /** + * + * The functions below have been deprecated as of 1.6, and are only here for backwards + * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation + * is STRONGLY discouraged in favour if using dbforge. + * + */ + + /** + * Create database + * + * @access private + * @param string the database name + * @return bool + */ + function _create_database($name) + { + return "CREATE DATABASE ".$name; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + return "DROP DATABASE ".$name; + } + +} + +/* End of file mysql_utility.php */ +/* Location: ./system/database/drivers/mysql/mysql_utility.php */ \ No newline at end of file diff --git a/system/database/drivers/mysqli/index.html b/system/database/drivers/mysqli/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/mysqli/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php new file mode 100644 index 0000000..488b074 --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_driver.php @@ -0,0 +1,671 @@ +port != '') + { + return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port); + } + else + { + return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database); + } + + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_pconnect() + { + return $this->db_connect(); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @access public + * @return void + */ + function reconnect() + { + if (mysqli_ping($this->conn_id) === FALSE) + { + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @access private called by the base class + * @return resource + */ + function db_select() + { + return @mysqli_select_db($this->conn_id, $this->database); + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access private + * @param string + * @param string + * @return resource + */ + function _db_set_charset($charset, $collation) + { + return @mysqli_query($this->conn_id, "SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'"); + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @access public + * @return string + */ + function _version() + { + return "SELECT version() AS ver"; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @access private called by the base class + * @param string an SQL query + * @return resource + */ + function _execute($sql) + { + $sql = $this->_prep_query($sql); + $result = @mysqli_query($this->conn_id, $sql); + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @access private called by execute() + * @param string an SQL query + * @return string + */ + function _prep_query($sql) + { + // "DELETE FROM TABLE" returns 0 affected rows This hack modifies + // the query so that it returns the number of affected rows + if ($this->delete_hack === TRUE) + { + if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $sql)) + { + $sql = preg_replace("/^\s*DELETE\s+FROM\s+(\S+)\s*$/", "DELETE FROM \\1 WHERE 1=1", $sql); + } + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE; + + $this->simple_query('SET AUTOCOMMIT=0'); + $this->simple_query('START TRANSACTION'); // can also be BEGIN or BEGIN WORK + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('COMMIT'); + $this->simple_query('SET AUTOCOMMIT=1'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('ROLLBACK'); + $this->simple_query('SET AUTOCOMMIT=1'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @access public + * @param string + * @param bool whether or not the string will be used in a LIKE condition + * @return string + */ + function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id)) + { + $str = mysqli_real_escape_string($this->conn_id, $str); + } + elseif (function_exists('mysql_escape_string')) + { + $str = mysql_escape_string($str); + } + else + { + $str = addslashes($str); + } + + // escape LIKE condition wildcards + if ($like === TRUE) + { + $str = str_replace(array('%', '_'), array('\\%', '\\_'), $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @access public + * @return integer + */ + function affected_rows() + { + return @mysqli_affected_rows($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @access public + * @return integer + */ + function insert_id() + { + return @mysqli_insert_id($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @access public + * @param string + * @return string + */ + function count_all($table = '') + { + if ($table == '') + { + return 0; + } + + $query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE)); + + if ($query->num_rows() == 0) + { + return 0; + } + + $row = $query->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @access private + * @param boolean + * @return string + */ + function _list_tables($prefix_limit = FALSE) + { + $sql = "SHOW TABLES FROM ".$this->_escape_char.$this->database.$this->_escape_char; + + if ($prefix_limit !== FALSE AND $this->dbprefix != '') + { + $sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%'"; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @access public + * @param string the table name + * @return string + */ + function _list_columns($table = '') + { + return "SHOW COLUMNS FROM ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @access public + * @param string the table name + * @return object + */ + function _field_data($table) + { + return "SELECT * FROM ".$table." LIMIT 1"; + } + + // -------------------------------------------------------------------- + + /** + * The error message string + * + * @access private + * @return string + */ + function _error_message() + { + return mysqli_error($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * The error message number + * + * @access private + * @return integer + */ + function _error_number() + { + return mysqli_errno($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @access private + * @param string + * @return string + */ + function _escape_identifiers($item) + { + if ($this->_escape_char == '') + { + return $item; + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item); + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + } + + if (strpos($item, '.') !== FALSE) + { + $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char; + } + else + { + $str = $this->_escape_char.$item.$this->_escape_char; + } + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + + // -------------------------------------------------------------------- + + /** + * From Tables + * + * This function implicitly groups FROM tables so there is no confusion + * about operator precedence in harmony with SQL standards + * + * @access public + * @param type + * @return type + */ + function _from_tables($tables) + { + if ( ! is_array($tables)) + { + $tables = array($tables); + } + + return '('.implode(', ', $tables).')'; + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @access public + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + function _insert($table, $keys, $values) + { + return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")"; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @access public + * @param string the table name + * @param array the update data + * @param array the where clause + * @param array the orderby clause + * @param array the limit clause + * @return string + */ + function _update($table, $values, $where, $orderby = array(), $limit = FALSE) + { + foreach($values as $key => $val) + { + $valstr[] = $key." = ".$val; + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + $orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):''; + + $sql = "UPDATE ".$table." SET ".implode(', ', $valstr); + + $sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : ''; + + $sql .= $orderby.$limit; + + return $sql; + } + + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table name + * @return string + */ + function _truncate($table) + { + return "TRUNCATE ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @access public + * @param string the table name + * @param array the where clause + * @param string the limit clause + * @return string + */ + function _delete($table, $where = array(), $like = array(), $limit = FALSE) + { + $conditions = ''; + + if (count($where) > 0 OR count($like) > 0) + { + $conditions = "\nWHERE "; + $conditions .= implode("\n", $this->ar_where); + + if (count($where) > 0 && count($like) > 0) + { + $conditions .= " AND "; + } + $conditions .= implode("\n", $like); + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$table.$conditions.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Limit string + * + * Generates a platform-specific LIMIT clause + * + * @access public + * @param string the sql query string + * @param integer the number of rows to limit the query to + * @param integer the offset value + * @return string + */ + function _limit($sql, $limit, $offset) + { + $sql .= "LIMIT ".$limit; + + if ($offset > 0) + { + $sql .= " OFFSET ".$offset; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @param resource + * @return void + */ + function _close($conn_id) + { + @mysqli_close($conn_id); + } + + +} + + +/* End of file mysqli_driver.php */ +/* Location: ./system/database/drivers/mysqli/mysqli_driver.php */ \ No newline at end of file diff --git a/system/database/drivers/mysqli/mysqli_forge.php b/system/database/drivers/mysqli/mysqli_forge.php new file mode 100644 index 0000000..0992274 --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_forge.php @@ -0,0 +1,254 @@ +$attributes) + { + // Numeric field names aren't allowed in databases, so if the key is + // numeric, we know it was assigned by PHP and the developer manually + // entered the field information, so we'll simply add it to the list + if (is_numeric($field)) + { + $sql .= "\n\t$attributes"; + } + else + { + $attributes = array_change_key_case($attributes, CASE_UPPER); + + $sql .= "\n\t".$this->db->_protect_identifiers($field); + + if (array_key_exists('NAME', $attributes)) + { + $sql .= ' '.$this->db->_protect_identifiers($attributes['NAME']).' '; + } + + if (array_key_exists('TYPE', $attributes)) + { + $sql .= ' '.$attributes['TYPE']; + } + + if (array_key_exists('CONSTRAINT', $attributes)) + { + $sql .= '('.$attributes['CONSTRAINT'].')'; + } + + if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE) + { + $sql .= ' UNSIGNED'; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\''; + } + + if (array_key_exists('NULL', $attributes)) + { + $sql .= ($attributes['NULL'] === TRUE) ? ' NULL' : ' NOT NULL'; + } + + if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $sql .= ' AUTO_INCREMENT'; + } + } + + // don't add a comma on the end of the last field + if (++$current_field_count < count($fields)) + { + $sql .= ','; + } + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @access private + * @param string the table name + * @param mixed the fields + * @param mixed primary key(s) + * @param mixed key(s) + * @param boolean should 'IF NOT EXISTS' be added to the SQL + * @return bool + */ + function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists) + { + $sql = 'CREATE TABLE '; + + if ($if_not_exists === TRUE) + { + $sql .= 'IF NOT EXISTS '; + } + + $sql .= $this->db->_escape_identifiers($table)." ("; + + $sql .= $this->_process_fields($fields); + + if (count($primary_keys) > 0) + { + $key_name = $this->db->_protect_identifiers(implode('_', $primary_keys)); + $primary_keys = $this->db->_protect_identifiers($primary_keys); + $sql .= ",\n\tPRIMARY KEY ".$key_name." (" . implode(', ', $primary_keys) . ")"; + } + + if (is_array($keys) && count($keys) > 0) + { + foreach ($keys as $key) + { + if (is_array($key)) + { + $key_name = $this->db->_protect_identifiers(implode('_', $key)); + $key = $this->db->_protect_identifiers($key); + } + else + { + $key_name = $this->db->_protect_identifiers($key); + $key = array($key_name); + } + + $sql .= ",\n\tKEY {$key_name} (" . implode(', ', $key) . ")"; + } + } + + $sql .= "\n) DEFAULT CHARACTER SET {$this->db->char_set} COLLATE {$this->db->dbcollat};"; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * @access private + * @return string + */ + function _drop_table($table) + { + return "DROP TABLE IF EXISTS ".$this->db->_escape_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * Alter table query + * + * Generates a platform-specific query so that a table can be altered + * Called by add_column(), drop_column(), and column_alter(), + * + * @access private + * @param string the ALTER type (ADD, DROP, CHANGE) + * @param string the column name + * @param array fields + * @param string the field after which we should add the new field + * @return object + */ + function _alter_table($alter_type, $table, $fields, $after_field = '') + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type "; + + // DROP has everything it needs now. + if ($alter_type == 'DROP') + { + return $sql.$this->db->_protect_identifiers($fields); + } + + $sql .= $this->_process_fields($fields); + + if ($after_field != '') + { + $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Rename a table + * + * Generates a platform-specific query so that a table can be renamed + * + * @access private + * @param string the old table name + * @param string the new table name + * @return string + */ + function _rename_table($table_name, $new_table_name) + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name); + return $sql; + } + +} + +/* End of file mysqli_forge.php */ +/* Location: ./system/database/drivers/mysqli/mysqli_forge.php */ \ No newline at end of file diff --git a/system/database/drivers/mysqli/mysqli_result.php b/system/database/drivers/mysqli/mysqli_result.php new file mode 100644 index 0000000..00fc0db --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_result.php @@ -0,0 +1,169 @@ +result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @access public + * @return integer + */ + function num_fields() + { + return @mysqli_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @access public + * @return array + */ + function list_fields() + { + $field_names = array(); + while ($field = mysqli_fetch_field($this->result_id)) + { + $field_names[] = $field->name; + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @access public + * @return array + */ + function field_data() + { + $retval = array(); + while ($field = mysqli_fetch_field($this->result_id)) + { + $F = new stdClass(); + $F->name = $field->name; + $F->type = $field->type; + $F->default = $field->def; + $F->max_length = $field->max_length; + $F->primary_key = ($field->flags & MYSQLI_PRI_KEY_FLAG) ? 1 : 0; + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return null + */ + function free_result() + { + if (is_object($this->result_id)) + { + mysqli_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero + * + * @access private + * @return array + */ + function _data_seek($n = 0) + { + return mysqli_data_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @access private + * @return array + */ + function _fetch_assoc() + { + return mysqli_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @access private + * @return object + */ + function _fetch_object() + { + return mysqli_fetch_object($this->result_id); + } + +} + + +/* End of file mysqli_result.php */ +/* Location: ./system/database/drivers/mysqli/mysqli_result.php */ \ No newline at end of file diff --git a/system/database/drivers/mysqli/mysqli_utility.php b/system/database/drivers/mysqli/mysqli_utility.php new file mode 100644 index 0000000..7ebda4c --- /dev/null +++ b/system/database/drivers/mysqli/mysqli_utility.php @@ -0,0 +1,123 @@ +db->_escape_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * Repair table query + * + * Generates a platform-specific query so that a table can be repaired + * + * @access private + * @param string the table name + * @return object + */ + function _repair_table($table) + { + return "REPAIR TABLE ".$this->db->_escape_identifiers($table); + } + + // -------------------------------------------------------------------- + + /** + * MySQLi Export + * + * @access private + * @param array Preferences + * @return mixed + */ + function _backup($params = array()) + { + // Currently unsupported + return $this->db->display_error('db_unsuported_feature'); + } + + + /** + * + * The functions below have been deprecated as of 1.6, and are only here for backwards + * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation + * is STRONGLY discouraged in favour if using dbforge. + * + */ + + /** + * Create database + * + * @access private + * @param string the database name + * @return bool + */ + function _create_database($name) + { + return "CREATE DATABASE ".$name; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + return "DROP DATABASE ".$name; + } + +} + +/* End of file mysqli_utility.php */ +/* Location: ./system/database/drivers/mysqli/mysqli_utility.php */ \ No newline at end of file diff --git a/system/database/drivers/oci8/index.html b/system/database/drivers/oci8/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/oci8/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php new file mode 100644 index 0000000..6145719 --- /dev/null +++ b/system/database/drivers/oci8/oci8_driver.php @@ -0,0 +1,780 @@ +username, $this->password, $this->hostname); + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_pconnect() + { + return @ociplogon($this->username, $this->password, $this->hostname); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @access public + * @return void + */ + function reconnect() + { + // not implemented in oracle + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @access private called by the base class + * @return resource + */ + function db_select() + { + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access public + * @param string + * @param string + * @return resource + */ + function db_set_charset($charset, $collation) + { + // @todo - add support if needed + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @access public + * @return string + */ + function _version() + { + return ociserverversion($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @access private called by the base class + * @param string an SQL query + * @return resource + */ + function _execute($sql) + { + // oracle must parse the query before it is run. All of the actions with + // the query are based on the statement id returned by ociparse + $this->stmt_id = FALSE; + $this->_set_stmt_id($sql); + ocisetprefetch($this->stmt_id, 1000); + return @ociexecute($this->stmt_id, $this->_commit); + } + + /** + * Generate a statement ID + * + * @access private + * @param string an SQL query + * @return none + */ + function _set_stmt_id($sql) + { + if ( ! is_resource($this->stmt_id)) + { + $this->stmt_id = ociparse($this->conn_id, $this->_prep_query($sql)); + } + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @access private called by execute() + * @param string an SQL query + * @return string + */ + function _prep_query($sql) + { + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * getCursor. Returns a cursor from the datbase + * + * @access public + * @return cursor id + */ + function get_cursor() + { + $this->curs_id = ocinewcursor($this->conn_id); + return $this->curs_id; + } + + // -------------------------------------------------------------------- + + /** + * Stored Procedure. Executes a stored procedure + * + * @access public + * @param package package stored procedure is in + * @param procedure stored procedure to execute + * @param params array of parameters + * @return array + * + * params array keys + * + * KEY OPTIONAL NOTES + * name no the name of the parameter should be in : format + * value no the value of the parameter. If this is an OUT or IN OUT parameter, + * this should be a reference to a variable + * type yes the type of the parameter + * length yes the max size of the parameter + */ + function stored_procedure($package, $procedure, $params) + { + if ($package == '' OR $procedure == '' OR ! is_array($params)) + { + if ($this->db_debug) + { + log_message('error', 'Invalid query: '.$package.'.'.$procedure); + return $this->display_error('db_invalid_query'); + } + return FALSE; + } + + // build the query string + $sql = "begin $package.$procedure("; + + $have_cursor = FALSE; + foreach($params as $param) + { + $sql .= $param['name'] . ","; + + if (array_key_exists('type', $param) && ($param['type'] == OCI_B_CURSOR)) + { + $have_cursor = TRUE; + } + } + $sql = trim($sql, ",") . "); end;"; + + $this->stmt_id = FALSE; + $this->_set_stmt_id($sql); + $this->_bind_params($params); + $this->query($sql, FALSE, $have_cursor); + } + + // -------------------------------------------------------------------- + + /** + * Bind parameters + * + * @access private + * @return none + */ + function _bind_params($params) + { + if ( ! is_array($params) OR ! is_resource($this->stmt_id)) + { + return; + } + + foreach ($params as $param) + { + foreach (array('name', 'value', 'type', 'length') as $val) + { + if ( ! isset($param[$val])) + { + $param[$val] = ''; + } + } + + ocibindbyname($this->stmt_id, $param['name'], $param['value'], $param['length'], $param['type']); + } + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE; + + $this->_commit = OCI_DEFAULT; + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $ret = OCIcommit($this->conn_id); + $this->_commit = OCI_COMMIT_ON_SUCCESS; + return $ret; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $ret = OCIrollback($this->conn_id); + $this->_commit = OCI_COMMIT_ON_SUCCESS; + return $ret; + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @access public + * @param string + * @param bool whether or not the string will be used in a LIKE condition + * @return string + */ + function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + // Access the CI object + $CI =& get_instance(); + + $str = $CI->input->_remove_invisible_characters($str); + + // escape LIKE condition wildcards + if ($like === TRUE) + { + $str = str_replace( array('%', '_', $this->_like_escape_chr), + array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr), + $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @access public + * @return integer + */ + function affected_rows() + { + return @ocirowcount($this->stmt_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @access public + * @return integer + */ + function insert_id() + { + // not supported in oracle + return $this->display_error('db_unsupported_function'); + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @access public + * @param string + * @return string + */ + function count_all($table = '') + { + if ($table == '') + { + return 0; + } + + $query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE)); + + if ($query == FALSE) + { + return 0; + } + + $row = $query->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @access private + * @param boolean + * @return string + */ + function _list_tables($prefix_limit = FALSE) + { + $sql = "SELECT TABLE_NAME FROM ALL_TABLES"; + + if ($prefix_limit !== FALSE AND $this->dbprefix != '') + { + $sql .= " WHERE TABLE_NAME LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @access public + * @param string the table name + * @return string + */ + function _list_columns($table = '') + { + return "SELECT COLUMN_NAME FROM all_tab_columns WHERE table_name = '$table'"; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @access public + * @param string the table name + * @return object + */ + function _field_data($table) + { + return "SELECT * FROM ".$table." where rownum = 1"; + } + + // -------------------------------------------------------------------- + + /** + * The error message string + * + * @access private + * @return string + */ + function _error_message() + { + $error = ocierror($this->conn_id); + return $error['message']; + } + + // -------------------------------------------------------------------- + + /** + * The error message number + * + * @access private + * @return integer + */ + function _error_number() + { + $error = ocierror($this->conn_id); + return $error['code']; + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @access private + * @param string + * @return string + */ + function _escape_identifiers($item) + { + if ($this->_escape_char == '') + { + return $item; + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item); + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + } + + if (strpos($item, '.') !== FALSE) + { + $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char; + } + else + { + $str = $this->_escape_char.$item.$this->_escape_char; + } + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + + // -------------------------------------------------------------------- + + /** + * From Tables + * + * This function implicitly groups FROM tables so there is no confusion + * about operator precedence in harmony with SQL standards + * + * @access public + * @param type + * @return type + */ + function _from_tables($tables) + { + if ( ! is_array($tables)) + { + $tables = array($tables); + } + + return implode(', ', $tables); + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @access public + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + function _insert($table, $keys, $values) + { + return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")"; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @access public + * @param string the table name + * @param array the update data + * @param array the where clause + * @param array the orderby clause + * @param array the limit clause + * @return string + */ + function _update($table, $values, $where, $orderby = array(), $limit = FALSE) + { + foreach($values as $key => $val) + { + $valstr[] = $key." = ".$val; + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + $orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):''; + + $sql = "UPDATE ".$table." SET ".implode(', ', $valstr); + + $sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : ''; + + $sql .= $orderby.$limit; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table name + * @return string + */ + function _truncate($table) + { + return "TRUNCATE TABLE ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @access public + * @param string the table name + * @param array the where clause + * @param string the limit clause + * @return string + */ + function _delete($table, $where = array(), $like = array(), $limit = FALSE) + { + $conditions = ''; + + if (count($where) > 0 OR count($like) > 0) + { + $conditions = "\nWHERE "; + $conditions .= implode("\n", $this->ar_where); + + if (count($where) > 0 && count($like) > 0) + { + $conditions .= " AND "; + } + $conditions .= implode("\n", $like); + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$table.$conditions.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Limit string + * + * Generates a platform-specific LIMIT clause + * + * @access public + * @param string the sql query string + * @param integer the number of rows to limit the query to + * @param integer the offset value + * @return string + */ + function _limit($sql, $limit, $offset) + { + $limit = $offset + $limit; + $newsql = "SELECT * FROM (select inner_query.*, rownum rnum FROM ($sql) inner_query WHERE rownum < $limit)"; + + if ($offset != 0) + { + $newsql .= " WHERE rnum >= $offset"; + } + + // remember that we used limits + $this->limit_used = TRUE; + + return $newsql; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @param resource + * @return void + */ + function _close($conn_id) + { + @ocilogoff($conn_id); + } + + +} + + + +/* End of file oci8_driver.php */ +/* Location: ./system/database/drivers/oci8/oci8_driver.php */ \ No newline at end of file diff --git a/system/database/drivers/oci8/oci8_forge.php b/system/database/drivers/oci8/oci8_forge.php new file mode 100644 index 0000000..c3e9cb9 --- /dev/null +++ b/system/database/drivers/oci8/oci8_forge.php @@ -0,0 +1,248 @@ +db->_escape_identifiers($table)." ("; + $current_field_count = 0; + + foreach ($fields as $field=>$attributes) + { + // Numeric field names aren't allowed in databases, so if the key is + // numeric, we know it was assigned by PHP and the developer manually + // entered the field information, so we'll simply add it to the list + if (is_numeric($field)) + { + $sql .= "\n\t$attributes"; + } + else + { + $attributes = array_change_key_case($attributes, CASE_UPPER); + + $sql .= "\n\t".$this->db->_protect_identifiers($field); + + $sql .= ' '.$attributes['TYPE']; + + if (array_key_exists('CONSTRAINT', $attributes)) + { + $sql .= '('.$attributes['CONSTRAINT'].')'; + } + + if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE) + { + $sql .= ' UNSIGNED'; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\''; + } + + if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $sql .= ' AUTO_INCREMENT'; + } + } + + // don't add a comma on the end of the last field + if (++$current_field_count < count($fields)) + { + $sql .= ','; + } + } + + if (count($primary_keys) > 0) + { + $primary_keys = $this->db->_protect_identifiers($primary_keys); + $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")"; + } + + if (is_array($keys) && count($keys) > 0) + { + foreach ($keys as $key) + { + if (is_array($key)) + { + $key = $this->db->_protect_identifiers($key); + } + else + { + $key = array($this->db->_protect_identifiers($key)); + } + + $sql .= ",\n\tUNIQUE COLUMNS (" . implode(', ', $key) . ")"; + } + } + + $sql .= "\n)"; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * @access private + * @return bool + */ + function _drop_table($table) + { + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Alter table query + * + * Generates a platform-specific query so that a table can be altered + * Called by add_column(), drop_column(), and column_alter(), + * + * @access private + * @param string the ALTER type (ADD, DROP, CHANGE) + * @param string the column name + * @param string the table name + * @param string the column definition + * @param string the default value + * @param boolean should 'NOT NULL' be added + * @param string the field after which we should add the new field + * @return object + */ + function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '') + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name); + + // DROP has everything it needs now. + if ($alter_type == 'DROP') + { + return $sql; + } + + $sql .= " $column_definition"; + + if ($default_value != '') + { + $sql .= " DEFAULT \"$default_value\""; + } + + if ($null === NULL) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if ($after_field != '') + { + $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field); + } + + return $sql; + + } + + // -------------------------------------------------------------------- + + /** + * Rename a table + * + * Generates a platform-specific query so that a table can be renamed + * + * @access private + * @param string the old table name + * @param string the new table name + * @return string + */ + function _rename_table($table_name, $new_table_name) + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name); + return $sql; + } + + +} + +/* End of file oci8_forge.php */ +/* Location: ./system/database/drivers/oci8/oci8_forge.php */ \ No newline at end of file diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php new file mode 100644 index 0000000..1d0b7db --- /dev/null +++ b/system/database/drivers/oci8/oci8_result.php @@ -0,0 +1,249 @@ +result_array()); + @ociexecute($this->stmt_id); + + if ($this->curs_id) + { + @ociexecute($this->curs_id); + } + + return $rowcount; + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @access public + * @return integer + */ + function num_fields() + { + $count = @ocinumcols($this->stmt_id); + + // if we used a limit we subtract it + if ($this->limit_used) + { + $count = $count - 1; + } + + return $count; + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @access public + * @return array + */ + function list_fields() + { + $field_names = array(); + $fieldCount = $this->num_fields(); + for ($c = 1; $c <= $fieldCount; $c++) + { + $field_names[] = ocicolumnname($this->stmt_id, $c); + } + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @access public + * @return array + */ + function field_data() + { + $retval = array(); + $fieldCount = $this->num_fields(); + for ($c = 1; $c <= $fieldCount; $c++) + { + $F = new stdClass(); + $F->name = ocicolumnname($this->stmt_id, $c); + $F->type = ocicolumntype($this->stmt_id, $c); + $F->max_length = ocicolumnsize($this->stmt_id, $c); + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return null + */ + function free_result() + { + if (is_resource($this->result_id)) + { + ocifreestatement($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @access private + * @return array + */ + function _fetch_assoc(&$row) + { + $id = ($this->curs_id) ? $this->curs_id : $this->stmt_id; + + return ocifetchinto($id, $row, OCI_ASSOC + OCI_RETURN_NULLS); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @access private + * @return object + */ + function _fetch_object() + { + $result = array(); + + // If PHP 5 is being used we can fetch an result object + if (function_exists('oci_fetch_object')) + { + $id = ($this->curs_id) ? $this->curs_id : $this->stmt_id; + + return @oci_fetch_object($id); + } + + // If PHP 4 is being used we have to build our own result + foreach ($this->result_array() as $key => $val) + { + $obj = new stdClass(); + if (is_array($val)) + { + foreach ($val as $k => $v) + { + $obj->$k = $v; + } + } + else + { + $obj->$key = $val; + } + + $result[] = $obj; + } + + return $result; + } + + // -------------------------------------------------------------------- + + /** + * Query result. "array" version. + * + * @access public + * @return array + */ + function result_array() + { + if (count($this->result_array) > 0) + { + return $this->result_array; + } + + // oracle's fetch functions do not return arrays. + // The information is returned in reference parameters + $row = NULL; + while ($this->_fetch_assoc($row)) + { + $this->result_array[] = $row; + } + + return $this->result_array; + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero + * + * @access private + * @return array + */ + function _data_seek($n = 0) + { + return FALSE; // Not needed + } + +} + + +/* End of file oci8_result.php */ +/* Location: ./system/database/drivers/oci8/oci8_result.php */ \ No newline at end of file diff --git a/system/database/drivers/oci8/oci8_utility.php b/system/database/drivers/oci8/oci8_utility.php new file mode 100644 index 0000000..c8049c2 --- /dev/null +++ b/system/database/drivers/oci8/oci8_utility.php @@ -0,0 +1,122 @@ +db->display_error('db_unsuported_feature'); + } + + /** + * + * The functions below have been deprecated as of 1.6, and are only here for backwards + * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation + * is STRONGLY discouraged in favour if using dbforge. + * + */ + + /** + * Create database + * + * @access public + * @param string the database name + * @return bool + */ + function _create_database($name) + { + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + return FALSE; + } + +} + +/* End of file oci8_utility.php */ +/* Location: ./system/database/drivers/oci8/oci8_utility.php */ \ No newline at end of file diff --git a/system/database/drivers/odbc/index.html b/system/database/drivers/odbc/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/odbc/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php new file mode 100644 index 0000000..dacbaab --- /dev/null +++ b/system/database/drivers/odbc/odbc_driver.php @@ -0,0 +1,639 @@ +_random_keyword = ' RND('.time().')'; // database specific random keyword + } + + /** + * Non-persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_connect() + { + return @odbc_connect($this->hostname, $this->username, $this->password); + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_pconnect() + { + return @odbc_pconnect($this->hostname, $this->username, $this->password); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @access public + * @return void + */ + function reconnect() + { + // not implemented in odbc + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @access private called by the base class + * @return resource + */ + function db_select() + { + // Not needed for ODBC + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access public + * @param string + * @param string + * @return resource + */ + function db_set_charset($charset, $collation) + { + // @todo - add support if needed + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @access public + * @return string + */ + function _version() + { + return "SELECT version() AS ver"; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @access private called by the base class + * @param string an SQL query + * @return resource + */ + function _execute($sql) + { + $sql = $this->_prep_query($sql); + return @odbc_exec($this->conn_id, $sql); + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @access private called by execute() + * @param string an SQL query + * @return string + */ + function _prep_query($sql) + { + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE; + + return odbc_autocommit($this->conn_id, FALSE); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $ret = odbc_commit($this->conn_id); + odbc_autocommit($this->conn_id, TRUE); + return $ret; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $ret = odbc_rollback($this->conn_id); + odbc_autocommit($this->conn_id, TRUE); + return $ret; + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @access public + * @param string + * @param bool whether or not the string will be used in a LIKE condition + * @return string + */ + function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + // Access the CI object + $CI =& get_instance(); + + // ODBC doesn't require escaping + $str = $CI->input->_remove_invisible_characters($str); + + // escape LIKE condition wildcards + if ($like === TRUE) + { + $str = str_replace( array('%', '_', $this->_like_escape_chr), + array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr), + $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @access public + * @return integer + */ + function affected_rows() + { + return @odbc_num_rows($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @access public + * @return integer + */ + function insert_id() + { + return @odbc_insert_id($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @access public + * @param string + * @return string + */ + function count_all($table = '') + { + if ($table == '') + { + return 0; + } + + $query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE)); + + if ($query->num_rows() == 0) + { + return 0; + } + + $row = $query->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @access private + * @param boolean + * @return string + */ + function _list_tables($prefix_limit = FALSE) + { + $sql = "SHOW TABLES FROM `".$this->database."`"; + + if ($prefix_limit !== FALSE AND $this->dbprefix != '') + { + //$sql .= " LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char); + return FALSE; // not currently supported + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @access public + * @param string the table name + * @return string + */ + function _list_columns($table = '') + { + return "SHOW COLUMNS FROM ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @access public + * @param string the table name + * @return object + */ + function _field_data($table) + { + return "SELECT TOP 1 FROM ".$table; + } + + // -------------------------------------------------------------------- + + /** + * The error message string + * + * @access private + * @return string + */ + function _error_message() + { + return odbc_errormsg($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * The error message number + * + * @access private + * @return integer + */ + function _error_number() + { + return odbc_error($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @access private + * @param string + * @return string + */ + function _escape_identifiers($item) + { + if ($this->_escape_char == '') + { + return $item; + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item); + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + } + + if (strpos($item, '.') !== FALSE) + { + $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char; + } + else + { + $str = $this->_escape_char.$item.$this->_escape_char; + } + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + + // -------------------------------------------------------------------- + + /** + * From Tables + * + * This function implicitly groups FROM tables so there is no confusion + * about operator precedence in harmony with SQL standards + * + * @access public + * @param type + * @return type + */ + function _from_tables($tables) + { + if ( ! is_array($tables)) + { + $tables = array($tables); + } + + return '('.implode(', ', $tables).')'; + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @access public + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + function _insert($table, $keys, $values) + { + return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")"; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @access public + * @param string the table name + * @param array the update data + * @param array the where clause + * @param array the orderby clause + * @param array the limit clause + * @return string + */ + function _update($table, $values, $where, $orderby = array(), $limit = FALSE) + { + foreach($values as $key => $val) + { + $valstr[] = $key." = ".$val; + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + $orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):''; + + $sql = "UPDATE ".$table." SET ".implode(', ', $valstr); + + $sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : ''; + + $sql .= $orderby.$limit; + + return $sql; + } + + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table name + * @return string + */ + function _truncate($table) + { + return $this->_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @access public + * @param string the table name + * @param array the where clause + * @param string the limit clause + * @return string + */ + function _delete($table, $where = array(), $like = array(), $limit = FALSE) + { + $conditions = ''; + + if (count($where) > 0 OR count($like) > 0) + { + $conditions = "\nWHERE "; + $conditions .= implode("\n", $this->ar_where); + + if (count($where) > 0 && count($like) > 0) + { + $conditions .= " AND "; + } + $conditions .= implode("\n", $like); + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$table.$conditions.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Limit string + * + * Generates a platform-specific LIMIT clause + * + * @access public + * @param string the sql query string + * @param integer the number of rows to limit the query to + * @param integer the offset value + * @return string + */ + function _limit($sql, $limit, $offset) + { + // Does ODBC doesn't use the LIMIT clause? + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @param resource + * @return void + */ + function _close($conn_id) + { + @odbc_close($conn_id); + } + + +} + + + +/* End of file odbc_driver.php */ +/* Location: ./system/database/drivers/odbc/odbc_driver.php */ \ No newline at end of file diff --git a/system/database/drivers/odbc/odbc_forge.php b/system/database/drivers/odbc/odbc_forge.php new file mode 100644 index 0000000..99cb282 --- /dev/null +++ b/system/database/drivers/odbc/odbc_forge.php @@ -0,0 +1,266 @@ +db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + // ODBC has no "drop database" command since it's + // designed to connect to an existing database + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @access private + * @param string the table name + * @param array the fields + * @param mixed primary key(s) + * @param mixed key(s) + * @param boolean should 'IF NOT EXISTS' be added to the SQL + * @return bool + */ + function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists) + { + $sql = 'CREATE TABLE '; + + if ($if_not_exists === TRUE) + { + $sql .= 'IF NOT EXISTS '; + } + + $sql .= $this->db->_escape_identifiers($table)." ("; + $current_field_count = 0; + + foreach ($fields as $field=>$attributes) + { + // Numeric field names aren't allowed in databases, so if the key is + // numeric, we know it was assigned by PHP and the developer manually + // entered the field information, so we'll simply add it to the list + if (is_numeric($field)) + { + $sql .= "\n\t$attributes"; + } + else + { + $attributes = array_change_key_case($attributes, CASE_UPPER); + + $sql .= "\n\t".$this->db->_protect_identifiers($field); + + $sql .= ' '.$attributes['TYPE']; + + if (array_key_exists('CONSTRAINT', $attributes)) + { + $sql .= '('.$attributes['CONSTRAINT'].')'; + } + + if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE) + { + $sql .= ' UNSIGNED'; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\''; + } + + if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $sql .= ' AUTO_INCREMENT'; + } + } + + // don't add a comma on the end of the last field + if (++$current_field_count < count($fields)) + { + $sql .= ','; + } + } + + if (count($primary_keys) > 0) + { + $primary_keys = $this->db->_protect_identifiers($primary_keys); + $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")"; + } + + if (is_array($keys) && count($keys) > 0) + { + foreach ($keys as $key) + { + if (is_array($key)) + { + $key = $this->db->_protect_identifiers($key); + } + else + { + $key = array($this->db->_protect_identifiers($key)); + } + + $sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")"; + } + } + + $sql .= "\n)"; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * @access private + * @return bool + */ + function _drop_table($table) + { + // Not a supported ODBC feature + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Alter table query + * + * Generates a platform-specific query so that a table can be altered + * Called by add_column(), drop_column(), and column_alter(), + * + * @access private + * @param string the ALTER type (ADD, DROP, CHANGE) + * @param string the column name + * @param string the table name + * @param string the column definition + * @param string the default value + * @param boolean should 'NOT NULL' be added + * @param string the field after which we should add the new field + * @return object + */ + function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '') + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name); + + // DROP has everything it needs now. + if ($alter_type == 'DROP') + { + return $sql; + } + + $sql .= " $column_definition"; + + if ($default_value != '') + { + $sql .= " DEFAULT \"$default_value\""; + } + + if ($null === NULL) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if ($after_field != '') + { + $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field); + } + + return $sql; + + } + + + // -------------------------------------------------------------------- + + /** + * Rename a table + * + * Generates a platform-specific query so that a table can be renamed + * + * @access private + * @param string the old table name + * @param string the new table name + * @return string + */ + function _rename_table($table_name, $new_table_name) + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name); + return $sql; + } + + +} + +/* End of file odbc_forge.php */ +/* Location: ./system/database/drivers/odbc/odbc_forge.php */ \ No newline at end of file diff --git a/system/database/drivers/odbc/odbc_result.php b/system/database/drivers/odbc/odbc_result.php new file mode 100644 index 0000000..d6f1501 --- /dev/null +++ b/system/database/drivers/odbc/odbc_result.php @@ -0,0 +1,228 @@ +result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @access public + * @return integer + */ + function num_fields() + { + return @odbc_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @access public + * @return array + */ + function list_fields() + { + $field_names = array(); + for ($i = 0; $i < $this->num_fields(); $i++) + { + $field_names[] = odbc_field_name($this->result_id, $i); + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @access public + * @return array + */ + function field_data() + { + $retval = array(); + for ($i = 0; $i < $this->num_fields(); $i++) + { + $F = new stdClass(); + $F->name = odbc_field_name($this->result_id, $i); + $F->type = odbc_field_type($this->result_id, $i); + $F->max_length = odbc_field_len($this->result_id, $i); + $F->primary_key = 0; + $F->default = ''; + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return null + */ + function free_result() + { + if (is_resource($this->result_id)) + { + odbc_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero + * + * @access private + * @return array + */ + function _data_seek($n = 0) + { + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @access private + * @return array + */ + function _fetch_assoc() + { + if (function_exists('odbc_fetch_object')) + { + return odbc_fetch_array($this->result_id); + } + else + { + return $this->_odbc_fetch_array($this->result_id); + } + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @access private + * @return object + */ + function _fetch_object() + { + if (function_exists('odbc_fetch_object')) + { + return odbc_fetch_object($this->result_id); + } + else + { + return $this->_odbc_fetch_object($this->result_id); + } + } + + + /** + * Result - object + * + * subsititutes the odbc_fetch_object function when + * not available (odbc_fetch_object requires unixODBC) + * + * @access private + * @return object + */ + function _odbc_fetch_object(& $odbc_result) { + $rs = array(); + $rs_obj = false; + if (odbc_fetch_into($odbc_result, $rs)) { + foreach ($rs as $k=>$v) { + $field_name= odbc_field_name($odbc_result, $k+1); + $rs_obj->$field_name = $v; + } + } + return $rs_obj; + } + + + /** + * Result - array + * + * subsititutes the odbc_fetch_array function when + * not available (odbc_fetch_array requires unixODBC) + * + * @access private + * @return array + */ + function _odbc_fetch_array(& $odbc_result) { + $rs = array(); + $rs_assoc = false; + if (odbc_fetch_into($odbc_result, $rs)) { + $rs_assoc=array(); + foreach ($rs as $k=>$v) { + $field_name= odbc_field_name($odbc_result, $k+1); + $rs_assoc[$field_name] = $v; + } + } + return $rs_assoc; + } + +} + + +/* End of file odbc_result.php */ +/* Location: ./system/database/drivers/odbc/odbc_result.php */ \ No newline at end of file diff --git a/system/database/drivers/odbc/odbc_utility.php b/system/database/drivers/odbc/odbc_utility.php new file mode 100644 index 0000000..85707a0 --- /dev/null +++ b/system/database/drivers/odbc/odbc_utility.php @@ -0,0 +1,148 @@ +db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Optimize table query + * + * Generates a platform-specific query so that a table can be optimized + * + * @access private + * @param string the table name + * @return object + */ + function _optimize_table($table) + { + // Not a supported ODBC feature + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Repair table query + * + * Generates a platform-specific query so that a table can be repaired + * + * @access private + * @param string the table name + * @return object + */ + function _repair_table($table) + { + // Not a supported ODBC feature + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * ODBC Export + * + * @access private + * @param array Preferences + * @return mixed + */ + function _backup($params = array()) + { + // Currently unsupported + return $this->db->display_error('db_unsuported_feature'); + } + + /** + * + * The functions below have been deprecated as of 1.6, and are only here for backwards + * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation + * is STRONGLY discouraged in favour if using dbforge. + * + */ + + /** + * Create database + * + * @access private + * @param string the database name + * @return bool + */ + function _create_database() + { + // ODBC has no "create database" command since it's + // designed to connect to an existing database + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + // ODBC has no "drop database" command since it's + // designed to connect to an existing database + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return FALSE; + } +} + +/* End of file odbc_utility.php */ +/* Location: ./system/database/drivers/odbc/odbc_utility.php */ \ No newline at end of file diff --git a/system/database/drivers/postgre/index.html b/system/database/drivers/postgre/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/postgre/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php new file mode 100644 index 0000000..9258da6 --- /dev/null +++ b/system/database/drivers/postgre/postgre_driver.php @@ -0,0 +1,684 @@ + 'host', + 'port' => 'port', + 'database' => 'dbname', + 'username' => 'user', + 'password' => 'password' + ); + + $connect_string = ""; + foreach ($components as $key => $val) + { + if (isset($this->$key) && $this->$key != '') + { + $connect_string .= " $val=".$this->$key; + } + } + return trim($connect_string); + } + + // -------------------------------------------------------------------- + + /** + * Non-persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_connect() + { + return @pg_connect($this->_connect_string()); + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_pconnect() + { + return @pg_pconnect($this->_connect_string()); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @access public + * @return void + */ + function reconnect() + { + if (pg_ping($this->conn_id) === FALSE) + { + $this->conn_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @access private called by the base class + * @return resource + */ + function db_select() + { + // Not needed for Postgre so we'll return TRUE + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access public + * @param string + * @param string + * @return resource + */ + function db_set_charset($charset, $collation) + { + // @todo - add support if needed + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @access public + * @return string + */ + function _version() + { + return "SELECT version() AS ver"; + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @access private called by the base class + * @param string an SQL query + * @return resource + */ + function _execute($sql) + { + $sql = $this->_prep_query($sql); + return @pg_query($this->conn_id, $sql); + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @access private called by execute() + * @param string an SQL query + * @return string + */ + function _prep_query($sql) + { + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE; + + return @pg_exec($this->conn_id, "begin"); + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + return @pg_exec($this->conn_id, "commit"); + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + return @pg_exec($this->conn_id, "rollback"); + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @access public + * @param string + * @param bool whether or not the string will be used in a LIKE condition + * @return string + */ + function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + $str = pg_escape_string($str); + + // escape LIKE condition wildcards + if ($like === TRUE) + { + $str = str_replace( array('%', '_', $this->_like_escape_chr), + array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr), + $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @access public + * @return integer + */ + function affected_rows() + { + return @pg_affected_rows($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @access public + * @return integer + */ + function insert_id() + { + $v = $this->_version(); + $v = $v['server']; + + $table = func_num_args() > 0 ? func_get_arg(0) : null; + $column = func_num_args() > 1 ? func_get_arg(1) : null; + + if ($table == null && $v >= '8.1') + { + $sql='SELECT LASTVAL() as ins_id'; + } + elseif ($table != null && $column != null && $v >= '8.0') + { + $sql = sprintf("SELECT pg_get_serial_sequence('%s','%s') as seq", $table, $column); + $query = $this->query($sql); + $row = $query->row(); + $sql = sprintf("SELECT CURRVAL('%s') as ins_id", $row->seq); + } + elseif ($table != null) + { + // seq_name passed in table parameter + $sql = sprintf("SELECT CURRVAL('%s') as ins_id", $table); + } + else + { + return pg_last_oid($this->result_id); + } + $query = $this->query($sql); + $row = $query->row(); + return $row->ins_id; + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @access public + * @param string + * @return string + */ + function count_all($table = '') + { + if ($table == '') + { + return 0; + } + + $query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE)); + + if ($query->num_rows() == 0) + { + return 0; + } + + $row = $query->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * Show table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @access private + * @param boolean + * @return string + */ + function _list_tables($prefix_limit = FALSE) + { + $sql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"; + + if ($prefix_limit !== FALSE AND $this->dbprefix != '') + { + $sql .= " AND table_name LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char); + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @access public + * @param string the table name + * @return string + */ + function _list_columns($table = '') + { + return "SELECT column_name FROM information_schema.columns WHERE table_name ='".$table."'"; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @access public + * @param string the table name + * @return object + */ + function _field_data($table) + { + return "SELECT * FROM ".$table." LIMIT 1"; + } + + // -------------------------------------------------------------------- + + /** + * The error message string + * + * @access private + * @return string + */ + function _error_message() + { + return pg_last_error($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * The error message number + * + * @access private + * @return integer + */ + function _error_number() + { + return ''; + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @access private + * @param string + * @return string + */ + function _escape_identifiers($item) + { + if ($this->_escape_char == '') + { + return $item; + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item); + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + } + + if (strpos($item, '.') !== FALSE) + { + $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char; + } + else + { + $str = $this->_escape_char.$item.$this->_escape_char; + } + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + + // -------------------------------------------------------------------- + + /** + * From Tables + * + * This function implicitly groups FROM tables so there is no confusion + * about operator precedence in harmony with SQL standards + * + * @access public + * @param type + * @return type + */ + function _from_tables($tables) + { + if ( ! is_array($tables)) + { + $tables = array($tables); + } + + return implode(', ', $tables); + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @access public + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + function _insert($table, $keys, $values) + { + return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")"; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @access public + * @param string the table name + * @param array the update data + * @param array the where clause + * @param array the orderby clause + * @param array the limit clause + * @return string + */ + function _update($table, $values, $where, $orderby = array(), $limit = FALSE) + { + foreach($values as $key => $val) + { + $valstr[] = $key." = ".$val; + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + $orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):''; + + $sql = "UPDATE ".$table." SET ".implode(', ', $valstr); + + $sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : ''; + + $sql .= $orderby.$limit; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table name + * @return string + */ + function _truncate($table) + { + return "TRUNCATE ".$table; + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @access public + * @param string the table name + * @param array the where clause + * @param string the limit clause + * @return string + */ + function _delete($table, $where = array(), $like = array(), $limit = FALSE) + { + $conditions = ''; + + if (count($where) > 0 OR count($like) > 0) + { + $conditions = "\nWHERE "; + $conditions .= implode("\n", $this->ar_where); + + if (count($where) > 0 && count($like) > 0) + { + $conditions .= " AND "; + } + $conditions .= implode("\n", $like); + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$table.$conditions.$limit; + } + + // -------------------------------------------------------------------- + /** + * Limit string + * + * Generates a platform-specific LIMIT clause + * + * @access public + * @param string the sql query string + * @param integer the number of rows to limit the query to + * @param integer the offset value + * @return string + */ + function _limit($sql, $limit, $offset) + { + $sql .= "LIMIT ".$limit; + + if ($offset > 0) + { + $sql .= " OFFSET ".$offset; + } + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @param resource + * @return void + */ + function _close($conn_id) + { + @pg_close($conn_id); + } + + +} + + +/* End of file postgre_driver.php */ +/* Location: ./system/database/drivers/postgre/postgre_driver.php */ \ No newline at end of file diff --git a/system/database/drivers/postgre/postgre_forge.php b/system/database/drivers/postgre/postgre_forge.php new file mode 100644 index 0000000..471dd80 --- /dev/null +++ b/system/database/drivers/postgre/postgre_forge.php @@ -0,0 +1,248 @@ +db->_escape_identifiers($table)." ("; + $current_field_count = 0; + + foreach ($fields as $field=>$attributes) + { + // Numeric field names aren't allowed in databases, so if the key is + // numeric, we know it was assigned by PHP and the developer manually + // entered the field information, so we'll simply add it to the list + if (is_numeric($field)) + { + $sql .= "\n\t$attributes"; + } + else + { + $attributes = array_change_key_case($attributes, CASE_UPPER); + + $sql .= "\n\t".$this->db->_protect_identifiers($field); + + $sql .= ' '.$attributes['TYPE']; + + if (array_key_exists('CONSTRAINT', $attributes)) + { + $sql .= '('.$attributes['CONSTRAINT'].')'; + } + + if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE) + { + $sql .= ' UNSIGNED'; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\''; + } + + if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $sql .= ' AUTO_INCREMENT'; + } + } + + // don't add a comma on the end of the last field + if (++$current_field_count < count($fields)) + { + $sql .= ','; + } + } + + if (count($primary_keys) > 0) + { + $primary_keys = $this->db->_protect_identifiers($primary_keys); + $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")"; + } + + if (is_array($keys) && count($keys) > 0) + { + foreach ($keys as $key) + { + if (is_array($key)) + { + $key = $this->db->_protect_identifiers($key); + } + else + { + $key = array($this->db->_protect_identifiers($key)); + } + + $sql .= ",\n\tFOREIGN KEY (" . implode(', ', $key) . ")"; + } + } + + $sql .= "\n);"; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * @access private + * @return bool + */ + function _drop_table($table) + { + return "DROP TABLE ".$this->db->_escape_identifiers($table)." CASCADE"; + } + + // -------------------------------------------------------------------- + + /** + * Alter table query + * + * Generates a platform-specific query so that a table can be altered + * Called by add_column(), drop_column(), and column_alter(), + * + * @access private + * @param string the ALTER type (ADD, DROP, CHANGE) + * @param string the column name + * @param string the table name + * @param string the column definition + * @param string the default value + * @param boolean should 'NOT NULL' be added + * @param string the field after which we should add the new field + * @return object + */ + function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '') + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name); + + // DROP has everything it needs now. + if ($alter_type == 'DROP') + { + return $sql; + } + + $sql .= " $column_definition"; + + if ($default_value != '') + { + $sql .= " DEFAULT \"$default_value\""; + } + + if ($null === NULL) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if ($after_field != '') + { + $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field); + } + + return $sql; + + } + + // -------------------------------------------------------------------- + + /** + * Rename a table + * + * Generates a platform-specific query so that a table can be renamed + * + * @access private + * @param string the old table name + * @param string the new table name + * @return string + */ + function _rename_table($table_name, $new_table_name) + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name); + return $sql; + } + + +} + +/* End of file postgre_forge.php */ +/* Location: ./system/database/drivers/postgre/postgre_forge.php */ \ No newline at end of file diff --git a/system/database/drivers/postgre/postgre_result.php b/system/database/drivers/postgre/postgre_result.php new file mode 100644 index 0000000..8e45eb1 --- /dev/null +++ b/system/database/drivers/postgre/postgre_result.php @@ -0,0 +1,169 @@ +result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @access public + * @return integer + */ + function num_fields() + { + return @pg_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @access public + * @return array + */ + function list_fields() + { + $field_names = array(); + for ($i = 0; $i < $this->num_fields(); $i++) + { + $field_names[] = pg_field_name($this->result_id, $i); + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @access public + * @return array + */ + function field_data() + { + $retval = array(); + for ($i = 0; $i < $this->num_fields(); $i++) + { + $F = new stdClass(); + $F->name = pg_field_name($this->result_id, $i); + $F->type = pg_field_type($this->result_id, $i); + $F->max_length = pg_field_size($this->result_id, $i); + $F->primary_key = 0; + $F->default = ''; + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return null + */ + function free_result() + { + if (is_resource($this->result_id)) + { + pg_free_result($this->result_id); + $this->result_id = FALSE; + } + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero + * + * @access private + * @return array + */ + function _data_seek($n = 0) + { + return pg_result_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @access private + * @return array + */ + function _fetch_assoc() + { + return pg_fetch_assoc($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @access private + * @return object + */ + function _fetch_object() + { + return pg_fetch_object($this->result_id); + } + +} + + +/* End of file postgre_result.php */ +/* Location: ./system/database/drivers/postgre/postgre_result.php */ \ No newline at end of file diff --git a/system/database/drivers/postgre/postgre_utility.php b/system/database/drivers/postgre/postgre_utility.php new file mode 100644 index 0000000..235954f --- /dev/null +++ b/system/database/drivers/postgre/postgre_utility.php @@ -0,0 +1,124 @@ +db->display_error('db_unsuported_feature'); + } + + /** + * + * The functions below have been deprecated as of 1.6, and are only here for backwards + * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation + * is STRONGLY discouraged in favour if using dbforge. + * + */ + + /** + * Create database + * + * @access private + * @param string the database name + * @return bool + */ + function _create_database($name) + { + return "CREATE DATABASE ".$name; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + return "DROP DATABASE ".$name; + } + + +} + + +/* End of file postgre_utility.php */ +/* Location: ./system/database/drivers/postgre/postgre_utility.php */ \ No newline at end of file diff --git a/system/database/drivers/sqlite/index.html b/system/database/drivers/sqlite/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/drivers/sqlite/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php new file mode 100644 index 0000000..0cb7997 --- /dev/null +++ b/system/database/drivers/sqlite/sqlite_driver.php @@ -0,0 +1,657 @@ +database, FILE_WRITE_MODE, $error)) + { + log_message('error', $error); + + if ($this->db_debug) + { + $this->display_error($error, '', TRUE); + } + + return FALSE; + } + + return $conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Persistent database connection + * + * @access private called by the base class + * @return resource + */ + function db_pconnect() + { + if ( ! $conn_id = @sqlite_popen($this->database, FILE_WRITE_MODE, $error)) + { + log_message('error', $error); + + if ($this->db_debug) + { + $this->display_error($error, '', TRUE); + } + + return FALSE; + } + + return $conn_id; + } + + // -------------------------------------------------------------------- + + /** + * Reconnect + * + * Keep / reestablish the db connection if no queries have been + * sent for a length of time exceeding the server's idle timeout + * + * @access public + * @return void + */ + function reconnect() + { + // not implemented in SQLite + } + + // -------------------------------------------------------------------- + + /** + * Select the database + * + * @access private called by the base class + * @return resource + */ + function db_select() + { + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Set client character set + * + * @access public + * @param string + * @param string + * @return resource + */ + function db_set_charset($charset, $collation) + { + // @todo - add support if needed + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Version number query string + * + * @access public + * @return string + */ + function _version() + { + return sqlite_libversion(); + } + + // -------------------------------------------------------------------- + + /** + * Execute the query + * + * @access private called by the base class + * @param string an SQL query + * @return resource + */ + function _execute($sql) + { + $sql = $this->_prep_query($sql); + return @sqlite_query($this->conn_id, $sql); + } + + // -------------------------------------------------------------------- + + /** + * Prep the query + * + * If needed, each database adapter can prep the query string + * + * @access private called by execute() + * @param string an SQL query + * @return string + */ + function _prep_query($sql) + { + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin($test_mode = FALSE) + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + // Reset the transaction failure flag. + // If the $test_mode flag is set to TRUE transactions will be rolled back + // even if the queries produce a successful result. + $this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE; + + $this->simple_query('BEGIN TRANSACTION'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('COMMIT'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->simple_query('ROLLBACK'); + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Escape String + * + * @access public + * @param string + * @param bool whether or not the string will be used in a LIKE condition + * @return string + */ + function escape_str($str, $like = FALSE) + { + if (is_array($str)) + { + foreach($str as $key => $val) + { + $str[$key] = $this->escape_str($val, $like); + } + + return $str; + } + + $str = sqlite_escape_string($str); + + // escape LIKE condition wildcards + if ($like === TRUE) + { + $str = str_replace( array('%', '_', $this->_like_escape_chr), + array($this->_like_escape_chr.'%', $this->_like_escape_chr.'_', $this->_like_escape_chr.$this->_like_escape_chr), + $str); + } + + return $str; + } + + // -------------------------------------------------------------------- + + /** + * Affected Rows + * + * @access public + * @return integer + */ + function affected_rows() + { + return sqlite_changes($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Insert ID + * + * @access public + * @return integer + */ + function insert_id() + { + return @sqlite_last_insert_rowid($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * "Count All" query + * + * Generates a platform-specific query string that counts all records in + * the specified database + * + * @access public + * @param string + * @return string + */ + function count_all($table = '') + { + if ($table == '') + { + return 0; + } + + $query = $this->query($this->_count_string . $this->_protect_identifiers('numrows') . " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE)); + + if ($query->num_rows() == 0) + { + return 0; + } + + $row = $query->row(); + return (int) $row->numrows; + } + + // -------------------------------------------------------------------- + + /** + * List table query + * + * Generates a platform-specific query string so that the table names can be fetched + * + * @access private + * @param boolean + * @return string + */ + function _list_tables($prefix_limit = FALSE) + { + $sql = "SELECT name from sqlite_master WHERE type='table'"; + + if ($prefix_limit !== FALSE AND $this->dbprefix != '') + { + $sql .= " AND 'name' LIKE '".$this->escape_like_str($this->dbprefix)."%' ".sprintf($this->_like_escape_str, $this->_like_escape_char); + } + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Show column query + * + * Generates a platform-specific query string so that the column names can be fetched + * + * @access public + * @param string the table name + * @return string + */ + function _list_columns($table = '') + { + // Not supported + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Field data query + * + * Generates a platform-specific query so that the column data can be retrieved + * + * @access public + * @param string the table name + * @return object + */ + function _field_data($table) + { + return "SELECT * FROM ".$table." LIMIT 1"; + } + + // -------------------------------------------------------------------- + + /** + * The error message string + * + * @access private + * @return string + */ + function _error_message() + { + return sqlite_error_string(sqlite_last_error($this->conn_id)); + } + + // -------------------------------------------------------------------- + + /** + * The error message number + * + * @access private + * @return integer + */ + function _error_number() + { + return sqlite_last_error($this->conn_id); + } + + // -------------------------------------------------------------------- + + /** + * Escape the SQL Identifiers + * + * This function escapes column and table names + * + * @access private + * @param string + * @return string + */ + function _escape_identifiers($item) + { + if ($this->_escape_char == '') + { + return $item; + } + + foreach ($this->_reserved_identifiers as $id) + { + if (strpos($item, '.'.$id) !== FALSE) + { + $str = $this->_escape_char. str_replace('.', $this->_escape_char.'.', $item); + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + } + + if (strpos($item, '.') !== FALSE) + { + $str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char; + } + else + { + $str = $this->_escape_char.$item.$this->_escape_char; + } + + // remove duplicates if the user already included the escape + return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str); + } + + // -------------------------------------------------------------------- + + /** + * From Tables + * + * This function implicitly groups FROM tables so there is no confusion + * about operator precedence in harmony with SQL standards + * + * @access public + * @param type + * @return type + */ + function _from_tables($tables) + { + if ( ! is_array($tables)) + { + $tables = array($tables); + } + + return '('.implode(', ', $tables).')'; + } + + // -------------------------------------------------------------------- + + /** + * Insert statement + * + * Generates a platform-specific insert string from the supplied data + * + * @access public + * @param string the table name + * @param array the insert keys + * @param array the insert values + * @return string + */ + function _insert($table, $keys, $values) + { + return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")"; + } + + // -------------------------------------------------------------------- + + /** + * Update statement + * + * Generates a platform-specific update string from the supplied data + * + * @access public + * @param string the table name + * @param array the update data + * @param array the where clause + * @param array the orderby clause + * @param array the limit clause + * @return string + */ + function _update($table, $values, $where, $orderby = array(), $limit = FALSE) + { + foreach($values as $key => $val) + { + $valstr[] = $key." = ".$val; + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + $orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):''; + + $sql = "UPDATE ".$table." SET ".implode(', ', $valstr); + + $sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : ''; + + $sql .= $orderby.$limit; + + return $sql; + } + + + // -------------------------------------------------------------------- + + /** + * Truncate statement + * + * Generates a platform-specific truncate string from the supplied data + * If the database does not support the truncate() command + * This function maps to "DELETE FROM table" + * + * @access public + * @param string the table name + * @return string + */ + function _truncate($table) + { + return $this->_delete($table); + } + + // -------------------------------------------------------------------- + + /** + * Delete statement + * + * Generates a platform-specific delete string from the supplied data + * + * @access public + * @param string the table name + * @param array the where clause + * @param string the limit clause + * @return string + */ + function _delete($table, $where = array(), $like = array(), $limit = FALSE) + { + $conditions = ''; + + if (count($where) > 0 OR count($like) > 0) + { + $conditions = "\nWHERE "; + $conditions .= implode("\n", $this->ar_where); + + if (count($where) > 0 && count($like) > 0) + { + $conditions .= " AND "; + } + $conditions .= implode("\n", $like); + } + + $limit = ( ! $limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$table.$conditions.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Limit string + * + * Generates a platform-specific LIMIT clause + * + * @access public + * @param string the sql query string + * @param integer the number of rows to limit the query to + * @param integer the offset value + * @return string + */ + function _limit($sql, $limit, $offset) + { + if ($offset == 0) + { + $offset = ''; + } + else + { + $offset .= ", "; + } + + return $sql."LIMIT ".$offset.$limit; + } + + // -------------------------------------------------------------------- + + /** + * Close DB Connection + * + * @access public + * @param resource + * @return void + */ + function _close($conn_id) + { + @sqlite_close($conn_id); + } + + +} + + +/* End of file sqlite_driver.php */ +/* Location: ./system/database/drivers/sqlite/sqlite_driver.php */ \ No newline at end of file diff --git a/system/database/drivers/sqlite/sqlite_forge.php b/system/database/drivers/sqlite/sqlite_forge.php new file mode 100644 index 0000000..0688ba3 --- /dev/null +++ b/system/database/drivers/sqlite/sqlite_forge.php @@ -0,0 +1,265 @@ +db->database) OR ! @unlink($this->db->database)) + { + if ($this->db->db_debug) + { + return $this->db->display_error('db_unable_to_drop'); + } + return FALSE; + } + return TRUE; + } + // -------------------------------------------------------------------- + + /** + * Create Table + * + * @access private + * @param string the table name + * @param array the fields + * @param mixed primary key(s) + * @param mixed key(s) + * @param boolean should 'IF NOT EXISTS' be added to the SQL + * @return bool + */ + function _create_table($table, $fields, $primary_keys, $keys, $if_not_exists) + { + $sql = 'CREATE TABLE '; + + // IF NOT EXISTS added to SQLite in 3.3.0 + if ($if_not_exists === TRUE && version_compare($this->_version(), '3.3.0', '>=') === TRUE) + { + $sql .= 'IF NOT EXISTS '; + } + + $sql .= $this->db->_escape_identifiers($table)."("; + $current_field_count = 0; + + foreach ($fields as $field=>$attributes) + { + // Numeric field names aren't allowed in databases, so if the key is + // numeric, we know it was assigned by PHP and the developer manually + // entered the field information, so we'll simply add it to the list + if (is_numeric($field)) + { + $sql .= "\n\t$attributes"; + } + else + { + $attributes = array_change_key_case($attributes, CASE_UPPER); + + $sql .= "\n\t".$this->db->_protect_identifiers($field); + + $sql .= ' '.$attributes['TYPE']; + + if (array_key_exists('CONSTRAINT', $attributes)) + { + $sql .= '('.$attributes['CONSTRAINT'].')'; + } + + if (array_key_exists('UNSIGNED', $attributes) && $attributes['UNSIGNED'] === TRUE) + { + $sql .= ' UNSIGNED'; + } + + if (array_key_exists('DEFAULT', $attributes)) + { + $sql .= ' DEFAULT \''.$attributes['DEFAULT'].'\''; + } + + if (array_key_exists('NULL', $attributes) && $attributes['NULL'] === TRUE) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if (array_key_exists('AUTO_INCREMENT', $attributes) && $attributes['AUTO_INCREMENT'] === TRUE) + { + $sql .= ' AUTO_INCREMENT'; + } + } + + // don't add a comma on the end of the last field + if (++$current_field_count < count($fields)) + { + $sql .= ','; + } + } + + if (count($primary_keys) > 0) + { + $primary_keys = $this->db->_protect_identifiers($primary_keys); + $sql .= ",\n\tPRIMARY KEY (" . implode(', ', $primary_keys) . ")"; + } + + if (is_array($keys) && count($keys) > 0) + { + foreach ($keys as $key) + { + if (is_array($key)) + { + $key = $this->db->_protect_identifiers($key); + } + else + { + $key = array($this->db->_protect_identifiers($key)); + } + + $sql .= ",\n\tUNIQUE (" . implode(', ', $key) . ")"; + } + } + + $sql .= "\n)"; + + return $sql; + } + + // -------------------------------------------------------------------- + + /** + * Drop Table + * + * Unsupported feature in SQLite + * + * @access private + * @return bool + */ + function _drop_table($table) + { + if ($this->db->db_debug) + { + return $this->db->display_error('db_unsuported_feature'); + } + return array(); + } + + // -------------------------------------------------------------------- + + /** + * Alter table query + * + * Generates a platform-specific query so that a table can be altered + * Called by add_column(), drop_column(), and column_alter(), + * + * @access private + * @param string the ALTER type (ADD, DROP, CHANGE) + * @param string the column name + * @param string the table name + * @param string the column definition + * @param string the default value + * @param boolean should 'NOT NULL' be added + * @param string the field after which we should add the new field + * @return object + */ + function _alter_table($alter_type, $table, $column_name, $column_definition = '', $default_value = '', $null = '', $after_field = '') + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table)." $alter_type ".$this->db->_protect_identifiers($column_name); + + // DROP has everything it needs now. + if ($alter_type == 'DROP') + { + // SQLite does not support dropping columns + // http://www.sqlite.org/omitted.html + // http://www.sqlite.org/faq.html#q11 + return FALSE; + } + + $sql .= " $column_definition"; + + if ($default_value != '') + { + $sql .= " DEFAULT \"$default_value\""; + } + + if ($null === NULL) + { + $sql .= ' NULL'; + } + else + { + $sql .= ' NOT NULL'; + } + + if ($after_field != '') + { + $sql .= ' AFTER ' . $this->db->_protect_identifiers($after_field); + } + + return $sql; + + } + + // -------------------------------------------------------------------- + + /** + * Rename a table + * + * Generates a platform-specific query so that a table can be renamed + * + * @access private + * @param string the old table name + * @param string the new table name + * @return string + */ + function _rename_table($table_name, $new_table_name) + { + $sql = 'ALTER TABLE '.$this->db->_protect_identifiers($table_name)." RENAME TO ".$this->db->_protect_identifiers($new_table_name); + return $sql; + } +} + +/* End of file sqlite_forge.php */ +/* Location: ./system/database/drivers/sqlite/sqlite_forge.php */ \ No newline at end of file diff --git a/system/database/drivers/sqlite/sqlite_result.php b/system/database/drivers/sqlite/sqlite_result.php new file mode 100644 index 0000000..c1c24c7 --- /dev/null +++ b/system/database/drivers/sqlite/sqlite_result.php @@ -0,0 +1,179 @@ +result_id); + } + + // -------------------------------------------------------------------- + + /** + * Number of fields in the result set + * + * @access public + * @return integer + */ + function num_fields() + { + return @sqlite_num_fields($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Fetch Field Names + * + * Generates an array of column names + * + * @access public + * @return array + */ + function list_fields() + { + $field_names = array(); + for ($i = 0; $i < $this->num_fields(); $i++) + { + $field_names[] = sqlite_field_name($this->result_id, $i); + } + + return $field_names; + } + + // -------------------------------------------------------------------- + + /** + * Field data + * + * Generates an array of objects containing field meta-data + * + * @access public + * @return array + */ + function field_data() + { + $retval = array(); + for ($i = 0; $i < $this->num_fields(); $i++) + { + $F = new stdClass(); + $F->name = sqlite_field_name($this->result_id, $i); + $F->type = 'varchar'; + $F->max_length = 0; + $F->primary_key = 0; + $F->default = ''; + + $retval[] = $F; + } + + return $retval; + } + + // -------------------------------------------------------------------- + + /** + * Free the result + * + * @return null + */ + function free_result() + { + // Not implemented in SQLite + } + + // -------------------------------------------------------------------- + + /** + * Data Seek + * + * Moves the internal pointer to the desired offset. We call + * this internally before fetching results to make sure the + * result set starts at zero + * + * @access private + * @return array + */ + function _data_seek($n = 0) + { + return sqlite_seek($this->result_id, $n); + } + + // -------------------------------------------------------------------- + + /** + * Result - associative array + * + * Returns the result set as an array + * + * @access private + * @return array + */ + function _fetch_assoc() + { + return sqlite_fetch_array($this->result_id); + } + + // -------------------------------------------------------------------- + + /** + * Result - object + * + * Returns the result set as an object + * + * @access private + * @return object + */ + function _fetch_object() + { + if (function_exists('sqlite_fetch_object')) + { + return sqlite_fetch_object($this->result_id); + } + else + { + $arr = sqlite_fetch_array($this->result_id, SQLITE_ASSOC); + if (is_array($arr)) + { + $obj = (object) $arr; + return $obj; + } else { + return NULL; + } + } + } + +} + + +/* End of file sqlite_result.php */ +/* Location: ./system/database/drivers/sqlite/sqlite_result.php */ \ No newline at end of file diff --git a/system/database/drivers/sqlite/sqlite_utility.php b/system/database/drivers/sqlite/sqlite_utility.php new file mode 100644 index 0000000..f66464e --- /dev/null +++ b/system/database/drivers/sqlite/sqlite_utility.php @@ -0,0 +1,141 @@ +db_debug) + { + return $this->display_error('db_unsuported_feature'); + } + return array(); + } + + // -------------------------------------------------------------------- + + /** + * Optimize table query + * + * Is optimization even supported in SQLite? + * + * @access private + * @param string the table name + * @return object + */ + function _optimize_table($table) + { + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * Repair table query + * + * Are table repairs even supported in SQLite? + * + * @access private + * @param string the table name + * @return object + */ + function _repair_table($table) + { + return FALSE; + } + + // -------------------------------------------------------------------- + + /** + * SQLite Export + * + * @access private + * @param array Preferences + * @return mixed + */ + function _backup($params = array()) + { + // Currently unsupported + return $this->db->display_error('db_unsuported_feature'); + } + + /** + * + * The functions below have been deprecated as of 1.6, and are only here for backwards + * compatibility. They now reside in dbforge(). The use of dbutils for database manipulation + * is STRONGLY discouraged in favour if using dbforge. + * + */ + + /** + * Create database + * + * @access public + * @param string the database name + * @return bool + */ + function _create_database() + { + // In SQLite, a database is created when you connect to the database. + // We'll return TRUE so that an error isn't generated + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Drop database + * + * @access private + * @param string the database name + * @return bool + */ + function _drop_database($name) + { + if ( ! @file_exists($this->db->database) OR ! @unlink($this->db->database)) + { + if ($this->db->db_debug) + { + return $this->db->display_error('db_unable_to_drop'); + } + return FALSE; + } + return TRUE; + } + +} + +/* End of file sqlite_utility.php */ +/* Location: ./system/database/drivers/sqlite/sqlite_utility.php */ \ No newline at end of file diff --git a/system/database/index.html b/system/database/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/database/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/fonts/index.html b/system/fonts/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/fonts/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/fonts/texb.ttf b/system/fonts/texb.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a7aa6469ac968cadb32438bf01e364c300d4ba6b GIT binary patch literal 143821 zcmcG%2b^S8nKxYL=Jcz&q3*35ZsqE(j@8w1I!uQNJvqT-rh#FGffRtggE2tII2N_4hxws=9j+b-(?-x9?0>xar(; zp7VtN^M6kJh|lL!e5ZY^FTH77S8sSjaT4GBCH|jx(b2i%|FG?!F7x>a=ksyOq06to ze>a`Mo$keQfUN!Om}1(mo~|^!Zr%_!U=O z{r+8pJAF(c?enQm`Uq<$xFAo>CCNEH7C{P(_GdToAe zykIA8#S5Y&E2^gW1G-^aLE8z1BhgqqkxZrCOg5J<6iel{_DV-*S9ecuwXfDcFgP?k zvSM^>d}8I~)bz}%)oa$yu3NuhsATH{s32mwE@Bxa#CJ*IwuIUEzK5`EI-Y zhQrOb%U`Zs_JL#QNPft7+9&ureW!en`rhMvKcwRc-&4M)eV_Gx(f2*yS>M0-UL-wa z8_Tj1tFQ)JWP8~`_EGk;>@)1wIKpk>wxomUMA}XFroZdzuH`yz*p0h2_YwCq?&sXU zbH9`EW!Ma#kuqvV&sdpgCYi}++A}LM6Pc;ZOlCvoK;~fP=FIJx*Jkd`Jd$}|=Gn{_ zGyjlPvu(Ld{$u%1qVDDq!gZ6$7?bXp;0*_I@ubWy|NZ_xZws!qFFBe#r+>{PDsw3!h#1^unhWKC$q`!iN_A zV&Q#0-@?5McP(7EFtL!Hf6e?I^S95Rp1*8x$DgCGowFT_5CNm|HSt{^!*Qf z|J~oe_xt+yMG4}yI5Fs@mVVx{^!ESbyY0))U+>$BPxSx)>?ecM?(kjiyAfkPM25+T z?D#I^(Es~eu~5v2mUo8j9Tsv1dY2!D z0}3M9Ib3WL8Id8ZAh1eQ5gfwGN<`BmJRyV&2x>y*S%GH>BM|ukMIj-}HdanTANie- zD4B+?tBNe882%>Ruc`d|BsV``6&1m5uh{!Oy|?pioLs|%y=7asB#5j)XhRf1k^rP1$t$y)dd(aovP}QY}(DOy% zoZbBcjgPcHtC~CHx_ILjVvxRO zi%S<6=x^?!hqkuHQN8VqoAsUsLsRXqR$Z^Lt%JNLE;cXKyk(<7Av_lIOe8Bvj3N+@ zV^#l_AFN>5h*lt^NA?G|E@Y>&CgC(jn2^L+fCv~tEz%M8YlO%wt19bADbg8HiWq9v z+F|ROOuU1POvXqNhGifbgx7z|rz#Kr>_H%KBrGEHD4z+pf%6i?{Vdv^62y zE2)wwN(2&v`_{h~?u^m<%HDld+*cMP!HEacyrS?ps&U);cb47u1lh&toGLK98c{ic z69|uo@NcMp|5d&udFHY8C(VRdwiw1>S;7a(eKJEX|HrF`IW29BON3Q>8M~xQrA=>| zZ7(y7%dlkq!`sTI#6TjjO=JREn)41AICga4VpfE35|J>xUK)ayc(sck`QEiF7BAk# zD#3zz`D4*S)QLC@6GtP~z4`q1Q=&iSU0zKHY}|_4v%4oQ($lU^4{2T9$mo)h*;opg zev=RjEhDe;71gGMb)ylcRQRp(AT;pUM*u$jW4w^%fv&` zp5cs}O2k8so+Bhu+_;b zea;Sd4CLKR{B}Yrg{jGH^Cn=f`KWHY1p;rY?-eqA^KjWF8ug znNtFR==$z{=z58lBxT@~qR#mZ$E{>@c8D!s5d!z47zUO@Z3iwxyw9s*jdz!L=t9#dOYAWyOe80CdC-x-+OFu z@QO7#chwu$s*E@r>nA-ICNBO8(OxtA0K-^4mRU0Wswr@OJz%Wdwqa*m#~besnwGh` zTq_kicwuhi#)6^9(21<2#}dWuR}S~aqv24{@cSzQE5J+F>%TZQ#&HQk_=J-!_tr{z z-3+M7Oc#4OA@3Mecz(F6C%r<#h-%l;8`-eLnY3*OgF*B00IzbAsHR57HU(6_s{Mg$ z@l{R>$?YQH1(P)nfAW=};)lum`96+!D`cQvKtv6jK*p3vIaI(YF_e3eHJd0mtBW*Fv}*MNaOG=Y3d zF*H^UWejHM^?n$3czhD#YdshZ#j~Y+ITU`=TjQxn8dh4Q!^5y@Sc{QZI_BCDJF<52 znL`0pm1K^aOT{}nd-m-NM?zs<2+K-9W=zvCw%)}XX_o zj4a5e0w?YGlpS)y3w${k%%Ufu$>vM`xVIHo^JqN;8<#N?SLcwJ>>D;Z!quRdr6brU~^ zZJK(})cppU$}-xpqH7k^JbV#MdcWu=enbP3DDVcuAJ+}bvK`0iD&~SgPOSQIE-N}b z5d#VX)e_wIc`4kL3=j(f#jGLii%}Z+G^;RL zELKE!2N@|ym@-7i&sTDg1q-7>*pT0}BgL*=9Wlc0Pv_gRvJm9C)1eM+#bAH8h0u%< z{QeS4R4!X;>l&UMp9zP?dsCsP4k4N@b{}i^6O-dK)ob&a`IlG|HgfeVbPHrIbgp_? z-so22@j&L%LwQGJMCOOGUnBwitf=*MJSQ_oe0^r*v%|Ig zjLa~Mm^cwjBs2a*L=y?|ONcH7AEWX_#W41+7@n$sr+(da*OF%+J-+wib*A5dpDgfV zi01_bT?C`Q@sj<=zPT_qv1u)-e7mQ;v!o{?iliA5e2B*Q+%mtwJPF@mz0YR}jWD{U zT^g^5i9H3f^c!AYhWdGnn`tc@yGA#NZ;1gOgwj9=%dQ#fE3MHv_&=drqsdfO^J@V{ zQqTt05o9)?>O9c{dSGIxzw0v+8#j}w_P+6{O@?k5G8YZ;3w(^@1TPZ7)h;;y@TY&> zT|GQk|M)L@DxD?2UkNaxCUI<7WHb)FqiOvU<7-HP-1P867o4|u)7+LF(*fL7V09ic z`4Dp)mt%Zi!uT%A9Bp?9|C=%7az(oQ`5T_DgJ-8UU};-+OvB%4i347jU(2DN8e#+E zu(T~*36_Ok*YmT^jS-g})9}KUjTDnNx~s*E5~a z!=~w2fdEV;)4AR>6kDVFahPFkod3=_`$rie5U?E66qxyMu4l!t+B#T`i0nqDf|#gr zF^1{-{r&UbZs?Bp*H6G+kNbdm=9_*~vz^U{YRGXz$|;^f@wX=SMn1tPyFHDrK%=+I zQZ^G$Zq}(9WEIu0qHV*y#pz1t>TnpqnpQT<+fLe+We_RgFT?1C^U1ao_gQ8knM-Bk zDcg-!cF%Nl5|Ni=4SgRa7c;MC+5sl|EF1WDl(}jipPzdU`~G~PPJT`%d})k}H*c44 z!KP>C%{1C>kqmh--xT~-e>}>u6z0T<&7{!#H9AQY*k!7wgQA{!nx3Z_Wq0Q+(dbD46 zF;g{1R)Rsd?82Y#=m=l%o49>+_b5v z#d~9^XoN63MSkFl;{#{OGvwr_%G>**N~98I$WDb~t$P<<;70jL-?R@oj7AT&nhc>m zN1IUrhAmjM1{RuM16EdB)NEACiOtZ=I~A8OTbFA&+O3;i0wpV#{XOjV61^i?Ah z9alv>zfc(p#nO4xvV!Tf>-P1O3xsSQ4?9lqo}@s7Vztk(oap{{@m#@5hO~84lLm~X zheqlE5tVRf_u!_<$so)P2S7>lXEWUaQwj3pKs#9_p6#EA)Sq1941he?5y0|J=;BH7rJZR{o(HV{4KKB zk?hL?itFmyu;R4B?|D*{&4*^Cz`jaPpcT#cM#mLKudbexcv-L_1w&0%n3>x7D^`U7yQ|r&G_^aKV%Z=dK1~p~H^vr<4M)S4X&H|fsE{(E8Sfd| z=%#ati{Tq9`CLy&p%?_tgMQw<@KbICWBt)aKexJ|VZ~cr0|dqECyL5r8({`oAe;Bu zUZ!Y^G`^%;BS@tfb;B=c_%PlD5bX}+=$)1gMd1}gg}uuMtJxB2ov0`@rgE07Q4GaW z0!pCTeOV72ei{xAMUrmLN~L+rFIo5o0VFT0-CfyG-gTV}kObN%@+w)Dm1rvJvg}10 zR9lzhPFPQnm8I&2PB^u!T+B@(;A|UPN0^zFgt@ejaEPnq!Nl$!ejW%sN1Jxp!-dEQ>tP1sHZBHKdtY_r%(y zWpVJTVF}}aokcoatYBHm%B(EgpClkaDx5@HNRiP{|5UfJ@lXXdg~QLT+&JO#KEQ_R`<+hRQ*A^dhI zDylP1K$dg-cHe`r{WOegO3*UNgSfUNy!G0ULGM94)Rzh;PNiE@bej$@#f<3&haA8j z;u82h4S(sJz@vYl+E1n2b`s3Fzzt?9nJomT%~+0JqgxplMv@IV1ztj)af!1}OhE1xH$ZrhHWpAiqcrP`n!w9Mgb z8rlF^10woW;L+h!x^U<i;)}fkO4{aI~RTmVK%?H61AK_j4)eF>!gimTee9eyl6419MOOk{L0C#YL z#avg=j5?KkHfV|nNz;*1*EsXZa^mW(m0X+qh(e@xs4z3ru`eYu^3gDf*mc@fd&<3_`$uMs#)agCxXxyG*8C?rGDMhMezpMmuV}ZciI$$=>R~6MC6j+*;S46*r zOngto%wn?A&Y|}&{95Q;Sd1Uw=!wyByKMABLpT#4T6lMdy$D|FONV!+y832rNXb2JD z;4!j=7(N(;h0bR{2h)N0s2idPeUWmwNq{Bh&43Z`CoP4o^%BB)MJ%JvimWm8$w)M4ZJaLU3t5=X;1e3db8_~Ynf>P-tYpgB z^^;R=$b53@#KeWA&i1aDoQ-sriwOk?_&vbW9Y=QU>@XDt_vGYQw5X7X!Q3L23uC#B zGC$LC-`cnp_$W2Vma-9AG8J+OuCvNI+}! z=qsJ*qVb9Ymeh0efF@LM4kKteRPe`v1oqxnq5mvL66T-yQ%D1q-}lw8B>(9>)6W0K zGg-k!FoMb^6~0$KH+}X-`04F!MEZZ~Q4h;R4LNBg~E5ged7$r9g9#X zfZ=o34Yv*A4e%IrgzuS!^}nzv_;O(bYq18Eu^71}t{; z>cP;>d5Dh@?%L>a(K0xG5wA%6jqz6 zyS7{^6!UtL0~H6nV&Cn)9}17LIbYm24DZ83>PA@Cg}dj;zbIy1H`^rAQOE}frnl4U zw${#1_LUV~pZO)5Mv|u81nAOZrYoO$`T6?%_Ml%TeT0-WxIZ)h&SnWyYPWQz+e&qO z`sIJBzr5Y{%d9KcDt?w&MyQV>H-yv&rT%t5hi}4oQ2GtV@>z`Kq2^e6lXCfZ(f2fT z_2d}8UQM2h#T+uRbfd9FL**{d2YcV}Z(1D76G!@{ZmOO$mbWN>Xe{dof2^MR<73JA z{_l?E!UFsE{M&p7e7Abiz6?NE4j(jnjeg@{c#vvpW0v<9ec$RQ98F#MhEtE<4XcH{ zf0|mE-+gx^YU<-L(6|U#T0rl$L_{qoQV6nu%qVhH2&SO15pxHV?WJlUJ{#>~*eh0D zq#HX|f9cpXrB6sOB?hv~rCe46X>8~B{sjM0nV_-0n$zQ=>ZbB(OE>*`G7{(?9vwHV zp}m||0DQ~zORS)Dhx6HNx~ILARg8)|yzcf@?ciQ1jBwG|e%Lj+I}T1JFT$G%hYO+D zrOL~_ucEEbC2KO^+WZ>$|67n}0{fk`x^A(90qwV7(tJbpEEDF|(T&&qBEZ^|XGpHt z)K`lqHAbpfF!~0}Ccy^d^vV%$9EEs&F}FaklZAhqDfYCKnKv^U^3j-0ExRCsHqhT} z8+{Rj2@a5O>rh;%<*&4u2K}_f+#?8f`}al?ZYUXX<58>KQiv5Sl}El%f4qNSxNoR$ z)%fJ#u8Gk^1pX+XS;q{8;t;p!cgUsJy-e{VAR&mN z-vlje<$--iFW3(f+rWxid$E*_ghKWcjIB6!5^M(<%@!3Jcu|AK$Q+}NTrK>#FJ;ZS=Gh>ph=%$EUg~-4)3&0PTS*O`~j{eJux%8h7Eiy{>|(1aW@Q16eI-*AuA=%Uw^b1i3Am-YEbJiX()chVYa2) zi``d#=85`K^HbynQf0ZjYn24(_=G*Z=AC?fo~$9e>i@d6YjrV$?{1lSMCR&W>0RrS0)xQD+m>DXW}Fgu9W+d zsmC|8&(ASC2yxuC6FXG(;~OZ@i5%|2zX~~U&L74HDqM?+7=sBpJRWmVodW@-D0-H9 zN${Uq0o<~Pk%~TqJx>MR>!QWqE&6>^%>!1T+L>N$@qP_K&-P@Ro=a;!gfb%gcGWV0 zcJ~Y%J8)?8&&gjsM~()A#o|NPT()*g4C#ASGKd`o3pXG*$4m^1EAo9HC_`z$^ko8z>fpv zx#x1j917Wf{z0f0PPW=Qrk<;RsQ!b`e?2aoZIT%Es3b5|+^? zCM9G!Di4~8430QL{{SAKg2vG(kMV6zM#-(RzR^ZBFuu9=@Dzd1Y9kz7Bv zy1zT?IuU?}gfm_@G&`{+**WxlLsa3=h=!3Yj;z?Qe$S5mX_vg=qwTSXjGq79Pq?Q+ zm9aymY_)5}%;lkSVuc}3_Pltc60t$2r1O~2dCY&AKjB-u_*Ca4PCRL~$kM6G#|MgY44>%*ZW>6o7dqEpd)bekoF36mm3eUMp}`P8^L+V~ zHZuLh&Xw-RwgNqob6}0k1>0W|`4e+5ZJr}*Ur@qNZ`O4{Ft(}D%+Ms^*8&RA@*7xY zoZXN|V63c#9#9y0C)n2dP~rG5^Ve$a9=HHwOkbFBVSv$3`E2Sp3|1Kt<$&Lt9>Kw49Rdm=fWqDMu-@ z3bicbEWav4$wSj5ay_)|riX1T`!zT|ln`WdKL~_mlyy)=~p_rK*B!NNUJzU9NF)xNZC> zkt}~Fan8xDW_{*g*0 zOd&P+O;Rc(BOihM7<>pQ1YMS3OerOrmlfc8@Z5l4>VeMgo@&o<=a^~LzxnivN_!;B zuwOa;f6MwTW*OI+Fk8~Vr z)3RPl9<#<9(kj03-eJm+8VNmchI#PJ1IQ-V&YXFm{zCn4&dgulc+;5gG||Saoqx)E zLL}y?oX!7|G3Xml=BHtt2XSBh-1}B*e7-pS!V9RNOTFoZ7wVs@|L9FiSHy*IVekAR zF!3RrzYfa5_Q*xcoN_7@EkS_;29?*qFzEM-g0d81EXuB!Cwobnz-xp%DoBzlt6JAg zG-ZI=Ta0PY2ZlYsNa^dl3bT^XHFHyMzl^F3!|YfBL! zSb!p8;0%i~7MxbfRFuKRAiUYJDH1-yl5p3>YisLcV39*zcv{S@KYK&)>m56Ru5rL4fHiG)0jOCsvo6$=Ua4d zgw%F00PJaLdxbnu8zu>bL!3XT35Lq*t|CVJFYNKh5eCB{p`vIq{`^{ojQsP7YJ$HhVG zPmJBTquoeu%P?-MM6vW_PwThD#+Mvx|GU!2L6<)-OXaOGT zD?*dLQN}nYf9WjgQVNqSM}3>p;Y}y+J@uujt)g1Oh41?c=WUs=G>IFY+p#Ej-Y1-v zb+@8$Qi`-q=PL2qv9JHE7O&){+ak1c4j7{ClP=MsEguI8g=F#B9qdYGxZ1eGJIAKhLJ8pfKu79qa7mYhc^aBk_3JP z<}Ll;kH!7%J9bn8;5spEIH+fNW>5V=boa~m{bYn;{T$NOG$8VZ9!?+S-*bMJ89vKi zAn6io1pT4>`gQr;pQ!)tw%*}x)FG~bCpp2fcE_=yk*iAP`iCE0pP8P@gb+n@k}khA z?OhAwCMzQ%pP8A??EmY}>`#u3CS}8vSt$U(7;F)6K^cV=_rq!7y`jsC#zV=+AbCWVUjC(HXw_Z5zWq6KP2Y zBNr)u#c(dEQh_() zP%Mj+8bVJe5$`l6jMYNVo6?U6W;s8wF$$i~%`DBB-=8o@hf(%|*|;cvv)g4WAjTuH z$R)e>ufC|i7tXZuwNI1EuHBdKKe*`ylt;O_sr6SMy~EAB1sbhrrenrdjZJh#Y}0U2 z9fGJqNW4A>?nQT>qPWR)5(O=en@mOy55FblFO#n z_1AxUjqX=a!bPJNcr&7+TXy7v51Q7{37Lli#aA}N|3}!1xMsAa zNt>R^qKaxsWWF~`VxG);Fy zKtz-asUotPN}H^Vr31Cl{*o2S9Yj!vs|7`us2M*kPkrljchy#ouRi^{`tzUun-J~^ z=L2pWc|f*uM%oE0aOdwaZB<|Ovv73eS~iljvonML`x@$lgYP5;2y-M;Dfi6m96d<) z^|t@@)#YxE?+L*EK>ab&C5l{w8ze$-(s&pzhW}^bEM)yUio!GytA?ysm$;F1yq1q2 zecuqJ#l+q+v2Rqv)t2L2kgRi|E_!zBfIM(4V$h*q@(q?r2<&{3`YKrW!o2UyM|%t5 zj#4R}P!W6d&^X$107Ak&o6g*`GNMyXi=!BEl~NH@*&i^Y$y&Ct%icC&f^-QN9L9n5&#t`qf%<}c!TdesH#h7W_NzC|Xze0O zc3!t^Vh%y4g+W&8&JFAC2WFsWR9cXRk~9ts)irU~EhwT(F&`aa7zQC64eEvxAcgJ+ zSoRu*A4|m|5eSN=#H1)OW8$mn)hi^YE@%b#~RILx;}iS56h$P)rVR4MhXszW`Bd5uMkJq2OWF&t7bk)LA6^QQUP*n4~ zxAT|W{_E?lLO`q}ZWutB_e*=d_=ASn1;&SJMk1kTt7)wZ6q4TVEKe4zvNx)vN$isD#Xt_Qtl} zK;VLB##77)^-rnKUt9Qv@LA6`pwF-z3;Jr=G;K}U##iv+TOh|Wx3NKieT949yv#XF z5N~ET)m64wWZ7a7@Jz8-yC;jLBjyF;ilte~T~pguhZCWcWI*q!s#Q32b2-H@snMX? z@xk-`@wgu=m7wI8S8XAYDn>eX{pBwTsa#sr(Ie=16cI^Wu;>?aYuDz~P)KDo1Wr)U zX6f3G491?RKlkFzQ1Eatz=$;DN?*DE**8D^?!lGS8M6Ro8;w+F}F%3Nb9(o7*0Ky9Tu;@3W%C5A&^*!&|8ttt{!I@?RRczZ$RPy?p zM;kyB@%1kJT;7cS{(&c>t^R$L*Cl~n_HOxc-k3BA1hL@SVf ze_$wbuzXZrMHrS@>?Y1Y&uMA@)~h$By&pl%IRpF!1L=L8N)T3>*X026D_B+}7A!@Sbu835kt98>>uv}rN|zxyop(-&?NRKYF1}(D zM^(#{TOa#B$g8$eJCambd`d%3EVrs7#LKAwDaxu#aRq0fNG9y(C8Iy)baXg^=339zzx+$;6QDkxr4Lfv zxS{x&$NuWilPgvvMYRVkEg~xYEL+}^HA>rlah;br473N+tE2ukQ){NGhbP@Hh<;lo ztSzBPj}s?FZtR9Od-x>T{bB3)v}*g|f&|bSm?_Q^E)d+QaN$4lsG>h0rB_y?d!D*x zM2l`JiDp{wyO?y5(c}G|LIlHFmI5|#4cA~*Lqb9aHSqyy?_XWsuSHhpL^G+UM$&$} z^14;SS6?-3y1UCQnOp@u{t?LJzf+kUVfves*AuXFB@Q~VIe~?xH&hlDu^^tNsk7J` zs*%X0lEs+5~kqciq%Eu^4zx3_O*nw&;a~B z89n%h60P`x&BTv^pPmD&vZie~JnSguI3?N$l9|h!vE!3eQBa1xkrLXRaBbC*Z;-&` zDzLv{OM%4Fz=S#?vK3L%lf!X6iOe|Gh7xpzLo8v22d*6W02!;_dVjHTPgca@A*m4Z z%*ThEupNfKKyxb`iiX)hB4QeTUz+A>k%6loidPvr%3T2DMe}4Chv@&INS89${bgW}GH#;gFV@9*Uz1 zLC36=#Gt_h0Lk@Un2?>k(~w?j!%C3fuR?yYx+Ls=HN}z?YcE2H4Osj41gI%WUg_5> zjF*Q^Q5jkm=HnCHV75G~l`od=E9zQoACb3)WOC*W#3J24#AGEcv2xgicS?yA{IO@uF3sn{jclw z+vw;S#k=aKuFV8GF06mHp&7<5;#5b0zz_xO61zPanA<`a1u{Q_SC26zO037>AUzNOKBiwnaw zyQ9%5w7v)%g1dn#xFQ3sMPQl-0gzpqxBZJ60bW=S&Cmns`?R1+b8tN&#|8o`ZU2{p zw?C*CY|u5k!=pF6b8CKG!VeLkPNSNOeT}_PwWK*%0W7zoQ&i{DpGfySq9YujC#-(` zpRMLEssirxj?YHF{PI)$&By=ck!Yg5oQi@uhv~9kB8k3)mR-FnyX#{=KiPjp*n zlMI*_V#yYHFX^~82iABt;l_c8E0>D#YTP^i(AU3yNPNQvR0?ZifM@8za6f&7NOd2x z3tknfQNZnJpxEFwZTb7ZuYXwZz3979RInr^@tvIiCDs=cX+86~YerZ=`QUyvmK0l3 zf-Kcui!>hblT$hoEi7zgmhJstxPMJhOT`5y z)+PAVNrnlvhm~O4#nqqJ+w1TC@UD-{T()Vo!dq4twb0za(c^=!Bl@+&Ti!$bcW#(m zKW(s+fXdL`zPgXRrtw@&zKh}Z{r%sQE%dQ&eDSw8(()T0i<^(J_w)Dq(#TE}aAJV9 zJuMCEV2`unI8&2SjmzSwDJme{XsuDu>%i;>zE>Y4@5jhji`vkGuQMEBZf6 zLt(<-YvmGwugf8ob<)Hk=~Zo!4>(Go_-226wr%FBKD)j^=Ug+V|LpwT!o_vbm!SPh z;S7&v+gRg~vXdccS;{W?KUMH()iB45eUJIUzvarPiYFaLy!ifk_m>+05Z3tyY1T9% zJsxJ+y#8yL&ypALd{~RcT1LY1gd1sTDA?wFSPrGoiGzD1w8r+$|JhP3?AQNiOR)g^ znOOK0cOCmq-+f-yY-1I=2N$a z1opdz`ji#BWTn4y!wxr|2=as~3OGbsI2d!=qSci;t*n7{R@5ZN=t|g3_ZH94~SU>OCZUiC|OY~iVWwEkn4%k{;u}oK)%E=K`Ee_?wBO4-hz^f zSju2mBj7-*2C!_35=rwyeqB&uMN1T%q-g|06I;f5P)4E^;P%N3->!#336a=}WTE7c z3mOg$@Tjq61X0GiGX%>eA<&@QKs!DZ_s?t5BRyaR_-~4UJIQkXQv2G8BKU-e?AeaW zNFY$w>JL9EsN>07Kw(n~<$i`KRxC?5(qP9$q4IGW<|pHuUHISJ*C4+$l-G=E`IdtR zx|MA-rb(?atWeU3+Y7A&=xb}d=}>vHY+zWki)2=(l@;{lXfaauaGe1P@VtT0w%-AUz}VZc;eJQZbyoHL&xa#*N-w+ zhof8jgW$s1a@+TEmIjD(bGt@Z(bXd?}CuVGd@L{$N45K8-)~auMDP zz~rn2;vo{UjHqLI12ITfphYPb>KyOC>BCQ-x<}!Hf*dO|J7sD9TP&yc16WE--HUqq z`eqdp6+jSb2fJu#5CRFW(s%r;50{am;B=&RV{|=N3@Fv1>lc2_jj-?b?ZF4ZTLYpQ zN_(Q;>QfJbZ4N;{1_9==w}H#GR7>k{`nnupt7bfGmHAPLq;tat@ElF4u}q@8&xvkX z_vPC@%#b^-{X$Q7f2G>qT_}cRgBQ}Tf2Yg^u`n22=rmxiJ9^XRh)FA-8gs+HA)0k_ z0ZVMpD48%j>5lbhiV$}Al7+Rsg_?s^W*F|kt^fHqx1KaOx-gg%&K0^0R|ioxr17ZM z)h8LUEt*f4=h>&b6{6XMj z^as*f)38YPPaEQ=jGLSlfNYV{1K%2FK`0J5dMOe^ai@sY-KF7A6#7uD#%=+31dFI} zAhuBb{~zpcq5s$Uc0uy!0y(X6*H&kEU5r^vJGhl%Y;+FxWX??=HKdT9QOmnc-;kbX zlhtJNuLnWzS1D};l%byfot0`=%}qah>TQIqyPgDAu5{gWdPR3NB@>i1wX>{-IY;^E zhpkJK~^qI+;Mnf2w4ATWrQkzO-UpUZP;E8s-Pwk>G17m@4xC( zaH0@LsdlbZ^|N_94b346@cN*?r9=eFvl8~k>Eo%&R5^Xo*dc~lJ$|wci|wEzeCNYq zxt)ImYqa>RtVit|7@$NYtQ!F7fH*B}Ug@x>);u2<^LDB08Xb~ge);gj_a6MhZ$J9) zFOn?QMo?r>^_(~uDu8-*84L5JvLkL{npz*nie)-d)l%Wds~q;;x%ocNr)R!8cb9D3 zHA3q&p;-hJ2?A&eXed0#a$!Y(c1JcD4q{~zx>Adfc}MRd?lGDNTv@-EyOVv)_g>#u zeZK)y9PM0gs2j7U^(@p>pSxwVjalIx(VAlPL-R1aco7o5p~chCF zH9Z4x7Qxk*^^hGs^nqOG%AwaDG0poU^lvNx(8eD=h!ow9J@=-D4y`Chd)zdS|RJuoiAW;7TzgATg{HsZ_%%tDJViBf~%dHALq?Zvf;=AecI# z4Vw;~$FUnKn;8>@$+Fq*xp1^njV6-OYgez}In*m#sJ`i_&Im%lE6WcB z&A?ay29xD;g1F*RJ7QS288l4rMl(^z$WSedg(*tCW(doV2B7CDu&%8=@Ibj}>UcnS z8ZSa}eOmZ5F~YcCSiq$N9doEWM)CRPBVY!?<` z8{>!dEw`Pw$_PiYY(K2PRQsIFC-s9R0cFlu+?DOmOj=n%dt-<9h4Avj;3k6!3*w-n zq}w`*wGdr+8ckLDDys(ay6i2ri#ZBg$^8Ph0jySUZJ&lvd8CmB?I>%UGgVtc2hpO@ zzc-&7>wkHi(T22PhGacMu_wwFqrfkC;od`^`{BJXL``u&8dK`jlC?w|+6x=CvKj!GE*ucrH4p(e_2QKNbmS=^OYyc$C(d z(${5$-q24Cb5E}O<4^jxd8QaOWKC27X=VIa-^xkXuGHXhV-avAy}Lh`$LMN?9vt2x zV}2h$57#pde?VKok?~Wf#{XO00!dJ<9$onQ{12_b!O@rjuL@jV&@wqbS%`-><_p7E z7fbi6E>>eDToEgm_%U;gEuYI6>>f`5h;J71{xQfq{yN1UkoOju3X54l^LhQZtb;rS zi9UlmwFe*zNa#X4ze3|THD{}rJq79sRpT8}1x-;jCtlATR;9#Do7X7S4@sE^Aew$7)i*M4P)+z zWwhjVq{pFE&t?+f05p6KgX5eYwWGH4h9R8Ipq7nSP0sy4T6_mmBqIfb87 z-x=#<@1hDv_2&gB9QnVgVgIBG{$H~7?wQVb7}B85fd^zuh8jd={XQG;Stv4YfxRXg z%8zIzUegA#Z=oF6#+>{g^?$Q_mynQVU+(#D_9f{ayhD~VsrEb;|iMCcFPf z9rPth|G?@k(0<5psHtS9EOq7S!!o|nh5zLCvX6qh52;(eZXp$_B@5K@yf1T?p4a|ha+)xAU(lY(L|F9WA<* zm3IV0R(NK0$qqDa^KAVD_jUHIzCp^*Y)S%sZqIzRoQ-BrEa}unS9vqYn>#!u(%`Jd zw%i3?>Qu^}KNl~dNWm;s91Kawuw&k|6G+Cc;m>oeU$JVWuiPFVCFJ0(Ki#y>4sPqC zYK6HP85jTBp&k@P0caAF59-LHjE)Rf5F8=N-6+IW;-ZprGkHYyJye?Tmr1I+`0bbf zt1;V7@ewVqU^&=;kxrD$)uVTQplV$L41eh&&L1up)%Y%&I$=qD4^4Yh-qxP0e$*S%&m6c1*ra6blI{2u4%KH zs;8Ocrk#eK@WKc0D^W;bEy86qjqGAv0QX=C9$|NTJvJJVgVkuhRH+u*i=COwUmd=Q ztc~aLmHx@0RguWMj?@>n&rZ6a5Fo-tG#}!XVsC8(-ii6TUNqS&+Y!^Z+hHqquzt+z zA?}MrNp8flKKUS6H%L#!j^6%-`%mBxR76sSA74m^nI9=*{W};jAS($)*!TK&x=?#C zC1}0L3LjzR~tA4PxxqulkizJ>K@6J{jqHCrR8k*TLNrPu#aAfGjl|!$lWa9g~ zHm(qa*QP+QDh{IZF_9n7p;S%R(xl5yC9)XIpTU9=-@1igv0K^q(b|DmY80%s#589@ zbD)JP|*fyqRqQJ?h-H?vm-!aQ}E>YG+44+m6^uMhY;9zk^bU zAE?=WWS}a+T*ZaC)&^6;>a@`p+UCrb4a^ZM^5` zx=IR^8t_YbP;q&bqUAwXqA3?m1r&(pr3{&Q9D^# z_$6!cLAnYfX~y*wR`G_dF#t;gg2|c11a1vFh8p96gc*v&$ZomvloL_p$Jol?t%48_ zU%v{=^GQKCb%1r}sO#(x7^-@H67FSZ{abTE!yg6lSZd_EaBu~u|cvRHB1AqJl`v_gb6}c@a=Y}z(TEz=X(DoL0 zu_7rg( zm1Dyfsr!VON0fsco0>=k>i;5}uODBT1SCzx2zkF0Ma~Iok>9COM@!R7GWRBC4X@Ep zia*CP$DWt1!8lgBN}%jau0W_6IpL2ewPu85ju~I$$LP*jq|XLpn(S>(c1|f7p8uFiEcRTzF2!uBv{jx~r?JI_KOo-IIIr z?4;e44{&=)t@^EHk2SPwa}HJ=)ExiDbKCEu zWx%WbJ~|T)?g3-&2bm%+Xms9$M)LftrYc=!?HL-_s{w>i8r8| zDYRPvRsv+fifPF*R1Pa4cFO@zBl|;c@Lwr{Oi@wr8M85;M@2*i|AunCMIdW26{>{l zRRv_Dp^rQj@LQ;A2iA)U1GZtwkd1s?6V#}C8o-y(^@PtA>Yt8BMhC;5L<-D~X$37)koe=-Fzll<`(J+4>dE;45<@DI>L^Dx zQ2qyOh5)P}kZWddpl@XiHL&alel2NUl!DW0#8x^Udyj&xrNl` zZ$7z)UYn+W5gSO%l>Ca7^qBOz6yI&Y=nD<{-HgYlA_HuNlYtDbjCN1hmSMjF;)7Ul zVnpKI;EPv6njoj9WAv(ysz7BKk;Pv` zP^{%MjmS9knlFI*gx00u^dM}Fwl;uY$wGP>d=G}(8}$mF++v|2I80Yh{g|!C{{X$s z=x%5)^nR$Eme4d6N_+Em#0Ps@LyyqeN7SxUJ+;K3^$R@~z*OX-TG1vdS1+J-@{Stu zS$?YghcEW1SS=tICx~%-qT@>$I5l2cItjA|{SHA&j|8qOY#hIXVRRWg0>f_g>O0~H z_U9h*dUkGHHxSA(?m$pUFRn{7b4dYBNim%wtX(bMCrW?xIHn$Z8x0piU88&e;*lPP zb>vT~vD#BteD{6(&Lm|XHJx-%Ktlrp)|Es$k)FEoty_TTPm8D-MR?rhQ5euc%PxI9 z{6GQK{%$Q8-5&xFd0ikD2;KnQ$Msj2^Erk{ zKz9zxp5;v^J?pMjqh@(FHT^Pj4V|~=XZ`pLw4@FD#vpu#k7C`UhJ7`5tA90aD-BZ` zgh8tbFC36ody42pqJzebqFY!20+qv38G2GUb||wx?~4rIvxsd>C+IPfk{@Jl2rDZr z+G-KJ-!QHc-0mL z8`9={X?}x72`WXHp(Gfd1x<}LA5eaPX0$9&1Wakz6c4(;;>=b^1A(?q8ecFXC68-j#H%LSt&m?!^DLZK?hZ7Rd@g@-6aUkm1iC?*xXt-J(KONG|6fBiK< zUr)B2nJ)Jt^+4?rxmH~Wgu&I0NGdJy04mKUX%P&K7hXA>fHA>)yy3OChhqi9)WuTN z2eTfQ2mpaVx_|>qmTxGbn<3(G9?dFm;vkZKiRq$bJ`5A<2}Y6onlfb4y^~=p)+GgK zA9yfQFp8V0SU7?ttARq#cnUlY&YlIvOzuL@ z=Vtc64&xdCCq(#VBHf zwZMYZmLd{(X(_q_ig%Oj1Djwn8JdrPZ{b2IVw1KM)jxls6wx{TJof?iFHs|xq&t}9 zWUCwNbtvCj|BZqF{4nt-nzs9?YsYt85mKS$T|6ybUVH1EYu6n!Rqp$wA1=A8XC%jR zH%2tlkJK+rLh4lXxaDgDDs&QhYu9(7&l2fMP}a7l^g4THJ8DWrglYuXdKcn~@d+E= zrL8om;>g)Zb=#;)iDd6fXSpOa*=A9?1vIP%(r~VT_D)z4C?TLdxzVl| zQzHjeje{O|$!^*80j?^tMsZhp-<2C~rhT>r^x1wLf~V=+pf88|*6?(kw&m_wo90|O z+L)V;#ZBja!avHtAARhK$LXmt9i z@JX29ReqlYXe~@EUee9Wn9-5hF`ggI)LgDoe9VYu(ibfoAhAQy9kTxz-mouMGH%{~ z@s{`#TuwL`+e}BRqdIBBg0EppTO3y^e6nwr2^M2*qyDp}N3mWhBmgcW7|y)It^k5CF>tMND>O2Ai&&5L`K6|0?A^=I2C^ zk`zY=)CsIvj?`~N+=_U@rJ2z*<-mYukKq(IG%|gglVLOoIaCK&)&BVi!o7f?0MRH~ z;3z{`V8jPQ3JXygk-7fsp#EY00^fyCBowgU)Hv5|HH5;HGJ?wQ#U-WW)}@rj%GZLl z-|Vkc@(-g12scK zs!h?vbNko!hirVD#>Jf5S>!>NuFK&7syw_tw+DtLE0mrI#O3HPsEX4v9Gb=cZ9P>@ zNvRy?)l1b_ej(xGi21ClmCJ9s>~&t>ztloSpGe;b#&1ArM23VG$jAREzw zku0F}D5JXYHMRy_!9yMmD-@0v3c#!wrt!+%ipncKPpr~g>+Zc~t|D@%+|)rUttQ8( zQvTs&pD4Z!Z8Jr(?UFZEN|9gyeM2n|uEoi}rE3jCn9*g#Eg!zCQZB_(8o~uwV;8<= z%hx^Ue#uU-_ac{v40|IQ-I_alZrkk#F!$}5Z%-@zt*u(x@?-~-Dc`6qtN2NOX-kML zF7)WtS91P3|9Z$oX^17O5m$6{d&zBj(3cQ44T*bG!{OW}un0!O=kR1AVCF0fde zs1Qbo3E39FP~C!&i>S1|2;d(;Y;^Q#M?xEGJTy3nJ_Q8fF@(rG@r1{lPU~VYposth zfgTm@Q&4k<#5VL4iX0KOqJ4f`zFw5ziT&)|tRDgKl$>6BY(PbnjW<9zne&%sla<4u zqg8XF3+$b8Ko-22v^QT(54toRkY`jBtLSVGl7;TQGYL_{&3R-OP^)wi>qqp$<4Vsj zq)SNGc~r~8_)8_fRjFEXQb0iySZYx??G=|8e&C z!c@uj(b7TGM-sF60S|Gf4dW>8x$V;Gvz}`v+O9q*fPCGx-I{n+u zeNcEe|5shR@L4YGTbOjrJ}O`+ml1o(#V`w|O?Vg5D(ls=m@B*SmVzN3(y$@z@M^nS@ zO{^GHoDPaIA}1odeD-U$e|B5_D*ga}57<#L503e6%RTmJ?*LwKR)vE>r7jy-6tU2# zGRD4}PEvcJ`B=4l%mL;c1i7NR)9kzOX&9d#1YR4a&I!LMXMDc0M&46@ZfPX5G`Bc4 z++9s>gt;&K^}v;1Po;;FVT*kJ?4jMP7?w*2M*23OB)Gzz{pEAtbq5E60k0;jJ{c@} zWPmq`;4OyG9S3`^VWeaEV((RV?p%(=Lg5>RC`6y;=iW^Yk{>f~hs}3^#n)K~PgnS_ z?SaU=joM-_)dSJyt3mweK49VAM(+qYuuZ4cW7PIonq%mwAq=;ps-~G?{Du$J3bWz! zL8F1*@qB&NxcsV1(#eBwjD^*D*po}+eU2`J(JGSLvS==fL=!rqs4)a6k%*?siM9hn z)6}pL6A|ZSurDxfFdg_9r1$0V8`5k-<7`ETE-0={E|c@+yG@cY>(6TvdY<5XmII5a z0XvrJCMYOaDRjR|1{67xq1BUaw8RGcvJf5|ax@*3UD%sW=~_IYiKfNgE#v|F(orfI z&iPVv6EVpHbp*2*JbDBmYDCPp%Rz(aa7-dEky3AbXNk^ zVKB3Hvlqce(j4Vg)R z+JBAT^2?vHE{R1lfSLkaR3Aiq{nl|kp}NqYJOZAN7{~2=6(^%hH(Emb!9S#D^jkBx18UyxgduN2DWr$Pv8&+#ALD%?K$|-A7{ayaBM3Q zg|t-$lUb*ra2Ww?I5X~fqCLUg0#aL+PuE~;DJT9XIrfIxz2t@x;xC-CvZ7G@e(46X zclPf8e)8x{A(;(f4S=wUfEf0d|3nVgKW*f$uWF(Jg3gsdwuuuakcQ5wxS?Fx(Fanehv## zDQu@iv)c>!Rhr|OMYub%*9fbq3|sd&&w^}r^z% zUJvAa(;B2R2i4fnWtbr(@)3S*kF7Nz0{Gq1fUQxlWqggb);<@%QPtW|y_jd)nP)o| zA0xK!H8kV_wY7r|YTU0Cf1;v;57r7a((Arpdd2w+{F7$ULS6_MZIEgRpp8p)XC`F97=*g9wi&1?p}+XqJMOBl)U{DaSMP4#2@O5u@_$k@xDxd>xNdlltf%$}QxdGqB#G#40KM)Nt? zNZ@*4t~e431Wc;MX$d+=oCGZPQ0?-ggUOlsl#HqeMD+yz7mBtWKTKgdULWH(G;-%FvxRaTjJ226Um~D zZ@F)=a`14kZh9@k#CeDq>hFHS-GzP@k0LhJs5!B`Ha9Ud^nBjzy|qX4)I4K zvMi{OLHv7|{P$Bn_jvZ8z-WqYgk!y;MosCJPbp2p}8`ImUshHG}zOfzc77)KM>|PHb7f`?gb8uR-|^$R7mI z8+d*DUYP`6uSfI2L|jAn6y7wVsmkb0+()S%SvvQx!ckx*pXvH@yGw~vVcVKbOchcH zt)X=WxG~dsuRT48Qz7z|YroZa)86Rq@N;u|oM*>?8%o+`o7mq`2+^F+2K1{jn|3(M zY`#aIJ1^wOR>LnPoh4nil(lIE>7PxJqZjDBV8^#`>UArTBA8n=4I93^i5uwqgB#q+ znX${>Xt5-L&+hqZz38Zc)u$#BmUY<4bm zG>C1wBwLzH50y&sv?ejG{pj>AOyqKQg)cWz&$G(V%oQu+0g$bun(yo+QZOLMz@B7N zYJvM(4^8ax>e*;I3_3tmXz`p83yl<~WOZse5OT_Z0qdgqVYtZ*bDg|#@2a?xTo8A$ecDC9|y zn-@+c^WeBkLJ0Zl*z(kTVE}1uhR;fFH$q3)hH(<2yaEqwg%qHnKFV@qg)?U0WE=xX zy30<%@Y9+2>G|z~I2*3A?D%plwL#K{03%Wq6v7I0nxY}g=mEM5!{DW1Nz9BqHa3_F z=q#tfA%yJTer|*C1ov_HKvNXK*@&pva!2zSj##wwVaVIs4n(W>6%{*Lly5i2`n6}X zuS$pG0RZAe534_JP-7gO(07wb57Q3w_XnApGv!7P0!`9s|eFny9`dpqn#a-HUy6X=*b4@npBF{O! z6YPcA(i1H;U~Br$1uI$>6u8Z<-4TJLEvh?KBsDu60`7dCMM;I&&<#{e&{?rBZ!ho$ zLJjBU?LNrt=Ky_2UpU&1&uTb`XSqX0a zlLH#4x(%r2^1}PZhpo6Ejr3xPm!_YX8Z}}8cW}pNCZpV?AoUdD!FZ_01;7qDbp`Y| zBVjwoqH^^OAHMbtZ@n%O2pDt?U_WNDOciW0S=bStum?~{oPK?eo#4XiKyCyfdlbO^ z>6Q1tEwUJ=#mLz7o$ z*U09_HeV~UK!CW-{A#VxobMA*o_B;r? z6^Pmw@Dpfuy7{o1JhX)eq~J8k*nT(9CYy@9eH50c-aN!v!IqUI!?eD<{h&$lcJ|y} z@g3HwEo~hPajvJS`@p3@39Pt}euKO7slDTK-j`LNLeXHHtgL`o3Cc^Tyv#c{zW3?7 zxevppkCa1g6!7*k4(9`J0#% zzx=UV4-T8YqZtz+PTF=A`kzPPqaKQsL@}2w@MvFD;W zn~q9=k>CUw5oK#y3C$y#nt>kKup4Z9lTNiW`}hgOeM_p^omK5iKx5@QiacP10*=&es!PK7(s92T&O$)A2snA<2KeZ`~I-q}exfZg? zfEm`>ckBp3$YQF$e|&an?efO?4U?);^3_*> zAJpfDM`JPCx*fZrcPH(3o6N9WUk^jT@r#(Pq8wr5;ZQDJmVv}z|GA!HmHwHl508g@ zgh71ZUReb%wkD$^JSd8ksFg`qTtX4F@dTZzd6xFh%}20z66VgCBgq0<0K;A}^5}2$ z&^AEG-GZ!WqL}X%5M_s0D;sbmtKN6h$L~EoTq*^l=pe=#M&9L$hM6zmQ;Ny-=-AB? z7l@j%?$}#qvGs~7BKs1?Mxqd#Jur3qk~hvJEbvA`!0PYMB(9j-WPioTj?qmi#J zm1YJl|FQ99j-8o3Bug3vp(A&v0C^}1LWp4#xg}Z7E^Fea1Stx3t;lHD!A@XBdrr$< zWe80IfM1QE(h6V|o#qC*fE0L`+1-V3pVtq_JNNMO$C=$5Q0`&BC-rx{C-wiwpF8g{ zB+h(>do}6{hbhXMbOaSJPZ)V1oH~L|%}I2|9aG`VUh+3Pjhv#aMWJvGv08(1Arw=@ zo~!cRnQR#Sl7TE_Emiji^VPjQVZt6vWJ_sDFtD-yX6M;#N8_~`8qI@2m)F!H+G=y@ zLa917JG~IFru*Yo$P*yUe7^UJvPyK016sJp{hvJrYlP`qVm`}$7T;v>4AxpFMGk?|xGo)5fY`_kaZzzDi?gZ&%M7j)a0$c>MVk1p+a z#rr*pq=(s<8@n>2>mzZ1gN1c2mJe_1O(OWly80B5`Ec=3Eou}F^@qJa56c$Oor>9I zMt$+#{Uy^o5~KSA({)?@DElDh=qNg@LZ`gwEVXQkre1-K1H!ndHG$9nNO<}i(_<-&FgI4el5 zdoS_HRm_Zxeta)9nb>z;>;!*CIg^ct7fIMdTc7R=$qM4#96*uu2B;=z-Jn-vRS&`O za%kUR$O?GEWHB7io_Xox*&n}{tO#n(@MTA1xo8?;cDIC?-9Pj4w5H`y{r-Zo@DgYI z>Nx8W#t<`zZtsr!kOCv!@WOx=Q1gC0Gak=|Q>~lK-jEe?b3i8}Esy4plI)9jZ;!&# z9((B%99i3U?m6yh{t0k~qq_`6?$Q{#EfR>=tP(xv#r99?+hUoc%b+cDH1O5XBzESC zzG(w-`y5^wdSdf^`fQ)nxB)DdHetvB2^MZbX;kv5>r(+!4yR)I-b$@!>e`D>EPx#n zxCPbBt{GqKo9La1Mu`0CD?-G@@b6l)Z}%mnwksNW;!xV}gPWnB4hI%VG&@Vy?^wT3 z%wZI1bqA!(2#=1;qkb;r2g5pIEAk$e*^5BBoCay!S63pS6yR>j_IKA#{jD;Vu7rSc zX8B6*o>x5WGkQwhx#^+4xB*5bD5VeF^Zy9K<_%=>vrB{h7TRVI@mOx4x2DU6=TcO% zr_nyPT)$balsB#0t7@?^O)P|FyC;j_u%ppV@IztYNb8>qD3b4o>uEb?55-M<;p{o_ z-vvVXK6y4z*P%Ule#@F>>2jiv##7@@8zNn^9OX<$zc%dCooDA~bHwcnb*${x-|Q3r zcs0l~xs}lL$>FRfr*@#zFgkQ70y7`z+2896(aZo61IS;vD2Co|keJys5141{Kdn$F_)V*1%^1oUBr6FY8uLKI@3W9vbJ%C};jtSSl@zd{4#p4l1 zGcZZN$w{~9$SskvJP_}@w_oP>S;jj*1~1Ksdw75;k$ys94Kfcii_0FLu=)8=Fk0$; z#Tx|C9SEz=5sF01LN@O>bO|9(U4M#a`zS9|aiBCt(x7M}nNlJX>I(-cN>cV!E3=Vg zJT*CE_!VXALN=a?Aph&x;F50+Mxt>B%?^H}lNi7_8F8WhIY~OcxPU@K<5@~%lGO#c z5RfMLg?_`(r-~I5(hvG@1h;#h6kKW~?r9$4R{Zc%H&=(;#_3~kIJ6u>2ZyLfcIrKD zsqf>{(5WX7W3nw#ry!wY54B%y&7!?l+kZJIM+bY}*lnpKuJZIc|sn ze@Nq8Rp`E3>k;8`{@-YwWh?qjzi>Ve2bOwNcu>=0AZh=4{#ZCGs6C#I-)jA|_R09~LtGb}c#`dE|DJ^nLqX=Rg}S&~eAcuPK^6F0(+D;UsD_+ZZmNJDF?ry(*s;vmW`P{%+yYDK;N|eTl*?nwJ&lj)-ay0);zQI; zDd=1~l>jVHL`^Z}$4S4MJbk@Ctj0&Yp)B*xdQbp!x7lMydlB8`Rqp|^XFrH@0hAic zj&2d^kGN53Cj+JziOQU$3F%{$p#y$7Fd>CPzCaQ>GOtjx^zx}&>(kd8VJ$Y|4dU|T zhs+ZLmrljypa?pa} z&b_intlybn$JKo7@#ffKK8{a(%Io%V#}+frA6+SDb6Oq;Z(@V6V*%N_$U#9^-wyHQpGM3m+|3 zi1SvDJ&yK(W}Gq2VMv?7t=43i&Rlflr7jq6{-M@*Uvuf;+)V?TlI?Ac_bu{^jd%U% z_mrFGcuy(N_hRGy{3X9`z`y^0aKPCM1{^X@y4Ij}_-nx6g8`_CQK;Dse4W1D2H>X- zh$-#m5x=tIeoaFjzFK37=m^8uhTKxt0|XCOZ7LMR`b|oh2?i`u*#uOWm)L*QAE2|4vbePF6wi4LttiVMytyw6jfd(u1fM!MG*KCvWW}4# z{__egsAZAJf1KeD_grqF78Wg{MAWSbeH<4ET?4#;^*WY4yml5oHUI=8W+YKSb}C?$ zG#3CG)IWB{;t|A#_MJZ(twF#SqxH}Dmd>N|n*#pocQ%%e@CKX{zddm6Ok8U$p0Y>5 zh}RfX29D9s1R`#CDB&+BDkY-kC9Kn!WQG{SO^Uoa0tQ_8Qt~Hck{|z;x zRD>9N5Z*)Jr=6}823$~h_UM@oR9esY&%*HNr$i@UXAg= z*tV2d;}_;SEy^o$Om}5ASZ*>iav4toS~vDW)18{DShA&2j%#o*B?b6OhSa??B9mp# zb!{Q$vk-vuiMvMV7g97cg}Jf-`>kz2NI-r!sJ<-2y$l6U~%Ht=^BOJFIDMM9R( z=T=3UOGjz)WhZYZ)$-#ExyXn4Mw>bxm4mK#bDPOO+1#EDJGrUOnnjDwXQ7{>iFKc) zyw|2By3oiDr0S9@&hR$@{i6I@I!)-^zu=Cu&)WB!!R;GbhN^`&s-)wNoyPeK9zZTK zy@tn)M&CY0IPC{HIgooQ?I#dr_-iykJII%5ssXSb(O~2oP+6n7$fBZwl=;s#K2mz=HM5QTY&S~wAmldvK)XYe<+8K_f9N%vfzpzn4u%AX+cRKX;cdxNW1a&?c(9tEDuoII<%b=lO zSFVsm^|0YzlLz+7CHr#jeiKR*r9`f9+80BG8Tt|+>I^ikuNdOr2GE2@Q9VYwv|R1O zmdP+`v3q8)FscES37ObHznT^3=|PPUHV*v7f#cXETcIAmhhw`K5k4)KsKz61aS792BBJWd&v#G3Gjqj6D4@Yq4nyh?;EXL?yK2Fb)VwIoA)2CsPN=FTS(kB^7VF(6lQ zHGEg2eu90?x#zm7h;urfFFL<&It`3YhwQc$YI-P5zL^ZJ$>zZh%7ZN?S@Q;tbU??fBoK1W)>GSN}y;7!X`4FUK!cB z@JVtdx$2Ygsj0YxN=8B4;fDKjZs)n5!1nqG#%u|3aUgD**#73&**jgwC#Ij>)*$$i zwO@C3$abw1UC&tAh}t;YRpb2@NV4@d-@sY|YH!CUIpf_Sg~MlgP0jbg50Kchk%q|JJ~xXv;^ z>POqIPzW(WgyFHoRTU`@q*`T9N%J5#>O&7QTBra9X;(0Cby!!}AELi4Zv{A`mQcPXIHbA${ccV$;Qgh`K+K@|$-46=i%zHs=SX zkiOwDQ%TcL-}spToM?P{F6qlbORZm@b!oRu$P3CJeML2*pezy< z6of66FA9kJ?h5q!vRNO?M*#SNXj4BCH9*4K`8NTd^%`_wu!-kwf3R8N<0uvg&!C<3 zLRcrxbhbTgBmy8IOk45TGPW9a(_A99|Ahb{;)Q=UE^SN_K z<=>2)(^&dE8_E@j}e7# z11-LL`SN@a{YzsOLYz0wdQll^GTRg7eDBrIyrurt{<}8!)v|jRT(gBRd5#RQ++9Q6 zQN%|HduH)%eElq0Bzx;W+*VzePvNy&79N(k`WI1k_58vL3_5Dk5q6DX27z^rL=x~1 zWGNC_nH>WOB`Sre*NoU4Y>vL#^?Os{ppHZ@E!8AvZ)YMT8t5(##^UeYSU$VL>_ijx z*82PITkpDV6oFiblFl{e zpU`C4@}@UR_=YX-0u|3;cffk$C6y83?@`B^Y03)i-k$c-YE-(4X=5a`JBJ2EM|Y?3`M1dsvF`si^8i+|MTW4T z>(ABy+qchN*6LyorGu$iVb-7hBWEo?Z9kp;3FD=|U>(z(`S*n<`G?R${wV4rU=yCd zsA z#lDIO(fjUaNcHH^R~)~3#}63tx}A63^awzwqoby&p{PFm&lI#r>=!dkzhQzx$B0UC^21o^EhM+PYo%A2=UX&YkB|yS7n|QfusZ z&AG6jo8~DTtgHorN_8mWrb4!#ahXAwx;vK=uxqh{ALWc&xG)4hm6YBE|0_;Ow;z4pdQ zqk!@i^iG3@7x?%qdoG$!twWyMzHG`%_bb$j!Bb&)XPqD#Bf!lJ^jk{L z{&#E*4UD41)`bQ|w2n7)BDXXe0nG>+3sN3YLhQwaR4NPy{6|U_(B)`!>c*XAZ)|&t zxu>zl2<=@V#9^PFc?s*Zx%biM)e~vYW7AxvcI~QpYi_2t10%Kvnum zZ1Y-FmnsJiRKS`MK&>Al0*apX7s9}f2gAXk%jQy`_;j-rE{^&nkO9YwGm^)#NNvXf z7AXi>c?+$w%jU*M9^PmaMk45$?cqECpM$t{FyB{t`A_#-EyO=!)_0j<}=-qp)3C4M?;bB%zTMD)(}%rc}N0!&8NJ@t=CNkLMVn{f=STcbGazu zB*s7>Gz3XsSV(!$uv|Wh_zEu2@I% z0fmo{aCn7?BBN%&9Ch z_8s<+3rGPkqNCa6rR=_s)qimYJM(-nj$X< zGNtF|?PUecC&}X?pIVqt9sKmC4#uV?QU9e&Xe#Z(e^$~_w~W^ge(KW)Q}YWcUL2P} zV&>?{zlYBOl;eMPp6viC}_JK+N#-Wu20%od-ID< zBHA@E3aCkkF10TC(g*h>W|N{juPagb2uw^tNo@D-yg7F5TQ&vy z)+AiW^nm(ElD+1!I^8y2YF0pySo;P$=yJPQ_@dJEjp6Hl{1+#(8}pLdi)NTwRpr0R zeCLlVgmuHYqkLAaSw+f1;t<{}yzA^MdQbF*=I{K(MbWXPEG-@f9u=NCmRJ{i?t1ti zpW%;n^>mHdn5b3#%egGp%>aBg*svJ3CY=TbaG(k<+*KAqoJmeI9bL?wRZ9KsB<-oy z9AKJmxs8+g6`CT8YXb7+-3zfaX%iJ&j{tGM2*I)!x zSAKv$`C8*_IN+dUh8=?Na@n=iclPb~EsPgqL2yjt+VtFGo4YPe;9l`Hdy?!5U8 ziA4Q#Prp~?+-k0{<}+k>IQ;Sxr}rM4oeIGvrbgIy+<}u5$$>~Zp5J_Bs@M%G!=>T+ zf4q!xKv)Q)AsB%^ld{L>4<35I?i)QV@sVgW(w8UFb+ki0+KL0T*VGTE?H=W}1$v>K z&F7PFvEU(}Z(!HY+)}@#{!cg6Z+84++eG_d%TWePf`HA&=8EFs^uwlJTy3qSaXC-2a<{0-SvNzcl6)BwQnr9 zZ$X?dhRM%mZSt$Oq9!IEOSe{t@I%x`ZUY+YMb^t6bSU5OfawfPTaCBsHIGe=XaC zwYfx_S5705EVAJ~=6mo<2QF-zF{-R&6O)`z4noJ3bo@eroHGibxH)mBfh(J|9Ljb&sVm zR!>yxT{$(RCCB23=6L#cea3IWJ!X}ZC~1_-KAAVJJaYLFf4SQaRs;kxXtWkZE_`fA z8aR4%KnX-u5d|YKOCuQTofvBm^eJNXlux|F(ingr=%Yb*RxqDf z6aLA$SA_?!uKyW1Lk@qm{%6O=Blpb@fGCnGqZP&Pt}lM0{=ND-{@Cq5eT6TliQUl~ zY7;K<{C?Z);@(AEYlkk2_ljE1_llq14gn{$dpWp!9;C96P1?pz5`?dGgKR$Vndsiw ze9&+o{rF9(Uu_imX-Pr*L6Mct1EZK~TIhe3>R%&`%NDG7MiST;&Q0D;@6ZE+)5|RPn9Y_6n)Ht*wPj`k}*xaFq6_ zfZ++Kj3n{030zOy7YrtrYD2on=?Ax+2?T>7Rs!1Dl-NKp5V&dk0aG9@eW2Z1eALPW#GQ%?oM>9rBH?!r1`yKcuEq_7S*0qssJI{ZmHD%}`4AfH-; z-<$*shu9+1q)5SRWgL)Ln*sq$ebgf*-cG4P2(^=X1R+=IhBO|HIq$>t4v;@2emOiA z9T^@TJTkQwPMpi7s6L;0>W^Y^t1l>HiuRJRch-Mog{@&TUOd z-XQ+^ll3pYlSwG567qUhDm}<3B68{??qJ^)vKqqc^`E&_^iC5_mtt73aAQ*4hZE?> z3;p&@Y|6ai^;(ssT}L<`#UDO!x0@%r!CeyXv|wn%voyopR0V8 zrl%-if|_%*>iNQA1bQhte{K8L_W3(l_*Z>4Dr2qbckY2OMm~S^9+YOl55}nSXo}?Z z_8nfE*17qC0>M;X@>rQ^P{;#XV6NxGiM-S;5C4;A%L+NmGrZ(y0|wOH4`)?PANMe^RlP}dV2$z2Y0wb*cXrl zqS+GI^|q>jFgtkwWQJ(JYIiW>+`SajuMn7b~n-2wp!Q_UAw>CUqfL+kJUNFmX z&)|u-Y>XzO*ib;~h`|=X?dsxu`AQ(Oc3lRz8c&dY!JDCK!yT~Psrk`}7kvnk6+}-n zFB-VSwf>8vl9@H>&Fnq?+z%kX-+}zT-qtH989eWi2J0Q{a0-Bb0X5T>@Rq`9xKAzX z=R6^HM0pUpD3>;IX=DW)J=V5=(4CB`rGFuQm)Re@EQl3|Hf?BJgy!e2%pR2&v8;&`kYM6d(N zg`v}LJWSBLDh6FV0F#{$oeqIAyrGwUD zJH3$bfIlYGFo*hD zY!l7-JAc?$V@X!6al_w76W?fDlC0IzbT*v1z|5rcfF5?Fq>`@o_MqA@AJaLZ(4B?`|EMU%LAf{%31?JVE&b(DyS*5N(3_SX7F7PdlB zrN8s$iRwT`g%1F708WkuYuRnL_Iw?SkW=L>x=zjM(p%0V>ZAnpEIYAwaH)UAoxp^j z+Inp7^uTBtST$J#u^|G1kOlPJb$hxu%OO=L`Ai$u-kD8l43dH#z$jNuNs+ zCM#nmS#r@kiTWYbid_7z%~=UA$}8=%tT?y@~At_JO@l z3;?1wLqmq}Gx2B|$+cCBht8ww^F0 zSw}Y{98ur+J2i4K(;}8BDri%sSECXP`c;stduMvEEJXZ?z54vOrRqh~JwSQdZ~tP$ z@4`yPnp!#cujnKDF|-B$a2K|h$ezvh3%@8jwps+W)=5bULI;EKn860fm zxtv|h{^_8NsH$x4WNkU7>az7{UKi`UsW9#BvqMw2tExL4;@ZAd9RmXBrpi0OI|kVV#;jB_3r5VC9c>Ry+)rdslV-2;HV81_~gUFOiN!W-oH zY9R}>A9Nlv9B_1C8eGY^stBtxm=(*6?L|!MjQxf8nlW`bc!C!sT6G26p za=pRv{gpY6tpqHd*F-Q*p@5vQeqRB?DueY21{e#p93QsAflbSsHwtca+EENe0n-HC zqd|d-R!)Xb@)xJ$l9BKrGcNa~%ZadoB1=}eBc4qaMivxzZ{_w6ZwC4&b8lhD2mMHb=o#V^Jv5j$OpiGXy+gp)Va7raz2?& zfv`vpW2cDhO@{*>w~Ka}!!RSMAv1Lp)>DQi;G*V01*O*3PA*B(oi_ywoN(W5@WH8U z+P(Nt+b>EUP(+~Q99wUMmIomuJ)*kja$y~9vgs7SQoHgEs*JE4oeu~I$LCif-PHKd zUtO`2q@a!zP*XwE6Tygz{+;-+2xaqZ z6gV7Oouq86`Ct`@Xn^vE*7S4aGDLr`Z3>6L6Iw!O!y<6^P)`g%;F#v18|8^6!)!96hcXcZR;=Wsa6a_i;6$c= zM>H6sp(C1ygwP<30-zNfKrN1>sX(bwJ?Nr}l3zOXVjBHZnZ8k$?Vj=mK^7sM$kj% z(*X)oeAJK<9xq`ZSf1Vq+@~DyMKX(~A{*<{=*}tE|0kD9PkH>ViI_`+YYEElD!TS^ z;?4}E8K;F=_Qax@667Iq2>q~$c9SUViPAlTkjq2EA-4y8k4oiIxpw6$7(Q`zt|Aw587gudPU+Xd1Bdfm15+)ufY2K4$=*Eg_6{}XfY>!H`w zezH9p>`2Xcb{m?F6|u?+a#pPKvqK7;mD)uKlRA&EqiKz`-P~g6vvXz#KOTyt{z5@! zN%U6&FNn&fd-02-vUxraNelIBmW|2=|Bexln|a{50omsHoY8`8pZ)q^B7+9FD(HaS zHtjVnOj0c?aqTC-$y(^if#*VhGcmmJcz1n({Bbfx`9M)J8}KsH~WML!3+ zvC)&tN+FPID#sOR2+Vxd{v23|& zYL*V2(Xc`2D}drObPDuKC+lw0CThOnb%tvI~%2JFsOQAzXWjc1zO zYBK$Hrd%4I%~ofF6peD8R&JdB#pJjw-}Cs)^vuXa=}L~>rX$M4vqA3(p5Lwq{Gr7o zhM$n{ylw>@#ptqDL`BgU&L2oF9@TlcMA+Qnhw(%t&sf2gFhC!&#~(nmTaSYG01ty5 zESKfY3D^THxVLEjl20u83beTl-lJr!phAbg$iSwNT>BZxKQg#Jn%=2>9Wr#Ung{Oh zm3!Xcc6aYhdFvG|{#U0K78d43ZD+AY$gapR%Ye(!92_1TW?geh?wtq{FUB&-TwktC zzXaO2!#c-@gHeURZnpr7*#pK?G(2*FG@dWf)B_DI!`h*S4*14sj%e!kYH zfaS=nQVKCR7U&4ijK?B7)}B~AyoGmd%9QiDWE>^EXc6ax(z~YXPji2a_5^ohCxwWt zel#TuVqx2&PAwk|tv1D?UD!Z@oGr`MmPjXJK&@pef=w}Op4o8~7{&Cy9a2fpXWl3x zV?iBZMc#TjSa}g~@@i}Q%b?VS8ix5AN7Ek>v`GLv!g>@$__VPk@{_X_>}5!dVSIFZ zE+I(lv>Ch-6!@SQwz~w_`zLCWknj=7#@(TCEOs3J!UO<<-Mjkxu0H^q6&3Fw)n&-{ zJ!!D0q1-Cudr#T%A6U=i@J65MGZAkEo|+SoI7JeKM|W04&(Z@I z9W?!(R1%G0FG+wv|3q}c-Wb3bK&!M_7Z)i+_rR`X`~?e5gn?Z2FN+pHG(4jN9}gZvTvA&d4rO+{jXBdF$iGSgkG%+3@3Wg)MM zxCU`2t~hcZdEmG#0stZ_-cZJ$y!;taGebtCM{@~=ind>r=m*}kWdPWd->`0ZF<>r^ z`Mg(#VF4wh)j|!zE~Bpl)~w5wipEglEA}S`$LC$Hh_w)73E0C~S&JE=XvzQ}nmq(U zceGT1o(!FO42_|G^m6oZL(!Y?sq$d8mQ3~b-F?l8Su&50)tC2rQ~~H|!M7cH1-0FN zc;HNwkAMQ05ksni-qi@2!m>auA;-s-L-B!`@$rE{P;yCY(OMPYhHyA>^qxzP%oe~V z&B}>OL~(S+Z>}F-7|q9%NTl(U^4E^1u#b0rhNfeM-|Ohe2Y-))9pwAJ=dp`}^=0-~ z{F7*2`c~+MhE+gUYJ1(%-v(+8>;(4t_CXCZ!m%1!nuBf#omh&-GS9X)0IE`&yaZ4i zIY%)x)B{!fRPWOeo_%L0{81BYxv6I~kk)&km)UD!fP0z{R zlh@vKtKT?tDugyvXszOp=w5`DXbzT%tV78@I5lO&QLv^nf#@;xWAz>ApPreuOw<34 zD(z=Qfj-!JYPXpYpS5|*+}!;iqB}W=)j&7tMd%r^R;U!kl|z|8kY$Qy(lkK4zz>0H zSeAD(O6K^^Qk;hO@S$vFrEnSaw z{R!3`Rv1MOV`0!ZfW4(U0Re{o-d-P#@@@NYoI=l{0bi`iPFQ7|yJeDb__9`A1c%eR z*%nm0wF0gM10L^n81l`9jhGc(r}pQvLl5-E?T4Sc-}DP;DkJ(JNFMy}qa$xB7mrNCN2Ogt3noxYR#TS>ou@CbS%VFTCVnmL>=(N} z(Dk7%^hhJvRGQvFb9pocvW2b0F{^zI8mDu%uMRK8-p*jCuG*fcg=@Pn&PC~tMIZKR z#Qm@o?3ME(K5O$6wVwOLnuQJQ=Tz#n>FJYOM$lIdpcnz92rw;Svx=@XNaP`*$WqWA zaX^6gfK-^q$x-s^Le;#a6*Bn@!`5J4hF=d1U_=4Mt0%5Y#Z6m^(Q1qanmEts^zlRE zAYq`ejGjnlAp+mxVjt2m$f(#Cf;U@C7t)No493{dyOOBJ_92%S8P0e)_4W+}CE$eo zjT%jPQ}I`C*(z}T^aG~yYmzixPM44nz?gxyp5_w~RF~ADgW0m%Ccf3+SPF>eDY0lg zPS{GC<6k3yZXWm_E#{T-Tes&UJ$_%d+e#;|UAK{CXJxd$35I7AsE-^$?^NGCsghgv z`;i61rFg(%z_W&;aw2D^p zlV{6=4F$C4&(UJ^XGi5H+RZqV)zq*Jr^k+IobRMIjx;H3`@HN-Q;3*L1!OsBldFKV zyddz?i*PnXL$06|l@>?CVMG-wRgT?!1twkCfWEQUKg6-=G@8dCXB}5{pU;!X8KXm$ zEKM>a^Z*zhQgvEwZeoKsWk{$eED;uvtsD8(&;@LDnj#ccfbVUGKp%pj~O$%($cghp*3gf69G z24$^553MKU(T_NlO=a(T;PwZSGa#$bBAOq~hyvi&i3B6N*6!F49tN8-%F}7Ab65Qc z_Y?N>*xf#dm{c=S)e4YfF?DPptrcr8F@O^;fL=M1)?9}4nZ}D8E0L~c;u{ zl9{URl_lzn_oZVnPQjFv@}Sk84?Tl1>@?C~qMd9!5s0DmhG13Gg`{E+lER=mU?9*F zSojD!yTd?b>3ti6!T*=N_kfeDyw8RA^ftelIemKXv%9mqv%PAY%BrJ=0D%MoVL+HB zs_9@b7##OTf^FiSFSg?vJ8rn!H*sS7el8cVoi9$}e2$Yic6nc0;D!Xdsl z-{&3JSg@>RE0}}dLmipC0rR`d>4hZkRho+YDc<1R|)|s00j_gqdG28 zy$Fc&C?+5)92m6}#3@}Kid!UWrlBA?1get02aMzsN; zfs{YfH=HmFiFoszA&z}(4r+{zPxHJP(~|4wVXr1^q*pC)A&2>VBA2R{Klj>Nsgg~@ z5(wM?AnrUuVw$P%+knsK5uXTB7-pl@%_XXTXfWt?;rG|xo#n8RL+`qdPLYGhHC!okN zZuy1p$C2Y#pM|{dPl0=r0zU?jnU{mayEMA496`t<1Y$tDz=t9uc_e!S^0=&Sk6Cb< zbl_h^qE=tFXrVD3D@M4g53TQWue_icRhJBritBlnDGlfbl}&_;22eX$E^}U`K|;65 zSj^IbAtgmI^L8d#7@8QJQuE26sh>Ru@`O+>2t`-S3~v3s?b?#ID+` zRP6+c9bqf(4}_+!Udhe`#u5OE+L4|XnDlH(A1V%1zWFG`Wmc4uW}c$@lcjP5u~-xn zpgIHJLEgCc+G*Smj8?4rP)OAZ<$43{)M-t7?8X6r%mL$CWI45}YULPlB#BkZ1#;Ok z!vvH`kqMJ{Ey}koSf$p~{N;O6v4{~5hlueDFuN2skzl4)@9)p2wIsNi1FYH?O|h?9@57gaDTil2CIYi*Of-T}fhuzhG}-9zmVvD&RIZ zsP9f_XS)>aQ6fpMR`(Pr-S#@#Wm}r_IeI&o%(SJ+b%THKraQi|ynYshpI@M;gV#JE zh~-e)x&)vbDnqBVy(l7LP&j+=zelY8%ofcpFDDQ(3!gwhG|IdgRy`v};+4Ce`u<%< zWmq$&k$oAUByV~+4y}lR-i46?j*!&u*pUz-YDWb%QNvl2$eV&BAOE zq3Q6wQA-E9nqR}79tOGM;nmp_SM)oE0c=OmulW!1-Mqzt1c{fl_2rv9lQ-K#frGsV zC5(MDlgt&4-25juzLul)U_4p9%5cXcEYe9hEwO}&dn*sgVAZoH+_M`1v zriMlBVCqiHXX#M-0GsBYu3RBZC7MBmMM5V3cE6a2P!i!9SnCag<-#pTU zjR#Z!3~REoI~9+|ZF{uD&{++5J{aud-*)V-3r>tNA7S1?^mNw!_Ru13$fj+eVz1N_rV#rYK*+bcR#jab_zV+E? zLbWJ*e)5`B|Lo@a=*(bpnIdZ=q$QYSUs~7d)z)9$wvM8&PM6E|t#1czRVY!NNNDJr z63REI>RdI9YG{l)>ZQwiB$loYoI5pa@t|u$nAjmfg4V~XgM|&#Y4&p$-T0oHvj8$8 zJ{jF}(TQKO&oZy-S$42SM(qOUtqfOG9Ede^-$Qc?b=Loq_=NIVd_H-KYd0t@Uv`p3Z|g-2z4q$f(WMKh%qRM$ljsf}=sy8Kp?t^efT( zSJV{xlQh*oK=cpNVR(WEz==7YxtA(IdC{DvWi&gIxap7Hf787PuTiZ1#`CUu^`+rp zNJjq`Xk&>7A5g+dC>TEL%GO_|un`uuSR}n}HEIbMPLbPD$xflWm z^L-jrE6^vmhGj8KMUaFz+WPR@N=a>D5d0c;6gr!YSCO7TC4iQyyo>%)X5Ig|A{~Fp zjKleNzKk|aG-SgW^Ev+*I$hZTND{*N2kR=s(AQB8!YgN95{yYBV59+HIgB|ZF^Lqy zBG~3sw7k=4NN+C|Ut~JZ{wdFQeX1r-%{PjXMWpN8Lf3#z8~qirRNc}`V%k0 zixIfyP-o$FwHSKJyz`zfdQOA^=WtCh@_uIyR+~YXrH&s$cG4z^{dMAT!~yO0O>hPJ zD)fEINNpRz*uEoSw9(Qi{DgNXgtTyWxPPcOn@q>X@>#fRG~EBpf!$YMv1t@=_avnW zA>y@IP}lZvc$dJItW36~q^80sLB4!x3&SoIizJ{$IyOUw8NK||R5cMXuO^Ee&Pu2{ zdhUkC2ojs&M6yvGE9F5+WmJhNvU6TkSBj|X-=Ch+r2@ES`4EuG03;s_Sz*JBG&io_ zQmhP(%JN(HY!QTo!Gk=%uq%~Yyl>#mzrbt9gQ93Efc*nzRbwE>>rGCDro=uMlk5Y#e- zo&9`dso&A_^X^)kwQIv+6TmF_k2RI>-s_#*b@yzNzscuFNj!damo|9f&_1nydgnNz z`q!jaRtKv5n>>{r@1B_)fzLP+x+;t6+#mfI5O8S8;Mpj^Z4w!2mP^FnyFZL7E7jBT6e7$|xzER(oJs&7pQ(4#R2`1G(W9E)_xF z9z|e_0bd+Ph5~h=NMgTO*JSnDE7qUcHMhusiL~lLVQgTyubjwPXmW438b-u zS0(zJgfskP0Km3w) z-Y6t;$>p)JbO;=km}2|fh$0^7 zAR*G?+~LyZ=zXz~h3x%@zy7xJwreM%gD6*!l8D%p!CJF1H5=k*_nC<+k6n38v2L0v zZ3aLMP^l4Sq48zVtpQ;6MKtJF6S2`6a4QUC#93K0B5zk{z+A{SsF{ivT=c`&Sh}HR zZ5uV~Sjh}aaBrEi%`n@V=(CSk5(#oTDV8WCM#AFoCIIH*2L+HM^MT49)6Tw*>N~K% zP{`+~SGDemBCsq>2=F^m&nWlTqLEu~Ikqp`8zlPkiWC3LeT;c`&sSXi=}QNBUaK`B zb8WlUlN4`myXMys7vD()imj`+y0n*nR$Iw{LS?a#2a;ZT>wmfNa zPl1nj9m0ff{Me1>MNC7pRaGV;Ljqu(Bvk|`F;*>o@nn(N4}UGrNKX!>PB1_yKkc=uE|i$+VV9$HlriBxKQYI=6E zf4GXE1j#js0Rli1P>e_@faXzD-NX=1KmeJPrijdI%D7zwgRue-f8hDVWYCV71R)0) zIUyC;ApsU8c7_fBLW;j<{;a!hMZ=#;OCcp_bJTV!O+a5IH7hZjww`m|!t%Fn*vfH( zawx2UN(X>e%!${cBK`=MM6_Yq0srevIR08SXYLN`c7^&=+kJp9G?;kmMb3u}A`<9y zIEoxchbAYtA~+9FT}84O{fj|?=?9ibyF|nN-LBL4kR2_zviDIBY>&Gu% zT8&GvyokzU68MpWTgS&`2ED3;A|hM5+i@8Xkj50Fei~D`ZE_OtqjwdDmj-70z}|p_ z3Ygt*eQ}d>h@$xZ2$|16_PcyfHC>*?^c?f)?jB?zlWLTcwTb&mXH~xlp3U)y?zXa$ zY1F4Cw?mr2FCvR^Mz~eQgi_xkJ;bCJ4!whPaB^a+a|GBhlJ&5mTZGKx_^*FE{*faC z0U`rrmbXp2bBtM6^1XMsG62>}OgR>M5Hd36$^e9-JT%uEQegBD8F;?6o)P9SriG&;-+sx^v{Wa#4m`2@uqOTlXBY*X> z!oPGJ?;k>*J6ovl75ta5=IAfJz^2+Q|JAL(7u;F&tU;?gR zPk>p_9|saJTQeNX0agDuq8)+!7hIVqOlGhwM3yKmJgjF-u<8KTZ4E1jKKer z;8Zkr>};S*8^CVFB<$a}w_ikQs1xr&Z@7efWWIJ+h7=T$cD=rHclAp=%FT%>@Ct{> z;bfrvji&+1*H#1N6Mcm2&+o`e{*NOop&bBz0iah?4%w&+PT%1s>6qHidLjz|iFt4{ zjH0N(^S7~j2s;C?^ZYGiZAo1|M-YLZV)Qrnw(cpU($*|BkZSZ!T=TYxbr%h$;&4&z z9VL$Y$mVG{mR~`hM-nRLz#l}g(&b|dua>#iH(Y2> z>MT2v%w2Hp#e0Tp<uti^@bur%J2=6qv7xAh7Ecrn z+l-7(y=PN}WPG7Z90HdqzzkkUx+e&pP_{EFj)l}IPe*LSdBy+w?cLJKVpPtQriBT8 zIPq6Ez5rsDPk*TO@#Bjxl#bODapLLLHNq6mKSpK-dbzv7pe>hm0GRqgM&K=bK+BL!!Xc66)Kyd~-h7Q@sdqd{ zrHn##E>$enN#G7K6oeMV{LMArPT)_(ca(|^V+J^LCk zmNKO4FP)4<`*SHHkK{0qufg&E^4}h~?w-qs2L|eh1|j@|60g<=-aQrj#QG7AV#k+0 z5}$iFwUhmmLx-N(hGsOD6zx^|>jUQllmrsP+0w^Cqc(_Kgr+#A#*~JY;)*oy`}4X@Xi0Vh}Gr-R?8<7oYR& zp2i78JG{{jlL*<{f4iI!i01JgR|HfD{HSu7LIjdz@F1z=P8|TryUVdcvZ%zua+F~< z<2y7R#tsoKRllR#;aZ2j}ww?L>!teR#74pqQYiHXgnOJhWTgY6Ur zveBW*_a!E(b z8OKNjtJ)rt1+X>&evsf50l8n05mYB2wG1O`TI}Ml0F98_Gh0lh%>in0-=FdPm6k4{ z`mvBSRbkF6k)8~klx4omL z%v&HGG4?$@7Xg|Gv-cj?L5)07FZv<~(j6lT=vrJTrM>83e z>@KW(?IraXDYx!BtjKqQMMy?|`B}}wv_GRU;rBr-AoV~L!JNg@kDwErgS!X-aP+~Z|T1#-_rDnzjxLsTy0_` z`&&b&Mug-;%WjR5>%DY9@caehM@op!)`x+!-vLt1Qg8ezwq%A2W?|EcLSq+N0$8-m zqDnGkO@r#R(Kp6%x{ge-xQ?TRP`x%iIQ;UnM)SZ9Lh_OT{QHal=?`J4Uv=B%cWs{g z(i_vrDdy&H#=!5<`+tA6Jfp7H1&*Kby$y)L>hcnQ_<|X@0 z7iS>-JI^gpOcv8r{nSI z0}f_<$JmCM4Ug9~=wX36P6F8zx=eScI)q!Ni& zi}~jLU){ECd1|h4vyQ4%Mwodil@BP5TyOE>vvxLM#=;7QZ@^2SdKWm6K=ZLTAGe-({4Y^BPSe7~@YX#q z>Ccfmt{B*i)HY((=7t(j; z+&0faY;*N+{NBYG0Pw+tcZhACeuTSq4X2F{H%^JuV>c&zJx&`Z%rp;q`aJIEwPZE8 zoE;D%??E_F-4r`{#b`swK>AB%$HsPKqGLnju#WtBf3;uW5$+fw%$hEXoOg}3Sh@n` z{6?6h>_kT9?<)dX71gLHIc8|Bm<^|YaK4p8c)@BxBmLN_qV?E%UejC0w8`MW=6kMd~6`n-+J#`S8hd- ztS(WY>EO@?5e^4SCV-Y`0__v7PAt?LRDEdo?rAL)QV>3&*;IP$@}DOAZoK%|OQvV1 z=9HXD(+1jT01ZZ*8e9UA5CjTAJh!E)Pv3asbU3pvqd=%=kZsJ|O1=A!{CELFxQK)@ z=5Mm+?4Ik1-Iq1HmZ&$zR(T>r(Wj18Rwz+S-kQ#ZdJ!#G?W8zjZ<8)1xGktk_ zk}?-2-;5^BZA0&+sMk+l%&|BB{`g#*e&SSbdb|>#&IxnHQtoBzHo)aZOkO~LYjojd z*+P*6&!zHQ?_xqOXO%K|Y;wo`_B+=%@-$VI*~c7@@v)QNxSYJv`suT1Uk7Awd~xOB z{;6Cn6E9`*(Zv{eQz+`$pECC8-^G%_8vY&6&F^?_{tNTm^lbOiDMjA`%KFev&=+39 zWUT?srmx;TnlP?hcWIgvoGi%6CiJ$;5T*bkz|v>qlWu~8sIzCbA=5#EHO|`c<4AZW zX|;B25*vq?yy@~d-J4j&S=&)P?F_*1h)>5%(MIEya&T$q(%IDeZ%+-Sh1K>xlsC7u zi3I~)B9@FVY@Xkq2S{Wtnb50H_y0Q^eks_d-AC+GBk(r#Z&KV>gFMDf4Yc z^M}2-`El@s&a+vD2)!x`Tlt!w1><9dVb>$Ov1WDh^p?5?^zKSzD}^|c#U z!l6*`P>ORCUfxun`hKW507~S=k0jQeJm=l_MibjdcmVe{fxYS!*3YUG>**5D$k;u1 zp1I3ZvZj{qj}P8{>b&#efll7}rO)nTCZ8|M?AcU})b*pY0tL6?c~Z`Yo-@hprJ2RI zVLW=_i=5YY>&zTHoQWd-BOw zQ#LgMzT|JTe){TXk3HYWIK?5)oqu->8;luI2rj$(bB<1@ETOk&^9vlA=aCOMjL%z# z;10x#Qg}eV@pFDv*b{f2_$i-9&gbjIr)wM8#0+ac9OsMt%kA7DKn$+C=NQ}t-7(Y3 zbg@({bu=VFd|2b1kvDB4$-o^X?S#IA=SvPbYv)1oIQW2nLjPv`e>>-L?ftGqk#|b= zZz!1#7pt=m{b=Xb-b%eVTCQtASVeXQpcmm_R3`o!*vj@%*Y3V{{ z$9MJ(jUBl=I+)k!W9dopysf*Z?~|F36bzf`djD7mP0_3vLiY_&fI;n*L}yqc8UOmC zgnANee@qofug!sx3ofCq_{xJ8oELOp01+6xEqEJ=9^|QzoRSzR2$ziti5f>Q{%Rw3 z4w9Hc8VekHWn*-(KX<;u$Z9q}G`nZ(0lOdVnF4@9(QknV0A~e0Yl%6uaS-K8Q9)HU z@<80dSx^zg^fp0vynZ}h2 zwXKRA87v7bO2~M#o1@1S8z(|ScO+zWLXv#=WE$pgwC;VX^>t{Pr=B8uXY?t`+ypuY zk{H8)ir_Gwyz0u|yY1eauH3)*thparcK^`&p_$30%O8^Ea;0_Ir;cD2pZE__Gt+-d zk2-t2r=;itj0F%li>fXU^$+ykf9QgG0WghLp)&quYWKw#UbOd|g+?JCtpZ1b4!3^z z=r_KF}<7lE!Y2?T8#H* z12p((fj10F#!R@dVRMO-!5|EjFUU#$j;E+WN`KW;PaQvaPQCTSdqr`fU_xRA&dK=l z4GLYTP4Eg(|L?sQ&PKFXYzs;OX$YUCg6p3giS(OQOo!jgns9b50*0DCx8k1O&yme8Y|6_pw}|8U-V*22h<)I1>4@-KZl& z0VI9L@vpieo<orVVLdn5B`&+j<|E^ZEG)jn%<``u)a zok8`qX?s2_5=890Gex`llcdDm@S1Pc5*HjVb$RJspv>M09M}lVRGC6}&)Mmn`9n6o zeZ5f+XoI>KRj1-)=BjaU28lr=fq80l%8YLN9IsQVAfLyhLH&B zh1!$s7&TokBkB>1Qa4d@{cZK~Sg}H|%|ih#J1dGCb|P#NPpixZ(o@V+V+smmqbS@c zZZ?3(stdf80vVjWZs+VE2z>%2G#N|aCl1?oQb6ngSlHMZ3>DZE0>Q%~`-_BWrKp&q z5RJ>oW?~`{JRXQ$HVC6O__8PfOwbrvsc%|W209jtuF<~UsZgjIXuav}yfT-%T?Ls} zsX9v2F~o-7TuZDwcm2Dcfr2IV81CBr0I;X> zsOt?L{*tQoqt>_xSgpD8aGHREi3oRS0OCW9aj-XD$uP`J@mQwyFBi^7!ODbzq@>1; zRA0H=U+t?5_ch9|WVsLC`iX3greASsF`vp&uhdKvRU6qDI?a@M0*TJo;sf;&-AE=W zs+4 zN57!~sylXfML^xQ$jFb;%-+{hSGR^*1Jn&bVN~=~eH<`tmD0ST)Yk3$zv>11I*AEl z!6?l;guzDEK)4OHSgEci2mS^!6 zRz0t=^ahG>zc0Zt`V{74@C0)+S_eH@IfYH2H!s?Z1p^UY&S2(^qzAgHq zoxQ>TzBxCnp0%69V?di6%6p&bmfumxZ$3*nbID_snJ_~2vC>ph1p=pY^QcNoUdZz^ zGqLK-)p6wzP;$e1cJ3~D3hX5)eOEm=xY*`MsWp@|5x_^(bgIU{bwzMkxJ|CxpdtGKvq5rj86gO zN6F-ot-GrRX}qSyOYi>StFQf2V6oyGD`uh63^GMC163&iLxCm@=*g(9mMG?yrK{4t zi`C3Uvqxxp!`!jj0EPw25#{j0UChJOsIwfqgwZo>kR5^yd*a*q?#>HC#6HC$B|ZT8 zA8T{fLqIynE~RP9NihkIS4ylHPuY&yUc3yx+?wqOf7t&Ksb_!=${UG^I@(r-q+!Pk>om?8XO_NKkdf*_O=R7q$Qq4?A zyjdTKt2tXiSvhKTi66@|wq*eXZL}E(1wwpGw@Ot1uDAb4Wpsdpg3B57BWUrLvI`BH zmt%4SJaIHDs%0i6iw=)A>u(3&`}D=WeuFSAST>|*t{<1d&xJZ5!K?}V z=Rb&b4)kHU#OBb76qvW1B*f$JxK|Z+iVLIn)R{P@7I8`)e$^(Ls(WeFw+M>(Iw7MKK9S~xf{Gd@Rdi4}m>O5hNX3}m4VBLTgX z3bTAo4zu_O_5mf1a#Ubw$U?bVu1aRgIkrw(Ml1xCA^;6kvjC2G5k3 z9J#W$d=b&cxC|1^z!o)ZK7ei!V9TWVN}&+zMbSGbAh2Tv88$N<2AVG5t6@DW%1!GS zIt0U($OlX#_Pa18{@~0^Bg{0J$vN7UrM6Tw*BG^9j*j;AY?mSB85RQU)FBvDj#+^M zR!0KcVwhiJhT!Pa*;}7~vYgRWi3f2jDl7ugggkX^AFw8av=Sy37$>NlW8oh8{FA;) zBd?@B{XqN&6o6@Z=aRTlFkH;Kx@-gG%UG;!2~+U(tg0al@bK)lLpX;0$N_#Ss?vQmjy{Q3fQ#W-P4Tn?&K)=4Nj- zWrYBhNi!pw6;0L#wl)eBb5ShCvLRsMnBidX2hLV=lB?wU2frmLb9KWnp&S0_OmqV_ z0iqd3+BOw2Yw&0X7<`$t%CK*`&8aovTyLjX-KPQv?97a)(`pLWkO&e(0&$}twLlZ5 zU&IAywA%%&`dnHu!=eeiP-4kwEU{$jC0oxR91imF{PJ?1s@ODbi{U9iT1EC&rC>#$ z+0FB-4VX#%$eGcEZ@@h9rx!n$(tvoNLj&miZ>*xE3|4_iHDH*A4Qu03ix|jME7SCyqr?9!~p0vBC6F|RkDg!w-Mne z6RM|#FeKRn?uRDnCoIOk@CdYG29R1=sG#w2C3)smj;g!MBDVo>{p3CUO z5`8QDd3J{^Ricg2l*y{_38AVDj<@ zm7`CGsCF(K(CkMGu^=$15U6>+9pKsRzO#tnY*9Y9FFx}1!x4RJ6w5c;cP;_s1|Iu` z!<7YI5JJ@(cz)f!L}CAQU)AdCvsfjKh%~ehAd)5KqpkbF+h!7)is#Vwt{((1k^65L z_s37QzTDU=wnQf)?|D3AZ8%|xlUJ2DAKnhonGv!Cf!yVmnV#wR!$u<(-N}zNYZbRc z9ymOo-P5IXQC5j6{`8=rZ2!IYD#BozWi5Ei#5oli$ zBQPS(+BBAS5C&IR3uS3)q4lq;7UVUTF|e2MJ|%g+0jw@yTcsuTZt7n`i7;HPx|!Yh z%`5Ca4KQsISCBfW#BFXAl_O^xT1_jyq+0J1C7 zuoqu`ph1{@_+SjlydY2hZX9^|qTR@Z84h^=u8jEh*~?BPBV=*4JzK0PPX}WOj-dDh zb57nTQ5w%@er|iL%lXWb@M6a^J*`s3KIwaB)H{8R_gtH&e{}0y|LEs2s)&B%ft0zP zO0@oFJgY4_sjrq{ycDq7D#afv77t{SwB92 zc*iq>C1pd0xgL$P#LhTQP7lg8JG?xzuKD{c^Wc3?EG$vyIe+HR*_V~& zlqtWUa5n=t0Zx1@Uc2M3zkS=yNcd9Pe6m>TJ95XnZravg$D+aD{6Xj=qJwGS?1Jt( z%&Q(wdq+vTYSa06#flV44K*7!B@sBQrlE%yXlhrin5iamk+O}SwEdR#ks$KV zIKMM4Q}EqWupiEWq^&9YN5;Z-gD{lM!vdp>_6^4El~?gL(Tfvc!T-5+U#L)+EXB1!~cT zAXRILxRVSaarVB}CF~z!9Ny?gF|d!hFfwg7*I7mQV$Ocq*7zhZ<~AI-`W`;BlQV70 z&?#&w-wSa^$=^G?XU`gP#SFPRCpwL=?I2v2vTmE?{n2dNgb+&tsF-yrw|+UN<&ZgN zkZ;DoAz%ouO^y}g#*upfpANGGG0L5)wmU6TV(ATPc<;6i!*&6~5Q!><%`1gaHWNk# zi5?r&QXhXO`trkI9l=})h&U>;+1qP^rdU=}5*L(~`o)kcg8K#0QCbcp#((_&bMDB> z96o~F94&GU%BYl$mDjvxrMQv|0^~r3e2Za)mSf0?Yg6&pRnQ_62t||U#gLZT5J^R% zH$y?P!;NkE?K~4}4#l=T^2oN_(o&A)7K5N0Cte6LvWR;HC0(WvS&KK$JFgK+^+l5F z(OF@<=KOFjuffTZV7)_=vm{>n%z}x&_ISMrDi`MXEFX{;c{+03T6_s%41Olg}aO&bk)UsCzp9Nb>A`Iy>rL!F^t> zmz^Y9TPHgoq2Exp1E?!8B!!;8G?!Q8f4Jdliu&B>!p!)j^Q5TlIKlahG+YZSYL z&;?1h74Lm^3nQvRK&RxiZV)t$%R~E_sLS@l(G-px;6pa?zJ}Z+dbdz`e>k!0#Lp8M6uo+;us#ThfRBdrpv6v(Z3tGfICZWt($7 zD7aI|TA_3Ue2gHPF>5vC0iey|8pwGTGNP&?_kx-+q+w|{LxYR(23QFpjJd_dTuP5y ztmIq-adI96cD8OA2~?f2+yJ1jJC{NE5uz?)Smts@D#8KlC1?kE;A};O5RwaM;P3UVywjF<40$j_M7T($Jj~|PWZMM+LGe??W6_dH{BhUbMud&_6Ni2@ zUFgKeS3Ah`559BwRZB_eR}};nr%SJ|@z|c*y!Op#62Wer+lgRP^h|7oW}2HLh0`X{ zSDD(a{iiausk>I0+Rj*eIf}cJNu#ZstR zbAwW+Uj(O(Qt&6boyS#E;=IAB0xJ4=l?spTIVPJ(A&8XhS-5@(3e(bk5-brIWI;_a z0?y-UYKi<6 zdM2~(AB%c9&#gKAtmD|zsYWI_^!v$m&!ZKwnV#A7{{~8w1`=lvH;TF6-Sbk+{uy|S zUc}~P1OrDmBH-&+AY#XAj-i7JkssF}bE`=6r0x(UHt;W3`;hBd*0j*u946&QWWV-H z5S88X`wm78Tb<`=8Toz%5cl>aA5-nGqnH-}vsC%`74+8oA`LL6E?0)Bp`oLC;ruYt z+o&x(*{MY5J=vkoyOELNZjO~14u({H<@{V4lygBHrG^vC_eUr?gtiN6rM1k-)sY?B zMn}n1gLaNo4Lo`7=PeJY(&)|R71W-4;$b)&BVZok1cj8yf*ANeXJ2nU>+qX(;;rW8S&$QLxRx62(~aRF7mtMX?f>q2kh{vPOTBv z4gEMR7PkKJ*kB=*GKn!m!c3B8fFl#Z6H+itxR2AL!}FWY3x`o}VP3yT9V;{&qx&z| zxd~v|CWGQFP7XII7BsZ5h`~%NnZV9tRgGoTSTwb?<#n5LATftH;lB{@IK*;Q&*#+s z!SNB5N16z34*&y6{xQ}&l-}{mqDpa<3K6| z*HPFV{d2nQw<}WLola^xp)pLD^Y9FA55hl>)~)vRuWsKWp=;RbZXTJ0Tbx=FGSmL{ zfq8xX4}9g*wcnmpy5Sq%-%jV&SDFLk#agLWDt`Cw>3j|w$%k(E6HzLaTCF>PQ5euk z{QegtwW6tNnDpswgRoSFuR$KtOvWt3(2sW(uk&i?sp|gM9E_pC0?|o;rXc9eK+;Q- zlCtNWKgsYwi3R+lg5>@3vEfK`#-CmUy1I?%&fecD?ah4Pr3;loViF*m!-4Tnk(XZg z1)|muZ0PUR=Cft8#3?~nv!c>BYi9#?BNBA?sL%HuoJa=1Pe!w-vBwXMoQBCbSyB57c9m3+0`_JAD)&VEtNjmEPvs2KbwQDe#D+N>efAVZFYV-S)fkPY)+l8b4+?}E=>{uxP2!m z8%)GlIjpEC@(B$^rjHd+$s7r=k|pTr^c+xr0_^Qbx1=5j%LhLBsRN0L@dSx}A)Je# z0LrqF0HvsOB$PO}_a)z7ELgq0mJq5~bK~PCsfi(RbgE|^8)5fze@@z9sB9iu8(+m0 zPHfMvD4z2E{Vm>qMoEe{2)51aI{t_IEmhWmdL;)8S+(}j=c8hZ7b4LNfN`;kkm5!{ zPqrj5tJB;RaEWwXg-#aH|Cu6`^VrIn%(%)8VK&2IFkYd1gQB&3Bom1UTs#2WSUDV$ z5rIUPA&k8Y;I^9MNhPP25jFv;OdXx)GDrI5#8Kz><^fhPYV@cJf`9Cx)%T7jhwb7fe z7{xs!SAA@36T{swk+WlH8&`lKE~I0!W1eHX3q=JvB9e}Rl^Xr>F}RXuWy}77 z{`ycOGdO#>seywPtpha34Yk3s{B+QG{nkVxnMe<=SL`=!E)@z{6j&30Wr0LkX!GUE z0ddYGjfSLNT2HD8$x7R2RRRbtL*0mSED;t$pdt=NCa=ubOKeo*-i&}9BZfleo&Qgx z{>@3)WHhPQmZB-7#bDV@#gf^=(8Q-M3ZMr7+aSfn&5BXIAisiCA7=!tNLE3x9O?{F z92M3Rl$(MIC2XY72MpZ5L_8MV&=>@Y7g_`;>iDmShl5=feNrJkq-q9|^crR-SjnfN zda{&|5Wi0scLEU%#wqFq5zv*gZ*wy_`b-2bnSaAnic`n46Eq z?U;^6)gz#~F29N#htx>$nnjwPCWQ_t4S;!rECuoz9KeJ^$#?+C5}Hl|u0Ki(;bc~Q zD~j4UR?(pF)h!t^rw~KPVKF^KXn+veMgCY03$z~A!khbtP`eQbCKKgw(v;8wB*qlZ z;h9Cxu7w0Hr-Rfn5C&o7!uhHZ1eFOym_;oHx@*E>wv??TGwIAf9M0qX{!(Hd#AnnqNA3c{3Ji0BV z0s9wM5st=?j0y>{Y`nU4*Yb7?73mb6q4?!kf7VdtQT<_;2_8qUTr8;vEg$ z77I*1c|buD%o^A3Z?K21BKHK+aMu;Onlss zqC)`n59`eFFY>h_uq)6rs)zs^tdc}JzF+Gf+At5TbGRMMJA3}T=jY%wcG|m%=5hrO z(gOi=M8j+Q_9d(9*%9{clBJHs!HQ|iV&|MVH#t2~imvnBZFa0R8an=lC&DM|TyiqU zlgIhIhjXlNQ{nwJ(IZE{md5C33Spz5h3n9w*2MUxSjvd*+q8Z7Aoa1zU|(~1bo-_) zON&$e)nZ1(E{M^mN>F3~UlD-kN<|95wkI1k5Af3f$E9*t_ktrBIb-aUkhox2zz@-! z7WeWXP7Il(x7;V^5Bdi3KbrMPrM!=K7hBKM46*VE8C`&?j7&ggu=N&#a zT0d{gQ=!JLgm zmm3WQ&WM;V&R+Y6zc>~HKmm4o+pd(y>Z3!`B-=;x@Q~N@Tw_wx`}6fY8op4Tj?PH1 zH{gU!Xy9#YHzKcD;OptEW&6A z9E@&865j+#RBtJh46C?rvp97i-ltkJIyX&JBGWwwPy8MK7VcftB6WM0M)qaFcX1tw zb48@B4ZWS(EyZ&ytbC0LDaIb$KGKnLB6~#I+y{_N2-k=kMREksJDMy2#{}R7=VShz z;A75VZ{T!8ZUA(!>svU(LVtlu0OjPY^B>#;S6o(EO1KW~ zAoP02)Rbv9k_EdqYzl}eqKY&%SfgDL1${vv&K{k_s1!e*;M}cJ|X#|ZSftJ|_tVXT6 zMV9N8LUwqtzi=D#6ifpwN>~WdNU=UTHesuvDwJ8=}w(p96-&$5S{QQk0a55NrDS`fs3fOsJytOhii(?roy^9P%fd3nckxoe(qa6wj9aY83_8k=&#YUWD zO6orBA)o?5LRyh6mX7qx+`z$0nsPi26&*ti9`ay}U?>5A9FSYf6@galckQ%o+ff6U zc@!RSgnKWkhXTM{CjJag4O20jRkt*j#^pp`)QwNvd7{N7xmQyHU_~Qsm0}tXp|RXSibs7 zR@NifZMhn1x=;lg26YeQiS$}4Xtw4vK_eUy6!^8osl*drBaP8$bV<#ba&7nSntXIv zjP{vH9e{GUAr1xTmdS}aSqHQdKSs$=AQE7gMG9aNfts0Qn2l)I7Xy$&noV$=otJbr zpa|d`;)FOYU-Oc)$EuMy&c=myEgC3;L)?!+x`b}2Q=mVeo=(Nb#}cAljwH*4nqe4xOx6)8BpRW-0Z z>eW;b5jR+{Tqy}C5e5<-f}#utL-D*>W9WT##ODGe2uU*nx{Q!pP*YP=DM2k6)`+I$ zmY4G4{+eLqtYoEFS4>lmA^cpB)Z$dg6uG7H{=*npSpw1@%Lf$--nOw}Y}2~Uw<>%> zi`l?Z5Dhq%4)_VhW?;b3S}>NZh*D4+-!fB4Ez0QUKF}Xbq(knSK~0qS0S4?v-O(;j z5W5q0j^H)ha^;C_)=lpd$RTGl9m;3dG8&HL=^X_B4?)*J|K`o-v&>Ro-x9-~zj<>% zoLFdQfw~3xbHF8v(L$kLN7$CzLe0qZ0$fgD^{iupt;e7KC@(ei{z4&&l0kG}ahHxw$wyJ7$45ma0O2u{nuCnV0&l zvDw*0ybCi%lQ9@n&wT4@_H5J%pMQ$6AnVT@B86P-2S0|4iEA>uuQ^^K+Ee{SN+6q> z?S0-~`Q(}2f=+M5Amz~5?z1j3B1R-CzuZfbfsHNa{RZC2N8TSa>srLhC4 z;pwS$&t?a-5H$v=bnLXDX0|&)fp>Vb%Q|sK@}%*}^GDW*!_yyaJsxD%kwr`g7O+{( za9h@j!}E$5C2NLK*J7lrtQb5fZ|LyV&J}pNPwx*q0`O(MQ80ELyAd8C=Fr67b;b|PBZVdrS<1T z>}Z6RjKCSl6noECR?C#BeDRrE$(r)z<^EHwsguU&Wc|_^7w4}t5ucN!va@2HzkVZy z^tKl)Z);`v;Mz0%1`6y2i|JaCUwZ;~512pxQ}%4$M*mA!#-lBer_y^brnJ9^3iCx< zBd0r2x3cB!Gguf;Z+vkU825?OoM*Ly#(HaAEPkH*8?x@)$a&X1w!=F%#vGc*-L>$W zZ0j90-u|oo{-|fJQk^}_i#a)mkXM~x`e@h1ct;uD&G6a4Ac`0S87?4Lc3=deQUwV< zZqFtlAaOjPqtHH$WH?&qH&xZ<#TPf9{r<0?+IsfNd6eEP5>Epz025hG$EMzP*5j>P z{_Ws==z)#zr?!9Rvijb=y>hylV#8;_HihrUDuWlU{KY+PG%|HAT-%4n9LSkh2h>3#d_FQ2$+=(hs?fJj~ZQV&ugQSH2 z-YUn!dC^gv&SZGAXOp~#GgI8VgmBQ(EaRL*7aj&}5vvyy!RE!6H2>~I&yQM9@7=z4 zhc$=WcYe6ic%pH^%`@=8g0CNb$)&?;buj}=j1B~%$OE9X2q~>id$?2>F$36hnCk$q z1!M%}=)pi1zOgtzxV-VDmlkt{OaPOFycMPk)0Pf#uLU?5OnbQziBi0(u%S#eP(OQL z@0XtV++VLOZCcib`!M_@yFqIsvFcfujXX(x?XJFa&gl+<8Ei-d4)^Audp^8(F;4_`&gybqg@>O@ z#0$CNr7zvMOho+jt8DMe3tMHGsSlp}ICU=;*+qw)MfQ_3k?+$lu$8$Nw!p@t%{T6N zf9pe?_2sUeyIV=|Q`|dx?jUu@U3G(GAdy1%$FRMs$jmq|Iy2?W6PZFh%A`)lnXXcM zu@GnyXXdCL?~l#|dFQ5j{A&o*_O)WaviCO<`>xejJ5LX6eC5Pr)Ou>eV`E3J97|3k zQ2@OI^;em-7Vq0#d$jfW))yWfzVs!-q2f&P!IOl3Zsj)+`p&w`?F=ikHx9lMXy?&a zHqO7GVGqv7L!#mXy7%BHZ zB*08Fn{}cRUZ@gr(EM5-aST49oT7!=_{35gIYT-T0&Y2WjRophZU#+XbT}M~lt$Qp zeEKn7ZW#TgViMjBy364^GA9ZXY;ec&hKZr~k3)`A_}OBG0lIc6X%fhd^VZ;#AO zEx_BDH02#-Ih^ja;*pd{WJ7TFEQKETZ32& z8hoP@8A zxHECi-{jvgxk*x?+s1Mflz`t&8()2dte}&xVo%W{$YQs(Vb=*kB<;$rb1!6zBDwE- z*?Y=ytvZk&1j++Cl8`r(CZBoc|5k$M-EUN@#{P@;9I@&(l?; z`pIWE@!EuHmhRrMe%pq$nXtKlrSNiS_HjYpdbvCj-?DzohTCqq{ib{&Ul7fB@Y(g> z9Vyz$Y%ELDGg;DZ8VVn2ZDj@@M8;T`qZ;@xh@rt{21InJW{PP5DU#?W$__|~6GvGv zH05HUke35!isxmv^_LWEI)3JQo-fzZ)sc}#(>atvU{7W{iAF&J z><;pl?L`)#22OqqA}sY6s1JcXM*u1}?y1-M`#3Qj4k)C^XL4qAax&cj3_B+e8sRvJ zVghecMz<^}ho(V4Lh~V!)(rzy28N8D3XB^Y4;zC>IZ)9?dUA4fW)kCq04bnNr9v{7 z+O@K2CLIS_CPY?ZxQ7Ck%p!VapTFa*MWFrLh)JV!mPMfnz2C|u%Ox{oKO29O5UgnZ zNH3XNG=bVi-}&ir*xUfZ6p(L3_$!85ND{V?*;ouA491oroj8CV|Mcw z`?X3?coXvzJ7bp0$(*&HM!=cmcd+AWs;-YLFYT!G*852A)kb9!1FGFGiyy$+zY2s4 z-zR%U)}KFY9+tNNkli2{G}=5_AGm?9u9<8r2>+~I&-rpbpXElfPCcK{$=Exa zmRnlg%u=|Ela&h=ezzj=*1z*Kl5OWFajg+2hcHEF@1|QOP)v|ICTTPPu>;UOlgs4h zHcqb~^I$H6|I*0xk+$o8P8hHjX6NTFJao~8(UFB5Mp{_h4aCq!VPs-qYMB+4VJj@5 zw1Gz5uR7A#>_uH(h!(ITih;3D9Djq@+j{R6F-=L1Qu%BiM5gGTL=hXxP6atgy@H-^ z{Y(kYU8&|r;y2D7-kF$;$%sY<&(eb;smoT75o}%*J$&_{>*WIjyquPw{^#jhTnyw@=={;TVgt|lIB$a_|5e<3z{gcw`{OgWY`MFi?Y$S3RhL%M7D-kww%p{3v5jrnmTh6# zl4aSLV%*@xJUWgDD9$2`!<7&_W0#1VRD{c}ZSK9^KaJ_nmupSCTQ|A71kQ zUXSkFd*@C$=S(|u3cX`WFXsVem%(msN~GfL>0~9?|5|3PjY+&|vD2$errYDGM3dQW zaA5=gFBoFJF|8+~7ej+UrwtbuS2T5Z&cim>%8ak+{E`Uy2FJY4?k4z=2y2lD^T6~m zhJSb37?ZhYe9!;)F^1bm=S>@9j(XW1h9mvse-dYa&vq8M@i;R;76HoWkM7CrlE}X- zil^XJ!Sl4G5<@cU(|ODyJH>DbzWbtKKN=K)HoM&@M5_c$6ZQ2_1L2-`Cj=qY-qBl8 zUR7y=lpz$%F#)L6&N)8Erk0jX4&NN78u9@!5UhvC9CKw=c|~tWdrA-zZf@$wc!y2> z7k>=-Mbos8xytrJNbi^m+bgF=VJW;z6nmPR;{lh~25Sls7RAwsnuCK46}&Rn)EpVD zsnO}97&Ml1YAcg^!7-8A=5+<)&CNZc2>F^X$w9c_%W`0FxP#WQ9E_o?0Rw` zkgbB)fr>Zk46ub-=FnJ5t=xR^0>SC@TBBBV(Hy^F^xe#LcSqV`Rl{I~(Onf+G&kj& zdC`S4hgWUsuUwvj$SSQYN6u96DxFfzrly`k%x?t)1hnXOn39bI@S0SHOq@l z)oa&QdxGvT%pXFP&Y%jrgC6$GRJxy`dia>Idq=np z`}{^bmQGNsF!_B~j6Xi?h1~Yk6pxD5@xS9(+G24)K?D4<@xS4~-DY)I4Y0KX-zs)y zBke`*$ZvU73w$}_B}A;1ml#iYvT|alz{Zmu#8QAhDugXH;3(^ZBB!y0V9`bei3K(W$2uG5o&F<@rnI2G>V)RL_WH_rF;jbi z@dx-7ffZVnb6&vYkbELcD}~HQmW#~k0z|p0R{0FgXF7GJ;I_0WaQpmQz%_*yEM#&; zm=x2PO&TUFvigTVTpeg^2xzTQ3;%rk*Z6r?dkq%pj&&jH;?y4+q1dK33rwKhXw-z^ zD}<#FLX?(CL-DYEpiF-w6Yr=KP;YA_OWDxqw8?^Wj6CF%iY&P(geX&x1%DM%Vgy#k zm2j*(%ItAQLRlJ@1!SPij=B7x3t)y~ovW{S!!xHh+hReE_gSnV3&hRgAH6+NGWRd1 zlq`bs0et9!J!}(ZWnMUXapn)p?NI3bt^mO@OQBJn-q&i5M9e`>D;D);K3QJDPl&rk ztWw~-qV&AZyE50jIuz}$7gTk6Eca9?9kp+7oOzI5`;+cVVcgHCF=D-j{`#@eYf^<; zJ<|HOwlO)6dRSx=I`-1%uZE*xN}iaQC$1I_lap~1&hE~YFzeJ9sMO7 zIqD=s)7C9#H}8S+RH@YnC1sd`qEg3#ogYfZ4OQ>nbx#FQ40#;Mnm%jK4OZ*oLvQdk z1r9ejTIgfuHcp*+RdZ(Z*;}?Y86YdhY3Sov2a6cqY$g+vz_Ug)L0`bTYtaHf<`x0# zV`yQk%2A5wyyEJ&;x%3m1W9VI-oC9|6d=5dZKMsBsnzNN$-iLHE^ojW)I=cM1=u}4 zF<)FI+^xV)VXI_^@+3xgTaGqBCID183o4l#<}6~Wf z7E4U$61e8qxHtZ*pu`F^SD1apH;sq?I@bzCuNj&|8BA1K%Fw~$NrnxMmU%{#@hr<+K*{ya`kSS`_?(ITo{I*R%IXX12~7|2cg`v$m%qMcvlo*xN_H z^{FFe)li|4=_!0f%lVhbZvsoih~0)o#f`r-hgUlxf2m}kbF2AzTsfC3fa6YN1mB2J z9gPl1h8ZgKDjBwykt7zh&yc6lc6oZt(JMPlQWlu()2|CK%3F;%1kg!UDLL)AXAh0(|YdC1-UAir7_VSZ<(dJ=Ew$ zoyypoazhdd%s%iCAUXOE%c!mUmz2S^OGPlo>MF2E;8IC~iMI?FyTKq7;j0Kr(ON7B zaLA}u;+R>XTkb9%w(us*m>THd6hKc`ERqa9v!-BX(5P|Lxm$Qz;!YV=rqI$djoD}T z_m{x7r+Z04aPdEZ=kLX!v?&yl!(0yIQ)q?JV?+&grHE`UmSH$YdrGR@H@K>jT&>Pt zVr!^Ploa~B5J?sfobm`ZX3ecN2L#Tdx7vMWGa9;`UWbpVbE@@b8l)HX*$f7akrNga zC2M9B74KhgqR2UMc({n{J&u=npr}IB!YJWyc}3cJ7kPW_O0bZwxuW8H6ag-0vpg@y|iy zpKIkmReRKnBl}^N;|Bf#at65xc#?am(z9e;V+L?$;txHatr4c-im`2`AOv=R`ojt9&k7!epODKGRKgAO)t#sZ%dgcHouGfDrQA{l4DS{p(9@MX=Fm(J+Hd zDhUQArEvJt3&BXX!kZ}+0w7;6LCn`|wze-=w$cV>q1vj4K4E736`R=t*#ZcG^QEDZ z+IV{Ts!(t_)CIg=x9d{Mz2tUzJ;~NUu(2_jC@(3Fnq1oPpE}&(!gJ0Q1g!;Qh@3w> z0!s!%*P`X?+|G)kH#MrShYCZbG+62_^mLV$G2IwAHUph7dlBw+SoCWmk3*HgTVMeL ziwUDZmX(8mx?^@#EweVvwgszruHY4$)o$msMoAQ#BjwSkt5^rwWU&0q&V#?s{P%v7 zPR~vR1dY=k@fJo)tv)OL6KGdo`9oMCaEHv<>>(ZvffVz?coJiozKcrFtg*qWFK|yw z$H(~*l|YJM%r;AvnETw^wD}KPFdP;rCw@g)8xhk|DI>O$N*UbMbPePygb3^iTCH}( z!~(R-VfWBy@LY`Gq}5`@F_2cxo?~HVcY`B|J(9Uy;4;5CQk1!a7hO=NV=}u?1nI)x zi15b$NZzE^W3fPNpC#p$q<8Xa2b&0yR4{i#4RxOI`pY_JwbN}j@gQ-m@Agf+CtfT3 zglwKp;R+Q_Ipk*xxoISxC*M3lPZ`KCmB~$?+6Sh^c@w51wWXjp2A5bGt*yvX*aHzI zCZ()VK~@_I3=#)1aA&%{Az_JBc}nXbd_hBH(E#>&?s|7>bbAu7?VRM|gvNkb13g|) zi;CG&wU?*8u*MCkX9(LfAI~Z@Ss(4ZxZ9KT8!QDg3uYbA>fLTVtQe@BT-sG)5@Kbs z@{x60*M~b-RLmJLgXPsM2s1>%Rkb!g^ov)A;KV*Am`YqJ>XiH{fqfnA>5i5xIyuog zC$YrtvbzPztcdRJn|K#6eTu;p?Bip9lMmQxISc41gA02y4OZEq08@K*F?KwN;~8)M zsxS?5)C$Ab(_tDk1L9ej7Fv&m>8<|=q%`$~AZ-@-!dbHlr-Rfb`LZDG?l~SvL8p5_ zr`HKjlQnX0jAYq&ux13;1@aMGEwj7;P+{lA&hI86n1e8mv?s;Lvr8#C=~RR;{uTFU zc+wPc))20$$UN5x<%~+OC9nb2XvziZt2wBZn!0Dqs;D@5jl=f!`T!fjc&pV7>)GlO zp86dnh4Itx_jtjjt+E-k!c*v?U`l9o^L|-3s5+c!Q=3*A8N1EA+^nWg+#-zBEl=`- zgP9lQM4wunSexGM&}Gj5zGN%2yNwvhkaiJHC$4>lUeHxr5sNJJg4c_2UFpMT%JlXu zStRfF9g5%LT(h%)U?#xozdM3 zn~WH}C^?wVHrh4QD!zO21)4?>wCr`Xc78hoIU92|ikEHdAh8 z6+GLjH9?MZR0fQLv*y5yr>&%5$+}{%3C6^LdWZx~Ean`-ZOlOm+Y25$m`tiJO=V6h zJMtW&i;r2kOm>@miX!z-FkhLmTvM6KBL*8z8baW7NpN;mvK&^NpcZth!|n38V2)a+ zuYj5zq=>vw(F12Yh(;Q9P-lZ!r?lEFg{=;t-O?KFF$y z?VNy<2|IHZ2Z#+0+BKoxo@LEl4K2wHyE>}NNcSVE>xgu3_j!JBqkJQC#^{sD?3vKmXoxFr-0#c=e4O_IG;6pD1SXQ3vk~e>IWKN zVo&l|xnLwzK&xqk-G13+2hVn3kpPDn8WpE*2$ULx^2*BUv(LTkqLHx;C;NjwnDZ<1 za*u#LtqBH0fh}7$to6b50aPQI54S|HTqi)Jwc~;z>D93CVP#g)b-D(fs!-1tghIY~ z;R35MUN+O}bU=}=P#7-k7@DFM=xM3J_qoWB{5ct*Y+`DX5v(X_d8zl>kUJWe!hUWI!p?nPH158&OlaS}Po}bvbr?aB0vcjq|>J|dTUzBkxGCt>Z zn$LI39OR46hw;tKhJ3`q-w@S_b3NX#XYNav#4Bp6p~7eq;yR5t-L$B@G=?tbXPt*P z`XyNIm!u6CrZiD!S}k4AjxAg>XP;c)DZtsD2Zq6>C)2jM8fST7w2ci}<8OR%o*TUw z_)dXxpOWP)mSv$=6wqxk#+qOu2&63Jxh`YRvAkW_BPR9I~Zl|ORyt<3mh zEP@y}a{8EsnGOlQfAlv>0{W$+ny9TWhi2O32$V_X#w2H*GA2zv$&XTOo$%nqJk>_< z|Jf{X?6{N_tjLW{vUm}IFzv^NC)oFupVa_9U}R1XbyH%jPbt!>+1?Um>O1`1dZ$Gb z^ai{KH|*$)IGIvB<-t~Qz!BFF%FZ|@|zk)am;?haefQ|ilnVF=ztRjt|`Cs-vnPtb3FKR$=ko^*|2FbIKKRFHe%Zms@4gT}{|oy6BK#Z` zK6i}5kw<~At$BR?-}i`rjIaOO?lOMh%kcHi|0%xs&*6)bA58SA*5Qm3?%Af;3&UuW zWyXTBzz!(o-2o1@n7GQ6718GhG$d6{s8Ow;%>@Cj9yx3a0k!LTq#*^U3B@#Sd?v=Fp%rvGTv>&PN$)>YgWsdkhM0w zQ&wd0(xkg2&1YVsH4(dTmkw+9^0MZtRJ!G~b25K;dU+~kR!Qbai3z+_XW7Yq`0sk0zR&zDikv4IlVcYW~(fW_wrc&Bw(=~W4SCjz|Q)Z#Zfe!jkxjzm?vk5 z0mwo-ED?4uAX6ah^^`IsUPpAD?|ti$%ND>h~6OuQ_Q` zUEe_Fo?U*MzK#~?Jv`U)=Zwa*qj6x>>bVdnafRI;lb7=8)SCHg`Ul(3)~hlTuXUUC z8sRQ&B5Ki4WBE1LKV4H*T~P(D^z7)ELW3+kJsxqzb02)@%}m{b!uE zd{%X}71Bj)-TVXe+4bUOpaD45{P$787j;brn|~{Xj6YV((PF)e=hDw}KX@x#V!?rM znaNxDt?~AEdo3{FdFj7^gg#xYNtD9Ovc>GFG|1a@2HPiP*d78+jmfLee}bwwMtjqH z*zw3}%DPpap>q51uR?Ml7}HpK;G|V^Lw>*eI5d}GG^dt_HK)KeKF>Y;R-hc`>!mU@ zTLDcyp!ww#X(}yk!xw7B>S9AJkUM@pk)iNisS(#Ye zGb}KnJ?1?`!3bNUVXYROVnzWx*8eTLkn=vql?TD(gV{Hj&9DW^_{Z3a)NFRTtQNLV zeUvW?+MG&oWVOw{FX+z;?rC7Ht+EG?9AqqupKkO9U!N(v~u)0 ze&h}s^O>DsDx=0`e~jLFD}YvCkt$n_AX%%%n4l+ zg&A9L9u4-iR(y3l^pwh2V+}IM12ayGjG5d9%w~4RA%4z=R-dD+4D4jB+Euali{Wvpn$y5@rF-XdQ_HI`}L7`@1!xj(J0%ZTtAYVEq5m%lhFcu%_PQi+b3C&N(K*XHDk(x6g~Xo8BGvh z1#jMF4i-K%KKJRc(FOGnOnFdfkgSxZnGafF&e6jMRfY(p5+M=8-04IO>T|dkza20* znEfbG?Xp%F)%TC@x=3vbn;?WEXcMN0q&l02cmgIv)IEc`Kg;S~7@j;AV2GJoO@(L` znw1-rWz`ks(}|8FAF{gJV7A6+VB+eK{WP^u`YdWpmVzD zY*gLognvZ=oHbL#sJ?jo%!kybN^21|v^s~;e;xP2Ich`LXouxS>|h2-}YB&U11>xQE&={Q6v+5{69@S?*Q6Aiq1y&4jQ-9#_s?DF%p=C=P8qUl7 z%Q-0dIK{j!!PI=h;e3g?l5sVM`BAOKs1CUOp3(kIvwx(5k)@i%oR?@%Z|~r$_48pS z5B7))id*Mx8#(|N8f9sR!)P4e&vxe`)`ev&Pug2p44Z$RsE&JUe7`R0F~y3D3-_M1 zvJ5P9aA`R@9zNbv?o95j6c*2TgBV0OFWiftUC&gw z>}8eh4YOx192uis->WT%z{oG-&Z^XwNI~uQG7pc9ESx#Jp}n%q&R&Qo{qq1H4@%zF z(CP&zw4{oQY(7r&a^swy1))~2)X!cl=$X^_vWD~7ii%S$CoEXaUQFu?OUY?)zszLZ z{@K2e7YJsMo5rGHT_TZ%EQQ)3PeocGUJG^&eg_f+hh&9>LAr^mN-)cMmT!76_h5Oy>#}}$C(G!CW-HPBlr3E ze|=FQxti2&sC3NXc#r0vr-{!blZ4h3+2?+=!C1CtbVxGhZ_?S|X}H~vS8 z)&$WSqZM*DUGalA78Wh)UC=CU&6(hDE%P9KiKDY>zIp#cS5JLTdmwJZnv?w= z&G~|2a#g9{P{EqxWkTsw`*9!CI==$#ff;Y)a->p}v?LRS37Lo(edHr>%*QOd;`SBxL|UcDElJIx*g#7lVd;ajM&tZY`>%;pkMN%yojnZHfG!Ka*vPrm{p zot0OPAGyEYT@o#cwe+<2R#sB~&EICG3?zfc;&uePC*Nd#H|-5RIepG{dL+rNTk}0NhYs~u!31R2ob_$+ z{x{aYvAZ%9G`o29?Q@3*PMy`8`Ri@TSj-vY#Jf6Ho-kmte(;FyCMoRlJIw}z4qj<6 zK{>83DAdEkqt%M3Nmoj_6AkdG?7%VhKaZV$EUdKDmPnnD>T2)ZJe+y!z6CYqu!U>9 zzOJ)<_P+n5MfZ1CmRor~a|>OQ2}0Mz49ChAquFc`Rd>{3;Rg98SOS45>qOT`D@<#^ zOd?jvOpWTO=!42SbgHa59R+3m#MZZp{-?Z2P?m)`DePjV9h%`|X9evzfW&GJ3m}6t zxaa7rsH)IVfME-o@dk4Pv?RFyWQ!{p<8h)kfXsQ0vSsDTfUVZ3eqmgEThKIt86u=L z7PT<*P0B=>WEq1aVgU83#?5pkEw&!dE>Ia6$g<$dPB2?fvvBRvSN8^?n<{HSNH)n4 zJd2Mp7&cmsuv&~EG}_3Voil@_DvLR%zL5Fo4V|mj)u_U`Tv`%-%N==MZH(Ijsq$rI zj?50ZUI!*7R5yzk$@R)FlNExLm&sZ4A&l~14gxhVVkXuZVKNzX00Qa~P6x!`*mAl2 zBR*N|ZiJ~}OUm)-(Qmz7Qe<({hKioG8v3wkJ?g$mV=l2en4X5w3FeM zj?%bL38T|;4t}`TlXEba!Q4$YhkzrS10IgQOj#Bxm31zSM_Cpunt5KK$C`=13xk3{ z?qsc)9C6gDWF4fxrpw+Z)Cn*vij?6i_ZKHdal0coBFWeMIK}8kW*tqn6RCoZ3zEtD zKukSK@kk^a?3a(XAXkQpOj8`(%b(S#n`)yGZ7R6MRU{*=32s&e^8%A|4 zFyai+X%#LOt2Wvlg4ZM^0ZpJIz*R`8ORs_krnknc3wLycsTr{4JQ^Km)4*{%PmM`vT#99jt6h3m(yjBE zRF-Je0+Zu#$l_%(Q6N=FV#1&?7zkJo!)pb#7OI89-qqE-s=Y(xt5^3H3hF{Dq*w78 z>7fV<0U{>XfX}t?w5WxKKg(5R^63~YaHN021TztT#oi9?YuM^hSr00sK<+P4me=6Q zEnwj<#F1Syj<=JP8Q1Yj((Y7L;>!H!r-$@tGTU5&I zdh-Um&P5ZjOwd&pFR8yY^ZLW91F4hiPF^tsUPPP?Gtx88rn=XL-0|MRE*nKkw*<4} znkIj!b$P|m5A3Hs!C8wulAwnS+YA57{39Jp%jPYdvuN;eajpP5VUOBHX`n5!Jm@H^ zbTYRwR0A2`Kw3qMT|S4u@A^%3rck3dRUIykdi9}jDAIe$DNP1%%w9}YX-2zhUWgbi z1#wquNZ)xf)!7ZOC9M}&&W82>`<$(X)y|U2(yGQa_FUGCjt+p1Ud+=G8&%|iMgEf? zW5BG+YqRB~o78N;l*ywgC&|KOWn}wvIRaBCEjRi&WmdqyHv4G{U@@A*^G&HQq9a=L z$mi%N^U>@7BprQu{)5XW>Gb&dABT=OlEe0jz`u)*{`=xV2GPTk11cVYBvO8lxmzo^TNyk-|NS zovmlZv++P^k#rG`Mw!Zh-m6m$W$r$5By)|Z?|~&0aM&b+%TxeX8Gk+pPc|4FNof2N z?mX135;rhCBJ&kxzjE@*&CTVs807jYvM$PEiCI<`^hqpoGzD^HC~s*DX0EDhvBELc z41Z;-h^n7GZaF%3iP~6TPTKBf^kU{30PAkl%q!OnLX?v=Q(!d?SgB=LW!G@%W3cX)Klp$owVTW8 zeMD>6T+f!}Fdm(G3s?*&SgfN1!A9mvk=0N(k(Xq?JTj+EA}}H&(4$jrq4NQ)HKH^N zDjZauFavv+9330CpgvR>pWr>vMcIHGWjvZXG))!m%?~s2&&%}Xhblxc(M=VR&&`#} z6{|n)*&;}l70i^piJ1iu&IhN;XaE<`qE~zB>%EMuDJ>`g3k%BjP-20qjsq6-!2~R< zSmDvYsWW8r*op(QH+Er=I5I`Lx}qkyCgrsz#&!*;h-#KrwdBrF+rHaRh_u1{lrCa5 z`Xs?#7BIH%+0(je#p)G2zY@U1iUCLAybx$oaZ68JdgAcwE!M&!D?E8%aSYEpV0A(W zN?nM5i@tN?BBsirhAoVM(;>*TzjHjpT?l-_eE2je)oBAK)2PZ1_S0i>N1dWkpn&Ok zb{o_Wv>PCj=+>+Bo`@ydS>sX%a1ew=j|>Ya(FqX6(uO-bA~1Pmg|3tcI~2iKgu1FD z=4rs@U=u*=O(uM{SPFZLShb4iT4DDs<(Gmp7L_i%ac85kr%eX9c zY+Z2Ow-=OEmQ`u(MYezw&a9VkT*KIc*fc=UJ8uC0-O^IT!-%x&U2m93-Md| zq0T|?;H2g7NeDJEgx$lGo|2ij0bC;HScXdQ5YG?MD^{`uIu*Rtz^=flSc~YvV@bjSggMC4}Ul%T3@7w!Ah&sDX-$DE%&peFBn1*p0k&g z*)GZa=0sa@%C9c=*y>AY4SzB9ErZ|GIFul?E=i2Ga~2yS<; zzfD*!EP?EGC!=acuv5+tfh492bLQWBEadf&=MU<| z9pe@IR8rUo3oIO0q<2Rwb?XP}OhGV8;Tg+g(VNsMPtm$t1{0VJvZ~#DyLCWRk`c$ z$h`g_eK7Mn@GIUg5UEwAvPJA_cU_h1BFrssUgY1_NLvNIUL}Ov+rr{m&dM4$uPty|3GUuR2m@CX0p}{GetkFWB0O+Yfs)blsWL;I6n6;8yVag z@CE!Dn?o<&2;{*JmanOG-FRkWX7R*nElFsf!b3xK-4gJ4UZk`BMoVikE3u6#$~1>;ZNq}%BEZ*^9bS}{u^CC1oO$nP}|^R;Aw45gyU z#vV%mY(J|&YznU%V9G)fl#lK_^#{TbzAm{TJ6up!^zDnkaeBJ8wgL(UHcUUTt1gIv zpjvC=YFnFoj?%fO@44;Jb!V1BAdKUS0&F#fRGh64XWw;o4g0=%<&8#TLu0_E2Ss7P zf(?0JOWWGY+PX9}zMw3EX&LQS$FzDU-%wj!d=U0t%yp^N!Qz54o{wV-fh_x z2xlvo(%l_%VUPHXQ+GXb%RT4S#3~|ixLxKAQytt0B|F=Dk7OP=|4NrD^V;(z(V`%& z^73|Nbs-4hYGW(R=iLXSx!QZS6&IJ6OU81ost9H(^!j9Fd3Z$4!{<`T1-@V?N)yW3 zVt?i%@cZr|`@rw3&95L7_AFa7;!vESDTk%{TE#YsLhFv{vQ11lI+t+r%6LxGNCZlc z%DBM(Cc)&&l0#iR_x=Xi!5iExN+MV{2FdPj7x)&V#sEiZF!iFpRLtEe0JH)|3|6ODIMXLvvFLHi8ZdW8pNzxDu#B zC2DOYg*A&uAhu{ZdEwnZfdoyU*5`q_fU=6JD$2EST&rGePc+pe`yEiK`0T&K(R51S z-zkTkN7%d9H#6pv)hR#|P@Xd;eucCCJIH);4M;27C#C{w${Eqr4m8=7SZosN(_ntw zQ+-+A9{j~DDsxw$G%Fr8nKgTtM!u8UM8FR{O7z>|+Yb~=CMmLS-&EMW|Qc)!8*T7zfM$!mYtIh6h z@Ecmo)0KVIO=d|nf2%C+5B4;+7Qsj?OkY8<#%MA#o%66!B^VrbzY+FVyXWkm)yZsm zc->`deyvuQpISb+yGcm3^~U zu56g`YOO)gg`+8h30nq(U2BqbSUxv8rI63-gjp?3h!^I~+8c^=cDFR2b68YGwqa^v z_}-m)QFV*>J+g$H&qmQabd^{h@j0yIu9G;)#isCZreYuX$2YmpCWQr15Kg}HDL<#r zfCv1!L61ls@anT_>(Fjl9W9|23IxuZ<`&MIJ*%s!r5^h!2X)9}T8?1Ysb|A%&^cH0%tAN>^{ccgLx4Gs|(lKFmwHFBv+KLf7YmA{l2mb;rHiSC@v6 z3k@Pa^9jaMsGFU=Y1t#-8iHsOj%FJ@S?EHOCsh$IIv zc2yu0HAk%&*C4$G4gu>SS;Hk$$1j!oKnE7c@Iq1_fnV`&tr)@1NRTw})2D-H$`cMO zoNsnpY5!Vzu~}I%N2PL_>_)F14su1^EPo&r(YeD075Vg!@&X}j2WxfP-mAY83IzSI z?+wW?gC52z!fL2h4}8|A_2`71^m56*B^rcZdzkKU#&Is#eEz<8WmTEMTVP{ty(ANd zM*Q=n6f*!;6GjdspfF`xcr%+JS!?7awAsij{3iN&3%sAV{QZGB08>;d0Sg3|<1Wt><8d!;aEEpqKQ=*Hoxb@cn@;nU}dCiyQp{TkmK}R=)K3!<%90v z_-UEwZm>HV{Pfq#mCaJHT0tL!r7D$j=9(RZ@{2cF6CZ$`bXBZ$NQMU-M`c$L*w*4S z_JP@jJl|Ib`(&MM8!Z-#Rf6UBV(KszO5lXrtWXEm!>^&}4F_AXIE9o!5@Ps#p&nj* z1(6+GhugXqZCp4PhABbIP`WP84y}98kjvs>WNNYGC#?VaFQQ{b4bPx0vi;1ET+g z+PY5IuxOr-x%EI@ALrhL37x}CfP#LW_rWTZ+l@}n8Tl9u&xTYYmJu*XWj1Tr`6;+l zhUolMAsnP&-~z-z$ZE#e1j~u_eC|!XTM{FcDpmdF&GmX$#9U|(x*8~)v|4PgN);ce z)<`w$*4C(0l@SpvK|&`k$gJl|`76jQz|)>ps$pFctTp)%nE?^z#&e4bR2g$)zLFS( z72^#Gl)=I^<8}15Lax|j*6P&|KIS8EDeiHE>bEgtA{KDeLdz2ch4AvKH=Aq?3jllF z$WrEUnR&8o5@^erXSVPM`(X@9rL)$UR4UL0fBh@Xg8k*(wsv@j~$JWM8?uzDDV^+P3A zTMvDKoaI`jCD1cSC?bArgkprR&=32Yr!%xPk~PJy5LbTLz(zQGUg&TVTnw(vAB)Vn zl^5!-U4Hom1K)q`0($s@fhRt?=P#eoC>%*hTF{pR29PaQXccI6qAFO>5DP)q)nf8` zL!p8|tfU|owOOqe69nL~bW>|J8aO}j#rvRrZvWP{bgaUHh3gf9)+l0F(_u#n(Opbd z;P!VJYrj_%3pgtR{005vbpW-hpL;GJ=|4wf`C21Rx8Zmh4xHhp8HQE$5YmB{;bL3C z?81;ArqVDNp(1#glrCcqM#q-SLHZg1kxsuw-oC9O}eLa4JxSEJe2C18wN` zlPvK(+T{1ie}Fsilz}_eH>VzCOv4?PA<8xjrA|d5!(`PwaFWebMr-C!=4Z|sx7EZw z4!8ZMk4a)9%+zXpzB-F#PSi%lP@p>A67OkAHYYu9w+kK=G)|Z+;RUOokw9&$R_iS= z$Nb*QHrExD*=^iS94)ehOw2zkg^MFhYMCx;@&=p3tuq_k@U#M_YsbYZ46cQF^%>)T zksvPBV4m1i+7lLvDs8V$S6@~R=MU*{xkg)GS?&u+@WrH7gS@oR#e%J0 z3`9n^2GtC(p&I1GO9@Y?u(D#M$lpM(rf_zihz3DCFop^HDQ>+udMmG58XIxTcEAKt zBdSyozC^zSzORD%$(iK3FUEKt(Gl6T4d$inI4&bmMk&UpV|yVx@RolHCYAU<>V<{b z)SpiyFFEDM$D$b>7T9(Kgc%M!EIykdQfI1fXlyMnDUD(B0v=$A-U*L0k`yWqm$*af zT2c7!-kO3K(1?C%5W#atufYhfVk?qdzx2B*0^DivlP#EG?hYpocq^ls>Z_ittTBaQ zyXAP@Hrs#23Lg9vbU`Lw!$IO+0~=-r_)&-7Xq-vR>eB(W>E1841h<7R_}xiMr14K{w7)p!UI*7lfWk_d>Xv z{o{xU!d)!B9zU5YB0n$3-)x|m$2kb5i7*189wS6bA-qF~0qSJNvj{QmBE<3=(8r^M z*kDx1hI`w4gxK-k33iwBAR(^z3GpKCeS{D{@(7v;38e^$93rG(FPLD92`L)Fo&(Aj zF+49>Mo200tayWvDx|NzfspumLTVv~R_8)^l8^+xP3jTm5R$?-=?@5L*hENEA0acI zBcugsTaFUa9wVd!<#(f;9+W$?laN{W5i(~cA@ena^erZ2!9@rU5V8>8FGPG1(k&Vx zWN`r@OREVv;dVlnq0HsDUx9pA3WTge{Z_w7$eQyA>Bn^)uIt_*WMDlZ8~O;@I7G;% zM+q5xgOHPNAY=&dw{#M+^&la`uMskec8nq2P7?y^zUw(cPHiRRbQ=QFoNEId2=41_-u^0ik8Ip-`w&P9FBKTODlh+l#>UV1YjmtBqU0U_UbkB}=v zgj{tW0`j^F-+dEx_!iz@i?Xh}osb)Ff8#}j;4^Xyp4~P=$nC!&~!$XAJ z{RScTAbt<>xVI1CNd%<1ZxaIA@?GTfJ(Pcc9m1o8JkUzWgXIWF_fP=>%71tnA>Thp z$PYt=Jc{xjJxa*qh(BQ>lDP`6(%CgiOf2>ID6OwrVePkxACmtk}KSZeb2{=XX6RN2u zR9i==glD>&3Dtif_K1S zv>}WUT8y-@PD0Dp5L)pGp_LaATJ;-3Ypy0Vj!<_N!cj=44Iw;AXmT&1=~e{f(}=V) z1VUS$B(xRJ+Nu$*CA7VX(2hBTb|UYt#f0`eKS;0O=RLM(CpV z2|ZyYp(ma}=!!Z*Pr97Y)q4qDgY@fsgsw-~0|yD+@EoC=LWB;c2tB!#&>_UP#t0p` zkI+%Xwhtckb&q6>xkD%-y&Ls5F zWe9-7<9{afiB|~yQH;_O*~5fBXCm~csOt;J>qUf@U4;H@7ok5# z`d42g^cTqUwKoX;Ws1;W?IrZrxW0+-RujS}g#HG3{C14c-#tR;@A2#pw-frul?bTU zf1$pADnP)yKc7YDf1}LzUnBH?LI`;F!5oD52>oyup&va!=*KAQlQRhY6yJTeiO?gR zgdRoO@tK5X`mkTHVN}1GaNK!>6FLbe9wwX$_iEgOemU(2gp;l%oDT2w1&BXKIO8LP zGaq7e10n7!=e>Ae!)jyGheTeWqxXKyp?~7~(X-xggtnE8J_LOvzzdZhh6dP41|>kcOi@+ zEJtWX7)4lv!1C*7fu%>d5qUg{Z~);+VVQj0ulkTIR-H@ct8PTO23&PyzW6MeuWlmy z)U{+jzngRlkC9?^0?!X(0(gWhWY1N9BnMQzqz~7_9#0gexIwi#i~Fws0zG#kakJlgz<&j*uj++>7J{q;13f3hqMG z|HX+5gkO1)&4H!0&tMJ{0st7p^b=t4g6>vU8`WTEfOUPn8-wQ*dy~uMm;tZ}WtS;IW z8 z16=$0kI0Frn~$4I&cwBwJ;T+EHnjkDYvuRL$SRgboI%WTx?hnd+&5zhwG?UAAgsW5 zYjN!do>n8>TF^iWY37NmNI&xG$8|06GlceC%AU*Vab?d~`*Lk&bS$?!G4UCDF8!6P z6|b4Ng0*)_Xp-B_V8GhUuDLdEBn*CS>RZu%*5>SY(oLj~1&x6$(P9yl?JxVJYSM=^ zYZ(orUM%$TACpehSy4Q zw&Pv#Y+E)Qz;%B%uy0s68{hZidVpQ!;F~yty6r`NE78UgwC4$g$Fnr{B7ZRU-m!kc?%9=%PY)unK9als0CASDe9eB#?sp@8J`0Gm za;AijUqW5?BCz~fo~->|gc`I(Zja!c_ygb=%3b+GSn?ktJCSCsrc!Q03$FWc-;#yJ zDY))LUMx@6k9Q+90gvZ&q1=?kF(25_rD0T#=j-P}5z+XRp=`)*j zn=&8ZP4*w%jfjc-IRE?*?&UcHe|eIfaWG#AFA^QOD;rl4 zHF+o-X98%CAuq^TA?sK^PKk>CG5ee&8v564oF^{&aW*axXfqA|Yq1jt^jBN__Z(Sc69@{i9y1g4xaF72X_G~Hg9vt2ps;;cbrh?qiFc@q*$pGwujp6Tl5`tvtD4uSSW9;o1*^c-y zo`>Z0TcC5fLry)4Cv)*;z5M-F`HOyhIY@@cskn=;^>hY{oF1a5m zS(#msj}4L8D2?U33Gsf!*_&bcp4D%=oMtY{8pGQ$lrVyL2+vvF#&8PQk5ueQuG~1O z#;*oX7Rfc-D8F5bbemDm5bm}jHjMX8fB}2jO4iA(--_IKp}bL~YsPgk(k>(INXzPb zY#kc1@0C=ce7dD_soMb$2FDQUQiiLc7+D|ZA3YNk%z^F%?8q67Yls%B zEFF4;L=41;o@6E#VkI_WCl2C-ix@ZY5HCzL`bmHUQE-?wGKk_3kgEe?5t#) zF*%1^OCBKKCcl6;w7b#6?;-b+`^a~}O?;eO4v&kMV9k0VMuf}AqvSELtpr%AhM*>e zIubmD>Zl%n4HO1QsF_-*6`q6b)B$JcF6yQp>ZLyFrvW&m2+=S^=c2TL7SbYGOk=c! zmeMlF_f*hIS_K=gH8f6ZVL7rMsxL{JqG{Sd8)*}rL7Qm{ZKZ9rop#Vp+Qpo`)0uP@ zg_1U%1HYs5;99ax*7*g{d6r|N7vH-bPL@|hv^6;yGH4DI!1TUo%9sCi=IkPgIeAhbT{}id+1)ekM5@j=vnk^ z`XBUb^dLP4evHqh=h5@&1@uCC5xtmRLNBF<=wchu%x?qu-_9qxaJX=!5hj`Y?Tj zexLq;{*XROAES@cC+L&(NA$<^Df%>hhCWMwLZ72Qg+Ss9kYjs^zD$2cU!gyzuhL)8 z*XZl?m-JWk4f<>PCVh+khQ3XIOMge-q3_b)(?8Jn=pX5S(Ld2Y)4$OFrhldH)4$Qb z)Bm9#&=2WH^ke!7{gi%2kIZO>jive!=KT2rH3hqnxD?ANnwbJa2)Q%!v~Pr17K>`VDZ zl0TNC+WrlLgEiIF@!DLhCYg_=^09O-7O&37YVxsoK312H)#qc0d@P@HJfCwspL1OU*GGKr^+upi-8Fl$G>hfjO<;$qcmr<85 zqb^@YUA~OEd>M)S7m55AiToFd{1=J*7s-6BlKHwM^L0t)>ypgpoXqE(%;%iU=bX&v zoXY2%%C|R_FC&#NBb6@$hRm}NO6AK)<;zIr%Sh$RNaxE)=gUav%Sh+TNaxE)=gUav z%Sh+TNY<#f3}O{HzFut;x#o&F^QUZw&+AnZGBvK$^b^3?PH_;+qY{LZW!&~ zJho#LU2|Y$leT|!boi8^femA7Iksa&lCPtK8#j$9FV_#BvQ>$##cETD?HF0VRW7+E zEf1A(tWvZ0@=%HUv~u4r50UYjc6o@5*K|}X&pT@LazX3Y4zbdeQgM^30HSgo@~K!g zlutYBwP-Zf(cAlnbOXCEjt*=c8|)v_3~U)0J9YcOm 0) // 8 = FILE_APPEND flag + { + $mode = FOPEN_WRITE_CREATE; + } + else + { + $mode = FOPEN_WRITE_CREATE_DESTRUCTIVE; + } + + // Check if we're using the include path + if (($flags & 1) > 0) // 1 = FILE_USE_INCLUDE_PATH flag + { + $use_include_path = TRUE; + } + else + { + $use_include_path = FALSE; + } + + $fp = @fopen($filename, $mode, $use_include_path); + + if ($fp === FALSE) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'file_put_contents('.htmlentities($filename).') failed to open stream', $backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + + if (($flags & LOCK_EX) > 0) + { + if ( ! flock($fp, LOCK_EX)) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'file_put_contents('.htmlentities($filename).') unable to acquire an exclusive lock on file', $backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + } + + // write it + if (($written = @fwrite($fp, $data)) === FALSE) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'file_put_contents('.htmlentities($filename).') failed to write to '.htmlentities($filename), $backtrace[0]['file'], $backtrace[0]['line']); + } + + // Close the handle + @fclose($fp); + + // Return length + return $written; + } +} + +// ------------------------------------------------------------------------ + +/** + * fputcsv() + * + * Format line as CSV and write to file pointer + * http://us.php.net/manual/en/function.fputcsv.php + * + * @access public + * @param resource file pointer + * @param array data to be written + * @param string delimiter + * @param string enclosure + * @return int length of written string + */ +if ( ! function_exists('fputcsv')) +{ + function fputcsv($handle, $fields, $delimiter = ',', $enclosure = '"') + { + // Checking for a handle resource + if ( ! is_resource($handle)) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'fputcsv() expects parameter 1 to be stream resource, '.gettype($handle).' given', $backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + + // OK, it is a resource, but is it a stream? + if (get_resource_type($handle) !== 'stream') + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'fputcsv() expects parameter 1 to be stream resource, '.get_resource_type($handle).' given', $backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + + // Checking for an array of fields + if ( ! is_array($fields)) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'fputcsv() expects parameter 2 to be array, '.gettype($fields).' given', $backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + + // validate delimiter + if (strlen($delimiter) > 1) + { + $delimiter = substr($delimiter, 0, 1); + $backtrace = debug_backtrace(); + _exception_handler(E_NOTICE, 'fputcsv() delimiter must be one character long, "'.htmlentities($delimiter).'" used', $backtrace[0]['file'], $backtrace[0]['line']); + } + + // validate enclosure + if (strlen($enclosure) > 1) + { + $enclosure = substr($enclosure, 0, 1); + $backtrace = debug_backtrace(); + _exception_handler(E_NOTICE, 'fputcsv() enclosure must be one character long, "'.htmlentities($enclosure).'" used', $backtrace[0]['file'], $backtrace[0]['line']); + + } + + $out = ''; + + foreach ($fields as $cell) + { + $cell = str_replace($enclosure, $enclosure.$enclosure, $cell); + + if (strpos($cell, $delimiter) !== FALSE OR strpos($cell, $enclosure) !== FALSE OR strpos($cell, "\n") !== FALSE) + { + $out .= $enclosure.$cell.$enclosure.$delimiter; + } + else + { + $out .= $cell.$delimiter; + } + } + + $length = @fwrite($handle, substr($out, 0, -1)."\n"); + + return $length; + } +} + +// ------------------------------------------------------------------------ + +/** + * stripos() + * + * Find position of first occurrence of a case-insensitive string + * http://us.php.net/manual/en/function.stripos.php + * + * @access public + * @param string haystack + * @param string needle + * @param int offset + * @return int numeric position of the first occurrence of needle in the haystack + */ +if ( ! function_exists('stripos')) +{ + function stripos($haystack, $needle, $offset = NULL) + { + // Cast non string scalar values + if (is_scalar($haystack)) + { + settype($haystack, 'STRING'); + } + + if ( ! is_string($haystack)) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'stripos() expects parameter 1 to be string, '.gettype($haystack).' given', $backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + + if ( ! is_scalar($needle)) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'stripos() needle is not a string or an integer in '.$backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + + if (is_float($offset)) + { + $offset = (int)$offset; + } + + if ( ! is_int($offset) && ! is_bool($offset) && ! is_null($offset)) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'stripos() expects parameter 3 to be long, '.gettype($offset).' given', $backtrace[0]['file'], $backtrace[0]['line']); + return NULL; + } + + return strpos(strtolower($haystack), strtolower($needle), $offset); + } +} + +// ------------------------------------------------------------------------ + +/** + * str_ireplace() + * + * Find position of first occurrence of a case-insensitive string + * http://us.php.net/manual/en/function.str-ireplace.php + * (parameter 4, $count, is not supported as to do so in PHP 4 would make + * it a required parameter) + * + * @access public + * @param mixed search + * @param mixed replace + * @param mixed subject + * @return int numeric position of the first occurrence of needle in the haystack + */ +if ( ! function_exists('str_ireplace')) +{ + function str_ireplace($search, $replace, $subject) + { + // Nothing to do here + if ($search === NULL OR $subject === NULL) + { + return $subject; + } + + // Crazy arguments + if (is_scalar($search) && is_array($replace)) + { + $backtrace = debug_backtrace(); + + if (is_object($replace)) + { + show_error('Object of class '.get_class($replace).' could not be converted to string in '.$backtrace[0]['file'].' on line '.$backtrace[0]['line']); + } + else + { + _exception_handler(E_USER_NOTICE, 'Array to string conversion in '.$backtrace[0]['file'], $backtrace[0]['line']); + } + } + + // Searching for an array + if (is_array($search)) + { + // Replacing with an array + if (is_array($replace)) + { + $search = array_values($search); + $replace = array_values($replace); + + if (count($search) >= count($replace)) + { + $replace = array_pad($replace, count($search), ''); + } + else + { + $replace = array_slice($replace, 0, count($search)); + } + } + else + { + // Replacing with a string all positions + $replace = array_fill(0, count($search), $replace); + } + } + else + { + //Searching for a string and replacing with a string. + $search = array((string)$search); + $replace = array((string)$replace); + } + + // Prepare the search array + foreach ($search as $search_key => $search_value) + { + $search[$search_key] = '/'.preg_quote($search_value, '/').'/i'; + } + + // Prepare the replace array (escape backreferences) + foreach ($replace as $k => $v) + { + $replace[$k] = str_replace(array(chr(92), '$'), array(chr(92).chr(92), '\$'), $v); + } + + // do the replacement + $result = preg_replace($search, $replace, (array)$subject); + + // Check if subject was initially a string and return it as a string + if ( ! is_array($subject)) + { + return current($result); + } + + // Otherwise, just return the array + return $result; + } +} + +// ------------------------------------------------------------------------ + +/** + * http_build_query() + * + * Generate URL-encoded query string + * http://us.php.net/manual/en/function.http-build-query.php + * + * @access public + * @param array form data + * @param string numeric prefix + * @param string argument separator + * @return string URL-encoded string + */ +if ( ! function_exists('http_build_query')) +{ + function http_build_query($formdata, $numeric_prefix = NULL, $separator = NULL) + { + // Check the data + if ( ! is_array($formdata) && ! is_object($formdata)) + { + $backtrace = debug_backtrace(); + _exception_handler(E_USER_WARNING, 'http_build_query() Parameter 1 expected to be Array or Object. Incorrect value given', $backtrace[0]['file'], $backtrace[0]['line']); + return FALSE; + } + + // Cast it as array + if (is_object($formdata)) + { + $formdata = get_object_vars($formdata); + } + + // If the array is empty, return NULL + if (empty($formdata)) + { + return NULL; + } + + // Argument separator + if ($separator === NULL) + { + $separator = ini_get('arg_separator.output'); + + if (strlen($separator) == 0) + { + $separator = '&'; + } + } + + // Start building the query + $tmp = array(); + + foreach ($formdata as $key => $val) + { + if ($val === NULL) + { + continue; + } + + if (is_integer($key) && $numeric_prefix != NULL) + { + $key = $numeric_prefix.$key; + } + + if (is_resource($val)) + { + return NULL; + } + + // hand it off to a recursive parser + $tmp[] = _http_build_query_helper($key, $val, $separator); + } + + return implode($separator, $tmp); + } + + + // Helper helper. Remind anyone of college? + // Required to handle recursion in nested arrays. + // + // You could shave fractions of fractions of a second by moving where + // the urlencoding takes place, but it's much less intuitive, and if + // your application has 10,000 form fields, well, you have other problems ;) + function _http_build_query_helper($key, $val, $separator = '&') + { + if (is_scalar($val)) + { + return urlencode($key).'='.urlencode($val); + } + else + { + // arrays please + if (is_object($val)) + { + $val = get_object_vars($val); + } + + foreach ($val as $k => $v) + { + $tmp[] = _http_build_query_helper($key.'['.$k.']', $v, $separator); + } + } + + return implode($separator, $tmp); + } +} + + +/* End of file compatibility_helper.php */ +/* Location: ./system/helpers/compatibility_helper.php */ \ No newline at end of file diff --git a/system/helpers/cookie_helper.php b/system/helpers/cookie_helper.php new file mode 100644 index 0000000..7607ffb --- /dev/null +++ b/system/helpers/cookie_helper.php @@ -0,0 +1,144 @@ +config->item('cookie_prefix') != '') + { + $prefix = $CI->config->item('cookie_prefix'); + } + if ($domain == '' AND $CI->config->item('cookie_domain') != '') + { + $domain = $CI->config->item('cookie_domain'); + } + if ($path == '/' AND $CI->config->item('cookie_path') != '/') + { + $path = $CI->config->item('cookie_path'); + } + + if ( ! is_numeric($expire)) + { + $expire = time() - 86500; + } + else + { + if ($expire > 0) + { + $expire = time() + $expire; + } + else + { + $expire = 0; + } + } + + setcookie($prefix.$name, $value, $expire, $path, $domain, 0); + } +} + +// -------------------------------------------------------------------- + +/** + * Fetch an item from the COOKIE array + * + * @access public + * @param string + * @param bool + * @return mixed + */ +if ( ! function_exists('get_cookie')) +{ + function get_cookie($index = '', $xss_clean = FALSE) + { + $CI =& get_instance(); + + $prefix = ''; + + if ( ! isset($_COOKIE[$index]) && config_item('cookie_prefix') != '') + { + $prefix = config_item('cookie_prefix'); + } + + return $CI->input->cookie($prefix.$index, $xss_clean); + } +} + +// -------------------------------------------------------------------- + +/** + * Delete a COOKIE + * + * @param mixed + * @param string the cookie domain. Usually: .yourdomain.com + * @param string the cookie path + * @param string the cookie prefix + * @return void + */ +if ( ! function_exists('delete_cookie')) +{ + function delete_cookie($name = '', $domain = '', $path = '/', $prefix = '') + { + set_cookie($name, '', '', $domain, $path, $prefix); + } +} + + +/* End of file cookie_helper.php */ +/* Location: ./system/helpers/cookie_helper.php */ \ No newline at end of file diff --git a/system/helpers/date_helper.php b/system/helpers/date_helper.php new file mode 100644 index 0000000..fae9e66 --- /dev/null +++ b/system/helpers/date_helper.php @@ -0,0 +1,611 @@ +config->item('time_reference')) == 'gmt') + { + $now = time(); + $system_time = mktime(gmdate("H", $now), gmdate("i", $now), gmdate("s", $now), gmdate("m", $now), gmdate("d", $now), gmdate("Y", $now)); + + if (strlen($system_time) < 10) + { + $system_time = time(); + log_message('error', 'The Date class could not set a proper GMT timestamp so the local time() value was used.'); + } + + return $system_time; + } + else + { + return time(); + } + } +} + +// ------------------------------------------------------------------------ + +/** + * Convert MySQL Style Datecodes + * + * This function is identical to PHPs date() function, + * except that it allows date codes to be formatted using + * the MySQL style, where each code letter is preceded + * with a percent sign: %Y %m %d etc... + * + * The benefit of doing dates this way is that you don't + * have to worry about escaping your text letters that + * match the date codes. + * + * @access public + * @param string + * @param integer + * @return integer + */ +if ( ! function_exists('mdate')) +{ + function mdate($datestr = '', $time = '') + { + if ($datestr == '') + return ''; + + if ($time == '') + $time = now(); + + $datestr = str_replace('%\\', '', preg_replace("/([a-z]+?){1}/i", "\\\\\\1", $datestr)); + return date($datestr, $time); + } +} + +// ------------------------------------------------------------------------ + +/** + * Standard Date + * + * Returns a date formatted according to the submitted standard. + * + * @access public + * @param string the chosen format + * @param integer Unix timestamp + * @return string + */ +if ( ! function_exists('standard_date')) +{ + function standard_date($fmt = 'DATE_RFC822', $time = '') + { + $formats = array( + 'DATE_ATOM' => '%Y-%m-%dT%H:%i:%s%Q', + 'DATE_COOKIE' => '%l, %d-%M-%y %H:%i:%s UTC', + 'DATE_ISO8601' => '%Y-%m-%dT%H:%i:%s%O', + 'DATE_RFC822' => '%D, %d %M %y %H:%i:%s %O', + 'DATE_RFC850' => '%l, %d-%M-%y %H:%m:%i UTC', + 'DATE_RFC1036' => '%D, %d %M %y %H:%i:%s %O', + 'DATE_RFC1123' => '%D, %d %M %Y %H:%i:%s %O', + 'DATE_RSS' => '%D, %d %M %Y %H:%i:%s %O', + 'DATE_W3C' => '%Y-%m-%dT%H:%i:%s%Q' + ); + + if ( ! isset($formats[$fmt])) + { + return FALSE; + } + + return mdate($formats[$fmt], $time); + } +} + +// ------------------------------------------------------------------------ + +/** + * Timespan + * + * Returns a span of seconds in this format: + * 10 days 14 hours 36 minutes 47 seconds + * + * @access public + * @param integer a number of seconds + * @param integer Unix timestamp + * @return integer + */ +if ( ! function_exists('timespan')) +{ + function timespan($seconds = 1, $time = '') + { + $CI =& get_instance(); + $CI->lang->load('date'); + + if ( ! is_numeric($seconds)) + { + $seconds = 1; + } + + if ( ! is_numeric($time)) + { + $time = time(); + } + + if ($time <= $seconds) + { + $seconds = 1; + } + else + { + $seconds = $time - $seconds; + } + + $str = ''; + $years = floor($seconds / 31536000); + + if ($years > 0) + { + $str .= $years.' '.$CI->lang->line((($years > 1) ? 'date_years' : 'date_year')).', '; + } + + $seconds -= $years * 31536000; + $months = floor($seconds / 2628000); + + if ($years > 0 OR $months > 0) + { + if ($months > 0) + { + $str .= $months.' '.$CI->lang->line((($months > 1) ? 'date_months' : 'date_month')).', '; + } + + $seconds -= $months * 2628000; + } + + $weeks = floor($seconds / 604800); + + if ($years > 0 OR $months > 0 OR $weeks > 0) + { + if ($weeks > 0) + { + $str .= $weeks.' '.$CI->lang->line((($weeks > 1) ? 'date_weeks' : 'date_week')).', '; + } + + $seconds -= $weeks * 604800; + } + + $days = floor($seconds / 86400); + + if ($months > 0 OR $weeks > 0 OR $days > 0) + { + if ($days > 0) + { + $str .= $days.' '.$CI->lang->line((($days > 1) ? 'date_days' : 'date_day')).', '; + } + + $seconds -= $days * 86400; + } + + $hours = floor($seconds / 3600); + + if ($days > 0 OR $hours > 0) + { + if ($hours > 0) + { + $str .= $hours.' '.$CI->lang->line((($hours > 1) ? 'date_hours' : 'date_hour')).', '; + } + + $seconds -= $hours * 3600; + } + + $minutes = floor($seconds / 60); + + if ($days > 0 OR $hours > 0 OR $minutes > 0) + { + if ($minutes > 0) + { + $str .= $minutes.' '.$CI->lang->line((($minutes > 1) ? 'date_minutes' : 'date_minute')).', '; + } + + $seconds -= $minutes * 60; + } + + if ($str == '') + { + $str .= $seconds.' '.$CI->lang->line((($seconds > 1) ? 'date_seconds' : 'date_second')).', '; + } + + return substr(trim($str), 0, -1); + } +} + +// ------------------------------------------------------------------------ + +/** + * Number of days in a month + * + * Takes a month/year as input and returns the number of days + * for the given month/year. Takes leap years into consideration. + * + * @access public + * @param integer a numeric month + * @param integer a numeric year + * @return integer + */ +if ( ! function_exists('days_in_month')) +{ + function days_in_month($month = 0, $year = '') + { + if ($month < 1 OR $month > 12) + { + return 0; + } + + if ( ! is_numeric($year) OR strlen($year) != 4) + { + $year = date('Y'); + } + + if ($month == 2) + { + if ($year % 400 == 0 OR ($year % 4 == 0 AND $year % 100 != 0)) + { + return 29; + } + } + + $days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); + return $days_in_month[$month - 1]; + } +} + +// ------------------------------------------------------------------------ + +/** + * Converts a local Unix timestamp to GMT + * + * @access public + * @param integer Unix timestamp + * @return integer + */ +if ( ! function_exists('local_to_gmt')) +{ + function local_to_gmt($time = '') + { + if ($time == '') + $time = time(); + + return mktime( gmdate("H", $time), gmdate("i", $time), gmdate("s", $time), gmdate("m", $time), gmdate("d", $time), gmdate("Y", $time)); + } +} + +// ------------------------------------------------------------------------ + +/** + * Converts GMT time to a localized value + * + * Takes a Unix timestamp (in GMT) as input, and returns + * at the local value based on the timezone and DST setting + * submitted + * + * @access public + * @param integer Unix timestamp + * @param string timezone + * @param bool whether DST is active + * @return integer + */ +if ( ! function_exists('gmt_to_local')) +{ + function gmt_to_local($time = '', $timezone = 'UTC', $dst = FALSE) + { + if ($time == '') + { + return now(); + } + + $time += timezones($timezone) * 3600; + + if ($dst == TRUE) + { + $time += 3600; + } + + return $time; + } +} + +// ------------------------------------------------------------------------ + +/** + * Converts a MySQL Timestamp to Unix + * + * @access public + * @param integer Unix timestamp + * @return integer + */ +if ( ! function_exists('mysql_to_unix')) +{ + function mysql_to_unix($time = '') + { + // We'll remove certain characters for backward compatibility + // since the formatting changed with MySQL 4.1 + // YYYY-MM-DD HH:MM:SS + + $time = str_replace('-', '', $time); + $time = str_replace(':', '', $time); + $time = str_replace(' ', '', $time); + + // YYYYMMDDHHMMSS + return mktime( + substr($time, 8, 2), + substr($time, 10, 2), + substr($time, 12, 2), + substr($time, 4, 2), + substr($time, 6, 2), + substr($time, 0, 4) + ); + } +} + +// ------------------------------------------------------------------------ + +/** + * Unix to "Human" + * + * Formats Unix timestamp to the following prototype: 2006-08-21 11:35 PM + * + * @access public + * @param integer Unix timestamp + * @param bool whether to show seconds + * @param string format: us or euro + * @return string + */ +if ( ! function_exists('unix_to_human')) +{ + function unix_to_human($time = '', $seconds = FALSE, $fmt = 'us') + { + $r = date('Y', $time).'-'.date('m', $time).'-'.date('d', $time).' '; + + if ($fmt == 'us') + { + $r .= date('h', $time).':'.date('i', $time); + } + else + { + $r .= date('H', $time).':'.date('i', $time); + } + + if ($seconds) + { + $r .= ':'.date('s', $time); + } + + if ($fmt == 'us') + { + $r .= ' '.date('A', $time); + } + + return $r; + } +} + +// ------------------------------------------------------------------------ + +/** + * Convert "human" date to GMT + * + * Reverses the above process + * + * @access public + * @param string format: us or euro + * @return integer + */ +if ( ! function_exists('human_to_unix')) +{ + function human_to_unix($datestr = '') + { + if ($datestr == '') + { + return FALSE; + } + + $datestr = trim($datestr); + $datestr = preg_replace("/\040+/", "\040", $datestr); + + if ( ! preg_match('/^[0-9]{2,4}\-[0-9]{1,2}\-[0-9]{1,2}\s[0-9]{1,2}:[0-9]{1,2}(?::[0-9]{1,2})?(?:\s[AP]M)?$/i', $datestr)) + { + return FALSE; + } + + $split = preg_split("/\040/", $datestr); + + $ex = explode("-", $split['0']); + + $year = (strlen($ex['0']) == 2) ? '20'.$ex['0'] : $ex['0']; + $month = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1']; + $day = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2']; + + $ex = explode(":", $split['1']); + + $hour = (strlen($ex['0']) == 1) ? '0'.$ex['0'] : $ex['0']; + $min = (strlen($ex['1']) == 1) ? '0'.$ex['1'] : $ex['1']; + + if (isset($ex['2']) && preg_match('/[0-9]{1,2}/', $ex['2'])) + { + $sec = (strlen($ex['2']) == 1) ? '0'.$ex['2'] : $ex['2']; + } + else + { + // Unless specified, seconds get set to zero. + $sec = '00'; + } + + if (isset($split['2'])) + { + $ampm = strtolower($split['2']); + + if (substr($ampm, 0, 1) == 'p' AND $hour < 12) + $hour = $hour + 12; + + if (substr($ampm, 0, 1) == 'a' AND $hour == 12) + $hour = '00'; + + if (strlen($hour) == 1) + $hour = '0'.$hour; + } + + return mktime($hour, $min, $sec, $month, $day, $year); + } +} + +// ------------------------------------------------------------------------ + +/** + * Timezone Menu + * + * Generates a drop-down menu of timezones. + * + * @access public + * @param string timezone + * @param string classname + * @param string menu name + * @return string + */ +if ( ! function_exists('timezone_menu')) +{ + function timezone_menu($default = 'UTC', $class = "", $name = 'timezones') + { + $CI =& get_instance(); + $CI->lang->load('date'); + + if ($default == 'GMT') + $default = 'UTC'; + + $menu = '"; + + return $menu; + } +} + +// ------------------------------------------------------------------------ + +/** + * Timezones + * + * Returns an array of timezones. This is a helper function + * for various other ones in this library + * + * @access public + * @param string timezone + * @return string + */ +if ( ! function_exists('timezones')) +{ + function timezones($tz = '') + { + // Note: Don't change the order of these even though + // some items appear to be in the wrong order + + $zones = array( + 'UM12' => -12, + 'UM11' => -11, + 'UM10' => -10, + 'UM95' => -9.5, + 'UM9' => -9, + 'UM8' => -8, + 'UM7' => -7, + 'UM6' => -6, + 'UM5' => -5, + 'UM45' => -4.5, + 'UM4' => -4, + 'UM35' => -3.5, + 'UM3' => -3, + 'UM2' => -2, + 'UM1' => -1, + 'UTC' => 0, + 'UP1' => +1, + 'UP2' => +2, + 'UP3' => +3, + 'UP35' => +3.5, + 'UP4' => +4, + 'UP45' => +4.5, + 'UP5' => +5, + 'UP55' => +5.5, + 'UP575' => +5.75, + 'UP6' => +6, + 'UP65' => +6.5, + 'UP7' => +7, + 'UP8' => +8, + 'UP875' => +8.75, + 'UP9' => +9, + 'UP95' => +9.5, + 'UP10' => +10, + 'UP105' => +10.5, + 'UP11' => +11, + 'UP115' => +11.5, + 'UP12' => +12, + 'UP1275' => +12.75, + 'UP13' => +13, + 'UP14' => +14 + ); + + if ($tz == '') + { + return $zones; + } + + if ($tz == 'GMT') + $tz = 'UTC'; + + return ( ! isset($zones[$tz])) ? 0 : $zones[$tz]; + } +} + + +/* End of file date_helper.php */ +/* Location: ./system/helpers/date_helper.php */ \ No newline at end of file diff --git a/system/helpers/directory_helper.php b/system/helpers/directory_helper.php new file mode 100644 index 0000000..a6fb784 --- /dev/null +++ b/system/helpers/directory_helper.php @@ -0,0 +1,84 @@ + 0) + { + $data =& fread($fp, filesize($file)); + } + + flock($fp, LOCK_UN); + fclose($fp); + + return $data; + } +} + +// ------------------------------------------------------------------------ + +/** + * Write File + * + * Writes data to the file specified in the path. + * Creates a new file if non-existent. + * + * @access public + * @param string path to file + * @param string file data + * @return bool + */ +if ( ! function_exists('write_file')) +{ + function write_file($path, $data, $mode = FOPEN_WRITE_CREATE_DESTRUCTIVE) + { + if ( ! $fp = @fopen($path, $mode)) + { + return FALSE; + } + + flock($fp, LOCK_EX); + fwrite($fp, $data); + flock($fp, LOCK_UN); + fclose($fp); + + return TRUE; + } +} + +// ------------------------------------------------------------------------ + +/** + * Delete Files + * + * Deletes all files contained in the supplied directory path. + * Files must be writable or owned by the system in order to be deleted. + * If the second parameter is set to TRUE, any directories contained + * within the supplied base directory will be nuked as well. + * + * @access public + * @param string path to file + * @param bool whether to delete any directories found in the path + * @return bool + */ +if ( ! function_exists('delete_files')) +{ + function delete_files($path, $del_dir = FALSE, $level = 0) + { + // Trim the trailing slash + $path = rtrim($path, DIRECTORY_SEPARATOR); + + if ( ! $current_dir = @opendir($path)) + return; + + while(FALSE !== ($filename = @readdir($current_dir))) + { + if ($filename != "." and $filename != "..") + { + if (is_dir($path.DIRECTORY_SEPARATOR.$filename)) + { + // Ignore empty folders + if (substr($filename, 0, 1) != '.') + { + delete_files($path.DIRECTORY_SEPARATOR.$filename, $del_dir, $level + 1); + } + } + else + { + unlink($path.DIRECTORY_SEPARATOR.$filename); + } + } + } + @closedir($current_dir); + + if ($del_dir == TRUE AND $level > 0) + { + @rmdir($path); + } + } +} + +// ------------------------------------------------------------------------ + +/** + * Get Filenames + * + * Reads the specified directory and builds an array containing the filenames. + * Any sub-folders contained within the specified path are read as well. + * + * @access public + * @param string path to source + * @param bool whether to include the path as part of the filename + * @param bool internal variable to determine recursion status - do not use in calls + * @return array + */ +if ( ! function_exists('get_filenames')) +{ + function get_filenames($source_dir, $include_path = FALSE, $_recursion = FALSE) + { + static $_filedata = array(); + + if ($fp = @opendir($source_dir)) + { + // reset the array and make sure $source_dir has a trailing slash on the initial call + if ($_recursion === FALSE) + { + $_filedata = array(); + $source_dir = rtrim(realpath($source_dir), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + } + + while (FALSE !== ($file = readdir($fp))) + { + if (@is_dir($source_dir.$file) && strncmp($file, '.', 1) !== 0) + { + get_filenames($source_dir.$file.DIRECTORY_SEPARATOR, $include_path, TRUE); + } + elseif (strncmp($file, '.', 1) !== 0) + { + $_filedata[] = ($include_path == TRUE) ? $source_dir.$file : $file; + } + } + return $_filedata; + } + else + { + return FALSE; + } + } +} + +// -------------------------------------------------------------------- + +/** + * Get Directory File Information + * + * Reads the specified directory and builds an array containing the filenames, + * filesize, dates, and permissions + * + * Any sub-folders contained within the specified path are read as well. + * + * @access public + * @param string path to source + * @param bool whether to include the path as part of the filename + * @param bool internal variable to determine recursion status - do not use in calls + * @return array + */ +if ( ! function_exists('get_dir_file_info')) +{ + function get_dir_file_info($source_dir, $include_path = FALSE, $_recursion = FALSE) + { + static $_filedata = array(); + $relative_path = $source_dir; + + if ($fp = @opendir($source_dir)) + { + // reset the array and make sure $source_dir has a trailing slash on the initial call + if ($_recursion === FALSE) + { + $_filedata = array(); + $source_dir = rtrim(realpath($source_dir), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR; + } + + while (FALSE !== ($file = readdir($fp))) + { + if (@is_dir($source_dir.$file) && strncmp($file, '.', 1) !== 0) + { + get_dir_file_info($source_dir.$file.DIRECTORY_SEPARATOR, $include_path, TRUE); + } + elseif (strncmp($file, '.', 1) !== 0) + { + $_filedata[$file] = get_file_info($source_dir.$file); + $_filedata[$file]['relative_path'] = $relative_path; + } + } + return $_filedata; + } + else + { + return FALSE; + } + } +} + +// -------------------------------------------------------------------- + +/** +* Get File Info +* +* Given a file and path, returns the name, path, size, date modified +* Second parameter allows you to explicitly declare what information you want returned +* Options are: name, server_path, size, date, readable, writable, executable, fileperms +* Returns FALSE if the file cannot be found. +* +* @access public +* @param string path to file +* @param mixed array or comma separated string of information returned +* @return array +*/ +if ( ! function_exists('get_file_info')) +{ + function get_file_info($file, $returned_values = array('name', 'server_path', 'size', 'date')) + { + + if ( ! file_exists($file)) + { + return FALSE; + } + + if (is_string($returned_values)) + { + $returned_values = explode(',', $returned_values); + } + + foreach ($returned_values as $key) + { + switch ($key) + { + case 'name': + $fileinfo['name'] = substr(strrchr($file, DIRECTORY_SEPARATOR), 1); + break; + case 'server_path': + $fileinfo['server_path'] = $file; + break; + case 'size': + $fileinfo['size'] = filesize($file); + break; + case 'date': + $fileinfo['date'] = filectime($file); + break; + case 'readable': + $fileinfo['readable'] = is_readable($file); + break; + case 'writable': + // There are known problems using is_weritable on IIS. It may not be reliable - consider fileperms() + $fileinfo['writable'] = is_writable($file); + break; + case 'executable': + $fileinfo['executable'] = is_executable($file); + break; + case 'fileperms': + $fileinfo['fileperms'] = fileperms($file); + break; + } + } + + return $fileinfo; + } +} + +// -------------------------------------------------------------------- + +/** + * Get Mime by Extension + * + * Translates a file extension into a mime type based on config/mimes.php. + * Returns FALSE if it can't determine the type, or open the mime config file + * + * Note: this is NOT an accurate way of determining file mime types, and is here strictly as a convenience + * It should NOT be trusted, and should certainly NOT be used for security + * + * @access public + * @param string path to file + * @return mixed + */ +if ( ! function_exists('get_mime_by_extension')) +{ + function get_mime_by_extension($file) + { + $extension = substr(strrchr($file, '.'), 1); + + global $mimes; + + if ( ! is_array($mimes)) + { + if ( ! require_once(APPPATH.'config/mimes.php')) + { + return FALSE; + } + } + + if (array_key_exists($extension, $mimes)) + { + if (is_array($mimes[$extension])) + { + // Multiple mime types, just give the first one + return current($mimes[$extension]); + } + else + { + return $mimes[$extension]; + } + } + else + { + return FALSE; + } + } +} + +// -------------------------------------------------------------------- + +/** + * Symbolic Permissions + * + * Takes a numeric value representing a file's permissions and returns + * standard symbolic notation representing that value + * + * @access public + * @param int + * @return string + */ +if ( ! function_exists('symbolic_permissions')) +{ + function symbolic_permissions($perms) + { + if (($perms & 0xC000) == 0xC000) + { + $symbolic = 's'; // Socket + } + elseif (($perms & 0xA000) == 0xA000) + { + $symbolic = 'l'; // Symbolic Link + } + elseif (($perms & 0x8000) == 0x8000) + { + $symbolic = '-'; // Regular + } + elseif (($perms & 0x6000) == 0x6000) + { + $symbolic = 'b'; // Block special + } + elseif (($perms & 0x4000) == 0x4000) + { + $symbolic = 'd'; // Directory + } + elseif (($perms & 0x2000) == 0x2000) + { + $symbolic = 'c'; // Character special + } + elseif (($perms & 0x1000) == 0x1000) + { + $symbolic = 'p'; // FIFO pipe + } + else + { + $symbolic = 'u'; // Unknown + } + + // Owner + $symbolic .= (($perms & 0x0100) ? 'r' : '-'); + $symbolic .= (($perms & 0x0080) ? 'w' : '-'); + $symbolic .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); + + // Group + $symbolic .= (($perms & 0x0020) ? 'r' : '-'); + $symbolic .= (($perms & 0x0010) ? 'w' : '-'); + $symbolic .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); + + // World + $symbolic .= (($perms & 0x0004) ? 'r' : '-'); + $symbolic .= (($perms & 0x0002) ? 'w' : '-'); + $symbolic .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); + + return $symbolic; + } +} + +// -------------------------------------------------------------------- + +/** + * Octal Permissions + * + * Takes a numeric value representing a file's permissions and returns + * a three character string representing the file's octal permissions + * + * @access public + * @param int + * @return string + */ +if ( ! function_exists('octal_permissions')) +{ + function octal_permissions($perms) + { + return substr(sprintf('%o', $perms), -3); + } +} + + +/* End of file file_helper.php */ +/* Location: ./system/helpers/file_helper.php */ \ No newline at end of file diff --git a/system/helpers/form_helper.php b/system/helpers/form_helper.php new file mode 100644 index 0000000..c5e977a --- /dev/null +++ b/system/helpers/form_helper.php @@ -0,0 +1,1025 @@ +config->site_url($action) : $action; + + $form = '
      0) + { + $form .= form_hidden($hidden); + } + + return $form; + } +} + +// ------------------------------------------------------------------------ + +/** + * Form Declaration - Multipart type + * + * Creates the opening portion of the form, but with "multipart/form-data". + * + * @access public + * @param string the URI segments of the form destination + * @param array a key/value pair of attributes + * @param array a key/value pair hidden data + * @return string + */ +if ( ! function_exists('form_open_multipart')) +{ + function form_open_multipart($action, $attributes = array(), $hidden = array()) + { + $attributes['enctype'] = 'multipart/form-data'; + return form_open($action, $attributes, $hidden); + } +} + +// ------------------------------------------------------------------------ + +/** + * Hidden Input Field + * + * Generates hidden fields. You can pass a simple key/value string or an associative + * array with multiple values. + * + * @access public + * @param mixed + * @param string + * @return string + */ +if ( ! function_exists('form_hidden')) +{ + function form_hidden($name, $value = '', $recursing = FALSE) + { + static $form; + + if ($recursing === FALSE) + { + $form = "\n"; + } + + if (is_array($name)) + { + foreach ($name as $key => $val) + { + form_hidden($key, $val, TRUE); + } + return $form; + } + + if ( ! is_array($value)) + { + $form .= ''."\n"; + } + else + { + foreach ($value as $k => $v) + { + $k = (is_int($k)) ? '' : $k; + form_hidden($name.'['.$k.']', $v, TRUE); + } + } + + return $form; + } +} + +// ------------------------------------------------------------------------ + +/** + * Text Input Field + * + * @access public + * @param mixed + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_input')) +{ + function form_input($data = '', $value = '', $extra = '') + { + $defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value); + + return ""; + } +} + +// ------------------------------------------------------------------------ + +/** + * Password Field + * + * Identical to the input function but adds the "password" type + * + * @access public + * @param mixed + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_password')) +{ + function form_password($data = '', $value = '', $extra = '') + { + if ( ! is_array($data)) + { + $data = array('name' => $data); + } + + $data['type'] = 'password'; + return form_input($data, $value, $extra); + } +} + +// ------------------------------------------------------------------------ + +/** + * Upload Field + * + * Identical to the input function but adds the "file" type + * + * @access public + * @param mixed + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_upload')) +{ + function form_upload($data = '', $value = '', $extra = '') + { + if ( ! is_array($data)) + { + $data = array('name' => $data); + } + + $data['type'] = 'file'; + return form_input($data, $value, $extra); + } +} + +// ------------------------------------------------------------------------ + +/** + * Textarea field + * + * @access public + * @param mixed + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_textarea')) +{ + function form_textarea($data = '', $value = '', $extra = '') + { + $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'cols' => '90', 'rows' => '12'); + + if ( ! is_array($data) OR ! isset($data['value'])) + { + $val = $value; + } + else + { + $val = $data['value']; + unset($data['value']); // textareas don't use the value attribute + } + + $name = (is_array($data)) ? $data['name'] : $data; + return ""; + } +} + +// ------------------------------------------------------------------------ + +/** + * Multi-select menu + * + * @access public + * @param string + * @param array + * @param mixed + * @param string + * @return type + */ +if (! function_exists('form_multiselect')) +{ + function form_multiselect($name = '', $options = array(), $selected = array(), $extra = '') + { + if ( ! strpos($extra, 'multiple')) + { + $extra .= ' multiple="multiple"'; + } + + return form_dropdown($name, $options, $selected, $extra); + } +} + +// -------------------------------------------------------------------- + +/** + * Drop-down Menu + * + * @access public + * @param string + * @param array + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_dropdown')) +{ + function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '') + { + if ( ! is_array($selected)) + { + $selected = array($selected); + } + + // If no selected state was submitted we will attempt to set it automatically + if (count($selected) === 0) + { + // If the form name appears in the $_POST array we have a winner! + if (isset($_POST[$name])) + { + $selected = array($_POST[$name]); + } + } + + if ($extra != '') $extra = ' '.$extra; + + $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : ''; + + $form = ''; + + return $form; + } +} + +// ------------------------------------------------------------------------ + +/** + * Checkbox Field + * + * @access public + * @param mixed + * @param string + * @param bool + * @param string + * @return string + */ +if ( ! function_exists('form_checkbox')) +{ + function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '') + { + $defaults = array('type' => 'checkbox', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value); + + if (is_array($data) AND array_key_exists('checked', $data)) + { + $checked = $data['checked']; + + if ($checked == FALSE) + { + unset($data['checked']); + } + else + { + $data['checked'] = 'checked'; + } + } + + if ($checked == TRUE) + { + $defaults['checked'] = 'checked'; + } + else + { + unset($defaults['checked']); + } + + return ""; + } +} + +// ------------------------------------------------------------------------ + +/** + * Radio Button + * + * @access public + * @param mixed + * @param string + * @param bool + * @param string + * @return string + */ +if ( ! function_exists('form_radio')) +{ + function form_radio($data = '', $value = '', $checked = FALSE, $extra = '') + { + if ( ! is_array($data)) + { + $data = array('name' => $data); + } + + $data['type'] = 'radio'; + return form_checkbox($data, $value, $checked, $extra); + } +} + +// ------------------------------------------------------------------------ + +/** + * Submit Button + * + * @access public + * @param mixed + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_submit')) +{ + function form_submit($data = '', $value = '', $extra = '') + { + $defaults = array('type' => 'submit', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value); + + return ""; + } +} + +// ------------------------------------------------------------------------ + +/** + * Reset Button + * + * @access public + * @param mixed + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_reset')) +{ + function form_reset($data = '', $value = '', $extra = '') + { + $defaults = array('type' => 'reset', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value); + + return ""; + } +} + +// ------------------------------------------------------------------------ + +/** + * Form Button + * + * @access public + * @param mixed + * @param string + * @param string + * @return string + */ +if ( ! function_exists('form_button')) +{ + function form_button($data = '', $content = '', $extra = '') + { + $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'type' => 'button'); + + if ( is_array($data) AND isset($data['content'])) + { + $content = $data['content']; + unset($data['content']); // content is not an attribute + } + + return ""; + } +} + +// ------------------------------------------------------------------------ + +/** + * Form Label Tag + * + * @access public + * @param string The text to appear onscreen + * @param string The id the label applies to + * @param string Additional attributes + * @return string + */ +if ( ! function_exists('form_label')) +{ + function form_label($label_text = '', $id = '', $attributes = array()) + { + + $label = ' 0) + { + foreach ($attributes as $key => $val) + { + $label .= ' '.$key.'="'.$val.'"'; + } + } + + $label .= ">$label_text"; + + return $label; + } +} + +// ------------------------------------------------------------------------ +/** + * Fieldset Tag + * + * Used to produce
      text. To close fieldset + * use form_fieldset_close() + * + * @access public + * @param string The legend text + * @param string Additional attributes + * @return string + */ +if ( ! function_exists('form_fieldset')) +{ + function form_fieldset($legend_text = '', $attributes = array()) + { + $fieldset = "".$extra; + } +} + +// ------------------------------------------------------------------------ + +/** + * Form Close Tag + * + * @access public + * @param string + * @return string + */ +if ( ! function_exists('form_close')) +{ + function form_close($extra = '') + { + return "".$extra; + } +} + +// ------------------------------------------------------------------------ + +/** + * Form Prep + * + * Formats text so that it can be safely placed in a form field in the event it has HTML tags. + * + * @access public + * @param string + * @return string + */ +if ( ! function_exists('form_prep')) +{ + function form_prep($str = '', $field_name = '') + { + static $prepped_fields = array(); + + // if the field name is an array we do this recursively + if (is_array($str)) + { + foreach ($str as $key => $val) + { + $str[$key] = form_prep($val); + } + + return $str; + } + + if ($str === '') + { + return ''; + } + + // we've already prepped a field with this name + // @todo need to figure out a way to namespace this so + // that we know the *exact* field and not just one with + // the same name + if (isset($prepped_fields[$field_name])) + { + return $str; + } + + $str = htmlspecialchars($str); + + // In case htmlspecialchars misses these. + $str = str_replace(array("'", '"'), array("'", """), $str); + + if ($field_name != '') + { + $prepped_fields[$field_name] = $str; + } + + return $str; + } +} + +// ------------------------------------------------------------------------ + +/** + * Form Value + * + * Grabs a value from the POST array for the specified field so you can + * re-populate an input field or textarea. If Form Validation + * is active it retrieves the info from the validation class + * + * @access public + * @param string + * @return mixed + */ +if ( ! function_exists('set_value')) +{ + function set_value($field = '', $default = '') + { + if (FALSE === ($OBJ =& _get_validation_object())) + { + if ( ! isset($_POST[$field])) + { + return $default; + } + + return form_prep($_POST[$field], $field); + } + + return form_prep($OBJ->set_value($field, $default), $field); + } +} + +// ------------------------------------------------------------------------ + +/** + * Set Select + * + * Let's you set the selected value of a '; + + +Then, on the page that accepts the submission you'll have something like this: + + // First, delete old captchas + $expiration = time()-7200; // Two hour limit + $DB->query("DELETE FROM captcha WHERE captcha_time < ".$expiration); + + // Then see if a captcha exists: + $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND date > ?"; + $binds = array($_POST['captcha'], $this->input->ip_address(), $expiration); + $query = $this->db->query($sql, $binds); + $row = $query->row(); + + if ($row->count == 0) + { + echo "You must submit the word that appears in the image"; + } + +*/ + + + +/** +|========================================================== +| Create Captcha +|========================================================== +| +*/ +function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '') +{ + $defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200); + + foreach ($defaults as $key => $val) + { + if ( ! is_array($data)) + { + if ( ! isset($$key) OR $$key == '') + { + $$key = $val; + } + } + else + { + $$key = ( ! isset($data[$key])) ? $val : $data[$key]; + } + } + + if ($img_path == '' OR $img_url == '') + { + return FALSE; + } + + if ( ! @is_dir($img_path)) + { + return FALSE; + } + + if ( ! is_really_writable($img_path)) + { + return FALSE; + } + + if ( ! extension_loaded('gd')) + { + return FALSE; + } + + // ----------------------------------- + // Remove old images + // ----------------------------------- + + list($usec, $sec) = explode(" ", microtime()); + $now = ((float)$usec + (float)$sec); + + $current_dir = @opendir($img_path); + + while($filename = @readdir($current_dir)) + { + if ($filename != "." and $filename != ".." and $filename != "index.html") + { + $name = str_replace(".jpg", "", $filename); + + if (($name + $expiration) < $now) + { + @unlink($img_path.$filename); + } + } + } + + @closedir($current_dir); + + // ----------------------------------- + // Do we have a "word" yet? + // ----------------------------------- + + if ($word == '') + { + $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + + $str = ''; + for ($i = 0; $i < 8; $i++) + { + $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1); + } + + $word = $str; + } + + // ----------------------------------- + // Determine angle and position + // ----------------------------------- + + $length = strlen($word); + $angle = ($length >= 6) ? rand(-($length-6), ($length-6)) : 0; + $x_axis = rand(6, (360/$length)-16); + $y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height); + + // ----------------------------------- + // Create image + // ----------------------------------- + + // PHP.net recommends imagecreatetruecolor(), but it isn't always available + if (function_exists('imagecreatetruecolor')) + { + $im = imagecreatetruecolor($img_width, $img_height); + } + else + { + $im = imagecreate($img_width, $img_height); + } + + // ----------------------------------- + // Assign colors + // ----------------------------------- + + $bg_color = imagecolorallocate ($im, 255, 255, 255); + $border_color = imagecolorallocate ($im, 153, 102, 102); + $text_color = imagecolorallocate ($im, 204, 153, 153); + $grid_color = imagecolorallocate($im, 255, 182, 182); + $shadow_color = imagecolorallocate($im, 255, 240, 240); + + // ----------------------------------- + // Create the rectangle + // ----------------------------------- + + ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color); + + // ----------------------------------- + // Create the spiral pattern + // ----------------------------------- + + $theta = 1; + $thetac = 7; + $radius = 16; + $circles = 20; + $points = 32; + + for ($i = 0; $i < ($circles * $points) - 1; $i++) + { + $theta = $theta + $thetac; + $rad = $radius * ($i / $points ); + $x = ($rad * cos($theta)) + $x_axis; + $y = ($rad * sin($theta)) + $y_axis; + $theta = $theta + $thetac; + $rad1 = $radius * (($i + 1) / $points); + $x1 = ($rad1 * cos($theta)) + $x_axis; + $y1 = ($rad1 * sin($theta )) + $y_axis; + imageline($im, $x, $y, $x1, $y1, $grid_color); + $theta = $theta - $thetac; + } + + // ----------------------------------- + // Write the text + // ----------------------------------- + + $use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE; + + if ($use_font == FALSE) + { + $font_size = 5; + $x = rand(0, $img_width/($length/3)); + $y = 0; + } + else + { + $font_size = 16; + $x = rand(0, $img_width/($length/1.5)); + $y = $font_size+2; + } + + for ($i = 0; $i < strlen($word); $i++) + { + if ($use_font == FALSE) + { + $y = rand(0 , $img_height/2); + imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color); + $x += ($font_size*2); + } + else + { + $y = rand($img_height/2, $img_height-3); + imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1)); + $x += $font_size; + } + } + + + // ----------------------------------- + // Create the border + // ----------------------------------- + + imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color); + + // ----------------------------------- + // Generate the image + // ----------------------------------- + + $img_name = $now.'.jpg'; + + ImageJPEG($im, $img_path.$img_name); + + $img = "\""; + + ImageDestroy($im); + + return array('word' => $word, 'time' => $now, 'image' => $img); +} + + +/* End of file captcha_pi.php */ +/* Location: ./system/plugins/captcha_pi.php */ \ No newline at end of file diff --git a/system/plugins/index.html b/system/plugins/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/plugins/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/plugins/js_calendar_pi.php b/system/plugins/js_calendar_pi.php new file mode 100644 index 0000000..19d0568 --- /dev/null +++ b/system/plugins/js_calendar_pi.php @@ -0,0 +1,629 @@ +load->plugin('js_calendar'); + +Once loaded you'll add the calendar script to the of your page like this: + + + +The above function will be passed the name of your form. + +Then to show the actual calendar you'll do this: + + +
      + +

      Today

      +
      + + +Note: The first parameter is the name of the field containing your date, the second parameter contains the "now" time, +and the third tells the calendar whether to highlight the current day or not. + +Lastly, you'll need some CSS for your calendar: + +.calendar { + border: 1px #6975A3 solid; + background-color: transparent; +} +.calheading { + background-color: #7C8BC0; + color: #fff; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 11px; + font-weight: bold; + text-align: center; +} +.calnavleft { + background-color: #7C8BC0; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 10px; + font-weight: bold; + color: #fff; + padding: 4px; + cursor: pointer; +} +.calnavright { + background-color: #7C8BC0; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 10px; + font-weight: bold; + color: #fff; + text-align: right; + padding: 4px; + cursor: pointer; +} +.caldayheading { + background-color: #000; + color: #fff; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 10px; + text-align: center; + padding: 6px 2px 6px 2px; +} +.caldaycells{ + color: #000; + background-color: #D1D7E6; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 11px; + text-align: center; + padding: 4px; + border: 1px #E0E5F1 solid; + cursor: pointer; +} +.caldaycellhover{ + color: #fff; + background-color: #B3BCD4; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 11px; + text-align: center; + padding: 4px; + border: 1px #B3BCD4 solid; + cursor: pointer; +} +.caldayselected{ + background-color: #737FAC; + color: #fff; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 11px; + font-weight: bold; + text-align: center; + border: 1px #566188 solid; + padding: 3px; + cursor: pointer; +} +.calblanktop { + background-color: #fff; + padding: 4px; +} +.calblankbot { + background-color: #fff; + padding: 4px; +} + + +*/ + +function js_calendar_script($form_name = 'entryform') +{ +$CI =& get_instance(); +$CI->load->language('calendar'); +ob_start(); +?> + + + var '.$field_id.' = new calendar("'.$field_id.'", '.$time.', '.(($highlight == TRUE) ? 'true' : 'false').'); + document.write('.$field_id.'.write()); + '; +} + + +/* End of file js_calendar_pi.php */ +/* Location: ./system/plugins/js_calendar_pi.php */ \ No newline at end of file diff --git a/system/scaffolding/Scaffolding.php b/system/scaffolding/Scaffolding.php new file mode 100644 index 0000000..fb2ee5d --- /dev/null +++ b/system/scaffolding/Scaffolding.php @@ -0,0 +1,291 @@ +CI =& get_instance(); + + $this->CI->load->database("", FALSE, TRUE); + $this->CI->load->library('pagination'); + + // Turn off caching + $this->CI->db->cache_off(); + + /** + * Set the current table name + * This is done when initializing scaffolding: + * $this->load->scaffolding('table_name') + * + */ + $this->current_table = $db_table; + + /** + * Set the path to the "view" files + * We'll manually override the "view" path so that + * the load->view function knows where to look. + */ + + $this->CI->load->_ci_view_path = BASEPATH.'scaffolding/views/'; + + // Set the base URL + $this->base_url = $this->CI->config->site_url().'/'.$this->CI->uri->segment(1).$this->CI->uri->slash_segment(2, 'both'); + $this->base_uri = $this->CI->uri->segment(1).$this->CI->uri->slash_segment(2, 'leading'); + + // Set a few globals + $data = array( + 'image_url' => $this->CI->config->system_url().'scaffolding/images/', + 'base_uri' => $this->base_uri, + 'base_url' => $this->base_url, + 'title' => $this->current_table + ); + + $this->CI->load->vars($data); + + // Load the language file and create variables + $this->lang = $this->CI->load->scaffold_language('scaffolding', '', TRUE); + $this->CI->load->vars($this->lang); + + // Load the helper files we plan to use + $this->CI->load->helper(array('url', 'form')); + + + log_message('debug', 'Scaffolding Class Initialized'); + } + + // -------------------------------------------------------------------- + + /** + * "Add" Page + * + * Shows a form representing the currently selected DB + * so that data can be inserted + * + * @access public + * @return string the HTML "add" page + */ + function add() + { + $data = array( + 'title' => ( ! isset($this->lang['scaff_add'])) ? 'Add Data' : $this->lang['scaff_add'], + 'fields' => $this->CI->db->field_data($this->current_table), + 'action' => $this->base_uri.'/insert' + ); + + $this->CI->load->view('add', $data); + } + + // -------------------------------------------------------------------- + + /** + * Insert the data + * + * @access public + * @return void redirects to the view page + */ + function insert() + { + if ($this->CI->db->insert($this->current_table, $_POST) === FALSE) + { + $this->add(); + } + else + { + redirect($this->base_uri.'/view/'); + } + } + + // -------------------------------------------------------------------- + + /** + * "View" Page + * + * Shows a table containing the data in the currently + * selected DB + * + * @access public + * @return string the HTML "view" page + */ + function view() + { + // Fetch the total number of DB rows + $total_rows = $this->CI->db->count_all($this->current_table); + + if ($total_rows < 1) + { + return $this->CI->load->view('no_data'); + } + + // Set the query limit/offset + $per_page = 20; + $offset = $this->CI->uri->segment(4, 0); + + // Run the query + $query = $this->CI->db->get($this->current_table, $per_page, $offset); + + // Now let's get the field names + $fields = $this->CI->db->list_fields($this->current_table); + + // We assume that the column in the first position is the primary field. + $primary = current($fields); + + // Pagination! + $this->CI->pagination->initialize( + array( + 'base_url' => $this->base_url.'/view', + 'total_rows' => $total_rows, + 'per_page' => $per_page, + 'uri_segment' => 4, + 'full_tag_open' => '

      ', + 'full_tag_close' => '

      ' + ) + ); + + $data = array( + 'title' => ( ! isset($this->lang['scaff_view'])) ? 'View Data' : $this->lang['scaff_view'], + 'query' => $query, + 'fields' => $fields, + 'primary' => $primary, + 'paginate' => $this->CI->pagination->create_links() + ); + + $this->CI->load->view('view', $data); + } + + // -------------------------------------------------------------------- + + /** + * "Edit" Page + * + * Shows a form representing the currently selected DB + * so that data can be edited + * + * @access public + * @return string the HTML "edit" page + */ + function edit() + { + if (FALSE === ($id = $this->CI->uri->segment(4))) + { + return $this->view(); + } + + // Fetch the primary field name + $primary = $this->CI->db->primary($this->current_table); + + // Run the query + $query = $this->CI->db->get_where($this->current_table, array($primary => $id)); + + $data = array( + 'title' => ( ! isset($this->lang['scaff_edit'])) ? 'Edit Data' : $this->lang['scaff_edit'], + 'fields' => $query->field_data(), + 'query' => $query->row(), + 'action' => $this->base_uri.'/update/'.$this->CI->uri->segment(4) + ); + + $this->CI->load->view('edit', $data); + } + + // -------------------------------------------------------------------- + + /** + * Update + * + * @access public + * @return void redirects to the view page + */ + function update() + { + // Fetch the primary key + $primary = $this->CI->db->primary($this->current_table); + + // Now do the query + $this->CI->db->update($this->current_table, $_POST, array($primary => $this->CI->uri->segment(4))); + + redirect($this->base_uri.'/view/'); + } + + // -------------------------------------------------------------------- + + /** + * Delete Confirmation + * + * @access public + * @return string the HTML "delete confirm" page + */ + function delete() + { + if ( ! isset($this->lang['scaff_del_confirm'])) + { + $message = 'Are you sure you want to delete the following row: '.$this->CI->uri->segment(4); + } + else + { + $message = $this->lang['scaff_del_confirm'].' '.$this->CI->uri->segment(4); + } + + $data = array( + 'title' => ( ! isset($this->lang['scaff_delete'])) ? 'Delete Data' : $this->lang['scaff_delete'], + 'message' => $message, + 'no' => anchor(array($this->base_uri, 'view'), ( ! isset($this->lang['scaff_no'])) ? 'No' : $this->lang['scaff_no']), + 'yes' => anchor(array($this->base_uri, 'do_delete', $this->CI->uri->segment(4)), ( ! isset($this->lang['scaff_yes'])) ? 'Yes' : $this->lang['scaff_yes']) + ); + + $this->CI->load->view('delete', $data); + } + + // -------------------------------------------------------------------- + + /** + * Delete + * + * @access public + * @return void redirects to the view page + */ + function do_delete() + { + // Fetch the primary key + $primary = $this->CI->db->primary($this->current_table); + + // Now do the query + $this->CI->db->where($primary, $this->CI->uri->segment(4)); + $this->CI->db->delete($this->current_table); + + header("Refresh:0;url=".site_url(array($this->base_uri, 'view'))); + exit; + } + +} + +/* End of file Scaffolding.php */ +/* Location: ./system/scaffolding/Scaffolding.php */ \ No newline at end of file diff --git a/system/scaffolding/images/background.jpg b/system/scaffolding/images/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d5bdcea1d5b12024146ac223011123defe25635 GIT binary patch literal 410 zcmex=C5UDGKfoZ!!BEV=#mp$kz$D1XEXer(2ty*! z+02YUS0VrtD?1k>st{080OUV@genGxz>7?5j0-mkiCh&6o5sHUdIYDWAcnU8w-|VU z<}(R03o_UTDGVclFtr^J1GVtmh-M!uS+`)H81DN0} iwv|qaLOQIREgl>6ml<_DjNt59WD&;F0MaS{|0VzeUqk@_ literal 0 HcmV?d00001 diff --git a/system/scaffolding/images/index.html b/system/scaffolding/images/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/scaffolding/images/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/scaffolding/images/logo.jpg b/system/scaffolding/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6cc9a76db0b1174c74379f7f20df290e4ec7f86 GIT binary patch literal 4518 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 fMjns;GH;Ptst=l@%I0apKb7 + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/scaffolding/views/add.php b/system/scaffolding/views/add.php new file mode 100644 index 0000000..cbb12f6 --- /dev/null +++ b/system/scaffolding/views/add.php @@ -0,0 +1,32 @@ +load->view('header'); ?> + +

      + + + + + + + +primary_key == 1) continue; ?> + + + + + type == 'blob'): ?> + + + + + + + +
      name; echo ' '.$field->default; ?>
      + + + + + +load->view('footer'); +/* End of file add.php */ +/* Location: ./system/scaffolding/views/add.php */ diff --git a/system/scaffolding/views/delete.php b/system/scaffolding/views/delete.php new file mode 100644 index 0000000..d195421 --- /dev/null +++ b/system/scaffolding/views/delete.php @@ -0,0 +1,9 @@ +load->view('header'); ?> + +

      + +

        |   + +load->view('footer'); +/* End of file delete.php */ +/* Location: ./system/scaffolding/views/delete.php */ diff --git a/system/scaffolding/views/edit.php b/system/scaffolding/views/edit.php new file mode 100644 index 0000000..fe553e5 --- /dev/null +++ b/system/scaffolding/views/edit.php @@ -0,0 +1,33 @@ +load->view('header'); ?> + + +

      + + + + + + + +primary_key == 1) continue; ?> + + + + + type == 'blob'): ?> + + + + + + + +
      name; ?>
      + + + + + +load->view('footer'); +/* End of file edit.php */ +/* Location: ./system/scaffolding/views/edit.php */ \ No newline at end of file diff --git a/system/scaffolding/views/footer.php b/system/scaffolding/views/footer.php new file mode 100644 index 0000000..0e71401 --- /dev/null +++ b/system/scaffolding/views/footer.php @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/system/scaffolding/views/header.php b/system/scaffolding/views/header.php new file mode 100644 index 0000000..50f234a --- /dev/null +++ b/system/scaffolding/views/header.php @@ -0,0 +1,29 @@ + + + + +<?php echo $title; ?> + + + + + + + + + + + + +
      +
      \ No newline at end of file diff --git a/system/scaffolding/views/index.html b/system/scaffolding/views/index.html new file mode 100644 index 0000000..c942a79 --- /dev/null +++ b/system/scaffolding/views/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

      Directory access is forbidden.

      + + + \ No newline at end of file diff --git a/system/scaffolding/views/no_data.php b/system/scaffolding/views/no_data.php new file mode 100644 index 0000000..bc81e74 --- /dev/null +++ b/system/scaffolding/views/no_data.php @@ -0,0 +1,8 @@ +load->view('header'); ?> + +

      +

      + +load->view('footer'); +/* End of file no_data.php */ +/* Location: ./system/scaffolding/views/no_data.php */ \ No newline at end of file diff --git a/system/scaffolding/views/stylesheet.css b/system/scaffolding/views/stylesheet.css new file mode 100644 index 0000000..3f487dd --- /dev/null +++ b/system/scaffolding/views/stylesheet.css @@ -0,0 +1,143 @@ +body { + margin: 0; + padding: 0; + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 11px; + color: #4F5155; + background: #fff url(background.jpg) repeat-x left top; +} + +a { + color: #8B0D00; + background-color: transparent; + text-decoration: none; + font-weight: bold; +} + +a:visited { + color: #8B0D00; + background-color: transparent; + text-decoration: none; +} + +a:hover { + color: #000; + text-decoration: none; + background-color: transparent; +} + + +#header { + margin: 0; + padding: 0; +} + +#header_left { + background-color: transparent; + float: left; + padding: 21px 0 0 32px; + margin: 0 +} + +#header_right { + background-color: transparent; + float: right; + text-align: right; + padding: 35px 50px 20px 0; + margin: 0 +} + +#footer { + margin: 20px 0 15px 0; + padding: 0; +} + +#footer p { + font-size: 10px; + color: #999; + text-align: center; +} + +#outer { + margin: 30px 40px 0 40px; +} + +img { + padding:0; + border: 0; + margin: 0; +} + +.nopad { + padding:0; + border: 0; + margin: 0; +} + +table { + background-color: #efefef; +} + +th { + background-color: #eee; + font-weight: bold; + padding: 6px; + text-align: left; +} + +td { + background-color: #fff; + padding: 6px; +} + + +form { + margin: 0; + padding: 0; +} + +.input { + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 11px; + width: 600px; + color: #333; + border: 1px solid #B3B4BD; + font-size: 11px; + height: 2em; + padding: 0; + margin: 0; +} + +.textarea { + font-family: Lucida Grande, Verdana, Geneva, Sans-serif; + font-size: 12px; + width: 600px; + color: #333; + border: 1px solid #B3B4BD; + padding: 0; + margin: 0; +} + +.select { + background-color: #fff; + font-size: 11px; + font-weight: normal; + color: #333; + padding: 0; + margin: 0 0 3px 0; +} + +.checkbox { + background-color: transparent; + padding: 0; + border: 0; +} + +.submit { + background-color: #8B0D00; + color: #FFF; + font-weight: normal; + border: 1px solid #000; + margin: 6px 0 0 0; + padding: 1px 5px 1px 5px; +} diff --git a/system/scaffolding/views/view.php b/system/scaffolding/views/view.php new file mode 100644 index 0000000..a81241d --- /dev/null +++ b/system/scaffolding/views/view.php @@ -0,0 +1,27 @@ +load->view('header'); ?> + + + + + + + + + + +result() as $row): ?> + + + + + + + + +
      EditDelete
       $primary), $scaff_edit); ?> $primary), $scaff_delete); ?>$field);?>
      + + + +load->view('footer'); +/* End of file view.php */ +/* Location: ./system/scaffolding/views/view.php */ \ No newline at end of file diff --git a/tiny_mce/jquery.tinymce.js b/tiny_mce/jquery.tinymce.js new file mode 100644 index 0000000..4866c2a --- /dev/null +++ b/tiny_mce/jquery.tinymce.js @@ -0,0 +1 @@ +(function(b){var e,d,a=[],c=window;b.fn.tinymce=function(j){var p=this,g,k,h,m,i,l="",n="";if(!p.length){return p}if(!j){return tinyMCE.get(p[0].id)}function o(){var r=[],q=0;if(f){f();f=null}p.each(function(t,u){var s,w=u.id,v=j.oninit;if(!w){u.id=w=tinymce.DOM.uniqueId()}s=new tinymce.Editor(w,j);r.push(s);if(v){s.onInit.add(function(){var x,y=v;if(++q==r.length){if(tinymce.is(y,"string")){x=(y.indexOf(".")===-1)?null:tinymce.resolve(y.replace(/\.\w+$/,""));y=tinymce.resolve(y)}y.apply(x||tinymce,r)}})}});b.each(r,function(t,s){s.render()})}if(!c.tinymce&&!d&&(g=j.script_url)){d=1;h=g.substring(0,g.lastIndexOf("/"));if(/_(src|dev)\.js/g.test(g)){n="_src"}m=g.lastIndexOf("?");if(m!=-1){l=g.substring(m+1)}c.tinyMCEPreInit=c.tinyMCEPreInit||{base:h,suffix:n,query:l};if(g.indexOf("gzip")!=-1){i=j.language||"en";g=g+(/\?/.test(g)?"&":"?")+"js=true&core=true&suffix="+escape(n)+"&themes="+escape(j.theme)+"&plugins="+escape(j.plugins)+"&languages="+i;if(!c.tinyMCE_GZ){tinyMCE_GZ={start:function(){tinymce.suffix=n;function q(r){tinymce.ScriptLoader.markDone(tinyMCE.baseURI.toAbsolute(r))}q("langs/"+i+".js");q("themes/"+j.theme+"/editor_template"+n+".js");q("themes/"+j.theme+"/langs/"+i+".js");b.each(j.plugins.split(","),function(s,r){if(r){q("plugins/"+r+"/editor_plugin"+n+".js");q("plugins/"+r+"/langs/"+i+".js")}})},end:function(){}}}}b.ajax({type:"GET",url:g,dataType:"script",cache:true,success:function(){tinymce.dom.Event.domLoaded=1;d=2;if(j.script_loaded){j.script_loaded()}o();b.each(a,function(q,r){r()})}})}else{if(d===1){a.push(o)}else{o()}}return p};b.extend(b.expr[":"],{tinymce:function(g){return g.id&&!!tinyMCE.get(g.id)}});function f(){function i(l){if(l==="remove"){this.each(function(n,o){var m=h(o);if(m){m.remove()}})}this.find("span.mceEditor,div.mceEditor").each(function(n,o){var m=tinyMCE.get(o.id.replace(/_parent$/,""));if(m){m.remove()}})}function k(n){var m=this,l;if(n!==e){i.call(m);m.each(function(p,q){var o;if(o=tinyMCE.get(q.id)){o.setContent(n)}})}else{if(m.length>0){if(l=tinyMCE.get(m[0].id)){return l.getContent()}}}}function h(m){var l=null;(m)&&(m.id)&&(c.tinymce)&&(l=tinyMCE.get(m.id));return l}function g(l){return !!((l)&&(l.length)&&(c.tinymce)&&(l.is(":tinymce")))}var j={};b.each(["text","html","val"],function(n,l){var o=j[l]=b.fn[l],m=(l==="text");b.fn[l]=function(s){var p=this;if(!g(p)){return o.apply(p,arguments)}if(s!==e){k.call(p.filter(":tinymce"),s);o.apply(p.not(":tinymce"),arguments);return p}else{var r="";var q=arguments;(m?p:p.eq(0)).each(function(u,v){var t=h(v);r+=t?(m?t.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):t.getContent()):o.apply(b(v),q)});return r}}});b.each(["append","prepend"],function(n,m){var o=j[m]=b.fn[m],l=(m==="prepend");b.fn[m]=function(q){var p=this;if(!g(p)){return o.apply(p,arguments)}if(q!==e){p.filter(":tinymce").each(function(s,t){var r=h(t);r&&r.setContent(l?q+r.getContent():r.getContent()+q)});o.apply(p.not(":tinymce"),arguments);return p}}});b.each(["remove","replaceWith","replaceAll","empty"],function(m,l){var n=j[l]=b.fn[l];b.fn[l]=function(){i.call(this,l);return n.apply(this,arguments)}});j.attr=b.fn.attr;b.fn.attr=function(n,q,o){var m=this;if((!n)||(n!=="value")||(!g(m))){return j.attr.call(m,n,q,o)}if(q!==e){k.call(m.filter(":tinymce"),q);j.attr.call(m.not(":tinymce"),n,q,o);return m}else{var p=m[0],l=h(p);return l?l.getContent():j.attr.call(b(p),n,q,o)}}}})(jQuery); \ No newline at end of file diff --git a/tiny_mce/langs/en.js b/tiny_mce/langs/en.js new file mode 100644 index 0000000..ea4a1b0 --- /dev/null +++ b/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/tiny_mce/license.txt b/tiny_mce/license.txt new file mode 100644 index 0000000..60d6d4c --- /dev/null +++ b/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/tiny_mce/plugins/advhr/css/advhr.css b/tiny_mce/plugins/advhr/css/advhr.css new file mode 100644 index 0000000..0e22834 --- /dev/null +++ b/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/tiny_mce/plugins/advhr/editor_plugin.js b/tiny_mce/plugins/advhr/editor_plugin.js new file mode 100644 index 0000000..4d3b062 --- /dev/null +++ b/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/tiny_mce/plugins/advhr/editor_plugin_src.js b/tiny_mce/plugins/advhr/editor_plugin_src.js new file mode 100644 index 0000000..0c652d3 --- /dev/null +++ b/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/tiny_mce/plugins/advhr/js/rule.js b/tiny_mce/plugins/advhr/js/rule.js new file mode 100644 index 0000000..b6cbd66 --- /dev/null +++ b/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/tiny_mce/plugins/advimage/css/advimage.css b/tiny_mce/plugins/advimage/css/advimage.css new file mode 100644 index 0000000..0a6251a --- /dev/null +++ b/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/tiny_mce/plugins/advimage/editor_plugin.js b/tiny_mce/plugins/advimage/editor_plugin.js new file mode 100644 index 0000000..4c7a9c3 --- /dev/null +++ b/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/tiny_mce/plugins/advimage/editor_plugin_src.js b/tiny_mce/plugins/advimage/editor_plugin_src.js new file mode 100644 index 0000000..2625dd2 --- /dev/null +++ b/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/tiny_mce/plugins/advimage/image.htm b/tiny_mce/plugins/advimage/image.htm new file mode 100644 index 0000000..79cff3f --- /dev/null +++ b/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/tiny_mce/plugins/advimage/img/sample.gif b/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/tiny_mce/plugins/advimage/langs/en_dlg.js b/tiny_mce/plugins/advimage/langs/en_dlg.js new file mode 100644 index 0000000..f493d19 --- /dev/null +++ b/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/tiny_mce/plugins/advlink/css/advlink.css b/tiny_mce/plugins/advlink/css/advlink.css new file mode 100644 index 0000000..1436431 --- /dev/null +++ b/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/tiny_mce/plugins/advlink/editor_plugin.js b/tiny_mce/plugins/advlink/editor_plugin.js new file mode 100644 index 0000000..983fe5a --- /dev/null +++ b/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/tiny_mce/plugins/advlink/editor_plugin_src.js b/tiny_mce/plugins/advlink/editor_plugin_src.js new file mode 100644 index 0000000..14e46a7 --- /dev/null +++ b/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/tiny_mce/plugins/advlink/js/advlink.js b/tiny_mce/plugins/advlink/js/advlink.js new file mode 100644 index 0000000..b78e82f --- /dev/null +++ b/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/tiny_mce/plugins/advlink/langs/en_dlg.js b/tiny_mce/plugins/advlink/langs/en_dlg.js new file mode 100644 index 0000000..c71ffbd --- /dev/null +++ b/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/tiny_mce/plugins/advlink/link.htm b/tiny_mce/plugins/advlink/link.htm new file mode 100644 index 0000000..876669c --- /dev/null +++ b/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/tiny_mce/plugins/advlist/editor_plugin.js b/tiny_mce/plugins/advlist/editor_plugin.js new file mode 100644 index 0000000..02d1697 --- /dev/null +++ b/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/tiny_mce/plugins/advlist/editor_plugin_src.js b/tiny_mce/plugins/advlist/editor_plugin_src.js new file mode 100644 index 0000000..a61887a --- /dev/null +++ b/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/tiny_mce/plugins/autoresize/editor_plugin.js b/tiny_mce/plugins/autoresize/editor_plugin.js new file mode 100644 index 0000000..1676b15 --- /dev/null +++ b/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/tiny_mce/plugins/autoresize/editor_plugin_src.js b/tiny_mce/plugins/autoresize/editor_plugin_src.js new file mode 100644 index 0000000..c260b7a --- /dev/null +++ b/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/tiny_mce/plugins/autosave/editor_plugin.js b/tiny_mce/plugins/autosave/editor_plugin.js new file mode 100644 index 0000000..6e48540 --- /dev/null +++ b/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/tiny_mce/plugins/autosave/langs/en.js b/tiny_mce/plugins/autosave/langs/en.js new file mode 100644 index 0000000..fce6bd3 --- /dev/null +++ b/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/tiny_mce/plugins/bbcode/editor_plugin.js b/tiny_mce/plugins/bbcode/editor_plugin.js new file mode 100644 index 0000000..930fdff --- /dev/null +++ b/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/tiny_mce/plugins/bbcode/editor_plugin_src.js b/tiny_mce/plugins/bbcode/editor_plugin_src.js new file mode 100644 index 0000000..5586637 --- /dev/null +++ b/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/tiny_mce/plugins/contextmenu/editor_plugin.js b/tiny_mce/plugins/contextmenu/editor_plugin.js new file mode 100644 index 0000000..9749e51 --- /dev/null +++ b/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/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/tiny_mce/plugins/contextmenu/editor_plugin_src.js new file mode 100644 index 0000000..13813a6 --- /dev/null +++ b/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/tiny_mce/plugins/directionality/editor_plugin.js b/tiny_mce/plugins/directionality/editor_plugin.js new file mode 100644 index 0000000..bce8e73 --- /dev/null +++ b/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/tiny_mce/plugins/directionality/editor_plugin_src.js b/tiny_mce/plugins/directionality/editor_plugin_src.js new file mode 100644 index 0000000..4444959 --- /dev/null +++ b/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/tiny_mce/plugins/emotions/editor_plugin.js b/tiny_mce/plugins/emotions/editor_plugin.js new file mode 100644 index 0000000..dbdd8ff --- /dev/null +++ b/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/tiny_mce/plugins/emotions/editor_plugin_src.js b/tiny_mce/plugins/emotions/editor_plugin_src.js new file mode 100644 index 0000000..71d5416 --- /dev/null +++ b/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/tiny_mce/plugins/emotions/emotions.htm b/tiny_mce/plugins/emotions/emotions.htm new file mode 100644 index 0000000..55a1d72 --- /dev/null +++ b/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/tiny_mce/plugins/emotions/img/smiley-cool.gif b/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/tiny_mce/plugins/emotions/img/smiley-cry.gif b/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/tiny_mce/plugins/emotions/img/smiley-embarassed.gif b/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/tiny_mce/plugins/emotions/img/smiley-innocent.gif b/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/tiny_mce/plugins/emotions/img/smiley-laughing.gif b/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/tiny_mce/plugins/emotions/img/smiley-smile.gif b/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/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif b/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/tiny_mce/plugins/emotions/img/smiley-undecided.gif b/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/tiny_mce/plugins/emotions/img/smiley-wink.gif b/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/tiny_mce/plugins/emotions/img/smiley-yell.gif b/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/tiny_mce/plugins/example/editor_plugin.js b/tiny_mce/plugins/example/editor_plugin.js new file mode 100644 index 0000000..ec1f81e --- /dev/null +++ b/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/tiny_mce/plugins/example/editor_plugin_src.js b/tiny_mce/plugins/example/editor_plugin_src.js new file mode 100644 index 0000000..9a0e7da --- /dev/null +++ b/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/tiny_mce/plugins/example/img/example.gif b/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/tiny_mce/plugins/fullpage/editor_plugin_src.js b/tiny_mce/plugins/fullpage/editor_plugin_src.js new file mode 100644 index 0000000..a2c9df8 --- /dev/null +++ b/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/tiny_mce/plugins/fullpage/fullpage.htm b/tiny_mce/plugins/fullpage/fullpage.htm new file mode 100644 index 0000000..c32afaf --- /dev/null +++ b/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/tiny_mce/plugins/fullpage/js/fullpage.js b/tiny_mce/plugins/fullpage/js/fullpage.js new file mode 100644 index 0000000..a1bb719 --- /dev/null +++ b/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/tiny_mce/plugins/iespell/editor_plugin.js b/tiny_mce/plugins/iespell/editor_plugin.js new file mode 100644 index 0000000..e9cba10 --- /dev/null +++ b/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/tiny_mce/plugins/iespell/editor_plugin_src.js b/tiny_mce/plugins/iespell/editor_plugin_src.js new file mode 100644 index 0000000..1b2bb98 --- /dev/null +++ b/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/tiny_mce/plugins/inlinepopups/editor_plugin.js b/tiny_mce/plugins/inlinepopups/editor_plugin.js new file mode 100644 index 0000000..07ea477 --- /dev/null +++ b/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/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/tiny_mce/plugins/inlinepopups/editor_plugin_src.js new file mode 100644 index 0000000..e991683 --- /dev/null +++ b/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/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/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/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/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/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/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/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/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/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css b/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css new file mode 100644 index 0000000..5e6fd7d --- /dev/null +++ b/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/tiny_mce/plugins/inlinepopups/template.htm b/tiny_mce/plugins/inlinepopups/template.htm new file mode 100644 index 0000000..f9ec642 --- /dev/null +++ b/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/tiny_mce/plugins/insertdatetime/editor_plugin.js b/tiny_mce/plugins/insertdatetime/editor_plugin.js new file mode 100644 index 0000000..938ce6b --- /dev/null +++ b/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/tiny_mce/plugins/layer/editor_plugin_src.js b/tiny_mce/plugins/layer/editor_plugin_src.js new file mode 100644 index 0000000..d5aa865 --- /dev/null +++ b/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/tiny_mce/plugins/legacyoutput/editor_plugin.js b/tiny_mce/plugins/legacyoutput/editor_plugin.js new file mode 100644 index 0000000..29d43c5 --- /dev/null +++ b/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/tiny_mce/plugins/legacyoutput/editor_plugin_src.js b/tiny_mce/plugins/legacyoutput/editor_plugin_src.js new file mode 100644 index 0000000..e852da1 --- /dev/null +++ b/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/tiny_mce/plugins/media/css/content.css b/tiny_mce/plugins/media/css/content.css new file mode 100644 index 0000000..1bf6a75 --- /dev/null +++ b/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/tiny_mce/plugins/media/css/media.css b/tiny_mce/plugins/media/css/media.css new file mode 100644 index 0000000..2d08794 --- /dev/null +++ b/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/tiny_mce/plugins/media/editor_plugin.js b/tiny_mce/plugins/media/editor_plugin.js new file mode 100644 index 0000000..4bbe367 --- /dev/null +++ b/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/tiny_mce/plugins/media/img/flash.gif b/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/tiny_mce/plugins/media/img/flv_player.swf b/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/tiny_mce/plugins/media/img/quicktime.gif b/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/tiny_mce/plugins/media/img/realmedia.gif b/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/tiny_mce/plugins/media/img/trans.gif b/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/tiny_mce/plugins/media/img/windowsmedia.gif b/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/tiny_mce/plugins/media/js/embed.js b/tiny_mce/plugins/media/js/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/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/tiny_mce/plugins/nonbreaking/editor_plugin.js b/tiny_mce/plugins/nonbreaking/editor_plugin.js new file mode 100644 index 0000000..eb40a6a --- /dev/null +++ b/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/tiny_mce/plugins/nonbreaking/editor_plugin_src.js b/tiny_mce/plugins/nonbreaking/editor_plugin_src.js new file mode 100644 index 0000000..ca83ee2 --- /dev/null +++ b/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/tiny_mce/plugins/noneditable/editor_plugin.js b/tiny_mce/plugins/noneditable/editor_plugin.js new file mode 100644 index 0000000..9945cd8 --- /dev/null +++ b/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/tiny_mce/plugins/noneditable/editor_plugin_src.js b/tiny_mce/plugins/noneditable/editor_plugin_src.js new file mode 100644 index 0000000..656c971 --- /dev/null +++ b/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/tiny_mce/plugins/pagebreak/css/content.css b/tiny_mce/plugins/pagebreak/css/content.css new file mode 100644 index 0000000..c949d58 --- /dev/null +++ b/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/tiny_mce/plugins/pagebreak/editor_plugin.js b/tiny_mce/plugins/pagebreak/editor_plugin.js new file mode 100644 index 0000000..a212f69 --- /dev/null +++ b/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/tiny_mce/plugins/pagebreak/editor_plugin_src.js b/tiny_mce/plugins/pagebreak/editor_plugin_src.js new file mode 100644 index 0000000..4e1eb0a --- /dev/null +++ b/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/tiny_mce/plugins/pagebreak/img/pagebreak.gif b/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/tiny_mce/plugins/pagebreak/img/trans.gif b/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/tiny_mce/plugins/paste/editor_plugin.js b/tiny_mce/plugins/paste/editor_plugin.js new file mode 100644 index 0000000..3785ab2 --- /dev/null +++ b/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/tiny_mce/plugins/paste/js/pastetext.js b/tiny_mce/plugins/paste/js/pastetext.js new file mode 100644 index 0000000..c524f9e --- /dev/null +++ b/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/tiny_mce/plugins/paste/js/pasteword.js b/tiny_mce/plugins/paste/js/pasteword.js new file mode 100644 index 0000000..a52731c --- /dev/null +++ b/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/tiny_mce/plugins/paste/langs/en_dlg.js b/tiny_mce/plugins/paste/langs/en_dlg.js new file mode 100644 index 0000000..eeac778 --- /dev/null +++ b/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/tiny_mce/plugins/paste/pastetext.htm b/tiny_mce/plugins/paste/pastetext.htm new file mode 100644 index 0000000..b655945 --- /dev/null +++ b/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/tiny_mce/plugins/paste/pasteword.htm b/tiny_mce/plugins/paste/pasteword.htm new file mode 100644 index 0000000..0f6bb41 --- /dev/null +++ b/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/tiny_mce/plugins/preview/editor_plugin.js b/tiny_mce/plugins/preview/editor_plugin.js new file mode 100644 index 0000000..507909c --- /dev/null +++ b/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/tiny_mce/plugins/preview/editor_plugin_src.js b/tiny_mce/plugins/preview/editor_plugin_src.js new file mode 100644 index 0000000..80f00f0 --- /dev/null +++ b/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/tiny_mce/plugins/preview/example.html b/tiny_mce/plugins/preview/example.html new file mode 100644 index 0000000..b2c3d90 --- /dev/null +++ b/tiny_mce/plugins/preview/example.html @@ -0,0 +1,28 @@ + + + + + +Example of a custom preview page + + + +Editor contents:
      +
      + +
      + + + diff --git a/tiny_mce/plugins/preview/jscripts/embed.js b/tiny_mce/plugins/preview/jscripts/embed.js new file mode 100644 index 0000000..f8dc810 --- /dev/null +++ b/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/tiny_mce/plugins/print/editor_plugin.js b/tiny_mce/plugins/print/editor_plugin.js new file mode 100644 index 0000000..b5b3a55 --- /dev/null +++ b/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/tiny_mce/plugins/print/editor_plugin_src.js b/tiny_mce/plugins/print/editor_plugin_src.js new file mode 100644 index 0000000..3933fe6 --- /dev/null +++ b/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/tiny_mce/plugins/save/editor_plugin.js b/tiny_mce/plugins/save/editor_plugin.js new file mode 100644 index 0000000..8e93996 --- /dev/null +++ b/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/tiny_mce/plugins/save/editor_plugin_src.js b/tiny_mce/plugins/save/editor_plugin_src.js new file mode 100644 index 0000000..f5a3de8 --- /dev/null +++ b/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/tiny_mce/plugins/searchreplace/css/searchreplace.css b/tiny_mce/plugins/searchreplace/css/searchreplace.css new file mode 100644 index 0000000..ecdf58c --- /dev/null +++ b/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/tiny_mce/plugins/searchreplace/editor_plugin.js b/tiny_mce/plugins/searchreplace/editor_plugin.js new file mode 100644 index 0000000..cd9c985 --- /dev/null +++ b/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/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/tiny_mce/plugins/searchreplace/editor_plugin_src.js new file mode 100644 index 0000000..1433a06 --- /dev/null +++ b/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/tiny_mce/plugins/searchreplace/js/searchreplace.js b/tiny_mce/plugins/searchreplace/js/searchreplace.js new file mode 100644 index 0000000..c0a6243 --- /dev/null +++ b/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/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/tiny_mce/plugins/searchreplace/langs/en_dlg.js new file mode 100644 index 0000000..370959a --- /dev/null +++ b/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/tiny_mce/plugins/searchreplace/searchreplace.htm b/tiny_mce/plugins/searchreplace/searchreplace.htm new file mode 100644 index 0000000..d0424cf --- /dev/null +++ b/tiny_mce/plugins/searchreplace/searchreplace.htm @@ -0,0 +1,99 @@ + + + + {#searchreplace_dlg.replace_title} + + + + + + + +
      + + +
      +
      + + + + + + + + + + + +
      + + + + + + + + +
      +
      + + + + + +
      +
      +
      + +
      + + + + + + + + + + + + + + + +
      + + + + + + + + +
      +
      + + + + + +
      +
      +
      + +
      + +
      + + + + +
      +
      + + diff --git a/tiny_mce/plugins/spellchecker/css/content.css b/tiny_mce/plugins/spellchecker/css/content.css new file mode 100644 index 0000000..24efa02 --- /dev/null +++ b/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/tiny_mce/plugins/spellchecker/editor_plugin.js b/tiny_mce/plugins/spellchecker/editor_plugin.js new file mode 100644 index 0000000..a9ec3b9 --- /dev/null +++ b/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/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/tiny_mce/plugins/spellchecker/editor_plugin_src.js new file mode 100644 index 0000000..d8680ba --- /dev/null +++ b/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/tiny_mce/plugins/spellchecker/img/wline.gif b/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/tiny_mce/plugins/style/css/props.css b/tiny_mce/plugins/style/css/props.css new file mode 100644 index 0000000..eb1f264 --- /dev/null +++ b/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/tiny_mce/plugins/style/editor_plugin.js b/tiny_mce/plugins/style/editor_plugin.js new file mode 100644 index 0000000..cab2153 --- /dev/null +++ b/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/tiny_mce/plugins/style/editor_plugin_src.js b/tiny_mce/plugins/style/editor_plugin_src.js new file mode 100644 index 0000000..5f7755f --- /dev/null +++ b/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/tiny_mce/plugins/style/js/props.js b/tiny_mce/plugins/style/js/props.js new file mode 100644 index 0000000..a8dd93d --- /dev/null +++ b/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/tiny_mce/plugins/style/langs/en_dlg.js b/tiny_mce/plugins/style/langs/en_dlg.js new file mode 100644 index 0000000..5026313 --- /dev/null +++ b/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/tiny_mce/plugins/style/props.htm b/tiny_mce/plugins/style/props.htm new file mode 100644 index 0000000..549ed04 --- /dev/null +++ b/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/tiny_mce/plugins/tabfocus/editor_plugin.js b/tiny_mce/plugins/tabfocus/editor_plugin.js new file mode 100644 index 0000000..27d2440 --- /dev/null +++ b/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/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/tiny_mce/plugins/tabfocus/editor_plugin_src.js new file mode 100644 index 0000000..c2be2f4 --- /dev/null +++ b/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/tiny_mce/plugins/table/cell.htm b/tiny_mce/plugins/table/cell.htm new file mode 100644 index 0000000..d243e1d --- /dev/null +++ b/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/tiny_mce/plugins/table/css/cell.css b/tiny_mce/plugins/table/css/cell.css new file mode 100644 index 0000000..a067ecd --- /dev/null +++ b/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/tiny_mce/plugins/table/css/row.css b/tiny_mce/plugins/table/css/row.css new file mode 100644 index 0000000..1f7755d --- /dev/null +++ b/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/tiny_mce/plugins/table/css/table.css b/tiny_mce/plugins/table/css/table.css new file mode 100644 index 0000000..d11c3f6 --- /dev/null +++ b/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/tiny_mce/plugins/table/editor_plugin.js b/tiny_mce/plugins/table/editor_plugin.js new file mode 100644 index 0000000..266d7d5 --- /dev/null +++ b/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/tiny_mce/plugins/table/editor_plugin_src.js b/tiny_mce/plugins/table/editor_plugin_src.js new file mode 100644 index 0000000..c2f307f --- /dev/null +++ b/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/tiny_mce/plugins/table/js/cell.js b/tiny_mce/plugins/table/js/cell.js new file mode 100644 index 0000000..b5fc1fd --- /dev/null +++ b/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/tiny_mce/plugins/table/langs/en_dlg.js b/tiny_mce/plugins/table/langs/en_dlg.js new file mode 100644 index 0000000..000332a --- /dev/null +++ b/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/tiny_mce/plugins/table/merge_cells.htm b/tiny_mce/plugins/table/merge_cells.htm new file mode 100644 index 0000000..9736ed8 --- /dev/null +++ b/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/tiny_mce/plugins/table/row.htm b/tiny_mce/plugins/table/row.htm new file mode 100644 index 0000000..092e6c8 --- /dev/null +++ b/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/tiny_mce/plugins/table/table.htm b/tiny_mce/plugins/table/table.htm new file mode 100644 index 0000000..f269039 --- /dev/null +++ b/tiny_mce/plugins/table/table.htm @@ -0,0 +1,187 @@ + + + + {#table_dlg.title} + + + + + + + + + +
      + + +
      +
      +
      + {#table_dlg.general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      +
      + +
      +
      + {#table_dlg.advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + + + +
       
      +
      + +
      + +
      + +
      + + + + + +
       
      +
      + + + + + +
       
      +
      +
      +
      +
      + +
      + + +
      +
      + + diff --git a/tiny_mce/plugins/template/blank.htm b/tiny_mce/plugins/template/blank.htm new file mode 100644 index 0000000..ecde53f --- /dev/null +++ b/tiny_mce/plugins/template/blank.htm @@ -0,0 +1,12 @@ + + + blank_page + + + + + + + diff --git a/tiny_mce/plugins/template/css/template.css b/tiny_mce/plugins/template/css/template.css new file mode 100644 index 0000000..2d23a49 --- /dev/null +++ b/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/tiny_mce/plugins/template/editor_plugin.js b/tiny_mce/plugins/template/editor_plugin.js new file mode 100644 index 0000000..ebe3c27 --- /dev/null +++ b/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/tiny_mce/plugins/template/js/template.js b/tiny_mce/plugins/template/js/template.js new file mode 100644 index 0000000..24045d7 --- /dev/null +++ b/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/tiny_mce/plugins/visualchars/editor_plugin.js b/tiny_mce/plugins/visualchars/editor_plugin.js new file mode 100644 index 0000000..94719f9 --- /dev/null +++ b/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/tiny_mce/plugins/visualchars/editor_plugin_src.js b/tiny_mce/plugins/visualchars/editor_plugin_src.js new file mode 100644 index 0000000..35856e2 --- /dev/null +++ b/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/tiny_mce/plugins/wordcount/editor_plugin.js b/tiny_mce/plugins/wordcount/editor_plugin.js new file mode 100644 index 0000000..a099e6a --- /dev/null +++ b/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/tiny_mce/plugins/wordcount/editor_plugin_src.js b/tiny_mce/plugins/wordcount/editor_plugin_src.js new file mode 100644 index 0000000..5cb92fa --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/abbr.htm b/tiny_mce/plugins/xhtmlxtras/abbr.htm new file mode 100644 index 0000000..3aeac0d --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/acronym.htm b/tiny_mce/plugins/xhtmlxtras/acronym.htm new file mode 100644 index 0000000..31ee7b7 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/attributes.htm b/tiny_mce/plugins/xhtmlxtras/attributes.htm new file mode 100644 index 0000000..17054da --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/cite.htm b/tiny_mce/plugins/xhtmlxtras/cite.htm new file mode 100644 index 0000000..d0a3e3a --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/tiny_mce/plugins/xhtmlxtras/css/attributes.css new file mode 100644 index 0000000..9a6a235 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/css/popup.css b/tiny_mce/plugins/xhtmlxtras/css/popup.css new file mode 100644 index 0000000..e67114d --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/del.htm b/tiny_mce/plugins/xhtmlxtras/del.htm new file mode 100644 index 0000000..8b07fa8 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/tiny_mce/plugins/xhtmlxtras/editor_plugin.js new file mode 100644 index 0000000..a9393ad --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js new file mode 100644 index 0000000..5f9d9bd --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/ins.htm b/tiny_mce/plugins/xhtmlxtras/ins.htm new file mode 100644 index 0000000..6c5470c --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/tiny_mce/plugins/xhtmlxtras/js/abbr.js new file mode 100644 index 0000000..4b51a25 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/tiny_mce/plugins/xhtmlxtras/js/acronym.js new file mode 100644 index 0000000..6ec2f88 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/tiny_mce/plugins/xhtmlxtras/js/attributes.js new file mode 100644 index 0000000..d62a219 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/js/cite.js b/tiny_mce/plugins/xhtmlxtras/js/cite.js new file mode 100644 index 0000000..009b715 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/js/del.js b/tiny_mce/plugins/xhtmlxtras/js/del.js new file mode 100644 index 0000000..9e5d8c5 --- /dev/null +++ b/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/tiny_mce/plugins/xhtmlxtras/js/ins.js b/tiny_mce/plugins/xhtmlxtras/js/ins.js new file mode 100644 index 0000000..3774f0a --- /dev/null +++ b/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/tiny_mce/themes/advanced/anchor.htm b/tiny_mce/themes/advanced/anchor.htm new file mode 100644 index 0000000..2bc63fc --- /dev/null +++ b/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/tiny_mce/themes/advanced/charmap.htm b/tiny_mce/themes/advanced/charmap.htm new file mode 100644 index 0000000..3991b81 --- /dev/null +++ b/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/tiny_mce/themes/advanced/color_picker.htm b/tiny_mce/themes/advanced/color_picker.htm new file mode 100644 index 0000000..096e755 --- /dev/null +++ b/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/tiny_mce/themes/advanced/editor_template.js b/tiny_mce/themes/advanced/editor_template.js new file mode 100644 index 0000000..4c43312 --- /dev/null +++ b/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/tiny_mce/themes/advanced/image.htm b/tiny_mce/themes/advanced/image.htm new file mode 100644 index 0000000..f30d670 --- /dev/null +++ b/tiny_mce/themes/advanced/image.htm @@ -0,0 +1,80 @@ + + + + {#advanced_dlg.image_title} + + + + + + +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + +
       
      + x +
      +
      +
      + +
      + + +
      +
      + + diff --git a/tiny_mce/themes/advanced/img/colorpicker.jpg b/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/tiny_mce/themes/advanced/img/icons.gif b/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/tiny_mce/themes/advanced/js/about.js b/tiny_mce/themes/advanced/js/about.js new file mode 100644 index 0000000..5cee9ed --- /dev/null +++ b/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/tiny_mce/themes/advanced/js/anchor.js b/tiny_mce/themes/advanced/js/anchor.js new file mode 100644 index 0000000..7fe7810 --- /dev/null +++ b/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/tiny_mce/themes/advanced/js/charmap.js b/tiny_mce/themes/advanced/js/charmap.js new file mode 100644 index 0000000..8c5aea1 --- /dev/null +++ b/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/tiny_mce/themes/advanced/js/color_picker.js b/tiny_mce/themes/advanced/js/color_picker.js new file mode 100644 index 0000000..fd9700f --- /dev/null +++ b/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/tiny_mce/themes/advanced/js/link.js b/tiny_mce/themes/advanced/js/link.js new file mode 100644 index 0000000..f67a5bc --- /dev/null +++ b/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/tiny_mce/themes/advanced/js/source_editor.js b/tiny_mce/themes/advanced/js/source_editor.js new file mode 100644 index 0000000..2793286 --- /dev/null +++ b/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/tiny_mce/themes/advanced/langs/en.js b/tiny_mce/themes/advanced/langs/en.js new file mode 100644 index 0000000..69694b1 --- /dev/null +++ b/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/tiny_mce/themes/advanced/langs/en_dlg.js b/tiny_mce/themes/advanced/langs/en_dlg.js new file mode 100644 index 0000000..9d124d7 --- /dev/null +++ b/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/tiny_mce/themes/advanced/link.htm b/tiny_mce/themes/advanced/link.htm new file mode 100644 index 0000000..7565b9a --- /dev/null +++ b/tiny_mce/themes/advanced/link.htm @@ -0,0 +1,58 @@ + + + + {#advanced_dlg.link_title} + + + + + + + +
      + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + +
      + + + + +
       
      +
      +
      + +
      + + +
      +
      + + diff --git a/tiny_mce/themes/advanced/skins/default/content.css b/tiny_mce/themes/advanced/skins/default/content.css new file mode 100644 index 0000000..9fba043 --- /dev/null +++ b/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/tiny_mce/themes/advanced/skins/default/dialog.css b/tiny_mce/themes/advanced/skins/default/dialog.css new file mode 100644 index 0000000..f012226 --- /dev/null +++ b/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/tiny_mce/themes/advanced/skins/default/img/buttons.png b/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/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/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/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/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/tiny_mce/themes/advanced/skins/o2k7/ui.css b/tiny_mce/themes/advanced/skins/o2k7/ui.css new file mode 100644 index 0000000..a625397 --- /dev/null +++ b/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/tiny_mce/themes/advanced/skins/o2k7/ui_black.css b/tiny_mce/themes/advanced/skins/o2k7/ui_black.css new file mode 100644 index 0000000..153f0c3 --- /dev/null +++ b/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/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css b/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css new file mode 100644 index 0000000..7fe3b45 --- /dev/null +++ b/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/tiny_mce/themes/advanced/source_editor.htm b/tiny_mce/themes/advanced/source_editor.htm new file mode 100644 index 0000000..5957bbd --- /dev/null +++ b/tiny_mce/themes/advanced/source_editor.htm @@ -0,0 +1,25 @@ + + + {#advanced_dlg.code_title} + + + + +
      +
      {#advanced_dlg.code_title}
      + +
      + +
      + +
      + + + +
      + + +
      +
      + + diff --git a/tiny_mce/themes/simple/editor_template.js b/tiny_mce/themes/simple/editor_template.js new file mode 100644 index 0000000..ed89abc --- /dev/null +++ b/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/tiny_mce/themes/simple/editor_template_src.js b/tiny_mce/themes/simple/editor_template_src.js new file mode 100644 index 0000000..4b862d4 --- /dev/null +++ b/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/tiny_mce/themes/simple/img/icons.gif b/tiny_mce/themes/simple/img/icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..16af141ff0eea376a889b1e8d28e9c1cacaaab16 GIT binary patch literal 1440 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 VmjT$ODWe$zObpERYjs_s{s;8{A&me4 literal 0 HcmV?d00001 diff --git a/tiny_mce/themes/simple/skins/o2k7/ui.css b/tiny_mce/themes/simple/skins/o2k7/ui.css new file mode 100644 index 0000000..cf6c35d --- /dev/null +++ b/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/tiny_mce/tiny_mce.js b/tiny_mce/tiny_mce.js new file mode 100644 index 0000000..782f7f4 --- /dev/null +++ b/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")},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(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("tinymce.dom.EventUtils",{EventUtils:function(){this.inits=[];this.events=[]},add:function(m,p,l,j){var g,h=this,i=h.events,k;if(p instanceof Array){k=[];f(p,function(o){k.push(h.add(m,o,l,j))});return k}if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){if(h.disabled){return}n=n||window.event;if(n&&b){if(!n.target){n.target=n.srcElement}d.extend(n,h._stoppers)}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=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);if(j.adapter){j.adapter.patchEditor(m)}return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual_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/tiny_mce/utils/editable_selects.js b/tiny_mce/utils/editable_selects.js new file mode 100644 index 0000000..fd943c0 --- /dev/null +++ b/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

      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 literal 0 HcmV?d00001 diff --git a/images/cancel.png b/images/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..c149c2bc017d5ce5a8ae9330dd7dbd012482e0f4 GIT binary patch literal 587 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 literal 0 HcmV?d00001 diff --git a/images/comments.png b/images/comments.png new file mode 100644 index 0000000000000000000000000000000000000000..8e6cb9d46343b9d13a9b3635152d493e6734ed6f GIT binary patch literal 5149 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 literal 0 HcmV?d00001 diff --git a/images/edit.jpg b/images/edit.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dc4438f8102646e2ce9dbca720b5e9963ad42e6 GIT binary patch literal 792 zcmex=ExX0vKk3fkMoRiAIKv50!+2gb-2?Qx$|685miZm=LxAoup{!7&!4mV&TTdg%AJV zV&Gv0xn*IQVRl4H03V2dvg)bYgZS~ z#I|Wq8d=U?^yAzR(JHsabScCgOd!?Fx(+)}=j>}y&3+Lh5W;s<94>zXS`I~EEr3uwux5Lf+>`DUhqL(6H0#sv)9 zC;0G%LQDnODDe8>)(4-MLK!oo_NW}QJF9*`*JF!QP@Z_Pn9SWDT={YL>f3tDu0uit mq~4v?gOM#|x4l1O?`N;rGY8A6UtK5Rq1}l<=psl5*5Xz9i;M}s*NP=ugs7Q#8Z;Dyx|}!`#}xw_C3!B-yaPC&0j)XcpuX@rNfq|q}N(wJOjA& z>u+z?dfJEuLePrqzy!)73pvLjxk4d6XNZt?hm_iYES{i}J5y3l?}PPNYDBR7oPc~6 zL^d)Bi4Q2L3pnp!nFxN9c2E+=@XAl&+;2m6a~kZj1r3Mz3C=hmUG<{+vWR@t4q?fJ zhFc(ozZD#Mx`^Q~g1v=K6!QnfuqyD4>U4EjF0eamL}Jx| z%&`kR-H+3GBYr*Qx}frLU4`%n9(`uSomzw)t%%NagXkA*R5Mbv9VLDp1wMo$cOMa~ s3Wm%r7^bwK$2$}-<~D8p`#1iScU4^XCLAA~0ssI207*qoM6N<$g3sK(Qvd(} literal 0 HcmV?d00001 diff --git a/images/error.jpg b/images/error.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e6f6da132382b4ab309b2d179bd6793461132e7 GIT binary patch literal 844 zcmex=>O-t>}+ft zTpXN0z`@1E0|G#jmzRe}5ClZvfRTljm4lswpNorMgpZF8E>1M#{~-oJ4h8`R0cJ)) z1|~s9W%{Lj&-ua?axrt8G)i%Uvedv?pSs_I^@BLBgdyK zGkcR-wd{CS!~@SW=Vu*Ry;#ER(XF{FlP5D9+Xc^AuuUiX=2feE%a!=-sv$09X0%r{ za{eZNVX5B+yLT_(7uE>|e#P?>PI|HYCn(w}&_jq~qFqlh*gM zRz#oS@;nc5AxJcWQG#db_u{($416VyK}?5#8vprgc||3twdK$G^~bxlwM0rPpH>3Z zBZ5mn4(b=6egTb0ruj=1*qE)pi5Qeq%p1r07> z1lkKQcX)H_d_G(8j(ua!=kxx$2`m1@+gzU8P*zv-`69w$0{<8o1QHtAL}TBWD12*) j5m}TOa<9RuhE3tBR=d=?5(U=k1itQByROc>`Tr&W3Y^}t literal 0 HcmV?d00001 diff --git a/images/folder.jpg b/images/folder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fc61845517be1d8a5f4c2e7bccc711c2f9205d4 GIT binary patch literal 772 zcmex=VLLJa|jDpOX{ks6?abaHZxs*T7=6GR503!lHA zw;E^z!q);z^5HfLL>({`Rtws$v|`;^F2fGr`CcI_eR5Qm7`v(V-froR;W&k`Q$X~= z1pO~gUyiCw^OWygbo$m_G1bVwg3J2bKa^>LO$1phz~hr~Cq=IEt-62ZqLM9-9JaYN PTw3{on{S&t(5E*6KA^h^ literal 0 HcmV?d00001 diff --git a/images/folder.png b/images/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..784e8fa48234f4f64b6922a6758f254ee0ca08ec GIT binary patch literal 537 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 a_d`f4MrP-tYfg<>8^87Ly|=CY|4jgFrLg$` literal 0 HcmV?d00001 diff --git a/images/gallery.png b/images/gallery.png new file mode 100644 index 0000000000000000000000000000000000000000..865b9234a8cd47ca24a78f5599d2515ec9d4fbd3 GIT binary patch literal 4733 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-archive.png b/images/header/icon-48-archive.png new file mode 100644 index 0000000000000000000000000000000000000000..d4058bc85a0c075ab41cf4b1dafc55186620fae6 GIT binary patch literal 1878 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-article-edit.png b/images/header/icon-48-article-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..b299c9426f7b351486e64ee0a650d9ec3a5aaa97 GIT binary patch literal 2733 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 Eg0z+&TmS$7 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-banner-client.png b/images/header/icon-48-banner-client.png new file mode 100644 index 0000000000000000000000000000000000000000..7f626968c09dccf31dd69aa0a68547c441412150 GIT binary patch literal 3007 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 By*vN_ literal 0 HcmV?d00001 diff --git a/images/header/icon-48-banner-tracks.png b/images/header/icon-48-banner-tracks.png new file mode 100644 index 0000000000000000000000000000000000000000..6f5a901da4f97bffcb09277500fc7e0cac2d4a89 GIT binary patch literal 2989 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-calendar.png b/images/header/icon-48-calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..db416200ab8aeffd687e957e9b1a97c7226041a1 GIT binary patch literal 2217 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 VJ=h?f7E%BJ002ovPDHLkV1gy+VXpuH literal 0 HcmV?d00001 diff --git a/images/header/icon-48-checkin.png b/images/header/icon-48-checkin.png new file mode 100644 index 0000000000000000000000000000000000000000..e6277a7d01b053c506f0839a578c5b37bd13f163 GIT binary patch literal 1585 zcmV-12G043P)fIlz))^0%C*+I}Me1fQP6rJhovKVe9+@@((Otkq~)-3b8a0L@0vBj?-B@ z%jMiVcg8dJIIDTU*FNpQ@s69Oj$4tOb(49@%N+&mCc z1Hyk?*A{+U>wShyVioefe6ohi*F-huKo&lxAyD7jKr$D!=YCk9SOV@BPoT%8hFm#q z#^4Ev2mnL@L{75_ls<(dHYP3y+|M6J&y$8UHDiJ#qu24xKH3FOgy&rZ9r{B5l<6PhU+@>q ziK#;Fr;l*WOJxQ=hC>~cx$hz;0xU-fAsl?PdkY_x1c?bC;C}LO4I}|xQaDI17t}oi z&pZzTJWyOCAEm{UdhN(144Po_wN4B5^z46V|Bhk^r}e{ z@OClyAc@4PCL<&q+wS2Y#G>osLU)^M+-yDx1v4+LIGz_)VX3rQs47k{w^?cGP< zyLZnl7>0IjdS(VRT?ZNWkR$?;-DV|j1NXde*IS$GBZJp^!8?86W8Aq2)b*Eswf5RS zN8sCc&dkZOa^v*bvw+?Q1v5lO@c4}@`@;@|yW8vdx1L23&EdgUGvIf+;8PTN*^mVM z%fDHp9%vTyN(FO=fZy?6`8n>=IVD7cCoq$&nyllid zSp+_*k(tD$FdX z+gD=}?e}L*#L*xn=6PMr^Vp<9cNi>nCr@gSwg1%)E;pq&<%%+h;V2)@4G23gq1ib$|hs$yM@NdT0jn1oiwVN&9u z0usj0Q3MYRyr}WH20KRZ181S9-@D1encFzc2eeQmcE__Zxtm;0>}bJ!5u#)wznvRn zpl2E$7x+DgxgrugA4E>Ddq%{^=GI}OF#9>M(YoL%|0B#W6wN=KTUl&tcYzz;P}Vcs@i)PQ>{TB1mQt%@WCxu%_M^FZhuTG`%E}d`Kd|NU$jI zXe3d9^h{z^-uz?i;72}@^^p)#@>3FB@R`-BUOXJ|`#Mr)Nigs7D2Q=`NhlE2DFHvT zba>$ReJ0M45dFbtxe)SxCh`HSdoFDrD)<8(>II1vE~TEK4@s=t|Ms7U4t^|$dUlG# zWgbhtiDO0+ZSCCh*2bOsq=Ovyf3pt!Y;Ok;%M9+31Q5K6OBL;2v}r-0GME3PT@A(JqZzS>8 zxFbMBf-3^JBD}n(Glsa|>pkPm0U;q(cz-G*AvGf-IYTb%{jf(uiG19QF$vv16bT)t j>*PQ6Cj<_7{V%`(?s;nP=|`QW00000NkvXXu0mjf^3mvj literal 0 HcmV?d00001 diff --git a/images/header/icon-48-clear.png b/images/header/icon-48-clear.png new file mode 100644 index 0000000000000000000000000000000000000000..953f1357f36204166cc6c2cc4c6e052fbe6eb757 GIT binary patch literal 1971 zcmV;k2Tb^hP)>n)pOof>N+Rw}9bE zQ{Q~iY+^to5(k8|yE}8Q-})cL9$MzOjCKG>ZNQ=d7$CHHN9>3oZuttS^i= zEx`NdEDNiKu+%b5jSLe^M{KK6jiLy7$f+oD90}n(s|>ukzEB9fgRMGch)a2mY|v^U zN3FrAt;M=xPyi#X#@{{b5go$5-9|;?1SZ3?cD&$Q~E#w%dd zsYqxsT^;cRb6MJ|<_vZ_SP+=eH7b|feyqt4pS5N*am_Ns6)(nPbf(K(iWNGFSGszN7$h&YbjI3(V6B?Xt(#tXv6WWqj+Y zR?>yT2F$0f1AC@Bv+RqcYgsaMnw^ydU-bfTIgkUoUHb=`Ht4!sMJ3rj{~SRKJF&D` z<|~y2U|h~Lc?dvG$@Qakk?xWN>>ju4*Pu;}O3?P4Y+LZ0Eny1je_(>lXn%;oGVkhjk2+7 zaHR9}Xq`oagHs!KfWaZq%mp3tk8*4Mj0IjU&adgH8^mDwr4r{hFfXfxDgkHUmunN4 z_kh=6?ZdoBl3x}Uf$kMb+P55*ES=}fK#QH9Y&>PB^)b{vKKSLE2$^^Rka_xD z|A55vG;Xu~(*~H|dAi$@qz*J2^gB;?S+z{GKmcgJqYSTVA>VxxlHdN%x=yA(62Ee) zJMYz%rAfuv$QS_Ac}J!4LtBOpRVfPY2r!#6u97ex?Lvw;22yCB3SV@ev>OsYdFT4& zy^*;vFPCmN`Cjl-<3}D*jH?5US8f`Ob|K}(LF{>@GC!YbSO7)afp(K;Cf+}ApnI|y zV*##;${V9#P6}$}{HiG1r~rpHP0qY9xoK_q&OEqoc%;o(kt(e|xay((xHXQ(r%@#m zjVIO3xi~F+wQ1509>f^FRNvW47z2rJfcUt%oHqmS{jkS&m4gC@gS4n$J%=9oc(kqn z((e?+W(y%y%>vf5CpPB}_k7n>Yvh>|o3k^Qf3&J;HmONv!+nZ%FEpGfxB|x^Rgvd7 z>tG?VGlvXx#I0tcIMl0FfW~$_b-ZWMxqaL5o;+v_F)enTr1t`+ z69vG!LQ<;ZOmv%m<7zp!b)u)?gBkDPMgh}Uq2a13lT#@E#uEiN+IzxAF&pQC7KarC z8wcE-hUDKk8i=XhiQfLS%ww&^dw6fVj>9#)XHIEU@14K`cq^uA?n2VxByHG^=Jkf| zF&*~aEVMbc`B?81FxI8;EDtY+i`{q;h8>9q^A-p9 zSxLo`L08=yx+qo~xwYfQx@z&t`S)K*YcekGwt|XfgWTkMN8#j_)F40`JD!3AIRo-Gg~dF)8vh~RGBG6KrW==rB7QfYos zUud2<+-C{tbro_;%)70G7&!CX#Q3s*BkTIQC(D)q?n+9t=@_T|zvs%8-D2QiKwe{pdangs$Z=JV=;ljY}|SQrad$%9}=w0{e);R|gS zj=nruT#}e!-a`V2K+iQir_g*cP4{}5QZZ|T?^A*HkYe7A&<3N5dbLJq)&FZDfhb5Q zhJo-$G%bRT2(4E!!qyn)wrzswr6Rz*6PQN{5ywneA+@=R5JZMF z?}im+gkD&wE{xJrltz*mk8+3bT*SCjSRfS=$b)|c7y#=&YZ)(ez7_xg002ovPDHLk FV1mwqstf=C literal 0 HcmV?d00001 diff --git a/images/header/icon-48-component.png b/images/header/icon-48-component.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7ab0e717d1a9e839a07bbf3f9b54fa787a5e7c GIT binary patch literal 1981 zcmV;u2SWIXP)bpqcr0!u4bk1~em8Q2eZ3P^=;PT_of_l@Ik4<)d;ba`6cW^5N@wx>Jph^uG< zm7*@5nB2YV)l32lUoF4la{0)nEz#+AwG=E1^;#`#(`>cidY-PMcXZJ+)zdXTHnuG! zECZ;OjkT%06E|cM_+ox>rqvZk+g%5RlP}`-Jq;``UB<$X9zlI#FS^Sg;ppU>D2-Hb z{!Q_i?}7ATeAwJN}f2Pq`R z&D*fH{)uuWjzjDL*uFbm>#J;5VNgJ1xzOxqb8>yX4cFxuTU!85e+YKq5H{}kfo5JV z7jZM*MZsObV)3WA(&@QlX_Vt*`8tZI<1Y7Mbd?Kk$JJ<5Q7D)X-g(>fsZ;`IXV1%4 z(^dq$9hvj%^)f6);K-c^Pi44}K&3v4@(x|xm~irApy2!1>{X(u`YJ61V%OM~jgun$}L>mnE?J{w3lj92| zG6if%3|j@;2N?7bvHsEeUVpWw;%`j@d&hd%M4k%?B^_zPQH}3vnE2WLBA)rzCgxgv z%Nk4rHAuFv<>a_YC3wDKX^oORZh_cBMh!bEhkGiGI-bDG|K7w(SK!IRBiLJJaJba< zBsLde*$KK8Ct8lSu0H&3B0(fS7IY5vIkOepi&x-*=5fHsW$bhsf{k-YnK+QstK@S?lfyfKs zRCgKTMj7LJJ^}K7A#-9tT2eFC1XSlIj*Q}=$ufR-W&^XUPA=G?L75;M1uJ}@GtIMmGSI9*75E_C!F}!Q40?!QnCE6UcB+27B(D_ zo~;sOxd_Aus9P|?i{4Lv0SYV>WXVhdI?7eUuB%e%MjLHs1izVC!|yM)V;SNnQx*LD z*4n^IdG?Bp55DXqa(X|75?Io-5dDQtef`lEIf9zS@Y4ge(c>uXd$}>78qxrsV*1oa z%czws^)+PnS6DUkZ)aBV%*R(Vb9V?lksCbYx(Z7jm#XzbMls;=Ew~WH z0L#`6%RrC^h-Eyml*|*YByW&m78*t%aG|sq$k5JUT%;w!?DzQ@iS=E`&qQ0WfXdSb z%LS7k7lUB778mhn7FvLBVKW!RK;S;t7!3Z0wSZQiU^6!~jRsqZgO-gyx@=p(q(ueG zal;1lLKn*0O3XDk+td3-4cuR@;V({YsL!)uwi)8{ECqE|qPVxv#38YYw(FwR?vOjp zWgcuj`{JvQ8HVxv{yh^IsaDk1!Ti>bQuN1_`VyPJv<%yEUU>4c6ORvAfb~)go1dS5 z=g+6loj8AC;qGd=v}4YLx{AQ=8^=j#KbF z&rt7~x@!xmyPk~hL3*RIWm(G1PPpZ!tD*o^tJP2e)GkPY)Q_?X_4DV~;|65tGJW^; z-${~_Cr^HM=FFKTRei;mwSWM*5~+itw(gs$qNL!9=^p?v|8Dd*%P|?YR;B!N6bfA; z^2`!#gzq-Cl9q1)x_84M_T#|x#Y&U|F(Tz?yCkVJA~FL!_a*e}l(x~aM1+(W`Y&Y= z+zH9Ez}Ni$E~aIfk#&uTL=|T2_`g|Glo(auHz$y`$-DkX_x}@t{|YbwUJPlh=@0U$ P00000NkvXXu0mjf5FE<} literal 0 HcmV?d00001 diff --git a/images/header/icon-48-config.png b/images/header/icon-48-config.png new file mode 100644 index 0000000000000000000000000000000000000000..3d053c0b8a74b3b7e071ef28d86550641c381ccf GIT binary patch literal 2737 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 H`ceM{Cz|{b literal 0 HcmV?d00001 diff --git a/images/header/icon-48-copy.png b/images/header/icon-48-copy.png new file mode 100644 index 0000000000000000000000000000000000000000..678793be8c2cc688fc7920ea4c28f2819cd57c42 GIT binary patch literal 2318 zcmV+p3Gw!cP)8z&wI|CS*OkSef2eOUMn}XwYBM;w1l*z*?+067HW9lUCn^^ zZr{Frs8*{j_+NONpP&Cp@T9=?K1_NY9UY_MjovRUn{v54BD?ha7=QOw^M$q<$ z8jv&rp}tlFR1@w0KPIvbu`wqFhyK@LKr3a=N0kIGUc68@u3u+j3Hrt#K2%drpQ^v_ z-3$5_7ZyV2O<4|C0H0Sv&!(o-;^Lxu@%*{EbLURbKe%a=-v2f>rV53E+PQ0&ntlCR z{d)DP?mv9wh}yb!Ys)Nu77qXn4`j1hHTn3l?z?#DlIoQ6Y-guFUl8NA2v9skTb5^* zmkX*O^U3?L{N5e_*yN)}>cpv2DwV2N5C2R|D5-_i=FOY+IsIqPp4DKHh}}+{JgLFj z=Qz%YQRRL6g7Zy-gC7+S?+oHbY4Cv5A8OmSZNWVN?9Ju$u?tA|`TRAoD@J_k0FE@k zN+Z|X8%X2A#f$2fD_2yyy*;=OO;cK6D9>2NGnq`_0rp%Q6a%@J<8(T$JkQhDXJ=>Y z1W3&A9^}Y9y)yQ}Lx*AwYwCeGX?%C=m@2HSID~epw*m?iGzLdNJFX0jTXelv@`z9wRb;j!H=~0g*1{q(+jLB+I#;h|SN*WkI)h%VL z8Xg`Fa{KuBc;I>faKAe!*V)gAN30RtV~-&UnI1lTSdB}PKswAJJcBV4(#Ly$yl`RN zd=YB^uEzj?ZxLzm()l-U^or)yt5>05J$>d(WO{{RcSFzCOI9}4lRI|q)O~yR?+>v& zAVy%MmQw@selrg+c;H$`8oa2lzdtm)PD!@1Ub1?JQLAUj&_qc8jAS%qI5RU7Xx#=m z??PT_X(j3V{`6^e^TrMJjdAi%mWUih%a4Y$a_{8L(V+| znlVYW8AA;3+_rst5C9O_G>C1Xl`$@+gzzkzCZJ%9#%86&;C3T8E%RAt7A8gV-X$?^ zU|>LXcXtPYU0PjL!$Q{f9XqtK_P%a;Mze0lj`x6E!1D11Y21)fm`p+(*hg{g@7Jzr z_XaN$AQcms7=VG)P$?q?f)TK^VCH3pmI)FszZ9k?pF9z-l;znTH8(e>Ny$oL=@(;1 zMn{8^J2r@|G}v$*gY}ck<#=dlNcqNG;hgL=eL&kDyDvU`{5(pH+NHNaFy~5D#c+kkciX zubT~$XgZ8Wr?XqDwifMJ$Hz#Z^? zf`dvJxe|w5OF8q+Is-yWxsdK^ficl6N3-1u%K<6QClx?5v)f6oU1UUJA#0UI-Yps6 z_SsC~df-#A9QqDq_DqOWtDadv5szfB*8-mSymjk#i~%v9?_A*81D}ZHMgwRpO<@|) z%p-3kflN6FxCL(vAT574ziYOaJn0n3ezGKFB(rL_QlIrCB{l9ggn zb%=a&Qd*=;DMB(?XF%jc;(&MC$Fl6|Je$dizUx)*#P~!|8^Lscf1fF<>s6}fCH16Q zDy_EQ0Y@eQ_$saX!7N+Q9UU0~l2lcZ2?blBu&h%fAiKJ|q-@XW<7Cp)_fg6u6G@dw zCS;#bi{hU8Ne$Cg@co^iGgyI@AdAqp1MnH;0^7$qGq0G)ZNGA?#Le3NH#qc)v z(xj%U*`@J%1Kf0Ij$wzK4EX1=wp|ey1H?_EjUKeey;2XgivjcV^J<0luLS0*2Cu}h zb`9K1c^bIPwo?xtKKxnM;6<5zD|jnt6qTM=lPb74Ha7N$oRUlZ2m`{bDqDNVO9&pa z18g#2oK(;)pc8Eg&GsuPLC|)kQk4m*Lv_ibNlV151NUHA+M+DsE?>SpCUEkUVlltc z(_b+AH3RhY92bnv;+&GWVoHh-Xo8G@6Gm5xE4toaU9ATjW%7_rN&p6|1&$nCndEXg zSbf8Cfn`S2mqlX)_f=g3ssw0A3Q_-ZKxxf@tg6I_wDAO9K^FRpLiw!*Ln+yTCLSj?EeZd0Q#J7cNB%(!2kdN07*qoM6N<$f_WifLI3~& literal 0 HcmV?d00001 diff --git a/images/header/icon-48-cpanel.png b/images/header/icon-48-cpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..cd4b1a04380b833b465bff45fb8a29b0597592f5 GIT binary patch literal 1761 zcmbtU`CrnB7X7+|X=#qj_)2k}W!9t)xz)2qO~rj7Q^RR;-$?WUuDRfrC18mtnpD>FdH@!V!s>-^`005}E zI6J`i*z7w%a(g{!2Hd?zau|CTUl0f+Sn!$$02!ROyRV}K93}iq(lf+KD!Lz*Quv&= zRNeXPgJhfa$Gm%V-t58>_GV>aeNT6Hcl$8!<5%hO`*rTj+qNeof#@5^tdgqxJ?Dcn zhB-Xe=;Y+AD4olJPHy9TzlwzypGz55+37OVQvOS`}X#yB6DTk(iK z9F#~T*R?M%FB2;t#AJ}9QYjpnTS^^xEnML(uB8&H8ao*C?>8=Di<_Qs?lg5heK{-s zxM>rBnS9N=oI=i_P;i(vNzL@W zQDMg*$1lEsGqZvwG&FV(FD$Nb-w163lb6NPu?g-|HiyN_Y$BXW^T`R1!L8RPiW2Tj~ZhieWx3V@h|9*CM zHZ;9_TPpQO>;H`K>E24FA5MPQSH(cyqc za40%1Hasjk7~&L-4o`|hBQX%`?x+{oJO!JSn0hdk03_sliQ+NUkPDtsDS6xnahD=NNCLB` zG=I`Zy2;3&9a{gNPA-CW`@k>vPJu`dC*LID@^w4d`N&$PtL2bo!ce!vQ&HZmJpag< z1cuR7QC`+*C8Mk_w9RtXzps>H6jkiZ*(vG)*Ci;fs-55f3S-hT83oFA*6ZOc6@1X3 zD!>2NpN3jqRJ8FdVj#9MXTf;>l`leZ{#LKsaqq{{5OdT#6c=;W%S%s53}v1g zYzWplWQta4k+p=WAA}deM;;-RYgDRjumStcg#~jv~B#X6%J`uTixf!M+*q+ z6j6?6ri}Gj59=~AKflbN^)SGCr#j{f?ygp!6C(3X2$5 zP+(12`N{CloMJ)2k5KKR=_p7~y>+&?`{A-W&9u=7x5x(diNu#mzsDhX>#7M~rqTz= z7Djeftb-?S^(}oGTF!bdvTzZi{HA^u*nNO>CG<-`PKdSWn%+|0>lZL_c)gK5Fe19d2bh{%wE#$uf*=7EggFu(C#{jylY`C)K2hKP#>E()HmJP|I1up$;%LUZW=12Rdx21(Ns;?p1pY!U zZt?)AtAWZvo8xn^wJ;NyuTN48jbS6Zd+hEZ*A$;EKKsU}!_pMnt2c^1*uAMvuw!n` zTuJ1^cjdXtfW@{u>X&s9gX6 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-deny.png b/images/header/icon-48-deny.png new file mode 100644 index 0000000000000000000000000000000000000000..6eae9b2559cdee82a0e400cfe64dfeaf6562dd8e GIT binary patch literal 2045 zcmVK};W@ehh=JSqeM!5~o3keC<~6F?zRA{ejO#0ZMkBTHQ_j}j(-ZzY481P>n%>M*%tY5LZ zrCN$ST$c#Xt{*%#e(JeizuSGkm(`2C!Li5s1J!%O-tw)_uU^qLssvtJy0q=8fy3=L zhJUR!FR%;>55RGF=KQ+)@)JK-Ozv2`cI~DSCGgtw?QJ)l{%z$o zXAhN|K)tAN&IZn~S)RnXG|eKTsWvGMeyVJYd^={^s>SO&HWi(~M~min&+GrD83Z2! zNAY+_^@vTkH0%KO?=1K~i{kO(Ib)sEHB|KmhOyY%)+%Qvj)xhMh$9%xB4 z#rynhunb++dN~wp?Vz~gJ;0+o=@=geLk;3(?{)>Ua?keXu18zDr$l@Fj6Vnp0@o6Q zsCW$%iC!EL6QH4MD(F@Wy6Kd2NBx9hSOi{O{8ZZ={awurrbt;)P4I@52#YIM zV=WCrezVS_P z<%VrgURPhxxZVHu>u~ao6)?`r0q5j^me5da=FmB_{s6Qt?g7fE$c-APhmKfo??DauS#r>-FnYE*M6d#Bs4H2Ke*C-#iNmq|Z%ppxM}R#sEEF zAOW`$L(_}fev+#wx{(%pRGu>w2Zok=AtO^+;2CiHZv?tr_jyRMF4y^VE$i4=app1I zI(ku|lip}v&1ITQm|R_mL#Dc0#c32@_cV#y+`Nq~XAtYQ6?FUDDFWU-(BD%u0_w>= z;Bg&Dn;Xjsm0}~GmH0@YPNcq7rw3A`3={Oe^-DmEo+~)`U*F#jQs+D1GgJT2c@2Vz z?W&0_mkag#s*g>UPfgNX%;l#({QFM$YIZ#&?HZ{N0~cW^Mdj4c3BuKkRM)~7z{v<( zP6Ee$ReO~vGl}JSP*g4LO{KWpm-0nSrEZNH2C$@PCbpae&IqMjC0TtmAn@3I=`iX8 z%NmLcQMa(=)e~=?+j4xC)LScKi>HqA)~Vq00gH9nccI1;k9^uSF0X#zV5q($E-N5- zy`a$QI7*_T_C2V5s(cC41?@^~xpl_C3@u!)OG!wm+Q_ROGhwKt1XT2b?!bh|!q0xJ zxS*!~m-30L&WRETfgo@!Yr4`%is17Dr>PLd;3X`>+80`L=gr-7qKBF*F`!S!2S+R( z$aSl{9{4L3hp)$6v2WQYyRRPh#@3dbrYEKtF@HG+5J`w2YQ<$y5)42YDJ&X;Bfc7O z;hz1&-`JwDw|aWhQQfOX3=Yalf>7e&&0MYFqEJvFpAQCY@Pp9Hm#H*&K{j_Ezwf@* zmhk@V4XnafV#}vV5=11~?4AlSf`SJs0zR`G4aXC3j4xHYYOa|7=FXiv3POO!gZH;K zTo*oY@DerZuL*cTz|u-l6c|X#rdwU;l1HWwqMuj#eV8N|NMf*t2SqsQs}jGjzN~56 zdpioZz3v=KZlB#fGxA4sIZjL^1xFt&u;mkF8IrhiC$X5P9ImA_9~{;=R1)}j7JTT2 zek@hYq7i$HGYJV|vI;*`HSSy2xwkkUIGp2=d+utR9PL}#D4i`23Ic?%KJu_bcM{Sn zJ#OeXGZ~3SB?aOrhfBsr4u>YJ+Wf)Ch5y7v8?2eeLwC<@tB;*(pBg(}>p_hMJR~ge z3~PSx6YNK2!zz&#B$iNANT9YAwA!Jvx)Z&nV>{mZ@YCXbDcQ^MVmL50tmXV;?z(u#TgX zoLf_BIGQcZMHFhzY|(O&$%g;|qs63@dK#Mmm&qCqOJ(fcQ^>fHN}?oaGmtzm8wozo zj7Obb35qvG)5GiCvk$ZVw(pZ1mKe4LSX=W!n}}c&KTjf;+dvjqGF+}{Ht<2)3UW$p zI4ziW5VI*hpGjCpdBS9I9jE{6DfciLg4%ii`Rm$n(kPQdvbl+o#RA~4XsR$S&zS-L bw*UhGD?GR7j6~-A00000NkvXXu0mjfK{nE1 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-download.png b/images/header/icon-48-download.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a0f7b0b61451e3178ce2a5eccb8a325ea2fb7d GIT binary patch literal 2186 zcmV;52zB>~P)W7I~uqcv+eh@*jTNDK=YrucC(%o2ER03TTsnC#YV_W>v?glA} zAQ_4uA|W&hHq@9Vlim6M-n-Y|dGF2c?ChI2Z)SFdUO4mS{k!+~JLlYU&$&-1rRam) zH2Q!yV?R0(YyT2Pn$hUNLI#*`o^P+V-pao*AU~yI{UnG8GM9RYq#mePv_|5XFnF( zZRVbTgQ|&Ru!6Pc9+OC7qHRe*%3=GcvO4+Ejqy?msg_Kb)C1q;=pctnw?&0~YAnCc zYc?W*9okqfa zZ+$6wm||N%$x{}z-$JxeqrmrM+@@$`pKSS5Pcgt0i-7pe70iBBF?n(1aJH?f2=Vip zF$s+BS0Xa83k#o6Mg00oezXOoD(OJe<;fFQ`v+tJmNs0;6usn6Rbmj3#|?x!+je^| z#gj=0#OT+{U^(GaKDN;dnN&s9GvhcDa$FzkccGE_0z#4Wv5h96@X)w!G0_~L*zP9- zSCJ|X0WLgT8Q!r6RPMy@UTe3;cO&kj-P{?+D~NO?M#i4inNxHFQBj6qGD1zOwA}!= zd+JiYTcctQ^TY1$T%T!CK4p!Czc>r9ci#tKGa!Hkof1@S1$ojQTzV*`Pz#Vw;T8bs zh2n#>^uT6xg$uF4 zUw`ioG|%8?06yh|A2NoHf>Y|kCje|C38)`_{<@U*nxU}Juod_iC9Iv9!xSfpnUQ{&!$ne2-C@nee<5%3=P!AqC3=}b{24^eaL z9_CVu4zi^)S<=%pRIj~{u{u@tlgH<#+?jLBjmG`US(1h93@p*m$Zc&-R)s~@ECNQF zB?Fmgy>*{r+lE2z4Qo$`*{wVQM=Lb?P-}sJSoTtyGp$*;%Xxf*Q5k zB<(iBr8uE}ezLkR1iS~ocNR;gTu+)-F?r|+NzJ4#((6vW=T>q|m1_t_8A`&}HO)Y# z-lFFH+sGCifY!?D=_mGYdwtgn-+f`((6ohAHcxso?*XxqCGzU+0))$Cwxd#iyfaX6 znPgZgPfUnc>f+tj)*Z6hEs0jtGv7Lx4;;H*`p$DDOoAoLFiKW33%>;seWxPh%yF<+ zWAK}q)1h|b9(CIsCM8k?aa#TI+x!2CNr;FA=gDVz3-XjEM8z~MXf_QVX=pmAYdQ7y z7NauxXq? z+)-rWeCTFSX$Wr>qyhr^P;2a1Dr!fF1~flNiog4DjNanUCs8Eg65#BMw+a#inx4pQ zW9(yD!E>EHOH53_4YVNwB3AHTkHjdqp$Jz}A=lghcq=&XS$psuHO?f~27G>)Xnh&3 zh;W^L|Ca;Lh#`}@|M}i^caktFMo5&Ks0a&CpG5~nguLfX`2Pto019e^Q5Q_amH+?% M07*qoM6N<$f>OjO6aWAK literal 0 HcmV?d00001 diff --git a/images/header/icon-48-edit.png b/images/header/icon-48-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8e47ad746275b571391255110d15b25ce45c59 GIT binary patch literal 2100 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 M07*qoM6N<$f=L+t>Hq)$ literal 0 HcmV?d00001 diff --git a/images/header/icon-48-featured.png b/images/header/icon-48-featured.png new file mode 100644 index 0000000000000000000000000000000000000000..03d19e10aed6f6eaa23744a1b3a71fcfdb6294fc GIT binary patch literal 2563 zcmV+e3jFnnP) z?uTReqe9#wfRUm~D+hrsKNY=gJt{M7*V-nwH1Vz07RcfmWWd62Y-@1&$p%7U7qgNMBc#F6Q(6xBkj0L)khwIQTop zw?!%4&PGc%4EpKQr=zD%ow~>iSlhlC~Fb2!O0+^$m9b>5W?=Yo8 zp^%s-?rR>3#bd%s&Uve)5Xl7%G|Em-PoJ-?t^Ja7;ut$EKq=53ua~;JyNNX;z~^*b z&}QqlZ4_jHaCrCzoEUQf8cxld6QQ{&_75c}gaHkmj$TTeN)#&HkqH5MdV2nGew;`s67Lx&C>y3IdmqsAJ5 z7qWA!4TjL_)YOzs9f0z3A7fc)UXH^G&@QwNstC(qoNJ6Nuy6l<`rzV4TNqd)9PXx- zEM;1mjWZDDm>U0#L?X|r8!)%dF9hfqhf%BrS-$S?faSv3)J8baMdMl-n9ZruPJ=()j!M@Q5Ak1HYRQ>4etNk^_XIfgJ*6AFY$~rQs0wM0oZ4?HmeP#Abu>>wzoR3g zuZO$COHv7KxkDtU+5X$xYp=+7$>2vH33G?TVJqj6c@aPbSc6zMph;ydSfZURf;qaJ z3;HQ%R!Rb;uzI&Nw@_P0yMsdc^4VyGbD<>#yatC+u_mYlZhU;)<~d?IS_NKnghnmlzVgg7wqq8p3B0OibJ?Ob z0svLmMC+tZJQf!;X>Mr|^W##WU@*jOo%MdXFEH04fU}%`=N$^kh$Fyp6oRt?7+wsA zZDB3nVvE3;6`g#N_t0=6kq}fuAM}}-o)!@(#gqYXT~Z0Z2TQcIwNVq^X_{*j!1<6f zB4FIUAt&ATLRkckvly#S>~w?8exEp)F@vh9E61tu#D5 zWM9KMK`~6KV=f~q-DYYj4TCnySy4{h%+T*=kkIq~N;fQRgEr#O(}j~ZG7YvwJobkE zwTHg%45P~mkjZ2w%55%|tc;Egc-ah6-M3r$Tl{yRH%V7=OoXg%ffp$y`dKoO(Q{xR zmzzuo=jD0n%q9J+9gml8DXX6lRI044yxq?ig+6BpEN=6nJ#j5XSCR~5F~ytNEDk`y zGor)-{rz)W=x`vzfH_Oe@%TNAr(vat_SWccS41IRP$oVOEn98z{qdwhpM8&=AK(hF zU`wRw>n(Zu)3cA#*g}#%^VStI13_Vhg6Fbja{8{^i(R8Dv%osEY`3x+viA#&Vv zq{e$V+$1uV_RaKN`r}hA6xmi!ksVD-@Wj$tx-=D|SKgnb3kz=H7pBV<)4vnmqOHUN zP9c_UOIA&L%$d{6>qJUu(Gr*wx5MFPYV>)_;=uUR4{W1z1M_rYHq9(>BRVx!bz(u0 zyjjxbi`pgCkW^uZMBfm!LEox|VO@g;CPy7a9&%~)g+KRFES0H<sNl!ltNHLzkEuFTDBhvN$f>oS<)=8z58ji^a_nKwm*B zAx&J7CS~bSxNlRiB=q9sFW@#Pk#9&W#T=N9pY7y+VM{?@^?+xv+tmi_^}KwWW--hZqd66-J$NV|KQx03wlE zqn2&ZoQ>k70`n8`1V!)8irnZM9VWd!m~^}>OR;+y2A-h5zJG&$@vo~aPy@a6#mDIB zhq1BASwbiYT<({vh0zAid!|>TWl#eLS1PG9IL0GYMs^8n;=7xM4~U!#q5sRi33~JD zjHE04A!nr#DurObGu8gW!!&Z+`aWg6^1_dn698namuHci>Whz8OXg}MXrKIQ|A~IG)PC@rpHrRx+e-y7iv`G=ujNmE_lM5?dL;qW z*ZZ1kq4s0@PaWUrZ)sI?MD%}4U ZU;v^;zc+N#HC_M!002ovPDHLkV1kp9*o*)G literal 0 HcmV?d00001 diff --git a/images/header/icon-48-frontpage.png b/images/header/icon-48-frontpage.png new file mode 100644 index 0000000000000000000000000000000000000000..e8553f1d9cccdd52b340d4865b033b2d9b22b657 GIT binary patch literal 2019 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-groups-add.png b/images/header/icon-48-groups-add.png new file mode 100644 index 0000000000000000000000000000000000000000..82384c76c0d272acbe77e5f2568175c6d9fea36b GIT binary patch literal 3619 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-groups.png b/images/header/icon-48-groups.png new file mode 100644 index 0000000000000000000000000000000000000000..555452c2b6a63140436cc1341d0022a84aec0deb GIT binary patch literal 3434 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 M07*qoM6N<$g1*{wIRF3v literal 0 HcmV?d00001 diff --git a/images/header/icon-48-help-forum.png b/images/header/icon-48-help-forum.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb1f71f81af0ae2ab5a079b1867f214cdf524af GIT binary patch literal 3224 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 KMNUMnLSTXfg(GVK literal 0 HcmV?d00001 diff --git a/images/header/icon-48-help-this.png b/images/header/icon-48-help-this.png new file mode 100644 index 0000000000000000000000000000000000000000..0bfa360f1ae68fbd041f9f037f394eb196e31909 GIT binary patch literal 4227 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 Y0MfAi;-hFRp#T5?07*qoM6N<$f@BsW<^TWy literal 0 HcmV?d00001 diff --git a/images/header/icon-48-info.png b/images/header/icon-48-info.png new file mode 100644 index 0000000000000000000000000000000000000000..7268c42d0a8fcb783498f312b798189bd3682976 GIT binary patch literal 2423 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-install.png b/images/header/icon-48-install.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d52765930304885580160c2a85970ca3f96f9f GIT binary patch literal 1667 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-levels.png b/images/header/icon-48-levels.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad6550765bcce3ea7a1a31584342789675c1900 GIT binary patch literal 645 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 Hu0mjfo6uF* literal 0 HcmV?d00001 diff --git a/images/header/icon-48-massmail.png b/images/header/icon-48-massmail.png new file mode 100644 index 0000000000000000000000000000000000000000..fe638ef25e550e2df1c5a67e24d746268a7205dd GIT binary patch literal 2799 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 Ay8r+H literal 0 HcmV?d00001 diff --git a/images/header/icon-48-menu-add.png b/images/header/icon-48-menu-add.png new file mode 100644 index 0000000000000000000000000000000000000000..364041ef8fdd124df5643ec83aa7f34c2da25f4e GIT binary patch literal 1680 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-menumgr.png b/images/header/icon-48-menumgr.png new file mode 100644 index 0000000000000000000000000000000000000000..868d0d89e9f2a1da002db75b0d9685c0badb77bd GIT binary patch literal 1308 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-move.png b/images/header/icon-48-move.png new file mode 100644 index 0000000000000000000000000000000000000000..790f52d079c30934ad718cc8e3b6b7672b5654be GIT binary patch literal 973 zcmV;;12X)HP)A^;lZ69}01`>5vFH;=I<0<4+g@mkc;;sL?! zo$Eq;0c2CR_xcpr)j4OZh)uQoBD0?D8+7No%D5Ja|9Ix^LOSzaC7Oye!!o$Xf%+OB zEI4c9?8kEA3{;*Dj3Zh_LWTeiY(~YsMyG$Av=FeZ_;7vNGKLEtv&bA`XQ1+AFGU>! zQTLgF|G8>>*PM3aHDbs+2xJ4Y-J_q&Z3X;!w1*Yvh{g^-_hzIu!b(LAeTblNF<75u zOVs6i&wZH+74ZGx?m-%#>v~3~tZKYf$g_ZynEWw#kNPugcqXkt&$8Rke=YkqvQ-P_ zs2lW61|LxjC$B;$SELCPB;P2aF=6Nin7IxG1mH;pfeeI@tVdflojEEdd0)g^h^u9Q z)LiGwhDc?+b>lJGVRDU)F%~V z{k9`szjvz8{!0txNM+P(Z*TWI6$zvwH6i)nz~zN(l6~Oaoqi6|g=XYID$l_y3sZ?U zGB%{eohFnjwA*{2dmWji8yVZ`z5-(ucBON8Y_UhKo3CTuS8#;Dvu^fjy`Qt-d zvB~Q^`HOTqjeMA6hZTxQg|orY@*{Q@*e1je`%XtCANx3c{Q6>vkhW~d6F|dg?1P*Q zBLN?I_RV9g`3KF38=MWKY#>DpDRTHGeg?2Cw(KL#K9g`!<{unJfDvE>tluBD#>U3B zQOD>bY!z$~Y!dVmdI;TuPVuWGKq#PU4^`d*xQYr^`6H09BKSr4P53GJL0F!io?cG+ z%iL8V6yd|RMihiB2-#r9dju-Prwa5SqHiV@Fe%aR)1tpwi++z5{Z1j+p+#P4f^=9y v%*(`zmI*HldM3<9W&{`kM!-64e+3u-8vYr@Y5iCP00000NkvXXu0mjf#iO(y literal 0 HcmV?d00001 diff --git a/images/header/icon-48-new-privatemessage.png b/images/header/icon-48-new-privatemessage.png new file mode 100644 index 0000000000000000000000000000000000000000..a30714dd8798c67cb75ad6cc8800581b493339a6 GIT binary patch literal 3087 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 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-notice.png b/images/header/icon-48-notice.png new file mode 100644 index 0000000000000000000000000000000000000000..40363ca281c14c87dd665f50c889b591e5192158 GIT binary patch literal 2223 zcmV;g2vGNlP)lm{e~$lhljvVMRd5K=%wdEDfc7vo=G8wuV}{10qPhy+Nq;~=3(Bw-RM z2oV9Z7$s!!Wp8us?kdjd>e=b(uIlc+7%45)OwUYD_4&^E&R3^S3#Al3&4+_e`Qe?) zEPocOP`E&6=jpuzK_eYlb@<+cqygNf(Zx4a|D?ATC!)|hf{orFgV*(J98-D`u0Bs2 zA4)ox`g4?guW*ybHGE5T|GxmHRXEIXaM|1Nf7;La#5uB^Ub*nxU>;A8JFRAjEJeaWIH58k2qWo##4OUUJZ0_E7T$ z1Y>02Ap;rFkoy0?RXnR+emDT$5-ViqCY^OqBct6W-B@U9L~O_uVHn|)`@nW|0ktQd z!1AE)&D$e2mB1$fBctwiD+@ z{2!GJNfQM$?{q?Qwl%c`SeiFa2H;IfSVi>lh&B^)(Ue>lskzr@AW~5%J0_zYebYrb z)#m|GG8odlZ7s!|Z@&{)jt5|qq%vZ)X_0Gb_Q_y=!<5(4pFN>@UUck#@*e7L%J?V? zWU4`^mR2`KHvBeTZ;l8+lFqxnR)%0Ozkz8a0P2+6+joldZhF6mhM!s=l;NB~gcHsh zy&x*Gtmb@{HquNb_H1~tRSaOihnj1c&onslXwLq+Q4PRrf+cJnlC23B4K_t06^#ZN z7TmK(;6GbEEV1M(i}!QXl!*fcVw--Qm(@Igh^gah9!6%W7^9&y0B6q*U~oU7kIMho z3WQf^__O?2F9#sGB&NGegW|+B3@Uk0#}3AW9jgKzCNPZUc3z6Pf|ZBApRW>uPF#Vh z657c8Z-TySQWUoTWsbu1ZVyc_BLt?1Mph?v$^r02kwKr8ojU2k9^U=P3_$Gk7AXYF zJjmWh&P?r;@5p5GBCYE~;lX(j?wOUypY*i?r70s!w84Bs6tjZF#PxJiR{|i)4YdOB z%}TWOmo8d9m%oXDPKN)YU{Ynb$FnBXaRIOr?c@QB9#9GGmCRpOTB<64ktNz(rbOh) zy2>ljbazWDknO+ed&BTs&!HAPrywzn3eFuc>%3S={0Wh&DJFv1GPq(Z%T z)2a+*Lsz8S_INn|a&_mP@b#`#SV?Pt`z`8xJ^WU0Yd0f+GK1AA(<+l7kxY~ z`;cU`OZTp|5(Uc6l?I|R4w)UCSejP1t3;q1mk~>>hts^l3U*LZw|*vM@Gg}wgNeSJ zJuuVX>Tw{QVBd=zs36p!W17w9aWJ zhO~{`|L_*he0&{W_zXqE%Tgp0#q?*N%V{p_aTDKB7pwI~x!pGo*U_kJi)!tKQ|9#C}UBkt!+d zB3*$y?N$3K-C9A=?jVRPl9`@6rcN*ulFLWm)c=GKN8wcrIH8+)WiTu(T!qWBm9wz| z6_rGQd#*mWIAZT##q;*2Z*leUqIwy@xQ8)a)^6#(i8270-Ix2lCH0K_sJplxWap_b z>56bP)N9iBikrPvp3tmeH0Z}5TFcPOsd+od``z&e*R2!v-@S>mZOzDB-4k=3oK#PY zk5oTy@}9W0_#$_SNxnu0eT=x!Aq$op^SnrTkT)w|^!s@CR~NCn-Om}n|N9@|(Paa5 zd_ul_h9XSn9PAVIqdxt95#KNGP*-oS|5B_F+)a3m4q6SpxbViGc{*FMlWzMS$@V>R z;%KU!%!}6}ltzyd_9j0I5s75hYFcS{GaUxn^N2grYxu!ww$~SdT!G`ggl1D0|8a5$ zT7tMW9!87aovjnhJckVRJ-xfC`E%hPk2C;&!12R}^?+j$1b4|U!K+V5APvg27oY)_kM~mKlvEWlL|fKy7-18@byFEQ$T2qc%Rbc{ZW8F z-2NMGJ@<3$6zmL64ZzFhA7aPs}M3$s|-cA>Rs0x4|$+3dhGoC&cZA%|&kt`(FO;V9KHh?Jc zhDd+G literal 0 HcmV?d00001 diff --git a/images/header/icon-48-plugin.png b/images/header/icon-48-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6dcb152f59451a9c95c6c8a561a9c7d19e9311 GIT binary patch literal 2557 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 T?SQ5^00000NkvXXu0mjf5C-M! literal 0 HcmV?d00001 diff --git a/images/header/icon-48-preview.png b/images/header/icon-48-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f0157feafc5dc69029bb0798241288fac4fd354d GIT binary patch literal 1157 zcmV;01bX|4P)RCwC#THkA1Wf*>vlbn;&Bz8?m zS|j~2JGHKYt5H-oWYca_hW~+M18;WG8%0s@dbi%FI0oVdn=pFig_9vn9VS+{xFN-k zZAvOzlP>F)?1iT}??(#H^L@|v>%0j$j)NdaDDVPY2n-R1 zC_~t7^J7qN+YAPS$zX+C(s71O3`qvb#{!7F#-K1X7}_D1^w7Q!PP{obzGY{~wghG? zUkV6?nB&8Ob?xU%Uz~aO&=J%Rtnvn3`ProCd zN+1~(FqMk){I!QO*v6h$Et}_ur$+EiwF%-(+)04Y*7ZokuspSg7!D&NMUj#ssH!@M z59K80N^=$Ybb{y9P9V<2o&JP6OkGp=R=~;MZsFNX0&UaAkF_>hhRyR5v&^?ug|91= z&z4s>SK>^KBme^;2RYH(32NvX3QHP)CNA~PDhdqU{Oau{uDai)oH#4)+K+wxz}v&I zKy6?aT%~mle<*+yV>OTe0nJAe|A{O(XmFo36 z=4wUS$S@vnV^7BU_YqJO1)8S$>+E3j)dpMRPok#XL{1w1Zwu+V{?|YFDaaKwPrSjO zP1EG~n*g#8A)QY9(n5FJiO{_U1b!8|FTghfytrBxE9dU*TGqqW(-F8-o5QhRjs(|2 zk+6W4S;6PO&TdRVcNzWP4`gi5+1&pS7Vi9j?{0j(X8ZK=^>hR*$3mrD!vj(RUoOt# z-1V~?JIr}80(G^C<<4y+qB2fh`4qNeW9RVn`UQAlBa4x(YYKGB#ERKuhqW+HUjBsh z*fp|yO{_JkG{Mn`*^++>#WCfeZx4s<9#Sst*>Kz z(-!``J@*3UmcNH;HE{7}2~*kpnnZXy0$uVHyGEv=8XA9l`&Ic&FwR1~u`T-)2K$Df znHoyf3&EHJcgI`Lyo1fjG3=i_xV|~y<$0(#9vyfLAMHLGoa6LH?*hKF&^=#h{9vE; z3h45sIp9#~hLWYFB}Ai9Uz0ZsgMYf59TH#&f}mNJ#Z}SEEx!l7d}Ewd+RVv9TA@(5 zP^nZpy|*2|f;zffE-w~~#q*52O4Uf2VPJA{@{xQ#|1=vS$wJ({8=NWN#N%~H+h`wL**O2OSD_D_j8rLSA^|;2K#psyyx%#TE*k|Lx2GQ X_HU06d;{-J00000NkvXXu0mjf(55np literal 0 HcmV?d00001 diff --git a/images/header/icon-48-print.png b/images/header/icon-48-print.png new file mode 100644 index 0000000000000000000000000000000000000000..762a94bde9782a7c2b0458d9d317dcf6e0d6b48c GIT binary patch literal 2919 zcmV-t3z+nYP)I(ef_rE_b)1d#~=MgTPB-*+@YD3&{*EJ0%t8K@eVzV*0n7|&7A4f`!9LZLZhb%;vUH~9WJ_zGOdp#a!S4(mb3ZytTP9f61 zp~lNEK8LvLBBblOUkevCg(fDZLeGs;DwUB;rx5bO{7~PZ$kRUZxg65TG*ZJ2iCl4!Q|R5CUXsqxM0p6J!5HEZMM^}} zPw%z86xy!mh?%CZ5na$nB%MpNCMHWIA_k4Aa$%7pFj<&bRw`nAqF{`02t-4XGa&PZ z5IM$1X=qi_JyYC-HtU($N=pllk5Z|MLZOTx43NteN(%v$1TnVIkR|C$4;S3Jtv~UitKrOcJB{RiffL zMNMJj#=fT>edM7MRd!h@)?W5JZ_hp7{n73Z1>lJ%e(h0d|NX!~|BWpzS@N<=bx5J3 zy$#zR*@3G!f01a!_W+JES_0&9?ThyJ$T*C*aU+s#Sx#{`lmMF)3r;{OXN2?fyUjf8MjlThY}$a>4n_ zmkX8wl892-wC!j=2l-+Fe|u#R``-8$x_f(2oGcj5Hx4#=r0jcJv&{OCM(Zf582P(v)?TNdt~Rg4m}-H@Cd}Y-gLm#Q4NxLkEZVe4?-SA9K7?AO`8fc0POwi-i^II7iKHvlF{~a>$yfEk+B{${H~)f zw+lp(SQ7-CF(@5TYt$n+98qn$f+$KhqLLmC?SocUlPdL9Xeu<1*$02dOOTB5YoDdd zT{8d#fq#9{i&HtTTASvW55yCSnE|RE5RH$~p;spcIvoH`Q`eE* zbJhT5UQe}JH2^q8q_V}vbXii0H%0JGBj>Vh!K%=@8E$0#&HG!|7)T@x0#+Ch8?~?04_Pq zRy^54A3l9&NOo|S#>Vs5e8U!O{N$x*X~#iacN7HzT3;egEaPdarUHLDl)%mdN%ZvfAgI-m%BD?kEu|anssj542a$Vc6uF5U ziOqJSq{1Ma3*gxC6Q@>mb)9oc;PF8>s+>ejeq zd>;Wj+op?ce(eUYG~vRrQGs0tG_nbDkgssl1`>oxQcx*r)X%eda?S`adh#Uhz5hP! ze)<_>bfrr3Qsgd37%Qg*@bT`y#pP{ z;K<>FrZQRsHPKgs6lntA`_}D+?txsL2OfFp0xyxMkl*WPd)zI^>P zn4FxzWPTiPkG+F~!y|WH^@Yz{@@f8&@B2Tv=ekuZyLKv7LyS_#l=P?{&{Q8>N}spK z%DDS;XCd~|ebBCL*iYmIemN-c^nR<^H}`v3yP^&2H>`&^do`Zj`x=DT3SAw?@gv9a zMlOZJhYs;7HMN0NqjFKh}jX-FBzk)y}I^3w-?wsV?2 z8vwR$-O5{RSsIz95pUYrobHXjbL+Lw%b-YCu32onZW)V|_V)p0w3Td>{YV19)EH*0 zDI~D}SiuxV-lAvK#y#`%FFbce(>${eF8#daQf!QE+qTu3JF;_WoImRe#H?y>{+795 zz?AlY@-(2{fcblhC{WYjYu;s6M%RaijhGG{*D+g>Tx(eCtX=28qkdRY@id%I&k+Cz zrxo)^az{&JX>{)`8Y9gBPSBX5(K0In&0k{sVwyCh*mL*f(!?s1@KnsSf&7q>5+#^V0fj+T&7>gfO70lHe&W%P0sTp&lj4`GuJ@#K`G@#0C>cjhTAlpXt<7gX8@c5a0bBt^!See0|2AiTgN@) RwhaIP002ovPDHLkV1j54ev|+J literal 0 HcmV?d00001 diff --git a/images/header/icon-48-purge.png b/images/header/icon-48-purge.png new file mode 100644 index 0000000000000000000000000000000000000000..640d612526ac794e0b559a9c7213dfe07ebd0df8 GIT binary patch literal 1789 zcmVVY2#(tr>rY9o~v`a@k>Xz3;Hi5p!c zIM+QPBqSoFHpzN-9`DVJo6Tnb?SLvV(#zWM?wjxZzj@06fZfZ>VE6d?Ux5F5S^h7a z^IS~aYp;~?GKN$|8bzuEZs{W3Lh2yd){ZY02L;}bUG5L!tOB@K57iiFd-2H$#+5y} z!PnYW=nVy^&vH9xtgc!d}6851e3?6jQ+ z40o;CS#I(fKC&93uq258cwu+5;}^h6>n^>^wOIr=!wU$c zs2GC-N;@8;P<#I`38JhqK}uu|Xb@=WHh2|ULCi4vRvwMbLZRR< zzTCu1O=_JqvMkoSNZy4m2Oj=$lr@+T`l^BV^gbS_{{d7o3D9dFK+O|)PG(jvvmuMz zP)JKi-==-s)xD&(4QYXD@X5#^cD{WHQzQl~xs98~&j(wa0GcXLzzzInsjLdF9F!g(IF?rKztwsllI=;1^^u0$G&ulh2K; zb>>O0n4=j@KO;9DPDU<=pUB9CL@F(GN(at#GYZfcSo5nCZUNb30ZY@{U(eAkEXLP@ zOsgGbfwW|2#xG!=6f^{Cl@6Y@!(%{bA)->8po0nYt8J#WseW#D`NVT}Fpry$>^{g# z_f=A|X<6GQ>v3sx?KP~9sNdEdEK&(^=zQC6ezn!P?IA;esCA36$(VLJq4EM+fU7hz zI;=iU{Qj$Ep3q8=zd!s~H}*V$EowJb8=%jkz_1-)^a+3;ek{>ZEC zR{UT~U~tA2FKP=Z4gktapYN>=3SRP{!bUtL@7Tg=Cr{=8uE%E|-O_?&IJflKGr7~E zd=_~SFQ7JB@{Y}X7gGp;0VZ@diX>{WO}dx*nT4fKpUx))zy-y_K-c$J^1k6oW8IMw z0WGZQ*~6AuK#RNmpdizZkGy_4Rcc-OoiG(rl_ zmx;y1b>zlCISJSp(#<>bdlF-U?!kL+AXPzwCtfLv*L?J8G~`f!=lGtR$+;O*YOyFs zA>j6{A!ohmHotjgU)*@zic#=UJ&PPmE~lvdo~s1Vq{i%=j*v!PT&4;C&j^yA-2I;Ml<7E-nwcJ{DR~52TzXacqspC;5mYS`$v0dZ)k46 zx1$17co>XrEOu@qhWeIwuO*&0GQZ&X`&bpLrkDYM#)d#=yoCWjegBb8s)CsN71Liw zo~UX;szbuw<%U^*;Mh-@&KCo}yI}c#Y~0P0NBo`t%!&d1dM4>rpD{|t@F^wzjX&Sox~mxfcs_=!Oy{wEaXyr!r(LH zUjKgJ>ra8OTY(2GP5PCBB<{QNzz9J2Hiig5+}FArF^YizkKk`Yzd=}G@(r81Hz)uB zFX;apA)ERK;;w&|5h6qsn4m)XpCLpL5zxFBRFoCiu%~Yf(^8m5l7NS~L+~??ntud7 fLqH(8{t;jR0AFrjSHh|b00000NkvXXu0mjfH33(o literal 0 HcmV?d00001 diff --git a/images/header/icon-48-read-privatemessage.png b/images/header/icon-48-read-privatemessage.png new file mode 100644 index 0000000000000000000000000000000000000000..594c0c868ed033721bc08a2195c5efab4ab391d7 GIT binary patch literal 3560 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 vGzQ8{EcA75MOhLTAABX|o literal 0 HcmV?d00001 diff --git a/images/header/icon-48-redirect.png b/images/header/icon-48-redirect.png new file mode 100644 index 0000000000000000000000000000000000000000..34da2dcdef772a14b4c08ecd4f16f0d99669e3db GIT binary patch literal 1650 zcmV-&295cNP)+Q82D;02Kr)xD8gWf%$FM-$ix>a6y}?Og1%4?K~XA`N@0Ux zMG%IS;v8;mx4Nup@0wgLch6n?J?Uj6>D}ehT8Wx1alE;{ zW*$PU-;W{#1C|Z9cSQ8_uS-Py>mdGfm&2$Ev2yF5%ds#wJj5Vv z$#F>6wc|NKAP^^DVr%G zdF&VJ7))w-q#cL)Z9@?8A%EX#t}oD1yik(RJyFcT<$5>}c$%STi>DAw;=k_R(KdH> z-hs~>8(aC7?u-NiXrQmJt#E>R$NXOJ>HglH>eJ0GTsL9uF~q+JHnUYME|E5-0C%>x zYAfuAr1EB=a3d!QE$4($$TlGA1OV>;LrGQ7=L-cSm&rh=rUqhBUXqCT8L;cM#ZHjr zB~yU<71r1$%xsrREBQjvvJ>*#wj|w#x-USR4W}Ulb4_TF~B2U4m>m0={oSRd4TOY0NL1q@m9iVRB?NJCV*HVxx(qV+gt( z@lTBM{CH{@@re}5!d0gb(3Xf_oJbF6`DChkKBj33@u?Kb48>bPunhp@L}n-cP-cXO zk$I42%*5jeMs42^hWG^#o*juN8Zv<7Y(~CIM`KnH$H2}sd*A}x^kh>f86t2zmF6?C zp*^Wa=m1A|RJwgbT~ITekfL}aiT;t1F`WJ})+KvE)?Y7mC_#nE_z zPeukU(<&sR#wU_Bh`2)r0-NzNjD5BPAQBvhhQi?*1QGx3a4hCCodc7@nHmIf&mvUh zp>fN!iX_XV`Bku-!_ytfC>;I!&bqL%xoMkss^~h3h6YeP%n^w1$KnZ}ZEA5UGs5IV z@q=hEhgcU||ITBKLj!?;ZT$$#B93Jll2Ry^ zO4g~xUXK?=`}?czYbE~f))q-awk^IHVm-e(uW2~c-|KhO&c*}SadJ1eBa(#HzQxy- zYb2aD1flAQKu=H023R)-U`gJ+E>&n*@{)vhWch0s#5X|PFBa#qriJ_v1-2fr$WAjD zLP*i=5BXxbjEbs4#Gi0Ud;`R`EYDNEN{FT?%Zj>QeaROx4I!lKmJJo~P*GL8A-*2s zeMwa=kW{0k2kJ5@O>ZeNJhrUKAKZ>V%~VBRoG=6U w4l~Sh8=XE25I?!}cY_tM=l++e#s35t07HDI3(y55#Q*>R07*qoM6N<$f?`<=Y5)KL literal 0 HcmV?d00001 diff --git a/images/header/icon-48-revert.png b/images/header/icon-48-revert.png new file mode 100644 index 0000000000000000000000000000000000000000..ca48ec00977482e94106510983a7da80911398a8 GIT binary patch literal 1473 zcmV;y1wQ(TP)2Q-OhrVAp<1FOMp0sef%qVi_(+O14UGnD zZN(aM>Xjl$+S&?z$n`<5_r4it_U88XG22~wZM-Hoxj(zJJ3IG(-~X6@c6AU!W+69S z3P1`#k^s=@bSyfUkyvpTi3iCvnm;_R2rz&|geYr5lKa_fMRix3%RG}UWw7nN;)DT_|mqieuIdNNgYOzOSNu zb#8rziOqok@MHd+3|vHqNYVj_v0lC=Z`sQ`3idkkt(!69oNzuFl|KhO9q7!TR6&fC zkFvh^{>t))mT;_diW9ftEI`0ymVUbwjqOMCga6$Eg!ObJH+3D~c(5SfS_MU{6A+~R zJ?!m52b_J3QE$8c+(MoQP=#St3m^qB$jpWpRy?w;H2;9jVz5V*Cv5ZVL%x5m_gdT8 zZugg#bk@hs4~S0OeTIJ~3Ow3}Fg{nBUI&_fbvwUtjt!!_*N}vifG7eGu%6TQ$%fYp zm)o|-+yllG5D4c!P`COo0O+RytpH~lu=gLDn50zk^++?{jkqxHL2 zt;l{(rWB+p4=D@+x&>s`1Im^n*ZW5Or;6&kx1wj=T7r1d;OVN9i1n4c&w{86Ll{q! z!j#G1fN_D0WQ?dUoJ???VW`*b*`|%8OpyW5Qvig!TvtC0g}}7v&nQZYvX2tDScfk? zBuYyOU?hO!eU=uhGywjpnjemCt^0B9;L!9>yg$aW2^0&IfuWt#tQPCS87xJyh#CN- z5MKVLTH3Gt;izbS{QIAW-v|UFUYRxc)F)>iLOD>X`$)kt0#d{%wF4j^a0{T*k&2z| z2kVcVs~C0rT_ONL&8@`eaZ9Pk57i|TSjb}Ka(3&X)paXxw>@QK^=3Ywb3raneI4EI zFUnr|rJgK8YAxf;tM|Tn&n@Q1Wa$^i7tE|(PCL@IUy}tW*1$#C@P_Bx_w7G=zH-Fv zbMfo|sY^lTwk75QbY~R*p_<@&$u;0<5v|C~3@&!P00cmAZ8GuhiA!zEwzQUZy4>$m zT?hRZXPWN9X^*VtYAs@5bz!=DsfK`d08(pgda-lg2VeJYnV1Up@qr8CLE2bz=Q_}znNIRPL562hC0Sw1|o%$Ezz5psE% zBFjig4}g+JRoG7+01_*}h37)z>VZ+JW|JEL6xCI-sy4Y@h~hc`iWjq_2Ec9hX&WHH zrYY%z7(lukfdv!9^0FK*m@LFl{GQwKsb?Y0Z>OuPtF7eokp*u9iI|C`6ETrJfPn~0 z$`u_Ui{HnQZwKLEFbJ1ME*3uH@H{Dg10r^zHD9q0l$4b8G&VL)&9)ZWsqk(FQqG0E z#a^$6Db_dY^?KHzHyIc(rKmhUIvkElG#+n~8fFXN9m2jv!2Tiu`$hr#EKyJ|U|uHx z#0vrt`F;B4p&e%}r?E8v00AVyNF)*ng+hKTXv}0*mTw4+A4}*1M>4h)fE0iffCUcV bKLG{+cf*59Lft@e00000NkvXXu0mjfD7d$1 literal 0 HcmV?d00001 diff --git a/images/header/icon-48-search.png b/images/header/icon-48-search.png new file mode 100644 index 0000000000000000000000000000000000000000..6b834e2f1df43017fc1df1f25c6aac7cea9b29a7 GIT binary patch literal 2446 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 H`ceM{Cz|{b literal 0 HcmV?d00001 diff --git a/images/header/icon-48-stats.png b/images/header/icon-48-stats.png new file mode 100644 index 0000000000000000000000000000000000000000..96170a10bdf30099c7c8e58c9dd55e1f1b3128a0 GIT binary patch literal 888 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 Ef>N~?m;e9( literal 0 HcmV?d00001 diff --git a/images/header/icon-48-upload.png b/images/header/icon-48-upload.png new file mode 100644 index 0000000000000000000000000000000000000000..75eae7c8ef99c59271d3cd721ee49bdb584005c8 GIT binary patch literal 2407 zcmV-t37GbYP)i6S*cr6p;S1_-U1Kl#-t68YCQ zk*cH*7Evl%5kv_gDOCvF7qH7N?0W6-c;?>QbH`rrdcF48m`J(kXqNGvx!*bGJLjHr zhbg7-c^({}^IF#A%nQll12ik{-FT z|H93#&2EN5{LF$>OtGgrnYHx}WnrE&V3SihGw97z=SnG|ATdF5nH1_{9(v*Zo_=~& zcJ=psrV8-W^HWjqJQqu&O8Az@k!#+6$60CV9#vs z0qF_kq!ZAlB6x?GKVakK&2M6PXV>+g(%CWm^3PA_xfx+-#rz)9<$;} z?A`u4)~jvE4EYdVg?EtTe3v8#Tg8ziuiT|tS8EInQHcM&BlQ)YIJ`QNAS%d!HWgDN zE$n9nuOzxDvM9y;ppyeVd4BRn+xmT9pwXN^e1h2<)kL<%&8F}I&dBRl{-|JCE^87pu zWfFf{H9dFNMIqkPky?)UCPwK_yOdZnO$5=#9T#XHS%UrB4`F`$9ig+&bKCdf+nrA% zJ>bF5tBUV;MV{zk!Xk}UAd%9TLMt!_(We(u(7Jib1A?qXU`s`Mw7{qzfPeMthmatS z*E_zk=`lRMY%eBy^ANe|YiM!u4k=(`31a$@U7-}0lVdw6v1{dC=&Y~PaA5tCHS)6x=w? zT~PxA<|i~qVX~SKF7Y;7pS9DuG(Hk15sycvaDkgtY;zV^eM+f8h;+XJ8LAfI(3^85 z4+L8`?VhDOsGdvBRlQ|sU~z6&$RWkPV%mLrM#pAt1!Q3X$dF)U$F_Ecn6;mlGT6=vg5*hM|0fu89157I{Ge6>IfUQ3NC-Gj(Af9P0rX&=)rqcrRXCBz6^>G7W(}hqn8A!2;1;XOKF#}RG)4xo za4ge*bmDt`57c$6@@a11ncLaY!$~^^$Ile%pP3dTW9q`Jv^Wd3lT~p*#J1rpAD74| zS>O3--N!2Ou`4|vW-tE66fs1s==BZgvyg~Bwlp|3_Hmre^d8Vy8a|opczxN28(QYA za(D)=<5Z7*22+r@9E6<`x`&l(&Mr_vgurQ{E{Uih{fVm^75kln=6bi zQKGA9n((MUK9w2ncZAb@)1R2+4@Rziob7w~d^UH<_G5_KEr>*;K|nT(GA3oacuOld z(I%f`IFlXgA96>x>9w18yndj)ZJs^n*gY*BtEA}!r^!C`&7SL44e+W5vz8SEE2muS z`_zMr7P9=MGb8z{_sb`)H1BwQ%8A{<#lP-qo&UqxrhqgH=~ZWo06+j@=JJ#gP{S|+ zj+=%Vcu{|P;=YNCl&VjSe{w)RIdW@0a7^*WujZt_)VlD+MRsz1l;xoee+n5zP-;$n zuTlJ%ah;mvH7+cS(Di(7*Gf&~3Eo7|Me_ z(cqIUC%;j+>9$;ZC&rV=N`Z?xhj!TUKV5c*UsBIpy>%b?$`oLggzZY+i6rapNX~n3 zPBgKWTJ@!s-j!AA+~CBelj&^wFfRCiP`{hFRus^HESo`U)z}J^_w`bxa@t|~1V(=YtfoX* z1#~UZsyE6qOE>myuXd{wDb90CJkhWMqG%0PR3uV-Zc>R_v_TarsS5W*5x7(Q|D?Ce zpHcM$F)!o%Ou|cY5353*QvS=bIc$cYE}cJlUo?_NSq-U16II0nDDh~yunNxw0snsi Z1^}9+n9x{64ebB`002ovPDHLkV1k;>i;4gM literal 0 HcmV?d00001 diff --git a/images/header/icon-48-user-add.png b/images/header/icon-48-user-add.png new file mode 100644 index 0000000000000000000000000000000000000000..554be3d6ae621f73b4c7e0c74887f8b970d9b4d4 GIT binary patch literal 1579 zcmV+`2Gse9P)e z6>LW<>XS|o-xMS0t632Ic_?X%2ny2VK}1kOtokHm1))9&DgK1&OB0`b+&rldn(c!K zqIRjR#UgfVvVZe)ujkC2{hR%pZMWSGc;W8s-pt(jzH`2N?mdTSQcCRR7Q-%Y{}UK> zGdc}wnl|`M>wl#nu>dLOs9O-UwuAt9jR~2f>jqsjIBXUMox0aL)jIugU;-PLEqcot z>LvugF?gP*W)hxDSC5Gl=$2r&~r65?5I=xY-u4W^l(wOT2)e?~r zOkxJd?#mB@z%bUpD!qZ^qbrk(3W4Na1suBC1iHMfypX&F>R!1ztTk|b9#GOD>uZ5r z+?wW<2Sn|AaMfZwIgzUJ?-{)OKyI`ikaFG!&M%Mw_EH zK{}_%`nmBV(CJ{;abp|K33PY~&FZg|M#@&k zfQt~|7R!qcq}(8r<1Edkb>vbsb2stMGwZ`4aQXrRUs2_f;64Ve#|d~`<+i0F;JP7j z9i~`a}DXe-y;>@@hdYN1WHcao|5(&JS-z^=c5z&>LO_yTmDPqld87k+JIvR z*6wHB=+ar)|1lQs+EAcfG>#maR56mrJ^Efn2G2T+Q3;%(iPA8VYM@f=VC7EMjVc`l ze#?9nR_b^1r~=Pee5W$*m_)3$6m=R&Fb?GKoHNsZAK=BR1r;^BjP@gQ*Ek;}H{Et( zFR0iFtn57rYl^^cgRSfHVr7;m9))clM_D@vkBK>wfdl{gXf1pmU+M3G(|<_ccLvce z?+jqwXwotDi#TTMp5FyX) znZSfA5hAd@^1#wPxB!n&DR(YAleDFR5!M~;N1-{2$A1)MWnxdbC0v3oUoqmKx zT{=u6o%mMC#$nk=T-`RXQ%t~f^`=OuqvG9)qC1UJ#ZYo`mE7Qx#Cule{5qyoaXyMC zL|et7sdOURJdpB={;)^S{i7ek9j|-`JvrS1VdCz`F!9t}V*WceoW1Y5~~?%^SA+H3>gcH&H?lm}|6(E8U#XH?-w_ zj7~MHw;dC3WpW-Vt*C&~CgsxO4)wB3VBgY?KVJTA6O~V&LegNxNW^J*)b|BYV)UkW zd$j8GOZRgE(nvx+`pF8sLT7tp&9&dGCz=fJyq9{QdG&`3fWA0f0* zcvtL}drIi0w50^^s0)p-t&Tjlr_P851^9&Cbew45%;1E#IC=uy-b!rIr`5SqEkpZK z;QjZ#2xp<2)!wydNJ<%wtPy%941V+;sI}MQ90>S$z&mWJ$pfnL$D04Zi=Gecrnc+< dSK>bb1^@#@T#1D=v?Krk002ovPDHLkV1o3x{@(xq literal 0 HcmV?d00001 diff --git a/images/header/icon-48-user.png b/images/header/icon-48-user.png new file mode 100644 index 0000000000000000000000000000000000000000..3c23f5db5ddb4711aa1a2221d5e41d6814a160b6 GIT binary patch literal 2472 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 ik-^6Wek29{C%^#40gFsW1>K|o0000 \ No newline at end of file diff --git a/images/heart.jpg b/images/heart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02c215029a993476cc923e7436206fde1ac68d78 GIT binary patch literal 747 zcmex=YImZH5*G7G@9tk}Pa2K+Mj{!oteV!N$hU#>T;Nd3XdtKm-mLSy)*)*g5#QxcEi*`1s)BL^J*$Vi4qD5MU5sW)x&# z5@ci+Wc+`GVLk&RBO}o92mo{zPzY6!iG`U}fPsmLi5Xcf6C;Zdv!J3dt02(tOf2jO zGZ+~JnG78j6E7+?Iwch`3$q9@py&ju6i`$UW@KPuWMX4thG_(9Q#5q^5SUolIPu~` zfsF_M-(uhaYGe{*76bokdH;dR~k!+x_5y3M!UQB)~8_uY+u^VTy*{=W$TNgb{x literal 0 HcmV?d00001 diff --git a/images/heart.png b/images/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..d9ee53e590a68a95a9fa9483f0ebd14f3f25bb72 GIT binary patch literal 749 zcmV{UrO36YoGex>*KgTU04Sb0lNGJEiq?mmQbVHD$?08PR{#RY@(Jtf90i82`&dI!dW7jO<!P=IT3`*tHLxxjwl=}>+*)uJ zQXzyPPN^^yrLNn-L6|)gDrKnEAdbPP1a+KXt(F*+N-)2L{Eb_PQs+ab)QQT6Pw(ST zBha=K(orHRSCfHi4O9%(3e<(Lb`^!uF>+VB$3*L{zr`0-_;)Y*n?E-k7dr!rf-5ve?cY>d<{Q2T>(phfG`V$89Qfr0$5PaI$GcI;T;lseVaJa_ff4eP;K@^|hsa{cCz zXuY%j{{3s?^}(OQ^lJ0wCa2U<(RxpI&Wzye%Qu%q>x1omeM7&Az4w3Z$LrQ@df3^y f|6iKmf8+cE7K65BSFA1B00000NkvXXu0mjfxAtvo literal 0 HcmV?d00001 diff --git a/images/help.gif b/images/help.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b514253179abc826410a1c983b15d1a3239c95d GIT binary patch literal 1582 zcmV+}2GRLPNk%w1VITk?0QUd@a-QcgY19By)8y*(0Y$ncH=K#G^kS3d07=4csQ(&X z(dz8=8bqk<@%PQv>NrNC3roHrT+OS`|3i4w09o7{SPmH8rU=6$U5 zMPst`_4yGqq#iGHmg0uan%>SCf`vOS5jJNqidEQZl;Q%?Y ztGwPVWyuXrz`n%cMU3+(aP}i%+HtEt+2HOraMl|! zn^S|*dwaXt;_(1P!4Xl&E^*#cknR8d^Zxtw2NsV%dfauD&`EvT|Ns5}|M^IL)&2eZ z|Nr#;`}hDvwp@+nTZYdCKdlf$yB{T!PHeVYT&yKu&^lVK4^GH5Jf0mZn*aa*|Nr~{ z|Nb|7=5&R@I(*{>K(26|>;O8fK863=8{ zH*(v0pxsQ4@ob^$S%AuJo!^$k{qXJR2qmB#Adiur&5NhlnWN8`sME;N=+58sB`cMp zrO{rc|7o4=ZlLf1JEyq5-e!)|T#)Vh`}lvW@sg6pXqV}l#{X)agfOd`FNMm5h<1R z`1ygA$yko*A^8LV00000EC2ui03ZM$000R804E6?NU)&6g9sBUT!?UuF@KD>Fkm2q z!zFwj7#?iJq22@@S~h55_HPCQF2sgYrUxLwtfsB5#$0uv--5?~qiV1-5pTm;?9 zkt9eP1Jck)lePn0x^qP2_*m#bMwT2Bk|Y7Z%g>oByi`y#aR6F|5+0@^T)@Q}(I82% zoq_h*8ix=^CTXfneSym_Gtu3>Stvl1n990Tl%Yr?1YN*D1{$OaDGDeIp@SN|WJE=p(SxeMqJTgbuc)DeA;=bL0}wDk5YHm25LC$&^XQ^MwZWEgj2?uf0cEn_ zCi2b?bR2|ADO8*?M6h_0SO;rBs7H>0hFMCu{v1e4GuPt07Nq|WOB#I(=6nS9Hm&|$|?kq@Wd0FeA`SS z5WFJ_AKYkkfe0R)fQKtO;2;GA5J-W8Jn{U13@9s2vc?OM{E$KfAAF!d1@R~X%p!Cw g7q&nRgi*u;1&ASrB#|@=^1?cE2QK*F1O)^DJ1*7%H2?qr literal 0 HcmV?d00001 diff --git a/images/home.png b/images/home.png new file mode 100644 index 0000000000000000000000000000000000000000..2c161f29353e816086611094619218db41a4bfe7 GIT binary patch literal 4376 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 literal 0 HcmV?d00001 diff --git a/images/ico_chart_bar.png b/images/ico_chart_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..9051fbc609b92b15af9be410e368b7adc20283b8 GIT binary patch literal 541 zcmV+&0^V&qIn(Wzh!))n z^W^$!aM&X3bCX~Vo|JLOLCb!-`g!yN7b-yh!|sbVZ|M~fElQAyiB?lO%sjz z7TJ==TTk%_A{ znxkIa+E~RC#EKF{U0G~y<6)R9(uCp7&f7|JN}RHwEO@{EgbF~D3a1<@ip|9yZb^6$ fo@6A$W#9P^w2GuX0-m@}00000NkvXXu0mjfB69Bi literal 0 HcmV?d00001 diff --git a/images/ico_error.jpg b/images/ico_error.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e1160856f4114bb88b87658e85f35094bd37788 GIT binary patch literal 782 zcmex=3NN}0A_EgTrU_LX5@3BOAGenk&&7LV_ zIYb7;J`QFwG6I>My&FHeWvP`dziP2;!om3pi)Uv<1l4G7{(L}YS4>W9Hbf;eqrKt; z#TLsG{XWH(xyABjY_*USKKHN@$IULp{p&w(eN|J%Vg;pKidbr&J46V)DiSzY01aL?iS-<#H z&DO%IYIGz=M6xo7G2)EMzK4qEax5VpV+OiJV5XsU(aWz7Rt5|1=iBe6!P;@SJnWzB Ripd(1nY+wB9FzKg699a)yxRZ( literal 0 HcmV?d00001 diff --git a/images/ico_error.png b/images/ico_error.png new file mode 100644 index 0000000000000000000000000000000000000000..628cf2dae3d419ae220c8928ac71393b480745a3 GIT binary patch literal 666 zcmV;L0%iS)P)eOSYYtbpBV}~vsBnU!_?2tr-P=|^T zED%wc9ezHgW@NMb!^uT_|SvCpFLJylbx zY%bpaTGI8IYXMN$9w<3j9VkA~NYOKEQXsj?6a9_hcwfU$acAhJhB)zb_w@MVUEy@S zX&I>K-R!bhu3?(6bHWIg$HEl7{9g>>&l_qdd+UYb(1~BCo9LptNq&8>!yoJ3Ui(i5 zRJ|XnYBklL!{@$-7=3mJ>P@1c=7Oc79e-V7yf+%lD2!I;Y&nXBZ>=B!5?CB>LvEx6 znI%n)qqi$#X#wKB(U7XP2P=+4{b@j#r%9-K(8UqtSDk>0UKzf*HM9yqMZ1D!$2MdZ zR=`U>0zhOH1XqN?nY@AQqB7)Fp4{v&dKXvb43hZKvnN8;Po;+jY*}~*Z|W9Q0W%{D z^T}Cc<|r(Su=1K=P5>Z4 zg`et&Va}tdzBS-G-ZcO)zCWpJvGQwrHZ`@wpM420ac@bI5~KkTFfGEM3sPWO8co4^fI6lPnA)Y{ef%@{+SnoUk0+dW+*{8WvF8}}l07*qoM6N<$g7cXs A&j0`b literal 0 HcmV?d00001 diff --git a/images/ico_hourglass.jpg b/images/ico_hourglass.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dec5047c20db8e88a33d1da6efdb782531816938 GIT binary patch literal 768 zcmex=Y9jZH5*G7G@9tk}Pa2K+Mj{!oteV!N$hU#>T;Nd3XdtKm-mLSy)*)*g5#QxcEi*`1s)BL^J*$Vi4qD5MU5sW)x&# z5@ci+Wc+`GVLAgNBhc+gfR&w*ff-GViJ3)!fsut7SuG<2P*hMzm{kO593#+Y2s0R& z1Q`sO6&(|Wl!RG?FiaCrFcfBBVq#=rLg)dyNiopSF|lys!p4mU|KDQZ0lI-nkXaBI znCqVHY&g5bTOTOO0dxT)E7RtHonLEi+RfB;yP5qf$Lv1?Sc(ZGWtduc=mpb@OZ&k> z%pf75#L`n2rY>%RC}Lu>XEKHAUvY#Y1h(xach)#P0`rPwg{i&b$vL>Duoy`qg{ui-w1BkM~a7H5?Ne*U#eap!qy zhqagb!UU>U`a^65sk^d6>aV)T;YB(hf7^panL(llS~dMHG)Fqs1BDQt7B~iVA|p_Z z0IP1}xtCKnr?WCPHu0-DiEP)9Rl#FaScf1rbdiwsJlF($-D2a$MB1QH?*P$(@5T4@;&OA53{ z62x9;g=MzM@3B}Z6q2JnuH-? zUBh=^5nso`tIMpW;}SD*?>znX))|eYdi7(c&C5YW8_t?tIU z>Ny7&^Pebhjth`srpO|asbD=?gpU+WKXx%hg}DA%|J1=w1E3bQW2brAk)glQS%iL- z`SP4IjX^57**EKJK0N;yU_Z*GguxzUVD)Dq(FOHK%^eAtSc;pSVFoq==$r8wjtx+n z;uq8_iQsA|i!@V3bf!VptWTH>59QQ$XGs&d#Zun48g&^nWN z^4`U@k2?PS6UX#XYTlj3cBYJ6iA9-|t1JhG+#TUO+}j1X$SI>}h@{JnYgEm?zE&dZ$p*yS9BgbH+&o-d z++18d0z6Br zB+e+vB*e_ZrXZlGBrGBb3@#QHc7!w|gP@`#6SHBXkW%16rzT-#V<9v{84QFO8JHMZ z7+K)10BJIG3`}e+oVakKfWpCx5C7j{-~qaZNsw6(7|a_lJNG(R2Nm}1KYT>yOWAi@ zpMb5#=YeWC7#SHDS(&Ch7CCie`pw>rYwLYCy$RU4{;AWW?4R4!KiphavdUz_=b#z# zV8u)z#j@^!zYGo+f(4jC0+M`(3+n743YggJnfxJA2qq&VP_)bBrnJiiaTlIzwpO2_ zviP{Zn%*wzmO1DfAhu$zOY;dG|MQ1$y)J4AXYH8|Hh__t(O$7+v9KLy>@wDmZr01c zYdzMxeC=Do-=jCptt4OADe#_nv}@DNWrxq+uG`Kk#jbC3F66cG^pgh-3lHa&exDC< z5y+GsOBU~pIL4~^>pug;Z6HBT_oC@RAEt{%$E+EXWe{B)dYw8obSC&Oy9gZeGVE}KvxJjn)nD@3z+YE@J#NqPYEBT?kQzz lrV7JdDc~l-yW)}9@|%Gl8M2u(C!hbQThU~6D60PdO#qn?@Vx*4 literal 0 HcmV?d00001 diff --git a/images/ico_page.jpg b/images/ico_page.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8d681c0fac9045a93b9dc14f8db8c4aee2798b9 GIT binary patch literal 776 zcmex==)Y9!6HCo}!C|7Ur*Cim%@Jp8+h)1QM1sn&~MI<}!o0g1(b(LL`~k?3thv z2qq&VP*m^ZVzW=NQ-m`m(xyI?lARjsz$jtedMw{peo5wc-MLewPu$(GVBSQ_dwNVp z)3&U0tr0)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4kX|fZH5*G7G@9tk}Pa2K+Mj{!oteV!N$hU#>T;Nd3XdtKm-mLSy)*)*g5#QxcEi*`1s)BL^J*$Vi4qD5MU5sW)x&# z5@ci+Wc+`GVJZV7Bhc+gfQ20>!i*xw%)rFLD!{I8S4O18K?ZElp2w>?;b2_*62k@`iodN7|E#JA-w zNQcNWvDq`pLnIJPMn<4$>pl-}t?UHe8+^I(3r?AQEAUjTn#*?QN~K4e#w}Gl6`3OD zn%yBg&P(RczQG=SUpO9Y3L`V4z2fRgR~2;BuHCtmujtWmLuUP+y=6R0Unlae(^g~S zWMDlHu^OZ@wEVf&Yu1lve?8VQ`BXX|;t-I;tV5P3>?JxuA_y-FytRj0BH-MASwF>X z(sqHZPd6LL2;@iQB^}ryvUw_OK?%Bl`zt!6-2Brs{M?Y!x$4a}83`06+3+saEE z5#^tFC(eG2?7jz|AYs7_v{!(~;6~lw$GjTle=mOSGFABUt@_B?IkxkR|K9`vLVdJB literal 0 HcmV?d00001 diff --git a/images/ico_posts.png b/images/ico_posts.png new file mode 100644 index 0000000000000000000000000000000000000000..195dc6d6c365d298e466026b37c1959d96119ea7 GIT binary patch literal 663 zcmV;I0%-k-P)^@R5;6Z z(>-WZK@^7J_sq=QY_e{46@P+~LNG}sRzZsxQHvCsN*h5ir6^j7pq-$xu$N#V1gx}9 zClV7;5)7zih-s3DB)G=7|99>ji@So7-P24n=VQ(@GctDX!^_@$bj%oviY6e4Dh;od zooe%Wvs8LEKQ&&bL&@bwi=STIAI@!-gB2jC5+?y?VR~VkrNxam-`6*8&po|RZ5LpS zNKdJ%c4bTX`XjKsnecf%W>1%6WT?pKNdLLq{=(f(Col?P1+oq@R>)W(n=x!|*BIIh z6DJGw_w`)u6yN|vAhMteYK5#b%r5^v+VCFl1IGssaclZZMS{vs-LJ2$)n7DAr6==K z<29#%AXsBsDoO}SBaXR#_Ap!JKx)(1)3O2pj0_dYWz5By*X74fRT01$Fk%P_RzOMDtV?GU{nsYq#K8iy zb6qzLYDj`_f5$BwC*WE(t0m#xYJ*=jC2|HQYHh=pf#QG7oowi`h!L!{DB$8|qY{~X zu8@sU1tWq;n$XThR0%;45mdqXM892|{CJ@0DS*}>?ami06Q_^tvM~Y3K(_-`#m!8f z8f!QIrH4y#61;0Ym0cCoLl8{IPombPHtnn7%SbTdI&G-d>ZQo!_wBMF9nzX!g8HVY xYTJPGciz9XMh3w2fmZ(7v{)r*QZD48?mrio{~Iaoq8MZ5gHho z1cew3nH2*Im5h>vS%lCH6HrhT2AU7l#lj4;mQheZk-_joVdKJwj)95)Z!z!y?P3yS z76gXn^}s;ZOZVH>14TK2`WRW6N>>=4y4M}VEptqLI#`qmB-)&~2FzgwaT<8)Au>#C z_Dlv4aS*c~%w%K)GAq|#*umtWwn056ZEd+(%e08*^~`ZI^KWwo>n2%uJbm4_;`O5h zCS!;OW=4BOo1iqS3+#*jGgwMVznC4xn11?p@1@G{Yi}RN@5_7CcVqE|Vu+m}#WQRw zejkU}3*sJ{^%%%O_)0+WJltRbJ^`kQL0(xozx6g$1Zf^-k5;@|p=$JU#>4=r4$X~+ p%l!%@1h>W?w}+c9urh7qon8L^(f8!xRtPMe@j~b4ujBu30su2rnNk1% literal 0 HcmV?d00001 diff --git a/images/ico_settings.png b/images/ico_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..fecadd08afed92536be91ab12d8e37b6bf410d5d GIT binary patch literal 613 zcmV-r0-F7aP)wK%m(L+9IV|s|#(WRl-O^4GvaQsnHq|OstfO zIJ3}3<01}YGARE4m!7=)QisvlHUo!Qymx-@-t*p_129Ko-#pVI)6#!*kLj-AGXWNR zyA_{wKii_amK7^YT-v z6#plaNm#8`-kz@OvjIt^4%IN{@J3bR zRI}ME1Mv85p|%;RK>ViR>APPLB4;;BpCtqE@P+*7!G>I4UjNx~e>r3HA^tWCQ@S)l z{BslcSwL-CxQ&_ZZSv_g0Tu{yi*X){Mt|W7)lbE`SQxFP00000NkvXXu0mjf;)M*S literal 0 HcmV?d00001 diff --git a/images/ico_user.jpg b/images/ico_user.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9cfe0ef257839756baf76a115445756466edac6b GIT binary patch literal 827 zcmex=|KDb4VPIhf0U*i3#sb9btSl_7>>O-t>}+ft zTpXN0z`@1E0|G#jmzRe}5ClZvfRTljm4lswpNorMgpZF8E>1M#{~-oJ4h8`R0cJ)) z1|~s9WpU)Q3IkHxR)q1W! zyH%oLjAY%>n?-9K)weClRLl(X)^7dAu;9nVEO+Ov=Z{Uiq~0rZ=FGm0opvT!!dKoV zuLqmV$joT3xH4nrrc1KDubE00IkuEI@7a)Bm%_k2samu{ODk;JLVlJq-SZGvfm8=9 zGd%QO!1-+X`;YCOXTMbZc@A+SNN(4AM$^c^`IU;%*FcU%gp9x+sN;dE1VW9zHyjXh z<+`QJ|M519jlh~2)`_;<*CfAka!5KRzE-%~EMV@?RSCCJfI}(whyV6tmYr??8RpAd zL`_)OAr%=_F0)`y!Nmt1HzqCp{I3h*LS~TpLTXWV8(-gJQM&c-@7Lx?m4_a0gcN@7 Rso5YiGdyT>Tz2IDn*d2+(6j&m literal 0 HcmV?d00001 diff --git a/images/ico_user.png b/images/ico_user.png new file mode 100644 index 0000000000000000000000000000000000000000..79f35ccbdad44489dbf07d1bf688c411aa3b612c GIT binary patch literal 741 zcmVz1iyEv%?$mbQ(# zwJpuiQJP8?X_`#S8b+U_G6=ziYB!xPAcq{)ZJ0bECH@ zYx#`n8^Wzn^J!4>=q^bltNO15ry?0ecSLkjpT@vlid!jk)Fjf7&)q_V5zGs#3N%6* zbW~7Hg=&P0&~Y(|g>$hC9FL?;ttzPDZbpZu9OLb33^e2;FNTGJxScp1&q4M+y2ntQ z?C(=hpU$3~`Thx0eHwi0x`q+!d5k@|0_WHe%sG3e-s^MM`xM-ig!VcIA7H}X1ot~L zg=MLB4w-Q;Bi!!u2|I+Qb;0{{4Q53YX6+4_aXena{nmt*!YG7ua~`qc>o=?@U?rOU znS7%>klzi*muXnbM6i@4FR@s^8vTjDgy&%J?w?`u>NYMDFa_2%0SQ(qJE<3=<8Bzo zfdU60e*y(^$RF%r$kl)p7=7tlCDa$+J7w>}DU(O#~fk>pYuRvHi1E9^msg{tLeV XM&GIRvfA7%00000NkvXXu0mjf&%8>| literal 0 HcmV?d00001 diff --git a/images/icon-16-allow.png b/images/icon-16-allow.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e67a2a22750107c3eed9b568fc50d40f82bbd7 GIT binary patch literal 462 zcmV;<0WtoGP)V3HJ>X;!5Ou@_(83xQuECH{-JfBeMwDtqC=81=66U2Cw=0A9Uo#F4lKMcSA{ARfS z_M*VwfBzN0E|_s5%Rri6W&fuiZv=k-{dwWp#|MtpF6+RC^c{>%km6UI|M1-nhQI&+ zAe+0O%6VNP*nriSn%_V9a7WC{Gynhq literal 0 HcmV?d00001 diff --git a/images/icon-16-allowinactive.png b/images/icon-16-allowinactive.png new file mode 100644 index 0000000000000000000000000000000000000000..7c928bfd09997765c1107a45e6318d1ce64970ec GIT binary patch literal 471 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 M07*qoM6N<$f<0)AYybcN literal 0 HcmV?d00001 diff --git a/images/icon-16-menumgr.png b/images/icon-16-menumgr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd132c43c1ba813c3897c2b90ffdf7c333b49b8f GIT binary patch literal 591 zcmV-V0uu!ta-sJQ(I zNp`cD+1Yh=LTy6=jrd^L_ujtw{oZ@?9*Lp||087P+4T9b?A`_2u(J;P+|#9)a?Que zqqDD%lS@x;z3Mmn@|;^}V6$iDq(R`g(KMYsbO#@QJjPq?9Il(I7)el6?UOwNQNy6f zkKe>mW@5iF+(OrrU4xs9<5OuFL#fGa0F4l2(*wv#!}C1l)MS;qt|5`I+5iknu`e@< zlxZOd1l)!Xs%siD=@#SFCq;bN43vIt+{V2#hdZ(uvZvIyQgiYC%QsN5;~6<)U_Mj2 z2!dVf7eYV_!>|pY>HF%$0Htyn&tJUk{*;n95FzMJfW>1)7=hC=1}3oXT3A|G#M*BM zS7t7E0K^$k5pI`o@y!9e``NGb+ouO{ z!uPx1Ya)gTy=Vn()+)e2;g d@~-$JzyM`a&-Ov;UXB0&002ovPDHLkV1gmV7|;L! literal 0 HcmV?d00001 diff --git a/images/icon-16-user-dd.png b/images/icon-16-user-dd.png new file mode 100644 index 0000000000000000000000000000000000000000..35db6f238876e9642031a7173bd36304f7df8443 GIT binary patch literal 598 zcmV-c0;&CpP)AEx1F`aKZ8U}TVWFHT$6cjZsjVOjf{jfSt~+p1Qg{lNz$Mw8 zoq5kUo84$GQS#uiGqdme-rMh+Rm=>f6h`9BW*rtwuvCGy5wyOGE7jM3mpGgYRV<27 zZ+`|L^%a%_SR<7}u5}waIl(uMM%WSF&I2&&AS+-Em=uWn@-(ui8YV<(?1W@&vJgO? zvNqYiGKpY(0!z^!@JP0&B(Tkq?v$^I!l?-O(u^Yrhrj}SXQAobD)OHiWG`1X)}(u_ zAeb+=o_`L{FM>GWI00MhrU{2OW}p|}oYHj>>?}x}&^kbBQBj)+=bq6F|L|DrOi)fV zI5mx3mzxg;1g~0G!QK+QQXrNAy)Ga{j^O=~Cpb+_=}IVFdct{}IycZj z30QdndfPx(Qm4hY((!NbmlY$BE>>4ygF_m6T>NxGY8|6YG}>}Q%3{pHz3ndZI-8IaU>VhU5s k*DCi~(NqNgi{Ana0Po5~FSt;=2LJ#707*qoM6N<$f|zv*9smFU literal 0 HcmV?d00001 diff --git a/images/icon-16-user.png b/images/icon-16-user.png new file mode 100644 index 0000000000000000000000000000000000000000..69bd1a33cce79250ade093f06c59dccc9e175e1f GIT binary patch literal 790 zcmV+x1L^#UP)k@aCcQA_`voBlP4C5EVfXPa=2|tO`}?p;D|gYFkUO zEoqZ9+3c^`87FIPBjTxZ7-k;xKJR_sdxL}!u$M)u+tO7OT#$m2k+y@6jlr%F%v`ZH z_4(oQ$F+$^Zl7}}F%B`j37bC_q?a1J7td}1t{!km0ZcJbBHC%AJAG0?oTwU66J5!% z=lT6-ZfDzIA94Pl0S-x`5Cl`wAu1NIk_kXDgzT~ri)n4jRy0YdYB1AZme1{4K#+l8 z41~vg;j$I5EC9~~VwZIATd84yY`c_v*2bpQ} zrK0Yw7@&yxC8EeWTMRc+Ba&q1mUOBC5UQLfVR|u~2xUl!gjv}H%3ahz%M@2~$kk$? z6AqPPF6UWhPRfu8)Bv=oeou{Pnj&pT*2DL>Y^jYh$}IF0CgBq~1#z?m`K9bDuVQ`x zssY+=WdMk4z9#$%Fi!xN`aX=7M-5Hwg>u+(Ev;d!ufYt`sc8NLAA-vzv$bKV?^ z$UEiVVC{GNd_DmWL zOfQO-`ncZvv}Js3M(v|v;)8))P`M+q2oyr9@_~CU6bps7rMovqf()V>WVsO8n^P2E zX!IyfHJ&?wRsp#z=$H$?N8JlB)j|dRAKH=dXCU;j3RY9g0=70Em^O@Jgi|sisT~~2 z^L(E#dOmyk7hq@k&Ib3{6^HWG$Xi}-?r`TJO2`30D)R5 U3oMO0I{*Lx07*qoM6N<$f|2NBm;e9( literal 0 HcmV?d00001 diff --git a/images/important.gif b/images/important.gif new file mode 100644 index 0000000000000000000000000000000000000000..41d49438fd08230095c699b2d6f80593f3aa8667 GIT binary patch literal 1492 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 literal 0 HcmV?d00001 diff --git a/images/j_border.png b/images/j_border.png new file mode 100644 index 0000000000000000000000000000000000000000..3c40d2dde35991e1b5f4dd6af29859d1aa7be7eb GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^B|yx`$P6S+cT0!?Ddu7)&kzm{j@u9Y9{{;*0X`wF zXV0E>s$8c3)c6KagsCLRFZe&h)9nUcKptm-M`SSr1Gf+eGhVt|_Xj8_U*Z~35}cn_ zQl40p%HW%rT$G=inv$8Q;FejGTAp8&U94cSHRDnRP^lP5sdG_kVo7Fxo=U-c)I$ztaD0e0stlFI%xm^ literal 0 HcmV?d00001 diff --git a/images/j_bottom.png b/images/j_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..27a6fa65e4da2283aba21bbefc1b35ef85846fb4 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^?Lf@U!2~34edqiKq?n7HJVQ7*IBq}me*oli7I;J! z1C3T~N2spa`a*~JPLTQe?I z0F{b?lsXrsCYEI8=P86_=B6?j80i~W=o^?VomxE^sKUy@UIuBY(1gv5~uiyYhrlE9;YXwi)N?na=goY=m=}Q T(kVAxph*m#u6{1-oD!M<`%_Bg literal 0 HcmV?d00001 diff --git a/images/j_button1_left.png b/images/j_button1_left.png new file mode 100644 index 0000000000000000000000000000000000000000..a662f92f45196f7c151d596bd36e26c2ee90038a GIT binary patch literal 400 zcmV;B0dM|^P)1RCwC#noWv?FcgGM7&Q?Uq;Vm* z5$}H+Z(z`sKN}I_-@NI8zQ8oJ~pg7u|dDylfo(|Ky&_qJ`vaa@+gf%r)LBJBIV zuIng@9*>9CT1p9Pxaf)PAFi0UFgn;m0BgCf(_6X;B zh7mYaKp#z^5CTR3A@tEfibl#ig`{;|ecy){ToJ}`JWZ2Q3SKaku+~;pl_ZJhdAEGR zZQE$lT=|B7-3wjU&GUR124Z>7Mf&ctcD45RvzpR0rAA|np&e0cO>vY`-lnF$Ju#Px up!52V)Oo&UtLvKfMH&>?U>NCJfB^tWmV-Dyt)BP*0000gww0>FMX^ z=jG+)dbVG7wVRUJ4 zZXi@?ZDjy7FETJMFgAXJ@C*O|03UQkSaefwW^{L9a%BKbVPkS{ZDnL>VIW3na%FdK za%*!SIJIcfcmMzZa7jc#R2Y?Y(MuMBFc3u1LJ>OgM-T&Q#L)X+BpIj6JAAV`1+Ap$ zL000&U0ssI2xlj4v0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz3Q0skRCwC#-LZ;;KokYgWU)}Nh!7!N z{{N!{I|E{>L8lm!oi+K0bvUOG>swqNk74Hge!owc`PPvB=E|-fS z0E#O27^ATrpfKN4F)1Zk0F*PiivU2m18@L;YZ*Hk0ObzA5z0M;AP9hx*tr7~I=QXk}LI{t?W7{?>8i1qw6<`2SL1Jaud(?6O0000_9BW!3HFGZnV7xQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`6_P!Id>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!u! zz$3Dlfq`2Pgc<8o;wJ(HEalo5!^cIW>>2LPn+@k|5@+Eweof->51#@P&j0-p17>QM%L}egm2!n zw!OS=;=5q}`+fOUy_xsRcdhHLU|6Q(9Wkv{qsxGYd0TF?huF5#;8?r?QG6Fhla`r-2ZOiE1WrN(Yn{>OKwI^^Yovr z;&|DF>#L7NL-+$BnIoxFo{0W1WpQM000&U0ssI2xlj4v0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz3`s;mRCwC#+d+!LFaQP6>6nGJg59Vn zR_}imuTc=X6AVT$!ep2`3^csA$Rf+X_oaNs0YvMi%0+J3yga$OhRs;V%`_~@XbC`4rU8u`ADmlU0aJ9> qmSss@*Vv9bW?6{ literal 0 HcmV?d00001 diff --git a/images/j_corner_bl.png b/images/j_corner_bl.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5287a5cceb6231024958d5ea9b69a6e7841d9e GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcH%*9TgAsieWw;%dH0CG7CJR*yM zN`yd|@zUM8KR`kG64!{5;QX|b^2DN42H(WwqWs*{l*~j0x6Go{^8BLgVg-w>8J8-6 zO2t4*or_WvOEUBG6hbm{QyC15^bIWZ4a}BKt)2{2(dy~q7$PyX^_(FWv!X!j!;=}Q z#!XYFez)%lzwnmD(M5zi&}U=liDQ4h9)H}pwM^dmhq%$PV-o6$EgDPbun0b#DL9>nxvduXwwcF=6e~Ij{FhCoh@8|46SzAo8J8-6 zO2t4*or_WvOEUBG6hbm{QyC15^bIWZ4a}BKt)2{2F~QTtF+^f&?HNO^0}4E>7p`!y zZY&YtD*O7+{Ucl7IWgHTNfX%^t1bTw|NqrF!}I^+y>8FDQOpf9S8VmtOjmloX38(o zGc~c-_r2f0Xi8AF>9HDar7pvH&pSKhn>w60oH(*|8BUa6uRd>iT;h6Z>ABv;GDmCg zYc37)%6@Cnw^1%~&v%A~j@#QZ*Y+BA`~dpzqM*aib9TmcK({e?y85}Sb4q9e0R0Yh AbpQYW literal 0 HcmV?d00001 diff --git a/images/j_crn_bl_dark.png b/images/j_crn_bl_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f4b9fb8bf7758e486733ea2067275466adbcdb GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|S3?zjfeX0gh%*9TgAsieWw;%dH0CLp>d_r9R z|NsBz&!6w#zkmJu_2b8n4<04nJa0`JjB*BP4<006%w literal 0 HcmV?d00001 diff --git a/images/j_crn_bl_med.png b/images/j_crn_bl_med.png new file mode 100644 index 0000000000000000000000000000000000000000..2b77f67767fb003f31b16f62183937c868d8cb02 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|S3?zjfeX0gh%*9TgAsieWw;%dH0CH6Vd_r9R z|NsBz&!6AFfB*dX^V6qKj~+d`fB*j7yLWHiym{@~wTl-oUbt{!X}P{TP(5dXM`SSr z1Gf+eGhVt|_Xj8_U*Z~35}cn_Ql40p%HW%rT$G=inv$8Q;FejGTAp8&U94cSHRDnR zP^lP5sdG_kVo7Fxo^>~jv*W~lRZL%l0Gmc^(7^< l9ea6eZ_kE?hWw?wq>R z84I9B&H|6fVg?3oArNM~bhqvgP*A?aHKHUqKdq!Zu_%?nH!-;=KQ}ccGf}}UvnaJZ zzbLy{!D4I1r3#=@F_2Q{qSVBa%=|oskj&gv1_LvF19N=?GtQm<*MKS%JY5_^IA$gX x1ZAZM1l1l}uw-k4V`?9R^Lsb8HX}AR2In5u%!LzdrU2D4c)I$ztaD0e0svLtWYGWs literal 0 HcmV?d00001 diff --git a/images/j_crn_br_light.png b/images/j_crn_br_light.png new file mode 100644 index 0000000000000000000000000000000000000000..339f0ff56c25ca5396b86dd5e6714b9efff16c50 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|S3?zjfeX0gh%*9TgAsieWw;%dH0CLp>d_r9R z|NsB@@83Uv{`~s&>(i%C_wV1ockkZayLa#0xpV8*t!vk=UA%bl+_`h_g8t72YT+#K zh%9Dc;1&X5#!GkW{s0B#OI#yLg7ec#$`gxH8GI9yi}G_*Q!*13+%k(&%kzt}ixn)k zW?ZTODis4MbuLOxEXmBzQwYh-O=U1J(>E~JH!$Pe>3)W?)pFVxMfB*j7yLa#0xpVvW?VC4mUb}Yf;>C;S&z~=K_O1o$ z;wd_r9R z|NsB{_wVoDzkm7i<>SYX4<9~!@ZiC{d-v|#xpU*jjjLC$Ub=MY{Q2|TKkSl#S~v?l zB8wRqxP?HN@zUM8KR`kG64!{5;QX|b^2DN42H(WwqWs*{l*~j0x6Go{^8BLgVg-w> z8J8-6O2t4*or_WvOEUBG6hbm{QyC1*^bO4Q4a_)q`d;3=*pF literal 0 HcmV?d00001 diff --git a/images/j_crn_tl_med.png b/images/j_crn_tl_med.png new file mode 100644 index 0000000000000000000000000000000000000000..b363f7664bd8284060fa7638308efa2965255428 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|S3?zjfeX0gh%*9TgAsieWw;%dH0CLp>d_r9R z|NsBz&!6AFfB*RLE&1=`LUAlDX!i5XVnkr8NwQv@A zL>4nJa0`Jj(8qbTn@E=sbAaqjRB;CntmMau$wO1pywQS_V&7KbLh*2~7a?!D1W$ literal 0 HcmV?d00001 diff --git a/images/j_crn_tr_dark.png b/images/j_crn_tr_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8cad003bcb8a6d272289010cbdc29f084bd46e4d GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|S3?zjfeX0gh%*9TgAsieWw;%dH0CIH$d_r9R z|NsB{_wVoDzkmDo?aP-hpFe;8`0?Ytd-v|%y?f`*o!hr>-?(w(>eZ_kFJ3%<{`@Kj zJ$9f*&H|6fVg?3oArNM~bhqvgP*A?aHKHUqKdq!Zu_%?nH!-;=KQ}ccGf}}UvnaJZ zzbLy{!D4I1r3#=@F_2Q{qSVBa%=|oskj&gv1_LvF19N=?GtQm<*MKS%JY5_^IA$hm xBqt=SxO?Kjf=kK=7A)D>=;--XvU$>_A_nVQtQD*#2JS$$44$rjF6*2UngF%rXP*E7 literal 0 HcmV?d00001 diff --git a/images/j_crn_tr_light.png b/images/j_crn_tr_light.png new file mode 100644 index 0000000000000000000000000000000000000000..172301fb9c32c12c77785e92a65ca72b2c3e8255 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|S3?zjfeX0gh%*9TgAsieWw;%dH0CLp>d_r9R z|NsB*-@iY9{`~s&>(i%C4<9~!@ZiDy`}gnNyLao>t!vk=UAlDX{Q2{&xw{j9S~v?l zB8wRqxP?HN@zUM8KR`kG64!{5;QX|b^2DN42H(WwqWs*{l*~j0x6Go{^8BLgVg-w> z8J8-6O2t4*or_WvOEUBG6hbm{QyC1*^bO4Q4a_)q`d&K5D-@kwV^y$;bj~^dAcyRyz{d@QB-MxGF=FOYeu3fuy>C*Z0 z=Vhi^mjLy07I;J!Gca%qfiUBxyLEqng7PJ<5hcO-X(i=}MX3zFiOEIzxv43ci3)C+ zMXBZaMcKs)7F#neRREQWfs{HIr6!hS=I1GdWag$a7?|lBnClyuaqjfL22`Qo>Eal| zF*7;h*ntBV$|p2BrmkgZo^*|oP4((~9xt!mjIMEP3Yuqmnt*BF!FDdu7)&kzm{j@u9Y9{{`JtVK>1_c@(IMTfkMgU_u;=z!oZL7jhFR zfhtzCEd)i#NVhPB3RW$TL6UIMg%}=g9T7#6fbv)@1W*!^oBP|?Kh8OGX3m`X&f`1h z>-|YF9&Q`mAPDk^i`{q7VSQhV3+&MSH*+E!##t1V7zIIX1EGvF^9~;^j7}{~&dV+= z%KS_SMG5k8_lCU<3e? zThpFYw{`mOKN33v|D!gU1L(v^2cMM7jCK$C6WjZ@hku{^nT5U6HkE+idkM{_ay-M)!Ltf2)v2Wo3E^FJ#djZ7>uy;L`aFmE?A}#IAMS z{rLw#rJ}f;zHjwB-*>5175l0IEsap!W{S2!ePXU<*DLwKqZfyFvQ zBgQ;O&|i5)WC7V|@P;3@nAr;HykRy%8Ha0TXwF`drMsE{1kY!{2j1S%6vi4(TdJ2F zJeB+xt=jZi2%%5uK*JcRC`GOhn&#I7KoIUfM>#d^mZM7Pc z-It@2NJCs+*ZWDlO{4B7^;g5IORn^eMhu2#jHCS<#OSpi>xk*ZJOZEnejL%MKuF#4 z&mu9JHsY_=3@9zOfYNPCd2$xsDT(>2=~;2-b+K>YtOKV4%3M~okzK2jrQ6nLHqgk@ z+X2(3m|D|=h$R42|5{%JAtw%lBDXVu*Y(N(ZsbuwMLGX41;C9l9;I5f0`OCKM+3J# zAg%8;Da5e%RHo_rdsyL@rkPOs`CUOo0hW$U3j|f(7=}^gY1x6pl~D)mvGSHplN=dAjWY2$#f#1h2+Ne2i!V_Dh;Dl36 z4GqT(){}(4c2Hy5+#JJCh*ikSV%|DF5&j1a7J?epO&JO5{yvvquXqSJ5xXwp!Lhh_ z#NS=pw=~H;g0EE?ZRI?5t8Um|x2VludWyqU9pN(c<&z9$iz2l%>h<1C7+86f3Yf~{ z-cpRSdz}h`BH9%gW2Y$yA!~-YJzrWYWa~tXTyM_hM3$_3C`b!iLYtPkH!s?F`|oC9 zV#>Oc!?eRYLmaTmm+c?be8Z!CZ{$a}$u_3r$1pJ+nI6MC(cUw2!TEMf&`C9%Gyc*O zPS`*l5+pnEx6(6jV87Ug`v*)uiqOR?DtomOT&U3`kKVHMn$HgjwoSL6vcBr6L;9Cw)gBDyF@@ zUbTvFl)5oLzVg57n*oo*FP+`(dc))r>_oh=jmh1V)YnUcJ~l5jj!W8rWJ{sg8G7 z?4@ME58CuND7I4zvrQ>}K+-K~Fpdl*t8dcZshHFRyYQtnXfT#I)Dqt!al9TVE;?!7 JwY}Ks{{v``W&;2K literal 0 HcmV?d00001 diff --git a/images/loadingAnimation.gif b/images/loadingAnimation.gif new file mode 100644 index 0000000000000000000000000000000000000000..82290f48334c81272ff5991962951758137a08ba GIT binary patch literal 5886 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 Dl)1NK literal 0 HcmV?d00001 diff --git a/images/loginbox.jpg b/images/loginbox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8b4b92bb50b8a4bb9fbcc013b48f8871b4d756e GIT binary patch literal 1166 zcmex=G^+~p@o474w!)~W)>jH%)-h70<3JTV8F)4 z&d$Nk&c?~f#l^|Vg9;d#nVDHxSUK6)IC;4_xq12dfPkMLtO!c+KzOM7;Jp8b7z8;O ztQnp&GYT>=2{JMZGX6ipFq?r92!O6f0A?n3kQk~cBNHo|00T1vGm1E~umdAgfuIr4 zKxUvpoN$AH!8Xy@P|=}4&@r&EQAmkd2rdP+s6ZGLB#f*`<_R(eemDr!W9V3z*tqcj zEe0NDMxaZX1%YAv;NI-^-3T`x*?0xPA&Hreb= z6uMtq`t(m-(JyZewI-v{&q?&=mg9;C*Jsv@_mm zs+)ywcIF(}mK1HMORT^~ZqFl~1(u!t8gHxr$P~Pm|MXS$`AvxDz!o^PC~`OnAQ4K5 zxBfHmZH0Imq-3VVF~go@WWw(00-!V^wgprsc|y@-1QRYs8bcCpf+E-rpl}fA70`U? z_1$Eq?U}E=QYIM}7rS9lbLRA9MGGxIDYNoz{p?5cu751r_jS(w9e?_let>&dpv5Cf staV`qK4MY$y6Zo7o%i2R4-W!?X(`!K$2P9PM{H7;UH|E|?fL&V0SS6i)c^nh literal 0 HcmV?d00001 diff --git a/images/logo.gif b/images/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..4aae317908146ca75f4047a66cea2fb378ee7bde GIT binary patch literal 3931 zcmb7``9D;Pe2N=lZZ30)#gQc1Ub@8?hWKEFS&*ZcYD{kXcjSXl=%Kp$Yp6c`*FTwh-w85vnw zSs5Q69~v5Z`SPV$EdKZ3f9K}r#>U1ze*F0J=g(KKUj6#@Yierh_wV07e*7379v&SX zef|3Nr%#{0ef#$P`}enR->$B%e);lcZEfwJfByOU_3OKL@8;*{-@JLVxVR{hNIrb{ zFf%jr`Sa(AiHW79rT6dO&(6+HPEIZ?EKE;NFE20uhXMTmL;eAS0ALCj|F8PLO#phG znjh_Etd`TwkNNwAP1%4T&ZB|eI8uMQcY)b17AAU`7CoPBV)mcB|4!0!c2DD*rPT+? z&zF9#BP@0bC-p*F`o)aQtn5oU+{;&TujXCLFSuSzccMq)_I&4-WLMK_yG?{t85XRttn#L>hoNrYY>_s*=QH zmJO_lS0U+6J;@ROQMV};OaZwY_K{R#2ZR5%)&x&{vbtUKd_BkVIONtk z_zc3ys@uTjtZ?Td6^j^YzY6xyjR2#wR+7PTmel6k875{<`Y$SCcO*uNg&?jO(9arB zbeZ+GRyCe|h@AAsRsr~|*pU4?V^&(ayf|bd0z#@!NBpbG%>bNt*~VQO5#_#8xIq4_ zVK8gD23RbVZ}ZzWcc*x~>66EMb|zutm}dI-uo%PFez^7>8b$pt(ljq5CR*8Z@vVL-_Wpe|2Q;QlcPQz}ivq^QK5d}`LEWwEX}nT8jb&*=7nRAI z$xx1FJDD;<2?k2wW3)!dm*5;XE3Q4kh@!8{F=SsZaM^|fL2OVkFXxPOx`>6ruS#`* z1ZhOXaV!>tAS@&XqZRF_BKVgV!on*`{z1?L4S>BHUqEG}J>(yQ6|jI(Dd5LY`+)0g zpw?D_D50WMn`${pyKML(bkgEz#O{(y(GJC)B*Xx(@&G^2$4OJGiIrM)hH!mUPc2TP zi6SjU&XPp(bCYTF^29g^tFpagZ9M|7L$tjR5mZHcifKBiUxDY5Ghsp&od@eg| zNQZY7l8dB3Sk&rIACSZ+vIy9H(FhRD3PoW3bYdOR`mT%99+gmGN2lufP%4PeqKF>4 ziVZblH**;d?OLi-5F~g79zhclkyCp&ctumI+_@*rd#pXh_NcLsnIKAL_bY0zl74v> z9>3krS4zG>C_+(=niV;2d~59lw_1m@pTFK9K>+`>eJil4a{X1nSObaOi}s>+pl}TC zZ8ww#?_2k7B{_3Etf4vhm#mXgYM(c@b9rEwDvyd^oU|2T6W3oUVYNjIEiPP783m9m zErP~NJSpoAv&Xk0AfsfjsH69&#taeds=@O?c{@o&?*K2NgI$v0KLz0Lx$$dokY$Z8 zddup3YxRk|@TAgfofi3WWQ?WLo((k7HBdH^LHIsFpmub5GM;g0ui8UJ*nJ31pWz@4t4_;HGfmm%w%8dss z9UD-R)(62&TUZ$5XN2F!GM%z0yk;Jd;2aI$B4<=&Rs>M|ozfm|1VZA@%sbJ)BR$Q!-P+Dngn%d#5~z5r#gSCspr*4PMDu(5y|hw0451PNL&G(m6^kPmQ!` zY_fX@oKkxt&6UFX%Z^%20K%crgC&lAg3cT)DbtB){}&t$nVeBglK=?oKIpaWbw*(!V08!w6Jle!}8ZxI6L zV?ylTNOOyIqD8?T91r=pA40!P_MmJzpwKE%_&RjkB*h+z(r2iVe#M-R>^JTE1P0kkb;| zr)?BfxKc$HetsUJ?F_!H$&sD8(R<4-xLiZ!RlA6-In@vk)R%lP{)1`sN`*o4KoA%u za#t>yjhE$eJ=~~&0esGetoT!Q3m%|x7ff}~PCc}Wgi)#f%EmKS2(%YC zn&SgqE|2NFaMU7A2qIc>I09+F59i^jJPjv%b)QhXt2PvP`0jOg5p^@hL;6Bu*c~sS z;ns3IB4u2T8onwDO{3N{$Oqr*PI4ez^#zm?K~VK8-ZhWNUQZMkRIGXF7x6&Rv>)in zK*FYcUw5O?&6ow_p8;?FKE7Y?eAx7QlsrcZe57k)(5nbROtpOVj4Lg5S^{u7-l$if zCoKI{b-d9dNGEGsHnoY3ZuVr2_Y9jW%zluw;~jXVR$w!sQzzeaL#~8*4-jt<{#ow9 zQlgZbE0O<*xZk5Ot4Y=)={lgBjaYCT39@>2>r(7nP`)p=7Gr{NhI<2a`CE7HU#aaq z-508Hgv6EwSt&0J_GZ_MAn()52XnO)w)EZ08UOI?^p~U{#ghq;sVUo_-Dqe~ejhZa z1C=Azlh;3HT!FLA?6t8Digx1Xh|G4L4-a|JYNS_S|7S*ibSRlZz59oc2!y>q?!JKl z!^OzC1}?bvSJl2ebQ5m<<}qrKIq#m0`!;z}L$Fr;DDcu7N{g?WBiA2%UVQgh<-z*B zFK-rf>p#AODlv>`+`$97_cY(m+titZAXe#@zQidta1NKz!@7c+n=g-lvWX~%A~}=I z*B2ikJdIbQti=l+$FU*4Z? zCk{zr(p&o?_QV#(iU)MIb`&2emMo|NQWmnzfz9IghQoGyHsA;Y6JH1kM`}H@z#U5&BMh_eY6xu<^|J$+AOk@sibsJl+ zgrw$5KAa^yo?BW>2(;c6b9g3j2J`)H(+f>)&b>hFro`;F{^ZqLKTBrfPXl#2!UT)B zwT#8n9oy1Ef|UlUr(C;%y2?vyWZF4N&OOW5_b;vHezBbo%(0YbNFTai5&F{4>deB{ zBZ*o_dOT=s2Lak!CyGTYTKd#1A#3%$8cY0;0V>;$`#AvK3JaE3uieph=jX7m)D!Yw)K7 zrzGf@3FV-5vFn-69mzolk|z_ARcp>IgeEXtrE$bqV=jc~oK}r9sN)32-Dj+}D$&&|`#U&|>B+CWFbMCRfTAnxj#x_`uH_lJy<{#Tk zJGaScCyE&CA&4Kjccz{14#wMhi2zxu1&U#N5J+gXNOBjatnh85cs?XriaQq!i}a1U z#$k1_maEg=9XRVXOM9R8CoMhMR}bDb0_cj(JQ!)MiZ=R@Ne$nE4(0;~_yCT}SiTD= z2)*`n!)4!z&CaO)PL0uNC^_C=R|vHz0LmiJ$%&KPa?TZd#@CI7%*L;DrRGH>ucwZ% z?#)6Q^EP5A#tZK=go(~5rHe1C*`8Lg43eV41>~Z$q-j>FM>uw>%S5OKd@y}9 z<7f90{EY#zL{N`n>HmZ|>Yq7onHg+(Mr{^4=9>O>mD84%^mrE1biQQ31J#9^^;}R- z1eMGxY6@K+M&=yu&M6rJV~5Q3xL~UoQ0IZ#0CfN91#cn}9fBHH2n&k`1wPv`A`nN} zAWN~>`q*}{C0H_&HfEWl7?AV5J2OR)+wOMp*DRD1W&tsvEka&8v@J?-a6$xMveU(6gbcvZ8h~a+GaY2`l_)`ER_@r&B%lg6=fIDfCW0se@ny@^3 zYFiTQoOpWAkE_qRbARYx{5cYyrgBcEa$A%&I5M@H0w{?*uqTb1aVKZ@8GB>7IQ3@4|C9|MTv!9K~@L z8FW+3d(@KI5}-?{S{=m=myiCyBLv>3&6oj{x4Nm(LQS_GOaA9o}{`o!2xe#V2U zv6lDX*B46=)KzoWI2S53HG0_SRJ$^r*DW;1~1w2k6z|%xcSw z>L_OQ>h0>2OnyikF4U%qVNsMMo(>V4;`It?50*J=WoHRqWPvl*D^!keGwu=8U#C56}}wZ;{C n<2PpGYGLDATjRfDjlb6#0d*l{D})aT(PxC%BB3`C25kQi#;dy) literal 0 HcmV?d00001 diff --git a/images/logo.jpg b/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea2d359a511d82064d71064a52247950873d721c GIT binary patch literal 13795 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 literal 0 HcmV?d00001 diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..927bb0848cff302c6bc506300484485bf25edae8 GIT binary patch literal 3048 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 Oo6Ew?#uRVtp7bAQt?j-5 literal 0 HcmV?d00001 diff --git a/images/menutop.jpg b/images/menutop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0363fb2b4c9369af8ae9244229da789ce5fc6ed7 GIT binary patch literal 2241 zcmex=l%EHRY#>UCZ&B@Kn&j$qj{9r{;iU-0&)d%POKg1x& z!Jxu?fSFN{fk}{&S&;Gn5r&xzjEoG-j6mnZ0V5L&D+eP8z=c2zps)Z?C8}~JVG(A= z20@ktK?X)v6e%VK!;8$583h$L3N;9!n#8~`K^SBXBNH3kW}tq71VsgdfQG6j4$6z)>taKIvqMQAC52m=QLafSo6>nbgDV3-)HfW;&< zA$DL$0Am9fyi9-PcdxITUi2>Z^v-gk9V$^^Hs9Tzy8-w6aBQy+O;>X9BbK91;$n;gt26V^oUnp&>Be z=K0*8e?B*Vef}L1vy9A)_KNT0=P#-i{Bz#z@$r5+n~IG|S69}3eSdv_-QVBefmHn7 zvbPZ%L2`E8UabC@;vf^S$-o4E`~b_^uKfJPf7AZiKlrEoJ`PEDAgA2V`?~LU z@qK8r1BskhE8SOV4i-TaH3CN_`CfmR`TF^;XE(QoO!8F0hrIqXfZ)rF>i7Q{e!rhN z3Bsoa`Lsn1Xs|))ergy7G2`E)yDHO9=2Oo=kV!wzs!TpiB_qKF9WZ7DF3#DKk$T&3 zvOVL>@9W<87$h8QW;;8nX7Y2ct54M}g4Ase85ccW9kwoJvq$GmzYpqux4!xB>zZ!? zQpY0!R*r?*D}qY~rmJ!xjK#(y?P7Fs>GYaoK7W?wUzHWr=H*el=v-xn|`QXhq#>U1#e6{x7pYOZx{(N8l5*RKZKQV#)bRkoae2`%B v{V=3J1Q~TG@yVXe57H{qYIr`K_kL;c+5dpmnok|CHn$&gZ~V^?{{JQb>FXz? literal 0 HcmV?d00001 diff --git a/images/menutop_hover.jpg b/images/menutop_hover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6aa1e277e41e171bc191bd794cebc4cdb74746df GIT binary patch literal 875 zcmex=cHa2#4 z4t91nPEIZ^PEHKh_L)8c8{XfJY$icwR zP{_pd*Q!`N6kfPyH(Ko2sp2rw`)GIFA*77|u4 za1c~vR%T%p5CjGSBO5zHo)Kuep5C7j{;9&+DC&(-abjeTg?LCY=6ArkzFf#}mJH6^veO}mG z95pX?ilooA00(WLYM=)g7+IM%PF6axNvGSW?28DiM~ENusZUk=y58pGd@cXM?o!gu z?7ttZmIVzXx|hlnGXjEq3hCt9mkH%4yIHb41c$)xy8x85YD zued&S;@)#R*D2h*o@w@OmZeYHSr5O(yl;zhxq+%SCxjMgt=dx$aUL_Hz2Y&+EjhE( zZf?pEeb}h;IQ-GsyypvU-Tlq^nkzfqg=Lk=tlidHCpNq}e`~6m+Wb|U+cokdeAnLH zxb)5!lRBMjJ$;DdK_wtPX6I1zvFN>3B1%YJF4t83F={HkbO_x SgpWHlRt`qod=;j~@pH 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 kp(89pN3<5xsg^dM>*;!dwSlKz)*x1?F zIJh`Cfq;XHiw6XNBrh)yk01z$zyTu*D=P;(2R|1VzX%^6A6%Sh#{WYMf*cG63226~5yi5cj87+?iDm5q^!oskhH0;2_hDjAsB*kODICT2z!1|e2~ z06}3969pwBWn&dlpxF#8Ol+*YFzvt)6jWq36cPw5R0?8AylAvZSmA@?#El1?k`^6$ zWPI3E2&NKdZh$b*ZYD-xaIr$AfG$=v6mSd-D4eK}xbZ{d!h;td{=db*!wgg>$Sep9 z`|qEmK1L*Xw3sG3HzqMRig!Ib6~$%P+AH8AazMZ$Rh)s{ilbW|sD}e+HX|$3jnkHo zEsk6*+Z2FK;*E0KgK+=`F4ywG<+LU)2oi^1!yGY(uzgwp6qrt){ zyBelWEc){DY&^f+ywj!M%wDMMVwnLpmkDIEhBY+i&H~{OYjwckqvHOZkW?wyU@9%!@vJiI4rn6ZZM9^H$VNYQFZs_3*m8 zo9|tobgGlbbIM7p?bCGTGYTJ^GTWj?bUIgIcF)e-tszgR`JHC&EBoeh>yp}|h4=Vv zHm}cA?eT4y5pZg;>)Clv+L9aA7@024b4uF0M0P`2--`=}pXNX3_1O97mgelLRjvtd zdu~0w6U+8l_4q=D=xyiw;sh#^k|#X(J1v{y{`1d=+sU7LmQQ~sR8yu`yWm*VsYx@m zG8QBxLxPo=(O&W8j%5cJ-nHIO7L(nuvpS*5^}^xp)>io!-^bSMlX9PbL41y8{oB%w zF22)Fu{TWJ``J~fOmvxC{YLAj2h2X1*!bCOxP0-)^_g#^Pewes&d%|}8ux$;B(nrAF;xIT7iopAi5{o|;OZXHiR%+UBNe&OHQA8E^Hg)8_bewM#} zCG1y|*YxRH57_4HUvkyy)+PbFPh0in<*g^^M^9L&q7@S&{bwipxom^pQ|&vG_s#Kf zz9_jxuf067V$sG$5^8n5Log(X&;lx z$M=a+!pB8;YQo6W`DdXGc4u-v+X;#x0 RLJ}x2>)Hz-`5wf+2>>+wv*Q2& literal 0 HcmV?d00001 diff --git a/images/security.png b/images/security.png new file mode 100644 index 0000000000000000000000000000000000000000..ad88ce2696cffa296a357719c203cc08862f3c61 GIT binary patch literal 1241 zcmV;~1Sb25P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ=Pf0{URCwC7m`!M0RTRg6_ultr-ej00}9jYua%# zO{eqqzOIXTnM`Khe5Rhq%)9rVx#xe*`QLlqeIqpguNbYAFCFPE%;sJxo%crcm^p-R zY*qIXfy?`A12<_?VO$bWbdaMiOn2>9!n5 z6aoiHzCo9_6gC2g^bVl3Lg8XkY|xb>77nV7gKb42agZS-`@+ITwlpF;DYy~`6+)!Y zQJkj%pl~okQek*8Y*fo6g>vxOL6NSe$R&!=P%qzg<2(#}yi}b9u-F>lLQVS%6atqh zs$m@|KaLXsT0@Q5$TqJbFW%vY<905W{V9zM{=B(t0V9M<{y#?6asUQ2-M7yn#c6hDwb z1Y6A{N)(GI1_lC+hfA3l+Z*Ixa+CBV&pW|EPf&k;p7c2g6rIY<`x z70CcmBoc+JxvJZ&=JN3IDYK8y6eK$;6))oB;o%1?G!u;`iI0!N2wUB6v~EOpzLRxR zZ|hsF=XD%GxIv9>TWGoxpF8|WmRZg>JOgxh#ZHH`HS2s$oKxK9n^AXScN@Xc`>ASao(@KIuO#c5fOWNZnj{)cg6SjUhriRka!~1;oDL%CZ_w%9 zQgmoS11^69aG%nV@kX}VlDtU@4+jUA3123^8Z4i=gtrRKXcFPa*J9Bk_@dz^8Hu4m%+k zt&LZVn5b%^L``%RtwaZj(sCVEk&P@n>yIs_05gpQj?z{jEaJkbe&BE9sO z>D$$f_+NE{lMUy;irlR+Hp&o_`KdQL{43#U$bSO>wF-|9sPm_>00000NkvXXu0mjf D%Vi%; literal 0 HcmV?d00001 diff --git a/images/statistic.jpg b/images/statistic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97c4e8c600872c7cc376a52bf113fe08ac3809d1 GIT binary patch literal 1939 zcma)6XIK;I7M@8XL=uwFlt&;S0!C3lN+dvJRS@@rN)zb>EQxTJ76=PwmEIKT&ColD zvMeksvOttof})g&s0a}Sq)5|?lr?uESN89H=lRYvbH3+$&wJiEGolxwF#vzU!pZ^w zVF2I*U4Up7ARJ|RUkU?20097i1(f;-Xqfx_L_Y`kbU+yp4#*+kC=3<=;M<@z3jj#y zphT+Z6%Y*|;9@`#fkHq_0*OE%CD1681PX=5pd}%oF&HT^poqmvNfE@5-2#X}BGD3P zX$(eM7Kg)a<^S&+5f31s0UbaG4iW$u0fZAk(F1@72?aqAlK&kDBuWB=g8&Q$g@1rR z!cmYL5_kYaz#zcCZ^59(5d1!Tj`#RBkIi(%Tu=SVO5^ecQ#l|7_&Uni@rML5F`Bb$D$Sp8g%=*a2LXb7{N@8ZBD&iCKYWv`qyt6bg*|7RHy_(2NMdjuUbk>!@>qKSgmUH=iU`1s?YFxsST?c03A; zlD}a@4k#>UPVdaJFAGxg%MRiRNbB(jW_0c`bw@VxBiz$>Bs72Vn5-M%U$ZOBYzgzN zwj-sz{8`Ovd0@^?*iVWToX@1hI~$yTJajtZ6`xJFUTSBoI58t=17DNaX2mzd>6s4w zb@sEn3QR`@$AZ(CN?cvzplY{PL7_@>(q@Cuywg<6COi~qDL>CHF9KD5!XVdtl^X3( z+{lqDWX0#24v#9F>a%<93SJMo7x3o-LN$W|Q?!S4-mM>UDDAfKZATh0=8)5~xAKl? z$TS=Zjbk#sf!)Wi=*nStxR~0J)to+EH^il6O9#IiOy_fxA8nrw`|y}7r$$aA=xLo@;I~4>W_rahRqCVh4n^NHpYB86&+8>o;CR(-?36d7&%;7|DU?6M;9{~RM`F0 zd6WOW9kKY@A4BQQprA6xe0uGdi`8FSTnz%OKIHA?Dqk3S4o#`%z0(*i2N4i^tJig5x{0i$Ah9_uV!rZ{X(cm8<5+{W_S(V^4mBl_d1k^6 z+fK_8B2}&@gtljxs*-u*lVp3mW~skZz{w#?%-xWUPo1IY^ZT9Lev?d_K>aX&%nz%6 z?ixGhjy~K1j_!c@7|xh%Cu*Td6cY2IuiEdSwh1FR?g`&J^nD*)gY=za5>Mp^Xm{?f z^8eO5^n0b@EB<{zcf+*5+-3B(=iVm<#oFifJXxl=o0_o?XNo);Zkh2$_t&!4x}0xI zj@7+WTpAu>GSWWRI$Cp2o;`4~EFx)REKYVL?mGMg9Tcw39qq6vuAZt4rrI6#tSj}i zZZ9zQEcH7c%7}Sw_SCswi)}%6A{rkwX>+Mi$n!YzVzmHgW5nsF#OCLiT~Z0>83L4OEWUjH**C>s7R3WoOa literal 0 HcmV?d00001 diff --git a/images/statistic.png b/images/statistic.png new file mode 100644 index 0000000000000000000000000000000000000000..d5aa12c4e8ca1f29a1f7980ec64b242f3971c21e GIT binary patch literal 5706 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 literal 0 HcmV?d00001 diff --git a/images/subnav_btn.gif b/images/subnav_btn.gif new file mode 100644 index 0000000000000000000000000000000000000000..480a7bb93e4efa7e152b6f7e3315d6d9801f0d96 GIT binary patch literal 336 zcmZ?wbhEHb6k-rzxXQpFp%{0j(ZOufBXKud-Cj8Z{7w*XXIBlN2V4qP!%ZtWC5F}10q3wVqnX4Xe{th zVd`sG#Bef4Yxar85{9)*%R*L{oqk(2v$3F|a;1{UBg3H0nFihyU8QClln6BYaHJHR zSuVoECNIa&#>Od==_{tx-Y(3=n#nqK8n-B$gvzu`miY@Y6iZH5*G7G@9tk}Pa2K+Mj{!oteV!N$hU#>T;Nd3XdtKm-mLSy)*)*g5#QxcEi*`1s)BL^J*$Vi4qD5MU5sW)x&# z5@ci+Wc+`GVG;uaGb7OP2*Ak1!p6wJ#EcLDvVg(B$|k@FRLh8@8l;RxP)HEybrxg| zjDk!;42p)#fksM6!a_(Iz-B541N8v`!UjeLK}AEyz{JAFi4XtZV&DO~h)IxH5NPe) z=UJyW3ES8MMLB>rGqN&W&(^Q){{*%9ug?tqYcX6qpZ@ zXJWHwk_R)H5llu#pr~O)>*m@b-z;mZTz_#9i{)7D(OK9TiAGq+e^?;0Bh zu7#`AA-01waCdSp*;Eg40*GIIWW~PZ1lQl)D&VE-9%r_3og81xgX-V&cbRXrJ#**o^JB~Z-vj`GKdwvw literal 0 HcmV?d00001 diff --git a/images/taller_planificado.png b/images/taller_planificado.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b0bf5c6e3b8d8794a73e444d2a0d6e4e2fda1c GIT binary patch literal 6123 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 YWv;=AIfb3>y7*gpzg5W#EztJ-3vSvfng9R* literal 0 HcmV?d00001 diff --git a/images/theme.png b/images/theme.png new file mode 100644 index 0000000000000000000000000000000000000000..bae3a9b2cb405612b380b638db9d48534724e75d GIT binary patch literal 3672 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 IU-!VyACo}9@&Et; literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-adduser.png b/images/toolbar/icon-32-adduser.png new file mode 100644 index 0000000000000000000000000000000000000000..c34b8aa400a727199452b589b78bc61b986430f7 GIT binary patch literal 1630 zcmV-k2BGhxG29Mig2#h3ON`P3f@jw$$5Ea_l_jg3Vh z6mp2Sb$ZF6RY{`1-JR)sv%AVl-d#zywxN)P$7n~Z`M&wyoA+i%0nRzR%qs{l`3l)@ z0)c?{(`!#s!1w|%Hia!<3!pPr}4@V0^1y>UF&-eUG#f+`A;r}%s32;ic zMGq1R%$>{lM_@XEE?~>9{^v03e>D`V!DTs8pdRCDU5r*9Ve#QpSoO{!&sGce)1Z=q%_sB$R|vwOn;BM$Dt&F>TW@h!%O+y#do`Xv9 z`sNHolQ%$;-w?ybk{<&beFti**B}~h)IHSX0`yN=K2qPAhxD}UxM@|R={@@%^u*t- z4;z-_0BEJEEhrr`;dEjU2fmJ$F{&SH+;%xhFScoh3y6S3tM8Xjp?LQiJl$Op!&3Vc z@5A^gU~tlNjtZD7;+|=pUthyM274;16(RV09`rMY3erD+fQ0uUiQFu@ijK?h#Mfek zvgfK5P8u^T6f`XOLi$BmRBv~m0A2H8%%b4_eh`2REUB~py&Ep6cR+`6&@k&^JlIUZ z{#iS?KMMTc-i}`pXvhQe^Yfk$U%7IH-uo6f?T~C63{Hs);MUgGmgh^!($doL6)?fG zXj8#p5G<1l{QpZ^D_};?EZC#31w$z$G`Id%<~k8%N{QH56%Z{ zap2&BW1SDQJf^#J>5^=w*mGzz9?S7yY;0^1?{mAmyM+@GxP19?+yuRemZD-q#u)R; z0kTz$&YwR|?#kiwd1~+9zpu3I0tBZ)4iGSnr8X4`g+$pU@Md5qHB6%kkXm=q4wA`a zx~(Ic_4Reyt1nQEr+xx$p0!u{wVsW|V$jpm<3u(`!8$Q9p|~lqV9l0FtQ)wO3jO{4 z0-SzZtJR=XDv8$oo~r8p#>R&1>H^Exoq$@>6F9ldQe$v%5GE%lVQ6SbOvqL(R~-r1 zOKv-rugUNASg~eqxq(PkDwVpT*8akA6?knr+)A{afU2ru#v>ym(AU=|zE30)aQgIV z*xTEKXf*1%42vk0+^O_dz*>E$PMw0`;oy cu73p>0M_G0RTFt{I{*Lx07*qoM6N<$f+(i~Gynhq literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-alert.png b/images/toolbar/icon-32-alert.png new file mode 100644 index 0000000000000000000000000000000000000000..dae775745b19e3f3d55466361985161d39a72ee7 GIT binary patch literal 2542 zcmV*P)vY1tYQZD z2kE`(%-R7wvjtLXBNUGt6w^H>@g(tjyI3U4amWD)wxcE}j`uMJrpJjAaSu>_g~4P= z(yR3Q>7k|p$laU!H6cdSX4qWDQxJqD%adi9WPa~CYWvv$Y3=LO`eJ6BtY7?;Qn@8w z?wJT+wNxuKVFE}FmT?YhCufElMuGWMSC4evL6*RVO6^1oNidcxizID}EZ~Ume6GZt zuVl|-S)*>bEWriHKrEDl{K34cQZZDcQmc!YcTKZqZelA~7yeoH zY~|B&^+GmN*RTkG(p4IOYSXKZR$B_`YhmU5su`^7msR*R(ty%}XGSAJ0}2^36Q}a} zqA&oqd)u~edH`Sojl)hfQG6WfCACToxPb)HX($C>`3tKW$p8JLrhGtAt#S zBqE?;g~aQ^r+=o!Pd-ATS%4I-5~>*&&{)8bhD!i!>1Mz?ZQC|B5?)!YWMG z{D$lsGZbs&11M54s0zHQ0oX!2o|ogo2Z;-6)wvzxwyj$TAW*fF-CwFY(RC&tKMNbmDF6b$AMu-gb2HX`%t9Gpr zXkIn6V=c)9-Q}XA0`Oa=WTt()PtRs*_JqRs;NbqfM?26w&|sV9_8SOxF46fo91~{Y z2$8n!t>?y6wdsQNm_{jGqZY>^9p1iBv}sX_4AMm3-qSa-mFc`D03lZ6>1c1qi<)p> zTc?q+j++|Jda$b!J05w6@Q@=>L`h&?8bke`E#CPsl73QfELE0w6-#5*7Oepxs8N z<1hd_w0Y&4TBT1kSYP$6UZdds&!!f7Wmwd^u3Wj+)O?_;>)tPRK5%*FDtEC*KmexG?6V@=c45sdpr)3nqvoS(;#j&)sEzX3qrSC;pc2OoG~>rg`g z=gdpsn zE*JzEd_Itnmiv7R5?d(4Jg_iPitoPLC^6@2{rdF^6u(#J3Q(}tReQ+b`N+Q}&)1$0 zoI5vpSUR!?MAARO*yxgZ&=5S6D8G?o9T{G;N*2DCJk;Pbp(71Y?fC!@9ttGjGa5@C zmdYb<)5@z*G?m86*LuX-3%xsZ=IpuZ`9LOfrXSLED+&3KswB6S#9?BsEH5ut0a#jG zRNqyu4~Qo%Dnc9wT5$TSG9e_}yLx`mDm}O?PcKyf$mMcg5%I&Y-l5j@j&aOusQh#c z=>zX|%00JYAS$U?C{zH*2h!Ca4Xg^6uGWC#qyqqM11a+PeA%`gUM6Fg65=1sIQK7dS=2|i!|!SSn+ zBhJI|#&6tEULB9en^J!$#4}M*aNKV?>gNH!Aa!(f(1s0PRlacL%2iZHQ&q!e)Q`R2 zjjV7Qh?YF-8`M|DSyV{?4 zBK;5w(ZkS4X+AJFH#dIj)So6tM@RoZA6V0T;J*S40RD%%*D{sjHvj+t07*qoM6N<$ Eg8B^L7ytkO literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-apply.png b/images/toolbar/icon-32-apply.png new file mode 100644 index 0000000000000000000000000000000000000000..97da4c13ffc3515d6d6ba975048ecee06c8f9f86 GIT binary patch literal 1457 zcmV;i1y1^jP)lR3AmYG&M@O=o1 zc?c>cVEQ#cG4phf(lz*3uUWt?A4mgw*)JB*-9A9o1@s6;M6$Xjp#0?x3sfyDq2=Hs zyp#vBhMw?`A5tg^T@g_F;(8c!6D8eS{FHs1O%b7390zx2{le_wK5 z*ENf|r31cV4^U&Hj9BgCmr_6N5&j4%hTG+Bs10TKxSyKnxtOuH4drBWOhL10tEd_XS< z5$FYbV4;0@Th9U^0^MxsA|Jv~*e~AsBlEP+khUI1k%&cf_bm*=A&OYO@$p}u{`Ypp zb8~Y_R0E#J(MP2q+PuioU}uFJaJK=t*8(bqZgf4y@nB_TcXk?olHF)mC>~y^~Q-KugySvLR*EEfvBLo~R z7q@h;KOo?7%SEW^>NpO)Ep){LJ3BiymRImVgNavnVB%sr-yf)lljQ^#$tSLKZWtaO z?reXck>&BZVH^HH9}6fbhf9 z(^EbffoahHB#LqZt5|kxYl}pz3V40O#VsEj8*8sWfH_dpAD|qd(n(=SBoh2RiJ>dO z>AhIz@uX`7-gFh9h?@QY!Gs9YH2IaFlpp6NjIzBI_=R;KE`lZ%B52SGq0ltQbiU48 zgP3*{(UXi1`i!n|%g4vZJKGu*4^hPO%*;%$KhWzB{JT#^e+w`G;9u;{P6HBN00000 LNkvXXu0mjfr|Ojn literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-archive.png b/images/toolbar/icon-32-archive.png new file mode 100644 index 0000000000000000000000000000000000000000..26a49f0a1cfce16bc47cb1f00ad5d55a1696bca4 GIT binary patch literal 1320 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 Tj0X>000000NkvXXu0mjfDT-aO literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-back.png b/images/toolbar/icon-32-back.png new file mode 100644 index 0000000000000000000000000000000000000000..006b0e82bace3fe317f766eae2abdda7a041cd72 GIT binary patch literal 2488 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 M07*qoM6N<$f;Ui2L;wH) literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-banner.png b/images/toolbar/icon-32-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..7d75320072bc729e3a0b07f0256ef99207a8bbbd GIT binary patch literal 2750 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 Eg5os`pa1{> literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-calendar.png b/images/toolbar/icon-32-calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..8567e9aaf3c368a342af4dc1baebc30a213077f6 GIT binary patch literal 2154 zcmV-w2$lDVP)#gP2=TX1i}=gaO7H-vFGwKq3aHYSx7}4K5+IP^1u81q z&}~)JnuH{(lhk(p{2SXDd&V<+&b9AkX6$hioB$78>BKYlo;mls=bU@)xhI0AY4B?{ z;dcO50QY|yKk9coUvBd`*}JCy;Xj(*XZ%vrc{Z5&IQ`Bg3X#QZaXkL_;j}G)2R~nY zW%LIByZZw!a0olQ(!8R<7qgj2G$Y+U^W;7qgwx2>;d8y-;}PJ}iUc`%=S)M3xv9kg z2fBTsWI;ZPT_@`TD63lgPst+8LsPT)pa)X)T$ z?{F7zTFd1$-lnIgwOA~sHQT0VX0&iPtQ94Ry)P~;zhRtHw621;)2C0vg$oy&-T|jS z`UuXQI|r+Y1bbIi)m{VH?3%XQEgFlPG~lcU#@a5emY9Q<5&a)}eRWs5xL$^6UZJfF zH@CYX;1=uhSv6n+plas9>5L5joJhfRQi6=6Kz3b*F5Jr}9_oWb0~_A_*2NTjIF*Gg z^5lyONVuKff8a)V`j+->0#MBw_{TTPaCK!Ja#f+Ux-5o?W1lX-|DMt;9;&BJ%s*C36n_DC7{_kDZd?oJT|46B)9 z8UFQsgz*soY96%&AKy`cmkxC3^3H~@nS6}M3czVq4_DFb>Kg2q7uhLy$6y;gdTT#S zl~NGCm_$vjCkg6#~d3x7`RQ!r2-gMN#YlC`<#j^i`|~|DB`NJE2ET!kY(M zV4$lVvgn+b5=FSUT7+0$hPMyzg-;&tWLhE+pG+>*$dWAp%!iR8*C0Hb(BMR*%q9m} zf=4?94B0oGEer45(+y>Z8```W53o;^N;UEnS+)lt%L>v4!_~Y4 z{ z0w|TBRH`s6D-QT9?T1!xCEp{#6{ne$xCudNu5;;+l?j_{c zTAj(9TL4e7RH+J9w*bHxdnrcyk?8F9;i6=N9G0Lo(tuC}=&q8-@NCrt7eYWw)z$Mp z!2(XM67dyx{c?)ya8@t@-OZ$yr%h(a;CjdoGu2P@pih$;nBG z#bQnG0Frb4`gP_9b>oGd26n6A7H?djsMly`@DGB)VEvSFS78aPD(P4ES>c4#XvPpABY6yTgnwW@IMFEOdgrT&0hg2XEsU)`qfVa`n zQ3!=L0^QQm()LO;Muenx3LxC>{r&xHg`@%MqjCBj85z;f4YK>{>gtB@>i6670nR}7 zGun_9GEvPm2|bfG_%Cl{8jAZo==AmV)l9fakxH#CBvu>kWwJW~ASdhX?XBS@2ju{{ ze;7?t4}fSLtmibOR3&T?u_(KCfODMLd>gJBs7&uv5Ab{YjjlNB}XF-@$dLJnWv|xr=}{lX_=01DX#8D z$1L&EaZMAEFHpk4osqt!q{f=sZ5aUbP_gknl=G6^X+kUDdU<6-0BGNnsPbJaP!J&0 ztbKuk@^-X+2%YHAE~MpY1TcQ;)Tyl%D2^XLzT*W7^Z#Uig#twtkY1o5Y6Kuk2igu6 gD1!A06#o}s01%&HDIze={Qv*}07*qoM6N<$f`6p`)Bpeg literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-cancel.png b/images/toolbar/icon-32-cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..41a94cfd1e4cd6608ee0007fa58f1f62446a8922 GIT binary patch literal 2607 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 literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-checkin.png b/images/toolbar/icon-32-checkin.png new file mode 100644 index 0000000000000000000000000000000000000000..97da4c13ffc3515d6d6ba975048ecee06c8f9f86 GIT binary patch literal 1457 zcmV;i1y1^jP)lR3AmYG&M@O=o1 zc?c>cVEQ#cG4phf(lz*3uUWt?A4mgw*)JB*-9A9o1@s6;M6$Xjp#0?x3sfyDq2=Hs zyp#vBhMw?`A5tg^T@g_F;(8c!6D8eS{FHs1O%b7390zx2{le_wK5 z*ENf|r31cV4^U&Hj9BgCmr_6N5&j4%hTG+Bs10TKxSyKnxtOuH4drBWOhL10tEd_XS< z5$FYbV4;0@Th9U^0^MxsA|Jv~*e~AsBlEP+khUI1k%&cf_bm*=A&OYO@$p}u{`Ypp zb8~Y_R0E#J(MP2q+PuioU}uFJaJK=t*8(bqZgf4y@nB_TcXk?olHF)mC>~y^~Q-KugySvLR*EEfvBLo~R z7q@h;KOo?7%SEW^>NpO)Ep){LJ3BiymRImVgNavnVB%sr-yf)lljQ^#$tSLKZWtaO z?reXck>&BZVH^HH9}6fbhf9 z(^EbffoahHB#LqZt5|kxYl}pz3V40O#VsEj8*8sWfH_dpAD|qd(n(=SBoh2RiJ>dO z>AhIz@uX`7-gFh9h?@QY!Gs9YH2IaFlpp6NjIzBI_=R;KE`lZ%B52SGq0ltQbiU48 zgP3*{(UXi1`i!n|%g4vZJKGu*4^hPO%*;%$KhWzB{JT#^e+w`G;9u;{P6HBN00000 LNkvXXu0mjfr|Ojn literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-component.png b/images/toolbar/icon-32-component.png new file mode 100644 index 0000000000000000000000000000000000000000..edc3e38101029b31e182bd6d51a788e60438b2d1 GIT binary patch literal 1769 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 ZzyJYwoOMRiCJO)n002ovPDHLkV1j;1B+dW; literal 0 HcmV?d00001 diff --git a/images/toolbar/icon-32-copy.png b/images/toolbar/icon-32-copy.png new file mode 100644 index 0000000000000000000000000000000000000000..892fb31501df7c5f029261338ef3c38f315e653d GIT binary patch literal 1639 zcmV-t2AKJYP)byT{(q9A?3R6L@Jf)r+iVX)#B1XODT{fNM4u^ks@MoaZ$u#G12el`#xl1Varwu zhzD#z5NLNR1riS>9J|ikd5)n-&sM2acuc3$`gc4Y=aG2A^Sy+2YtCIY-+uKfpF9zn@$sGlJGN!}#6h8;Exf$A5cPUp--B>iy7c&Q(`piq z#zJ8YA#$7WZZ6PJZf$Le>8UAkeSIw`V2CfDKiAgj=g49xq1;g^m&I5n!}ov+6oq@R zUfhY3V$R)MfEPA4Hh9qwmY2o;{=OI*8sdAqJ3G8J6SO!*Msa?At~oGFNR&y53!1|{ zwU*+>+WLA67rG*VHl59~MGyw7C=%)yGIU+7R{8fh!L9<-`Pn&#csvK8s^LE7wqCvz zb8~at!`ny*4ls0NU6qhf9Kg$%E7P1u_m!oXgO$o!2&5>=B!wa11zdJ^b|z+KXS*Yy z$bkoy{{ZWIOG{0~4i0!8i(+y09NvM;fX?ypG5OqK4*W(|y5GzE&X9=BavU+T6OcQgGh+KO2jyW_sI@%OQVI9J| zasV%aNEPW@Tzj6!FMPbV#;8CT`xmeiv=}GJN+u{-4<%wifw~f|2npfn^eu>X0U$p+ zJ!R+s+w{zghHGzcPbA1<2!xN7{~-wPs9*#)!0%Ax@bHlDE53}3jEF=s*&PAE`suT0 z?B7qGJ{6ajm)Zp&ArQgBV7DXr0LvOQ0tMaya`EMr72e7wzt97+z9#~I?(VV>{4SoH zi1~#DMge3}zDyCc5Hm^^x#XfOAr&Y8mT8N^VysoK)pTTR?_Cu@hs6jo@cpBS2|cfb zGklnf_?;$&^c)09{sh$3xdQ8=M=AhlS5{Yf|GN!W)ZK=NQ6SRHHH1Z7cXah09s3Zt zKvcNVJmj<}fE!Q(?8U<%n{CI~Z|#CagutLpI9pBzOc0VFB7P&Xf~Xw|Fxw4_^p**T zG}4k@Rt9Z?G2&~v>B0oq_gi$iAw&)M@nemJ`DHa7KF*@WzAf5jY=<+(mK^QLfypVX{ z=kxg=J2E5BfVqi)M`vbRR0+m1EnFwd*cDO$A{qh@4lb3QvOX~-3`;jRH^0y2a=*~6 zsuYL-P^11gjtr&(zE(h52#sypK9m(PdsPU7zfre7Rl1FkJ?j9jr!w@4kZ0~n%5Q2l{m9)05eBPd%S~5d{(3DiBAE{6v zt*pt>Hx%f|fK>_}yGwrXFO~2O=p#?e)-CC|_>V5Qtv;Z;)1yFvAx2y4Ya-WbpX&oZ z5kY?kI%a*Ky}>08z3?IJg!lVgANUK&7Av6OEf$L(Q53V#Wqlx4C=}wf*N5++KA`w! zDFxyL$u|#NAF$2z+z}7h%wxH#fW;n4_@F*8s1FS41B3d&pgu6D4-D!9gZjXrKJb63 z4|FPUPxXNdoWeu4kLv^AL6Fbq|Bxx0xbOPF&$(P~PbR1;D|ThJ?3?w0;GXIOmoi0n zjeIbW>ASE0KP=O79BYT#j_B