From f6d84d54c8bd619222003ea00574957a4e19b3f0 Mon Sep 17 00:00:00 2001 From: lechuck <l3chuck@autistici.org> Date: Sun, 17 Jun 2012 12:47:48 +0000 Subject: [PATCH] aggiornamento Wordpress 3.4 --- index.php | 1 - license.txt | 78 +- readme.html | 5 +- wp-activate.php | 4 +- wp-admin/about.php | 155 +- wp-admin/admin-ajax.php | 1620 +----------- wp-admin/admin-functions.php | 1 - wp-admin/admin-header.php | 25 +- wp-admin/admin-post.php | 2 - wp-admin/admin.php | 13 +- wp-admin/async-upload.php | 2 - wp-admin/comment.php | 9 +- wp-admin/credits.php | 14 +- wp-admin/css/colors-classic.css | 2 +- wp-admin/css/colors-classic.dev.css | 375 ++- wp-admin/css/colors-fresh.css | 2 +- wp-admin/css/colors-fresh.dev.css | 393 ++- wp-admin/css/customize-controls-rtl.css | 1 + wp-admin/css/customize-controls-rtl.dev.css | 86 + wp-admin/css/customize-controls.css | 1 + wp-admin/css/customize-controls.dev.css | 537 ++++ wp-admin/css/farbtastic.css | 3 - wp-admin/css/ie-rtl.css | 2 +- wp-admin/css/ie-rtl.dev.css | 5 - wp-admin/css/ie.css | 2 +- wp-admin/css/ie.dev.css | 34 +- wp-admin/css/install.css | 2 +- wp-admin/css/install.dev.css | 9 +- wp-admin/css/media-rtl.css | 2 +- wp-admin/css/media.css | 2 +- wp-admin/css/media.dev.css | 1 - wp-admin/css/wp-admin-rtl.css | 2 +- wp-admin/css/wp-admin-rtl.dev.css | 688 +++-- wp-admin/css/wp-admin.css | 2 +- wp-admin/css/wp-admin.dev.css | 2059 +++++++++------ wp-admin/custom-background.php | 92 +- wp-admin/custom-header.php | 607 +++-- wp-admin/customize.php | 198 ++ wp-admin/edit-comments.php | 12 +- wp-admin/edit-form-advanced.php | 53 +- wp-admin/edit-form-comment.php | 123 +- wp-admin/edit-link-form.php | 32 +- wp-admin/edit-tag-form.php | 8 +- wp-admin/edit-tags.php | 4 +- wp-admin/edit.php | 36 +- wp-admin/export.php | 18 +- wp-admin/freedoms.php | 6 +- wp-admin/images/icons32-2x.png | Bin 0 -> 37170 bytes wp-admin/images/icons32-vs-2x.png | Bin 0 -> 36513 bytes wp-admin/images/menu-2x.png | Bin 0 -> 32775 bytes wp-admin/images/menu.png | Bin 9680 -> 13585 bytes wp-admin/images/press-this.png | Bin 818 -> 567 bytes wp-admin/images/screenshots/captions-1.png | Bin 0 -> 96412 bytes wp-admin/images/screenshots/captions-2.png | Bin 0 -> 43760 bytes wp-admin/images/screenshots/flex-header-1.png | Bin 0 -> 72879 bytes wp-admin/images/screenshots/flex-header-2.png | Bin 0 -> 38544 bytes wp-admin/images/screenshots/flex-header-3.png | Bin 0 -> 48361 bytes .../screenshots/flex-header-media-library.png | Bin 0 -> 28192 bytes .../images/screenshots/theme-customizer.png | Bin 0 -> 106447 bytes .../images/screenshots/twitter-embed-1.png | Bin 0 -> 15096 bytes .../images/screenshots/twitter-embed-2.png | Bin 0 -> 16697 bytes wp-admin/images/stars-rtl.png | Bin 0 -> 2003 bytes wp-admin/images/stars.png | Bin 0 -> 2098 bytes wp-admin/images/wordpress-logo-2x.png | Bin 0 -> 4867 bytes wp-admin/images/wordpress-logo.png | Bin 2334 -> 5048 bytes wp-admin/images/wp-badge-2x.png | Bin 0 -> 28160 bytes wp-admin/import.php | 4 +- wp-admin/includes/admin.php | 9 +- wp-admin/includes/ajax-actions.php | 1787 +++++++++++++ wp-admin/includes/bookmark.php | 5 +- wp-admin/includes/class-ftp.php | 11 +- .../includes/class-wp-comments-list-table.php | 8 +- .../includes/class-wp-filesystem-base.php | 2 - .../includes/class-wp-filesystem-direct.php | 3 +- .../includes/class-wp-filesystem-ftpext.php | 2 - .../class-wp-filesystem-ftpsockets.php | 2 - .../includes/class-wp-links-list-table.php | 2 - wp-admin/includes/class-wp-list-table.php | 18 +- .../includes/class-wp-media-list-table.php | 6 +- .../includes/class-wp-ms-sites-list-table.php | 4 +- .../class-wp-ms-themes-list-table.php | 153 +- .../includes/class-wp-ms-users-list-table.php | 5 +- .../class-wp-plugin-install-list-table.php | 24 +- .../includes/class-wp-plugins-list-table.php | 77 +- .../includes/class-wp-posts-list-table.php | 30 +- .../includes/class-wp-terms-list-table.php | 4 +- .../class-wp-theme-install-list-table.php | 310 ++- .../includes/class-wp-themes-list-table.php | 262 +- wp-admin/includes/class-wp-upgrader.php | 201 +- .../includes/class-wp-users-list-table.php | 6 +- wp-admin/includes/comment.php | 1 - wp-admin/includes/dashboard.php | 175 +- wp-admin/includes/deprecated.php | 64 +- wp-admin/includes/export.php | 7 +- wp-admin/includes/file.php | 44 +- wp-admin/includes/image-edit.php | 45 +- wp-admin/includes/image.php | 150 +- wp-admin/includes/import.php | 2 - wp-admin/includes/list-table.php | 6 +- wp-admin/includes/manifest.php | 1 - wp-admin/includes/media.php | 113 +- wp-admin/includes/menu.php | 2 - wp-admin/includes/meta-boxes.php | 366 ++- wp-admin/includes/misc.php | 17 +- wp-admin/includes/ms-deprecated.php | 10 +- wp-admin/includes/ms.php | 84 +- wp-admin/includes/nav-menu.php | 17 +- wp-admin/includes/plugin-install.php | 81 +- wp-admin/includes/plugin.php | 140 +- wp-admin/includes/post.php | 100 +- wp-admin/includes/schema.php | 50 +- wp-admin/includes/screen.php | 185 +- wp-admin/includes/taxonomy.php | 6 +- wp-admin/includes/template.php | 204 +- wp-admin/includes/theme-install.php | 209 +- wp-admin/includes/theme.php | 185 +- wp-admin/includes/update-core.php | 347 ++- wp-admin/includes/update.php | 28 +- wp-admin/includes/upgrade.php | 171 +- wp-admin/includes/user.php | 61 +- wp-admin/includes/widgets.php | 1 - wp-admin/index.php | 24 +- wp-admin/install-helper.php | 23 +- wp-admin/install.php | 27 +- wp-admin/js/common.dev.js | 39 +- wp-admin/js/common.js | 2 +- wp-admin/js/custom-background.dev.js | 105 +- wp-admin/js/custom-background.js | 2 +- wp-admin/js/customize-controls.dev.js | 942 +++++++ wp-admin/js/customize-controls.js | 1 + wp-admin/js/dashboard.dev.js | 3 +- wp-admin/js/dashboard.js | 2 +- wp-admin/js/edit-comments.dev.js | 142 +- wp-admin/js/edit-comments.js | 2 +- wp-admin/js/editor.dev.js | 50 +- wp-admin/js/editor.js | 2 +- wp-admin/js/inline-edit-post.dev.js | 18 +- wp-admin/js/inline-edit-post.js | 2 +- wp-admin/js/inline-edit-tax.dev.js | 2 +- wp-admin/js/inline-edit-tax.js | 2 +- wp-admin/js/media-gallery.dev.js | 25 + wp-admin/js/media-gallery.js | 1 + wp-admin/js/media-upload.dev.js | 4 +- wp-admin/js/media-upload.js | 2 +- wp-admin/js/media.dev.js | 7 +- wp-admin/js/media.js | 2 +- wp-admin/js/post.dev.js | 36 +- wp-admin/js/post.js | 2 +- wp-admin/js/postbox.dev.js | 133 +- wp-admin/js/postbox.js | 2 +- wp-admin/js/tags.dev.js | 4 +- wp-admin/js/tags.js | 2 +- wp-admin/js/theme-preview.dev.js | 8 - wp-admin/js/theme-preview.js | 2 +- wp-admin/js/theme.dev.js | 201 +- wp-admin/js/theme.js | 2 +- wp-admin/js/user-profile.dev.js | 63 +- wp-admin/js/user-profile.js | 2 +- wp-admin/js/user-suggest.dev.js | 13 + wp-admin/js/user-suggest.js | 1 + wp-admin/js/utils.dev.js | 143 +- wp-admin/js/utils.js | 2 +- wp-admin/js/widgets.dev.js | 14 +- wp-admin/js/widgets.js | 2 +- wp-admin/js/word-count.dev.js | 15 +- wp-admin/js/word-count.js | 2 +- wp-admin/js/wp-fullscreen.dev.js | 17 +- wp-admin/js/wp-fullscreen.js | 2 +- wp-admin/link-add.php | 4 +- wp-admin/link-parse-opml.php | 3 +- wp-admin/link.php | 4 +- wp-admin/load-scripts.php | 1 - wp-admin/load-styles.php | 1 - wp-admin/maint/repair.php | 75 +- wp-admin/media-new.php | 7 - wp-admin/media-upload.php | 14 +- wp-admin/media.php | 4 +- wp-admin/menu-header.php | 9 +- wp-admin/menu.php | 5 +- wp-admin/moderation.php | 1 - wp-admin/ms-admin.php | 1 - wp-admin/ms-delete-site.php | 1 - wp-admin/ms-edit.php | 1 - wp-admin/ms-sites.php | 2 - wp-admin/ms-themes.php | 1 - wp-admin/ms-upgrade-network.php | 2 - wp-admin/ms-users.php | 1 - wp-admin/my-sites.php | 1 - wp-admin/nav-menus.php | 11 +- wp-admin/network.php | 12 +- wp-admin/network/about.php | 16 + wp-admin/network/admin.php | 3 +- wp-admin/network/credits.php | 16 + wp-admin/network/edit.php | 2 - wp-admin/network/freedoms.php | 16 + wp-admin/network/menu.php | 5 +- wp-admin/network/settings.php | 19 +- wp-admin/network/site-info.php | 4 +- wp-admin/network/site-new.php | 5 +- wp-admin/network/site-settings.php | 4 +- wp-admin/network/site-themes.php | 4 +- wp-admin/network/site-users.php | 16 +- wp-admin/network/sites.php | 10 +- wp-admin/network/themes.php | 30 +- wp-admin/network/user-new.php | 2 - wp-admin/network/users.php | 14 +- wp-admin/options-discussion.php | 10 +- wp-admin/options-general.php | 21 +- wp-admin/options-head.php | 2 - wp-admin/options-media.php | 24 +- wp-admin/options-permalink.php | 24 +- wp-admin/options-reading.php | 8 +- wp-admin/options-writing.php | 8 +- wp-admin/options.php | 4 +- wp-admin/plugin-editor.php | 5 +- wp-admin/plugin-install.php | 3 +- wp-admin/plugins.php | 60 +- wp-admin/post-new.php | 5 +- wp-admin/post.php | 7 +- wp-admin/press-this.php | 32 +- wp-admin/profile.php | 1 - wp-admin/setup-config.php | 194 +- wp-admin/theme-editor.php | 210 +- wp-admin/theme-install.php | 24 +- wp-admin/themes.php | 180 +- wp-admin/tools.php | 5 +- wp-admin/update-core.php | 22 +- wp-admin/update.php | 15 +- wp-admin/upgrade-functions.php | 1 - wp-admin/upgrade.php | 6 +- wp-admin/upload.php | 7 +- wp-admin/user-edit.php | 5 +- wp-admin/user-new.php | 37 +- wp-admin/user/about.php | 13 + wp-admin/user/admin.php | 4 +- wp-admin/user/credits.php | 13 + wp-admin/user/freedoms.php | 13 + wp-admin/user/menu.php | 2 - wp-admin/users.php | 13 +- wp-admin/widgets.php | 8 +- wp-app.php | 1593 +----------- wp-blog-header.php | 2 - wp-comments-post.php | 12 +- wp-content/index.php | 1 - wp-content/plugins/akismet/admin.php | 188 +- wp-content/plugins/akismet/akismet.css | 5 + wp-content/plugins/akismet/akismet.js | 102 + wp-content/plugins/akismet/akismet.php | 122 +- wp-content/plugins/akismet/index.php | 2 + wp-content/plugins/akismet/legacy.php | 6 +- wp-content/plugins/akismet/readme.txt | 27 +- wp-content/plugins/akismet/widget.php | 156 +- wp-content/themes/twentyeleven/author.php | 2 +- .../themes/twentyeleven/content-single.php | 2 +- .../themes/twentyeleven/editor-style.css | 2 +- wp-content/themes/twentyeleven/functions.php | 113 +- wp-content/themes/twentyeleven/header.php | 40 +- .../twentyeleven/inc/theme-customizer.js | 12 + .../themes/twentyeleven/inc/theme-options.php | 98 +- .../twentyeleven/languages/twentyeleven.pot | 138 +- wp-content/themes/twentyeleven/showcase.php | 13 +- wp-content/themes/twentyeleven/style.css | 57 +- wp-content/themes/twentyten/comments.php | 2 +- wp-content/themes/twentyten/footer.php | 2 +- wp-content/themes/twentyten/functions.php | 69 +- wp-content/themes/twentyten/header.php | 28 +- .../themes/twentyten/languages/twentyten.pot | 78 +- .../themes/twentyten/loop-attachment.php | 4 +- wp-content/themes/twentyten/loop-page.php | 4 +- wp-content/themes/twentyten/loop-single.php | 4 +- wp-content/themes/twentyten/loop.php | 2 +- wp-content/themes/twentyten/style.css | 7 +- wp-cron.php | 4 +- wp-includes/admin-bar.php | 38 +- wp-includes/atomlib.php | 2 - wp-includes/author-template.php | 27 +- wp-includes/bookmark-template.php | 2 - wp-includes/bookmark.php | 9 +- wp-includes/cache.php | 60 +- wp-includes/canonical.php | 159 +- wp-includes/capabilities.php | 44 +- wp-includes/category-template.php | 84 +- wp-includes/category.php | 25 +- wp-includes/class-IXR.php | 2 - wp-includes/class-http.php | 92 +- wp-includes/class-json.php | 1 - wp-includes/class-oembed.php | 57 +- wp-includes/class-phpmailer.php | 640 +++-- wp-includes/class-simplepie.php | 1654 +++++++----- wp-includes/class-smtp.php | 30 +- wp-includes/class-wp-admin-bar.php | 5 +- wp-includes/class-wp-ajax-response.php | 7 +- wp-includes/class-wp-atom-server.php | 1487 +++++++++++ wp-includes/class-wp-customize-control.php | 516 ++++ wp-includes/class-wp-customize-manager.php | 1010 ++++++++ wp-includes/class-wp-customize-section.php | 94 + wp-includes/class-wp-customize-setting.php | 409 +++ wp-includes/class-wp-editor.php | 76 +- wp-includes/class-wp-error.php | 2 - wp-includes/class-wp-http-ixr-client.php | 1 - wp-includes/class-wp-theme.php | 1189 +++++++++ wp-includes/class-wp-walker.php | 10 +- wp-includes/class-wp-xmlrpc-server.php | 2306 ++++++++++++++--- wp-includes/class-wp.php | 45 +- wp-includes/class.wp-dependencies.php | 8 +- wp-includes/class.wp-scripts.php | 15 +- wp-includes/class.wp-styles.php | 1 - wp-includes/comment-template.php | 48 +- wp-includes/comment.php | 66 +- wp-includes/cron.php | 16 +- wp-includes/css/admin-bar-rtl.css | 2 +- wp-includes/css/admin-bar.css | 2 +- wp-includes/css/admin-bar.dev.css | 36 +- wp-includes/css/editor.css | 1 + wp-includes/css/editor.dev.css | 2021 +++++++++++++++ wp-includes/css/jquery-ui-dialog.css | 2 +- wp-includes/css/jquery-ui-dialog.dev.css | 2 - wp-includes/css/wp-pointer.css | 2 +- wp-includes/default-constants.php | 14 +- wp-includes/default-filters.php | 12 +- wp-includes/default-widgets.php | 58 +- wp-includes/deprecated.php | 320 ++- wp-includes/feed-atom-comments.php | 2 +- wp-includes/feed-atom.php | 2 +- wp-includes/feed-rss.php | 2 +- wp-includes/feed-rss2.php | 2 +- wp-includes/feed.php | 5 +- wp-includes/formatting.php | 316 ++- wp-includes/functions.php | 1411 ++-------- wp-includes/functions.wp-scripts.php | 2 +- wp-includes/functions.wp-styles.php | 4 +- wp-includes/general-template.php | 24 +- wp-includes/http.php | 79 +- wp-includes/images/admin-bar-sprite-2x.png | Bin 0 -> 4160 bytes wp-includes/js/admin-bar.dev.js | 47 +- wp-includes/js/admin-bar.js | 2 +- wp-includes/js/autosave.dev.js | 2 +- wp-includes/js/customize-base.dev.js | 586 +++++ wp-includes/js/customize-base.js | 1 + wp-includes/js/customize-loader.dev.js | 159 ++ wp-includes/js/customize-loader.js | 1 + wp-includes/js/customize-preview.dev.js | 141 + wp-includes/js/customize-preview.js | 1 + wp-includes/js/hoverIntent.dev.js | 38 +- wp-includes/js/hoverIntent.js | 2 +- .../js/imgareaselect/imgareaselect.css | 10 +- .../imgareaselect/jquery.imgareaselect.dev.js | 520 +++- .../js/imgareaselect/jquery.imgareaselect.js | 2 +- wp-includes/js/jquery/jquery.form.dev.js | 1 - wp-includes/js/jquery/jquery.form.js | 2 +- wp-includes/js/jquery/jquery.hotkeys.dev.js | 11 +- wp-includes/js/jquery/jquery.hotkeys.js | 2 +- wp-includes/js/jquery/jquery.js | 8 +- .../js/jquery/jquery.ui.touch-punch.js | 11 + .../js/jquery/ui/jquery.effects.blind.min.js | 19 +- .../js/jquery/ui/jquery.effects.bounce.min.js | 20 +- .../js/jquery/ui/jquery.effects.clip.min.js | 19 +- .../js/jquery/ui/jquery.effects.core.min.js | 36 +- .../js/jquery/ui/jquery.effects.drop.min.js | 19 +- .../jquery/ui/jquery.effects.explode.min.js | 20 +- .../js/jquery/ui/jquery.effects.fade.min.js | 18 +- .../js/jquery/ui/jquery.effects.fold.min.js | 19 +- .../jquery/ui/jquery.effects.highlight.min.js | 19 +- .../jquery/ui/jquery.effects.pulsate.min.js | 19 +- .../js/jquery/ui/jquery.effects.scale.min.js | 25 +- .../js/jquery/ui/jquery.effects.shake.min.js | 19 +- .../js/jquery/ui/jquery.effects.slide.min.js | 19 +- .../jquery/ui/jquery.effects.transfer.min.js | 19 +- .../js/jquery/ui/jquery.ui.accordion.min.js | 35 +- .../jquery/ui/jquery.ui.autocomplete.min.js | 37 +- .../js/jquery/ui/jquery.ui.button.min.js | 32 +- .../js/jquery/ui/jquery.ui.core.min.js | 23 +- .../js/jquery/ui/jquery.ui.datepicker.min.js | 88 +- .../js/jquery/ui/jquery.ui.dialog.min.js | 45 +- .../js/jquery/ui/jquery.ui.draggable.min.js | 55 +- .../js/jquery/ui/jquery.ui.droppable.min.js | 32 +- .../js/jquery/ui/jquery.ui.mouse.min.js | 22 +- .../js/jquery/ui/jquery.ui.position.min.js | 21 +- .../js/jquery/ui/jquery.ui.progressbar.min.js | 21 +- .../js/jquery/ui/jquery.ui.resizable.min.js | 54 +- .../js/jquery/ui/jquery.ui.selectable.min.js | 27 +- .../js/jquery/ui/jquery.ui.slider.min.js | 38 +- .../js/jquery/ui/jquery.ui.sortable.min.js | 65 +- .../js/jquery/ui/jquery.ui.tabs.min.js | 40 +- .../js/jquery/ui/jquery.ui.widget.min.js | 20 +- wp-includes/js/plupload/handlers.dev.js | 22 +- wp-includes/js/plupload/handlers.js | 2 +- wp-includes/js/plupload/wp-plupload.dev.js | 220 ++ wp-includes/js/plupload/wp-plupload.js | 1 + wp-includes/js/quicktags.dev.js | 39 +- wp-includes/js/quicktags.js | 2 +- wp-includes/js/swfupload/handlers.dev.js | 4 +- wp-includes/js/swfupload/handlers.js | 2 +- wp-includes/js/tinymce/langs/wp-langs-en.js | 7 +- wp-includes/js/tinymce/langs/wp-langs.php | 1059 ++++---- wp-includes/js/tinymce/mark_loaded_src.js | 20 + .../directionality/editor_plugin_src.js | 82 + .../plugins/fullscreen/editor_plugin_src.js | 159 ++ .../tinymce/plugins/fullscreen/fullscreen.htm | 2 +- .../plugins/inlinepopups/editor_plugin_src.js | 699 +++++ .../tinymce/plugins/inlinepopups/template.htm | 2 +- .../js/tinymce/plugins/media/editor_plugin.js | 2 +- .../plugins/media/editor_plugin_src.js | 890 +++++++ .../js/tinymce/plugins/media/js/media.js | 113 +- .../js/tinymce/plugins/media/media.htm | 63 +- .../js/tinymce/plugins/media/moxieplayer.swf | Bin 33931 -> 19980 bytes .../js/tinymce/plugins/paste/editor_plugin.js | 2 +- .../plugins/paste/editor_plugin_src.js | 871 +++++++ .../js/tinymce/plugins/paste/pastetext.htm | 4 +- .../js/tinymce/plugins/paste/pasteword.htm | 4 +- .../plugins/spellchecker/editor_plugin.js | 2 +- .../plugins/spellchecker/editor_plugin_src.js | 436 ++++ .../plugins/tabfocus/editor_plugin_src.js | 122 + .../plugins/wordpress/editor_plugin.js | 2 +- .../plugins/wordpress/editor_plugin_src.js | 440 ++++ .../plugins/wpdialogs/editor_plugin_src.js | 80 + .../plugins/wpeditimage/css/editimage.css | 74 +- .../plugins/wpeditimage/editimage.html | 20 +- .../plugins/wpeditimage/editor_plugin.js | 2 +- .../plugins/wpeditimage/editor_plugin_src.js | 281 ++ .../plugins/wpeditimage/js/editimage.dev.js | 89 +- .../plugins/wpeditimage/js/editimage.js | 2 +- .../wpfullscreen/css/wp-fullscreen.css | 10 +- .../plugins/wpfullscreen/editor_plugin.js | 2 +- .../plugins/wpfullscreen/editor_plugin_src.js | 173 ++ .../plugins/wpgallery/editor_plugin.js | 2 +- .../plugins/wpgallery/editor_plugin_src.js | 119 + .../plugins/wplink/editor_plugin_src.js | 60 + .../js/tinymce/themes/advanced/about.htm | 6 +- .../js/tinymce/themes/advanced/anchor.htm | 4 +- .../js/tinymce/themes/advanced/charmap.htm | 10 +- .../tinymce/themes/advanced/color_picker.htm | 6 +- .../themes/advanced/editor_template.js | 2 +- .../themes/advanced/editor_template_src.js | 1362 ++++++++++ .../js/tinymce/themes/advanced/image.htm | 8 +- .../js/tinymce/themes/advanced/js/anchor.js | 5 +- .../js/tinymce/themes/advanced/js/charmap.js | 14 +- .../themes/advanced/js/color_picker.js | 8 +- .../js/tinymce/themes/advanced/link.htm | 10 +- .../js/tinymce/themes/advanced/shortcuts.htm | 2 +- .../themes/advanced/skins/default/content.css | 3 +- .../advanced/skins/highcontrast/content.css | 2 +- .../themes/advanced/skins/o2k7/content.css | 2 +- .../advanced/skins/wp_theme/content.css | 60 +- .../advanced/skins/wp_theme/img/embedded.png | Bin 0 -> 28741 bytes .../advanced/skins/wp_theme/img/gallery.png | Bin 0 -> 27676 bytes .../advanced/skins/wp_theme/img/more_bug.gif | Bin 0 -> 146 bytes .../advanced/skins/wp_theme/img/page_bug.gif | Bin 0 -> 180 bytes .../tinymce/themes/advanced/source_editor.htm | 8 +- wp-includes/js/tinymce/tiny_mce.js | 2 +- wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 95812 -> 101114 bytes wp-includes/js/wp-pointer.dev.js | 4 +- wp-includes/js/wp-pointer.js | 2 +- wp-includes/js/wplink.dev.js | 39 +- wp-includes/js/wplink.js | 2 +- wp-includes/kses.php | 648 ++--- wp-includes/l10n.php | 28 +- wp-includes/link-template.php | 93 +- wp-includes/load.php | 134 +- wp-includes/locale.php | 32 +- wp-includes/media.php | 76 +- wp-includes/meta.php | 44 +- wp-includes/ms-blogs.php | 23 +- wp-includes/ms-default-constants.php | 2 - wp-includes/ms-default-filters.php | 4 +- wp-includes/ms-deprecated.php | 4 +- wp-includes/ms-files.php | 1 - wp-includes/ms-functions.php | 64 +- wp-includes/ms-load.php | 26 +- wp-includes/ms-settings.php | 8 +- wp-includes/nav-menu-template.php | 18 +- wp-includes/nav-menu.php | 4 +- wp-includes/option.php | 1046 ++++++++ wp-includes/pluggable.php | 214 +- wp-includes/plugin.php | 10 +- wp-includes/post-template.php | 99 +- wp-includes/post-thumbnail-template.php | 21 +- wp-includes/post.php | 493 ++-- wp-includes/query.php | 106 +- wp-includes/registration-functions.php | 1 - wp-includes/registration.php | 1 - wp-includes/rewrite.php | 407 +-- wp-includes/rss-functions.php | 3 +- wp-includes/rss.php | 7 - wp-includes/script-loader.php | 267 +- wp-includes/shortcodes.php | 4 +- wp-includes/taxonomy.php | 160 +- wp-includes/template-loader.php | 2 - wp-includes/template.php | 394 +++ wp-includes/theme-compat/comments.php | 1 - wp-includes/theme-compat/header.php | 1 - wp-includes/theme-compat/sidebar.php | 1 - wp-includes/theme.php | 1802 ++++++------- wp-includes/update.php | 148 +- wp-includes/user.php | 128 +- wp-includes/vars.php | 27 +- wp-includes/version.php | 6 +- wp-includes/widgets.php | 3 +- wp-includes/wlwmanifest.xml | 1 - wp-includes/wp-db.php | 108 +- wp-includes/wp-diff.php | 29 +- wp-load.php | 27 +- wp-login.php | 155 +- wp-mail.php | 14 +- wp-settings.php | 23 +- wp-signup.php | 17 +- wp-trackback.php | 1 - xmlrpc.php | 54 +- 508 files changed, 35661 insertions(+), 15571 deletions(-) create mode 100644 wp-admin/css/customize-controls-rtl.css create mode 100644 wp-admin/css/customize-controls-rtl.dev.css create mode 100644 wp-admin/css/customize-controls.css create mode 100644 wp-admin/css/customize-controls.dev.css create mode 100644 wp-admin/customize.php create mode 100644 wp-admin/images/icons32-2x.png create mode 100644 wp-admin/images/icons32-vs-2x.png create mode 100644 wp-admin/images/menu-2x.png create mode 100644 wp-admin/images/screenshots/captions-1.png create mode 100644 wp-admin/images/screenshots/captions-2.png create mode 100644 wp-admin/images/screenshots/flex-header-1.png create mode 100644 wp-admin/images/screenshots/flex-header-2.png create mode 100644 wp-admin/images/screenshots/flex-header-3.png create mode 100644 wp-admin/images/screenshots/flex-header-media-library.png create mode 100644 wp-admin/images/screenshots/theme-customizer.png create mode 100644 wp-admin/images/screenshots/twitter-embed-1.png create mode 100644 wp-admin/images/screenshots/twitter-embed-2.png create mode 100644 wp-admin/images/stars-rtl.png create mode 100644 wp-admin/images/stars.png create mode 100644 wp-admin/images/wordpress-logo-2x.png create mode 100644 wp-admin/images/wp-badge-2x.png create mode 100644 wp-admin/includes/ajax-actions.php create mode 100644 wp-admin/js/customize-controls.dev.js create mode 100644 wp-admin/js/customize-controls.js create mode 100644 wp-admin/js/media-gallery.dev.js create mode 100644 wp-admin/js/media-gallery.js create mode 100644 wp-admin/js/user-suggest.dev.js create mode 100644 wp-admin/js/user-suggest.js create mode 100644 wp-admin/network/about.php create mode 100644 wp-admin/network/credits.php create mode 100644 wp-admin/network/freedoms.php create mode 100644 wp-admin/user/about.php create mode 100644 wp-admin/user/credits.php create mode 100644 wp-admin/user/freedoms.php create mode 100644 wp-content/plugins/akismet/index.php create mode 100644 wp-content/themes/twentyeleven/inc/theme-customizer.js create mode 100644 wp-includes/class-wp-atom-server.php create mode 100644 wp-includes/class-wp-customize-control.php create mode 100644 wp-includes/class-wp-customize-manager.php create mode 100644 wp-includes/class-wp-customize-section.php create mode 100644 wp-includes/class-wp-customize-setting.php create mode 100644 wp-includes/class-wp-theme.php create mode 100644 wp-includes/css/editor.css create mode 100644 wp-includes/css/editor.dev.css create mode 100644 wp-includes/images/admin-bar-sprite-2x.png create mode 100644 wp-includes/js/customize-base.dev.js create mode 100644 wp-includes/js/customize-base.js create mode 100644 wp-includes/js/customize-loader.dev.js create mode 100644 wp-includes/js/customize-loader.js create mode 100644 wp-includes/js/customize-preview.dev.js create mode 100644 wp-includes/js/customize-preview.js create mode 100644 wp-includes/js/jquery/jquery.ui.touch-punch.js create mode 100644 wp-includes/js/plupload/wp-plupload.dev.js create mode 100644 wp-includes/js/plupload/wp-plupload.js create mode 100644 wp-includes/js/tinymce/mark_loaded_src.js create mode 100644 wp-includes/js/tinymce/plugins/directionality/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/fullscreen/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/inlinepopups/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/media/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/paste/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/spellchecker/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/tabfocus/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/wpdialogs/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/plugins/wplink/editor_plugin_src.js create mode 100644 wp-includes/js/tinymce/themes/advanced/editor_template_src.js create mode 100644 wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/embedded.png create mode 100644 wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery.png create mode 100644 wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/more_bug.gif create mode 100644 wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/page_bug.gif create mode 100644 wp-includes/option.php create mode 100644 wp-includes/template.php diff --git a/index.php b/index.php index 49403ecc2..1e3364ad1 100644 --- a/index.php +++ b/index.php @@ -15,4 +15,3 @@ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require('./wp-blog-header.php'); -?> \ No newline at end of file diff --git a/license.txt b/license.txt index 431a146a6..ec05d2948 100644 --- a/license.txt +++ b/license.txt @@ -37,16 +37,15 @@ and =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + Copyright (C) 1989, 1991 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. - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -55,7 +54,7 @@ software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to +the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not @@ -96,7 +95,7 @@ patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. - GNU GENERAL PUBLIC LICENSE + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains @@ -160,6 +159,7 @@ distribute the same sections as part of a whole which is a work based on the Program, 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 @@ -294,7 +294,7 @@ 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 + NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN @@ -316,8 +316,66 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. 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. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, 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. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. WRITTEN OFFER diff --git a/readme.html b/readme.html index 8980b3791..b32c54093 100644 --- a/readme.html +++ b/readme.html @@ -7,8 +7,8 @@ </head> <body> <h1 id="logo"> - <a href="http://wordpress.org/"><img alt="WordPress" src="wp-admin/images/wordpress-logo.png" width="250" height="68" /></a> - <br /> Version 3.3.2 + <a href="http://wordpress.org/"><img alt="WordPress" src="wp-admin/images/wordpress-logo.png" /></a> + <br /> Version 3.4 </h1> <p style="text-align: center">Semantic Personal Publishing Platform</p> @@ -104,6 +104,5 @@ <h1>License</h1> <p>WordPress is free software, and is released under the terms of the <abbr title="GNU General Public License">GPL</abbr> version 2 or (at your option) any later version. See <a href="license.txt">license.txt</a>.</p> - </body> </html> diff --git a/wp-activate.php b/wp-activate.php index 4f7207094..d470772ff 100644 --- a/wp-activate.php +++ b/wp-activate.php @@ -63,9 +63,9 @@ get_header(); <?php echo '<p class="lead-in">'; if ( $signup->domain . $signup->path == '' ) { - printf( __('Your account has been activated. You may now <a href="%1$s">log in</a> to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%4$s">reset your password</a>.'), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, wp_lostpassword_url() ); + printf( __('Your account has been activated. You may now <a href="%1$s">log in</a> to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%4$s">reset your password</a>.'), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, wp_lostpassword_url() ); } else { - printf( __('Your site at <a href="%1$s">%2$s</a> is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%5$s">reset your password</a>.'), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, wp_lostpassword_url() ); + printf( __('Your site at <a href="%1$s">%2$s</a> is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%5$s">reset your password</a>.'), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, wp_lostpassword_url() ); } echo '</p>'; } else { diff --git a/wp-admin/about.php b/wp-admin/about.php index 1ebc0f0da..3fa52e791 100644 --- a/wp-admin/about.php +++ b/wp-admin/about.php @@ -13,13 +13,13 @@ $title = __( 'About' ); list( $display_version ) = explode( '-', $wp_version ); -include( './admin-header.php' ); +include( ABSPATH . 'wp-admin/admin-header.php' ); ?> <div class="wrap about-wrap"> <h1><?php printf( __( 'Welcome to WordPress %s' ), $display_version ); ?></h1> -<div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Using WordPress %s will improve your looks, personality, and web publishing experience. Okay, just the last one, but still. :)' ), $display_version ); ?></div> +<div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! WordPress %s is already making your website better, faster, and more attractive, just like you!' ), $display_version ); ?></div> <div class="wp-badge"><?php printf( __( 'Version %s' ), $display_version ); ?></div> @@ -33,107 +33,62 @@ include( './admin-header.php' ); </a> </h2> -<div class="changelog point-releases"> - <h3><?php echo _n( 'Maintenance and Security Release', 'Maintenance and Security Releases', 2 ); ?></h3> - <p><?php printf( _n( '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.', - '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.', 12 ), '3.3.2', number_format_i18n( 12 ) ); ?> - <?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'http://codex.wordpress.org/Version_3.3.2' ); ?> - </p> - <p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue and fixed %2$s bug.', - '<strong>Version %1$s</strong> addressed a security issue and fixed %2$s bugs.', 15 ), '3.3.1', number_format_i18n( 15 ) ); ?> - <?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'http://codex.wordpress.org/Version_3.3.1' ); ?> - </p> -</div> - <div class="changelog"> - <h3><?php _e( 'Easier Uploading' ); ?></h3> + <h3><?php _e( 'Live Theme Previews' ); ?></h3> <div class="feature-section images-stagger-right"> - <div class="feature-images"> - <img src="images/screenshots/media-icon.png" width="200" class="angled-right" /> - <img src="images/screenshots/drag-and-drop.png" width="200" class="angled-left" /> - </div> - <div class="left-feature"> - <h4><?php _e( 'File Type Detection' ); ?></h4> - <p><?php _e( 'We’ve streamlined things! Instead of needing to click on a specific upload icon based on your file type, now there’s just one. Once your file is uploaded, the appropriate fields will be displayed for entering information based on the file type.' ); ?></p> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/theme-customizer.png' ) ); ?>" class="image-50" /> + <h4><?php _e( 'Try on New Themes' ); ?></h4> + <p><?php _e( 'Gone are the days of rushing to update your header, background, and the like as soon as you activate a new theme. You can now customize these options <strong>before</strong> activating a new theme. Note: this feature is available for installed themes only.' ); ?></p> - <h4><?php _e( 'Drag-and-Drop Media Uploader' ); ?></h4> - <p><?php _e( 'Adding photos or other files to posts and pages just got easier. Drag files from your desktop and drop them into the uploader. Add one file at a time, or many at once.' ); ?></p> - - <h4><?php _e( 'More File Formats' ); ?></h4> - <p><?php _e( 'We’ve added the rar and 7z file formats to the list of allowed file types in the uploader.' ); ?></p> - </div> + <h4><?php _e( 'Customize Current Theme' ); ?></h4> + <p><?php _e( 'Satisfy your curiosity and try on a fresh coat of paint — you can also use the live preview mode to customize your current theme. Look for the Customize link on the Themes screen.' ); ?></p> </div> </div> <div class="changelog"> - <h3><?php _e( 'Dashboard Design' ); ?></h3> + <h3><?php _e( 'Custom Headers' ); ?></h3> - <div class="feature-section text-features"> - <h4><?php _e( 'Flyout Menus' ); ?></h4> - <p><?php _e( 'Speed up navigating the dashboard and reduce repetitive clicking with our new flyout submenus. As you hover over each main menu item in your dashboard navigation, the submenus will magically appear, providing single-click access to any dashboard screen.' ); ?></p> - - <div> - <h4><?php _e( 'Header + Admin Bar = Toolbar' ); ?></h4> - <p><?php _e( 'To save space and increase efficiency, we’ve combined the admin bar and the old Dashboard header into one persistent toolbar. Hovering over the toolbar items will reveal submenus when available for quick access. ' ); ?></p> + <div class="feature-section"> + <h4><?php _e( 'Flexible Sizes' ); ?></h4> + <p><?php _e( 'You can decide for yourself how tall or wide your custom header image should be. From now on, themes will provide a recommended image size for custom headers rather than a fixed requirement. Note: this feature requires <a href="http://codex.wordpress.org/Custom_Headers">theme support</a>.' ); ?></p> + <div class="three-col-images"> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/flex-header-1.png' ) ); ?>" class="image-30 first-feature" /> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/flex-header-2.png' ) ); ?>" class="image-30" /> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/flex-header-3.png' ) ); ?>" class="image-30 last-feature" /> </div> </div> - <div class="feature-section screenshot-features"> - <div class="angled-left"> - <img src="images/screenshots/admin-flyouts.png" /> - <h4><?php _e( 'Responsive Design' ); ?></h4> - <p><?php _e( 'Certain dashboard screens have been updated to look better at various sizes, including improved iPad/tablet support.' ); ?></p> - </div> - <div class="angled-right"> - <img src="images/screenshots/help-screen.png" /> - <h4><?php _e( 'Help Tabs' ); ?></h4> - <p><?php _e( 'The Help tabs located in the upper corner of the dashboard screens below your name have gotten a facelift. Help content is broken into smaller sections for easier access, with links to relevant documentation and the support forums always visible.' ); ?></p> - </div> + <div class="feature-section images-stagger-right"> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/flex-header-media-library.png' ) ); ?>" class="image-50" /> + <h4><?php _e( 'Choose from Media Library' ); ?></h4> + <p><?php _e( 'Tired of re-uploading the same custom header image every time you check out a new theme? Now you can choose header images from your media library for easier customization.' ); ?></p> </div> </div> <div class="changelog"> - <h3><?php _e( 'Feels Like the First Time' ); ?></h3> + <h3><?php _e( 'Twitter Embeds' ); ?></h3> <div class="feature-section images-stagger-right"> - <div class="feature-images"> - <img src="images/screenshots/new-feature-pointer.png" class="angled-right" /> - <img src="images/screenshots/welcome-screen.png" class="angled-left" /> - </div> - <div class="left-feature"> - <h4><?php _e( 'New Feature Pointers' ); ?></h4> - <p><?php _e( 'When we add new features, move navigation, or do anything else with the dashboard that might throw you for a loop when you update your WordPress site, we’ll let you know about it with new feature pointers explaining the change.' ); ?></p> - - <h4><?php _e( 'Post-update Changelog' ); ?></h4> - <p><?php _e( 'This screen! From now on when you update WordPress, you’ll be brought to this screen — also accessible any time from the W logo in the corner of the toolbar — to get an overview of what’s changed.' ); ?></p> - - <h4><?php _e( 'Dashboard Welcome' ); ?></h4> - <p><?php _e( 'The dashboard home screen will have a Welcome area that displays when a new WordPress installation is accessed for the first time, prompting the site owner to complete various setup tasks. Once dismissed, this welcome can be accessed via the dashboard home screen options tab.' ); ?></p> - </div> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/twitter-embed-1.png' ) ); ?>" class="image-30" /> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/twitter-embed-2.png' ) ); ?>" class="image-30" /> + <h4><?php _e( 'Share Tweets with Style' ); ?></h4> + <p><?php _e( 'You can now embed individual tweets in posts. It includes action links that allow readers to reply to, retweet, and favorite the tweet without leaving your site. Just paste a tweet URL on its own line.' ); ?></p> + <p><?php printf( __( 'This works with URLs from some other sites, too. For more, see the Codex article on <a href="%s">Embeds</a>.' ), __( 'http://codex.wordpress.org/Embeds' ) ); ?></p> </div> </div> + <div class="changelog"> - <h3><?php _e( 'Content Tools' ); ?></h3> + <h3><?php _e( 'Better Captions' ); ?></h3> - <div class="feature-section three-col"> - <div> - <h4><?php _e( 'Better Co-Editing' ); ?></h4> - <img src="images/screenshots/coediting.png" class="element-screenshot" /> - <p><?php _e( 'Have you ever gone to edit a post after someone else has finished with it, only to get an alert that tells you the other person is still editing the post? From now on, you’ll only get that alert if another person is still on the editing screen — no more time lag.' ); ?></p> - </div> - <div> - <h4><?php _e( 'Tumblr Importer' ); ?></h4> - <p><?php _e( 'Want to import content from Tumblr to WordPress? No problem! Go to <span class="no-break">Tools → Import</span> to get the new Tumblr Importer, which maps your Tumblog posts to the matching WordPress post formats. Tip: Choose a theme designed to display post formats to get the greatest benefit from the importer.' ); ?></p> - </div> - <div class="last-feature"> - <h4><?php _e( 'Widget Improvements' ); ?></h4> - <p><?php _e( 'Changing themes often requires widget re-configuration based on the number and position of sidebars. Now if you change back to a previous theme, the widgets will automatically go back to how you had them arranged in that theme. <em>Note: if you’ve added new widgets since the switch, you’ll need to rescue them from the Inactive Widgets area.</em>' ); ?></p> - </div> + <div class="feature-section images-stagger-right"> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/captions-1.png' ) ); ?>" class="image-30" /> + <img src="<?php echo esc_url( admin_url( 'images/screenshots/captions-2.png' ) ); ?>" class="image-30" /> + <h4><?php _e( 'HTML Support' ); ?></h4> + <p><?php _e( 'Basic HTML support has been added to the caption field in the image uploader. This allows you to add links — great for photo credits or licensing details — and basic formatting such as bold and italicized text.' ); ?></p> </div> - </div> <div class="changelog"> @@ -141,49 +96,43 @@ include( './admin-header.php' ); <div class="feature-section three-col"> <div> - <h4><?php _e( 'Flexible Permalinks' ); ?></h4> - <p><?php _e( 'You have more freedom when choosing a post permalink structure. Skip the date information or add a category slug without a performance penalty.' ); ?></p> - </div> - <div> - <h4><?php _e( 'Post Slugs: Less Funky' ); ?></h4> - <p><?php _e( 'Funky characters in post titles (e.g. curly quotes from a word processor) will no longer result in garbled post slugs.' ); ?></p> - </div> - <div class="last-feature"> - <h4><?php _e( 'jQuery and jQuery UI' ); ?></h4> - <p><?php printf( __( 'WordPress now includes the entire jQuery UI stack and the latest version of jQuery: %s.' ), '1.7.1' ); ?></p> - </div> - </div> + <h4><?php _e( 'Faster WP_Query' ); ?></h4> + <p><?php _e( 'Post queries have been optimized to improve performance, especially for sites with large databases.' ); ?></p> - <div class="feature-section three-col"> - <div> - <h4 style="direction:ltr">is_main_query()</h4> - <p><?php _e( 'This handy method will tell you if a <code>WP_Query</code> object is the main WordPress query or a secondary query.' ); ?></p> + <h4><?php _e( 'Faster Translations' ); ?></h4> + <p><?php _e( 'The number of strings loaded on the front end was greatly reduced, resulting in faster front page load times for localized installations.' ); ?> <?php _e( 'Also, better support for East Asian languages, right-to-left languages, theme translations, and more.' ); ?></p> </div> <div> - <h4><?php _e( 'WP_Screen API' ); ?></h4> - <p><?php _e( 'WordPress has a nice new API for working with admin screens. Create rich screens, add help documentation, adapt to screen contexts, and more.' ); ?></p> + <h4><?php _e( 'Themes API' ); ?></h4> + <p><?php _e( 'WP_Theme, wp_get_themes(), wp_get_theme(). Faster, uses less memory, makes use of persistent caching.' ); ?></p> + + <h4><?php _e( 'Custom Header and Background API' ); ?></h4> + <p><?php _e( 'Custom header and background API relocated into the theme support API.' ); ?></p> </div> <div class="last-feature"> - <h4><?php _e( 'Editor API Overhaul' ); ?></h4> - <p><?php _e( 'The new editor API automatically pulls in all the JS and CSS goodness for the editor. It even supports multiple editors on the same page.' ); ?></p> + <h4><?php _e( 'XML-RPC API' ); ?></h4> + <p><?php printf( __( 'A new <a href="%s">WordPress API</a> that supports custom content types and taxonomies, as well as dozens of other bug fixes and improvements.' ), __( 'http://codex.wordpress.org/XML-RPC_WordPress_API' ) ); ?></p> + + <h4><?php _e( 'External Libraries' ); ?></h4> + <p><?php _e( 'jQuery, jQuery UI, TinyMCE, Plupload, PHPMailer, SimplePie, and other libraries were updated. jQuery UI Touch Punch was introduced.' ); ?></p> </div> </div> - </div> <div class="return-to-dashboard"> <?php if ( current_user_can( 'update_core' ) && isset( $_GET['updated'] ) ) : ?> - <a href="<?php echo esc_url( network_admin_url( 'update-core.php' ) ); ?>"><?php + <a href="<?php echo esc_url( self_admin_url( 'update-core.php' ) ); ?>"><?php is_multisite() ? _e( 'Return to Updates' ) : _e( 'Return to Dashboard → Updates' ); ?></a> | <?php endif; ?> - <a href="<?php echo esc_url( admin_url() ); ?>"><?php _e( 'Go to Dashboard → Home' ); ?></a> + <a href="<?php echo esc_url( self_admin_url() ); ?>"><?php + is_blog_admin() ? _e( 'Go to Dashboard → Home' ) : _e( 'Go to Dashboard' ); ?></a> </div> </div> <?php -include( './admin-footer.php' ); +include( ABSPATH . 'wp-admin/admin-footer.php' ); // These are strings we may use to describe maintenance/security releases, where we aim for no new strings. return; @@ -209,5 +158,3 @@ _n_noop( '<strong>Version %1$s</strong> addressed some security issues and fixed '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.' ); __( 'For more information, see <a href="%s">the release notes</a>.' ); - -?> \ No newline at end of file diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php index c21c861e4..db44df78c 100644 --- a/wp-admin/admin-ajax.php +++ b/wp-admin/admin-ajax.php @@ -4,6 +4,8 @@ * * @package WordPress * @subpackage Administration + * + * @link http://codex.wordpress.org/AJAX_in_Plugins */ /** @@ -11,1581 +13,59 @@ * * @since 2.1.0 */ -define('DOING_AJAX', true); -define('WP_ADMIN', true); - -if ( ! isset( $_REQUEST['action'] ) ) - die('-1'); - -require_once('../wp-load.php'); - -require_once('./includes/admin.php'); -@header('Content-Type: text/html; charset=' . get_option('blog_charset')); -send_nosniff_header(); - -do_action('admin_init'); - -if ( ! is_user_logged_in() ) { - - if ( isset( $_POST['action'] ) && $_POST['action'] == 'autosave' ) { - $id = isset($_POST['post_ID'])? (int) $_POST['post_ID'] : 0; - - if ( ! $id ) - die('-1'); - - $message = sprintf( __('<strong>ALERT: You are logged out!</strong> Could not save draft. <a href="%s" target="_blank">Please log in again.</a>'), wp_login_url() ); - $x = new WP_Ajax_Response( array( - 'what' => 'autosave', - 'id' => $id, - 'data' => $message - ) ); - $x->send(); - } - - if ( !empty( $_REQUEST['action'] ) ) - do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] ); - - die('-1'); -} - -if ( isset( $_GET['action'] ) ) : -switch ( $action = $_GET['action'] ) : -case 'fetch-list' : - - $list_class = $_GET['list_args']['class']; - check_ajax_referer( "fetch-list-$list_class", '_ajax_fetch_list_nonce' ); - - $current_screen = convert_to_screen( $_GET['list_args']['screen']['id'] ); - - define( 'WP_NETWORK_ADMIN', $current_screen->is_network ); - define( 'WP_USER_ADMIN', $current_screen->is_user ); - - $wp_list_table = _get_list_table( $list_class ); - if ( ! $wp_list_table ) - die( '0' ); - - if ( ! $wp_list_table->ajax_user_can() ) - die( '-1' ); - - $wp_list_table->ajax_response(); - - die( '0' ); - break; -case 'ajax-tag-search' : - if ( isset( $_GET['tax'] ) ) { - $taxonomy = sanitize_key( $_GET['tax'] ); - $tax = get_taxonomy( $taxonomy ); - if ( ! $tax ) - die( '0' ); - if ( ! current_user_can( $tax->cap->assign_terms ) ) - die( '-1' ); - } else { - die('0'); - } - - $s = stripslashes( $_GET['q'] ); - - if ( false !== strpos( $s, ',' ) ) { - $s = explode( ',', $s ); - $s = $s[count( $s ) - 1]; - } - $s = trim( $s ); - if ( strlen( $s ) < 2 ) - die; // require 2 chars for matching - - $results = $wpdb->get_col( $wpdb->prepare( "SELECT t.name FROM $wpdb->term_taxonomy AS tt INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy = %s AND t.name LIKE (%s)", $taxonomy, '%' . like_escape( $s ) . '%' ) ); - - echo join( $results, "\n" ); - die; - break; -case 'wp-compression-test' : - if ( !current_user_can( 'manage_options' ) ) - die('-1'); - - if ( ini_get('zlib.output_compression') || 'ob_gzhandler' == ini_get('output_handler') ) { - update_site_option('can_compress_scripts', 0); - die('0'); - } - - if ( isset($_GET['test']) ) { - header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' ); - header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); - header( 'Cache-Control: no-cache, must-revalidate, max-age=0' ); - header( 'Pragma: no-cache' ); - header('Content-Type: application/x-javascript; charset=UTF-8'); - $force_gzip = ( defined('ENFORCE_GZIP') && ENFORCE_GZIP ); - $test_str = '"wpCompressionTest Lorem ipsum dolor sit amet consectetuer mollis sapien urna ut a. Eu nonummy condimentum fringilla tempor pretium platea vel nibh netus Maecenas. Hac molestie amet justo quis pellentesque est ultrices interdum nibh Morbi. Cras mattis pretium Phasellus ante ipsum ipsum ut sociis Suspendisse Lorem. Ante et non molestie. Porta urna Vestibulum egestas id congue nibh eu risus gravida sit. Ac augue auctor Ut et non a elit massa id sodales. Elit eu Nulla at nibh adipiscing mattis lacus mauris at tempus. Netus nibh quis suscipit nec feugiat eget sed lorem et urna. Pellentesque lacus at ut massa consectetuer ligula ut auctor semper Pellentesque. Ut metus massa nibh quam Curabitur molestie nec mauris congue. Volutpat molestie elit justo facilisis neque ac risus Ut nascetur tristique. Vitae sit lorem tellus et quis Phasellus lacus tincidunt nunc Fusce. Pharetra wisi Suspendisse mus sagittis libero lacinia Integer consequat ac Phasellus. Et urna ac cursus tortor aliquam Aliquam amet tellus volutpat Vestibulum. Justo interdum condimentum In augue congue tellus sollicitudin Quisque quis nibh."'; - - if ( 1 == $_GET['test'] ) { - echo $test_str; - die; - } elseif ( 2 == $_GET['test'] ) { - if ( !isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) - die('-1'); - if ( false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) { - header('Content-Encoding: deflate'); - $out = gzdeflate( $test_str, 1 ); - } elseif ( false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) { - header('Content-Encoding: gzip'); - $out = gzencode( $test_str, 1 ); - } else { - die('-1'); - } - echo $out; - die; - } elseif ( 'no' == $_GET['test'] ) { - update_site_option('can_compress_scripts', 0); - } elseif ( 'yes' == $_GET['test'] ) { - update_site_option('can_compress_scripts', 1); - } - } - - die('0'); - break; -case 'imgedit-preview' : - $post_id = intval($_GET['postid']); - if ( empty($post_id) || !current_user_can('edit_post', $post_id) ) - die('-1'); - - check_ajax_referer( "image_editor-$post_id" ); - - include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); - if ( ! stream_preview_image($post_id) ) - die('-1'); - - die(); - break; -case 'menu-quick-search': - if ( ! current_user_can( 'edit_theme_options' ) ) - die('-1'); - - require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; - - _wp_ajax_menu_quick_search( $_REQUEST ); - - exit; - break; -case 'oembed-cache' : - $return = ( $wp_embed->cache_oembed( $_GET['post'] ) ) ? '1' : '0'; - die( $return ); - break; -default : - do_action( 'wp_ajax_' . $_GET['action'] ); - die('0'); - break; -endswitch; -endif; - -/** - * Sends back current comment total and new page links if they need to be updated. - * - * Contrary to normal success AJAX response ("1"), die with time() on success. - * - * @since 2.7 - * - * @param int $comment_id - * @return die - */ -function _wp_ajax_delete_comment_response( $comment_id, $delta = -1 ) { - $total = (int) @$_POST['_total']; - $per_page = (int) @$_POST['_per_page']; - $page = (int) @$_POST['_page']; - $url = esc_url_raw( @$_POST['_url'] ); - // JS didn't send us everything we need to know. Just die with success message - if ( !$total || !$per_page || !$page || !$url ) - die( (string) time() ); - - $total += $delta; - if ( $total < 0 ) - $total = 0; - - // Only do the expensive stuff on a page-break, and about 1 other time per page - if ( 0 == $total % $per_page || 1 == mt_rand( 1, $per_page ) ) { - $post_id = 0; - $status = 'total_comments'; // What type of comment count are we looking for? - $parsed = parse_url( $url ); - if ( isset( $parsed['query'] ) ) { - parse_str( $parsed['query'], $query_vars ); - if ( !empty( $query_vars['comment_status'] ) ) - $status = $query_vars['comment_status']; - if ( !empty( $query_vars['p'] ) ) - $post_id = (int) $query_vars['p']; - } - - $comment_count = wp_count_comments($post_id); - - if ( isset( $comment_count->$status ) ) // We're looking for a known type of comment count - $total = $comment_count->$status; - // else use the decremented value from above - } - - $time = time(); // The time since the last comment count - - $x = new WP_Ajax_Response( array( - 'what' => 'comment', - 'id' => $comment_id, // here for completeness - not used - 'supplemental' => array( - 'total_items_i18n' => sprintf( _n( '1 item', '%s items', $total ), number_format_i18n( $total ) ), - 'total_pages' => ceil( $total / $per_page ), - 'total_pages_i18n' => number_format_i18n( ceil( $total / $per_page ) ), - 'total' => $total, - 'time' => $time - ) - ) ); - $x->send(); -} - -function _wp_ajax_add_hierarchical_term() { - $action = $_POST['action']; - $taxonomy = get_taxonomy(substr($action, 4)); - check_ajax_referer( $action, '_ajax_nonce-add-' . $taxonomy->name ); - if ( !current_user_can( $taxonomy->cap->edit_terms ) ) - die('-1'); - $names = explode(',', $_POST['new'.$taxonomy->name]); - $parent = isset($_POST['new'.$taxonomy->name.'_parent']) ? (int) $_POST['new'.$taxonomy->name.'_parent'] : 0; - if ( 0 > $parent ) - $parent = 0; - if ( $taxonomy->name == 'category' ) - $post_category = isset($_POST['post_category']) ? (array) $_POST['post_category'] : array(); - else - $post_category = ( isset($_POST['tax_input']) && isset($_POST['tax_input'][$taxonomy->name]) ) ? (array) $_POST['tax_input'][$taxonomy->name] : array(); - $checked_categories = array_map( 'absint', (array) $post_category ); - $popular_ids = wp_popular_terms_checklist($taxonomy->name, 0, 10, false); - - foreach ( $names as $cat_name ) { - $cat_name = trim($cat_name); - $category_nicename = sanitize_title($cat_name); - if ( '' === $category_nicename ) - continue; - if ( !($cat_id = term_exists($cat_name, $taxonomy->name, $parent)) ) { - $new_term = wp_insert_term($cat_name, $taxonomy->name, array('parent' => $parent)); - $cat_id = $new_term['term_id']; - } - $checked_categories[] = $cat_id; - if ( $parent ) // Do these all at once in a second - continue; - $category = get_term( $cat_id, $taxonomy->name ); - ob_start(); - wp_terms_checklist( 0, array( 'taxonomy' => $taxonomy->name, 'descendants_and_self' => $cat_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids )); - $data = ob_get_contents(); - ob_end_clean(); - $add = array( - 'what' => $taxonomy->name, - 'id' => $cat_id, - 'data' => str_replace( array("\n", "\t"), '', $data), - 'position' => -1 - ); - } - - if ( $parent ) { // Foncy - replace the parent and all its children - $parent = get_term( $parent, $taxonomy->name ); - $term_id = $parent->term_id; - - while ( $parent->parent ) { // get the top parent - $parent = &get_term( $parent->parent, $taxonomy->name ); - if ( is_wp_error( $parent ) ) - break; - $term_id = $parent->term_id; - } - - ob_start(); - wp_terms_checklist( 0, array('taxonomy' => $taxonomy->name, 'descendants_and_self' => $term_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids)); - $data = ob_get_contents(); - ob_end_clean(); - $add = array( - 'what' => $taxonomy->name, - 'id' => $term_id, - 'data' => str_replace( array("\n", "\t"), '', $data), - 'position' => -1 - ); - } - - ob_start(); - wp_dropdown_categories( array( - 'taxonomy' => $taxonomy->name, 'hide_empty' => 0, 'name' => 'new'.$taxonomy->name.'_parent', 'orderby' => 'name', - 'hierarchical' => 1, 'show_option_none' => '— '.$taxonomy->labels->parent_item.' —' - ) ); - $sup = ob_get_contents(); - ob_end_clean(); - $add['supplemental'] = array( 'newcat_parent' => $sup ); +define( 'DOING_AJAX', true ); +define( 'WP_ADMIN', true ); - $x = new WP_Ajax_Response( $add ); - $x->send(); -} - -$id = isset($_POST['id'])? (int) $_POST['id'] : 0; -switch ( $action = $_POST['action'] ) : -case 'delete-comment' : // On success, die with time() instead of 1 - if ( !$comment = get_comment( $id ) ) - die( (string) time() ); - if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) - die('-1'); - - check_ajax_referer( "delete-comment_$id" ); - $status = wp_get_comment_status( $comment->comment_ID ); - - $delta = -1; - if ( isset($_POST['trash']) && 1 == $_POST['trash'] ) { - if ( 'trash' == $status ) - die( (string) time() ); - $r = wp_trash_comment( $comment->comment_ID ); - } elseif ( isset($_POST['untrash']) && 1 == $_POST['untrash'] ) { - if ( 'trash' != $status ) - die( (string) time() ); - $r = wp_untrash_comment( $comment->comment_ID ); - if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'trash' ) // undo trash, not in trash - $delta = 1; - } elseif ( isset($_POST['spam']) && 1 == $_POST['spam'] ) { - if ( 'spam' == $status ) - die( (string) time() ); - $r = wp_spam_comment( $comment->comment_ID ); - } elseif ( isset($_POST['unspam']) && 1 == $_POST['unspam'] ) { - if ( 'spam' != $status ) - die( (string) time() ); - $r = wp_unspam_comment( $comment->comment_ID ); - if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'spam' ) // undo spam, not in spam - $delta = 1; - } elseif ( isset($_POST['delete']) && 1 == $_POST['delete'] ) { - $r = wp_delete_comment( $comment->comment_ID ); - } else { - die('-1'); - } - - if ( $r ) // Decide if we need to send back '1' or a more complicated response including page links and comment counts - _wp_ajax_delete_comment_response( $comment->comment_ID, $delta ); +// Require an action parameter +if ( empty( $_REQUEST['action'] ) ) die( '0' ); - break; -case 'delete-tag' : - $tag_id = (int) $_POST['tag_ID']; - check_ajax_referer( "delete-tag_$tag_id" ); - - $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag'; - $tax = get_taxonomy($taxonomy); - - if ( !current_user_can( $tax->cap->delete_terms ) ) - die('-1'); - - $tag = get_term( $tag_id, $taxonomy ); - if ( !$tag || is_wp_error( $tag ) ) - die('1'); - - if ( wp_delete_term($tag_id, $taxonomy)) - die('1'); - else - die('0'); - break; -case 'delete-link' : - check_ajax_referer( "delete-bookmark_$id" ); - if ( !current_user_can( 'manage_links' ) ) - die('-1'); - - $link = get_bookmark( $id ); - if ( !$link || is_wp_error( $link ) ) - die('1'); - - if ( wp_delete_link( $id ) ) - die('1'); - else - die('0'); - break; -case 'delete-meta' : - check_ajax_referer( "delete-meta_$id" ); - if ( !$meta = get_metadata_by_mid( 'post', $id ) ) - die('1'); - - if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $meta->post_id, $meta->meta_key ) ) - die('-1'); - if ( delete_meta( $meta->meta_id ) ) - die('1'); - die('0'); - break; -case 'delete-post' : - check_ajax_referer( "{$action}_$id" ); - if ( !current_user_can( 'delete_post', $id ) ) - die('-1'); - - if ( !get_post( $id ) ) - die('1'); - - if ( wp_delete_post( $id ) ) - die('1'); - else - die('0'); - break; -case 'trash-post' : -case 'untrash-post' : - check_ajax_referer( "{$action}_$id" ); - if ( !current_user_can( 'delete_post', $id ) ) - die('-1'); - - if ( !get_post( $id ) ) - die('1'); - - if ( 'trash-post' == $action ) - $done = wp_trash_post( $id ); - else - $done = wp_untrash_post( $id ); - - if ( $done ) - die('1'); - - die('0'); - break; -case 'delete-page' : - check_ajax_referer( "{$action}_$id" ); - if ( !current_user_can( 'delete_page', $id ) ) - die('-1'); - - if ( !get_page( $id ) ) - die('1'); - - if ( wp_delete_post( $id ) ) - die('1'); - else - die('0'); - break; -case 'dim-comment' : // On success, die with time() instead of 1 - - if ( !$comment = get_comment( $id ) ) { - $x = new WP_Ajax_Response( array( - 'what' => 'comment', - 'id' => new WP_Error('invalid_comment', sprintf(__('Comment %d does not exist'), $id)) - ) ); - $x->send(); - } - - if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) && ! current_user_can( 'moderate_comments' ) ) - die('-1'); - - $current = wp_get_comment_status( $comment->comment_ID ); - if ( $_POST['new'] == $current ) - die( (string) time() ); - - check_ajax_referer( "approve-comment_$id" ); - if ( in_array( $current, array( 'unapproved', 'spam' ) ) ) - $result = wp_set_comment_status( $comment->comment_ID, 'approve', true ); - else - $result = wp_set_comment_status( $comment->comment_ID, 'hold', true ); - - if ( is_wp_error($result) ) { - $x = new WP_Ajax_Response( array( - 'what' => 'comment', - 'id' => $result - ) ); - $x->send(); - } - - // Decide if we need to send back '1' or a more complicated response including page links and comment counts - _wp_ajax_delete_comment_response( $comment->comment_ID ); - die( '0' ); - break; -case 'add-link-category' : // On the Fly - check_ajax_referer( $action ); - if ( !current_user_can( 'manage_categories' ) ) - die('-1'); - $names = explode(',', $_POST['newcat']); - $x = new WP_Ajax_Response(); - foreach ( $names as $cat_name ) { - $cat_name = trim($cat_name); - $slug = sanitize_title($cat_name); - if ( '' === $slug ) - continue; - if ( !$cat_id = term_exists( $cat_name, 'link_category' ) ) { - $cat_id = wp_insert_term( $cat_name, 'link_category' ); - } - $cat_id = $cat_id['term_id']; - $cat_name = esc_html(stripslashes($cat_name)); - $x->add( array( - 'what' => 'link-category', - 'id' => $cat_id, - 'data' => "<li id='link-category-$cat_id'><label for='in-link-category-$cat_id' class='selectit'><input value='" . esc_attr($cat_id) . "' type='checkbox' checked='checked' name='link_category[]' id='in-link-category-$cat_id'/> $cat_name</label></li>", - 'position' => -1 - ) ); - } - $x->send(); - break; -case 'add-tag' : - check_ajax_referer( 'add-tag', '_wpnonce_add-tag' ); - $post_type = !empty($_POST['post_type']) ? $_POST['post_type'] : 'post'; - $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag'; - $tax = get_taxonomy($taxonomy); - - if ( !current_user_can( $tax->cap->edit_terms ) ) - die('-1'); - - $x = new WP_Ajax_Response(); - - $tag = wp_insert_term($_POST['tag-name'], $taxonomy, $_POST ); - - if ( !$tag || is_wp_error($tag) || (!$tag = get_term( $tag['term_id'], $taxonomy )) ) { - $message = __('An error has occurred. Please reload the page and try again.'); - if ( is_wp_error($tag) && $tag->get_error_message() ) - $message = $tag->get_error_message(); - - $x->add( array( - 'what' => 'taxonomy', - 'data' => new WP_Error('error', $message ) - ) ); - $x->send(); - } - - set_current_screen( $_POST['screen'] ); - - $wp_list_table = _get_list_table('WP_Terms_List_Table'); - - $level = 0; - if ( is_taxonomy_hierarchical($taxonomy) ) { - $level = count( get_ancestors( $tag->term_id, $taxonomy ) ); - ob_start(); - $wp_list_table->single_row( $tag, $level ); - $noparents = ob_get_clean(); - } - - ob_start(); - $wp_list_table->single_row( $tag ); - $parents = ob_get_clean(); - - $x->add( array( - 'what' => 'taxonomy', - 'supplemental' => compact('parents', 'noparents') - ) ); - $x->add( array( - 'what' => 'term', - 'position' => $level, - 'supplemental' => (array) $tag - ) ); - $x->send(); - break; -case 'get-tagcloud' : - if ( isset( $_POST['tax'] ) ) { - $taxonomy = sanitize_key( $_POST['tax'] ); - $tax = get_taxonomy( $taxonomy ); - if ( ! $tax ) - die( '0' ); - if ( ! current_user_can( $tax->cap->assign_terms ) ) - die( '-1' ); - } else { - die('0'); - } - - $tags = get_terms( $taxonomy, array( 'number' => 45, 'orderby' => 'count', 'order' => 'DESC' ) ); - - if ( empty( $tags ) ) - die( isset( $tax->no_tagcloud ) ? $tax->no_tagcloud : __('No tags found!') ); - - if ( is_wp_error( $tags ) ) - die( $tags->get_error_message() ); - - foreach ( $tags as $key => $tag ) { - $tags[ $key ]->link = '#'; - $tags[ $key ]->id = $tag->term_id; - } - - // We need raw tag names here, so don't filter the output - $return = wp_generate_tag_cloud( $tags, array('filter' => 0) ); - - if ( empty($return) ) - die('0'); - - echo $return; - - exit; - break; -case 'get-comments' : - check_ajax_referer( $action ); - - set_current_screen( 'edit-comments' ); - - $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); - - if ( !current_user_can( 'edit_post', $post_id ) ) - die('-1'); - - $wp_list_table->prepare_items(); - - if ( !$wp_list_table->has_items() ) - die('1'); - - $x = new WP_Ajax_Response(); - ob_start(); - foreach ( $wp_list_table->items as $comment ) { - if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) - continue; - get_comment( $comment ); - $wp_list_table->single_row( $comment ); - } - $comment_list_item = ob_get_contents(); - ob_end_clean(); - - $x->add( array( - 'what' => 'comments', - 'data' => $comment_list_item - ) ); - $x->send(); - break; -case 'replyto-comment' : - check_ajax_referer( $action, '_ajax_nonce-replyto-comment' ); - - set_current_screen( 'edit-comments' ); - - $comment_post_ID = (int) $_POST['comment_post_ID']; - if ( !current_user_can( 'edit_post', $comment_post_ID ) ) - die('-1'); - - $status = $wpdb->get_var( $wpdb->prepare("SELECT post_status FROM $wpdb->posts WHERE ID = %d", $comment_post_ID) ); - - if ( empty($status) ) - die('1'); - elseif ( in_array($status, array('draft', 'pending', 'trash') ) ) - die( __('ERROR: you are replying to a comment on a draft post.') ); - - $user = wp_get_current_user(); - if ( $user->ID ) { - $comment_author = $wpdb->escape($user->display_name); - $comment_author_email = $wpdb->escape($user->user_email); - $comment_author_url = $wpdb->escape($user->user_url); - $comment_content = trim($_POST['content']); - if ( current_user_can( 'unfiltered_html' ) ) { - if ( wp_create_nonce( 'unfiltered-html-comment' ) != $_POST['_wp_unfiltered_html_comment'] ) { - kses_remove_filters(); // start with a clean slate - kses_init_filters(); // set up the filters - } - } - } else { - die( __('Sorry, you must be logged in to reply to a comment.') ); - } - - if ( '' == $comment_content ) - die( __('ERROR: please type a comment.') ); - - $comment_parent = absint($_POST['comment_ID']); - $comment_auto_approved = false; - $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID'); - - $comment_id = wp_new_comment( $commentdata ); - $comment = get_comment($comment_id); - if ( ! $comment ) die('1'); - - $position = ( isset($_POST['position']) && (int) $_POST['position'] ) ? (int) $_POST['position'] : '-1'; - - - // automatically approve parent comment - if ( !empty($_POST['approve_parent']) ) { - $parent = get_comment( $comment_parent ); - - if ( $parent && $parent->comment_approved === '0' && $parent->comment_post_ID == $comment_post_ID ) { - if ( wp_set_comment_status( $parent->comment_ID, 'approve' ) ) - $comment_auto_approved = true; - } - } - - ob_start(); - if ( 'dashboard' == $_REQUEST['mode'] ) { - require_once( ABSPATH . 'wp-admin/includes/dashboard.php' ); - _wp_dashboard_recent_comments_row( $comment ); - } else { - if ( 'single' == $_REQUEST['mode'] ) { - $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); - } else { - $wp_list_table = _get_list_table('WP_Comments_List_Table'); - } - $wp_list_table->single_row( $comment ); - } - $comment_list_item = ob_get_contents(); - ob_end_clean(); - - $response = array( - 'what' => 'comment', - 'id' => $comment->comment_ID, - 'data' => $comment_list_item, - 'position' => $position - ); - - if ( $comment_auto_approved ) - $response['supplemental'] = array( 'parent_approved' => $parent->comment_ID ); - - $x = new WP_Ajax_Response(); - $x->add( $response ); - $x->send(); - break; -case 'edit-comment' : - check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' ); - - set_current_screen( 'edit-comments' ); - - $comment_id = (int) $_POST['comment_ID']; - if ( ! current_user_can( 'edit_comment', $comment_id ) ) - die('-1'); - - if ( '' == $_POST['content'] ) - die( __('ERROR: please type a comment.') ); - - $_POST['comment_status'] = $_POST['status']; - edit_comment(); - - $position = ( isset($_POST['position']) && (int) $_POST['position']) ? (int) $_POST['position'] : '-1'; - $comments_status = isset($_POST['comments_listing']) ? $_POST['comments_listing'] : ''; - - $checkbox = ( isset($_POST['checkbox']) && true == $_POST['checkbox'] ) ? 1 : 0; - $wp_list_table = _get_list_table( $checkbox ? 'WP_Comments_List_Table' : 'WP_Post_Comments_List_Table' ); - - ob_start(); - $wp_list_table->single_row( get_comment( $comment_id ) ); - $comment_list_item = ob_get_contents(); - ob_end_clean(); - - $x = new WP_Ajax_Response(); - - $x->add( array( - 'what' => 'edit_comment', - 'id' => $comment->comment_ID, - 'data' => $comment_list_item, - 'position' => $position - )); - - $x->send(); - break; -case 'add-menu-item' : - if ( ! current_user_can( 'edit_theme_options' ) ) - die('-1'); - - check_ajax_referer( 'add-menu_item', 'menu-settings-column-nonce' ); - - require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; - - // For performance reasons, we omit some object properties from the checklist. - // The following is a hacky way to restore them when adding non-custom items. - - $menu_items_data = array(); - foreach ( (array) $_POST['menu-item'] as $menu_item_data ) { - if ( - ! empty( $menu_item_data['menu-item-type'] ) && - 'custom' != $menu_item_data['menu-item-type'] && - ! empty( $menu_item_data['menu-item-object-id'] ) - ) { - switch( $menu_item_data['menu-item-type'] ) { - case 'post_type' : - $_object = get_post( $menu_item_data['menu-item-object-id'] ); - break; - - case 'taxonomy' : - $_object = get_term( $menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object'] ); - break; - } - - $_menu_items = array_map( 'wp_setup_nav_menu_item', array( $_object ) ); - $_menu_item = array_shift( $_menu_items ); - - // Restore the missing menu item properties - $menu_item_data['menu-item-description'] = $_menu_item->description; - } - - $menu_items_data[] = $menu_item_data; - } - - $item_ids = wp_save_nav_menu_items( 0, $menu_items_data ); - if ( is_wp_error( $item_ids ) ) - die('-1'); - foreach ( (array) $item_ids as $menu_item_id ) { - $menu_obj = get_post( $menu_item_id ); - if ( ! empty( $menu_obj->ID ) ) { - $menu_obj = wp_setup_nav_menu_item( $menu_obj ); - $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items - $menu_items[] = $menu_obj; - } - } +/** Load WordPress Bootstrap */ +require_once( dirname( dirname( __FILE__ ) ) . '/wp-load.php' ); - if ( ! empty( $menu_items ) ) { - $args = array( - 'after' => '', - 'before' => '', - 'link_after' => '', - 'link_before' => '', - 'walker' => new Walker_Nav_Menu_Edit, - ); - echo walk_nav_menu_tree( $menu_items, 0, (object) $args ); - } - break; -case 'add-meta' : - check_ajax_referer( 'add-meta', '_ajax_nonce-add-meta' ); - $c = 0; - $pid = (int) $_POST['post_id']; - $post = get_post( $pid ); +/** Load WordPress Administration APIs */ +require_once( ABSPATH . 'wp-admin/includes/admin.php' ); - if ( isset($_POST['metakeyselect']) || isset($_POST['metakeyinput']) ) { - if ( !current_user_can( 'edit_post', $pid ) ) - die('-1'); - if ( isset($_POST['metakeyselect']) && '#NONE#' == $_POST['metakeyselect'] && empty($_POST['metakeyinput']) ) - die('1'); - if ( $post->post_status == 'auto-draft' ) { - $save_POST = $_POST; // Backup $_POST - $_POST = array(); // Make it empty for edit_post() - $_POST['action'] = 'draft'; // Warning fix - $_POST['post_ID'] = $pid; - $_POST['post_type'] = $post->post_type; - $_POST['post_status'] = 'draft'; - $now = current_time('timestamp', 1); - $_POST['post_title'] = sprintf('Draft created on %s at %s', date(get_option('date_format'), $now), date(get_option('time_format'), $now)); +/** Load Ajax Handlers for WordPress Core */ +require_once( ABSPATH . 'wp-admin/includes/ajax-actions.php' ); - if ( $pid = edit_post() ) { - if ( is_wp_error( $pid ) ) { - $x = new WP_Ajax_Response( array( - 'what' => 'meta', - 'data' => $pid - ) ); - $x->send(); - } - $_POST = $save_POST; // Now we can restore original $_POST again - if ( !$mid = add_meta( $pid ) ) - die(__('Please provide a custom field value.')); - } else { - die('0'); - } - } else if ( !$mid = add_meta( $pid ) ) { - die(__('Please provide a custom field value.')); - } +@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) ); +@header( 'X-Robots-Tag: noindex' ); - $meta = get_metadata_by_mid( 'post', $mid ); - $pid = (int) $meta->post_id; - $meta = get_object_vars( $meta ); - $x = new WP_Ajax_Response( array( - 'what' => 'meta', - 'id' => $mid, - 'data' => _list_meta_row( $meta, $c ), - 'position' => 1, - 'supplemental' => array('postid' => $pid) - ) ); - } else { // Update? - $mid = (int) key( $_POST['meta'] ); - $key = stripslashes( $_POST['meta'][$mid]['key'] ); - $value = stripslashes( $_POST['meta'][$mid]['value'] ); - if ( '' == trim($key) ) - die(__('Please provide a custom field name.')); - if ( '' == trim($value) ) - die(__('Please provide a custom field value.')); - if ( ! $meta = get_metadata_by_mid( 'post', $mid ) ) - die('0'); // if meta doesn't exist - if ( is_protected_meta( $meta->meta_key, 'post' ) || is_protected_meta( $key, 'post' ) || - ! current_user_can( 'edit_post_meta', $meta->post_id, $meta->meta_key ) || - ! current_user_can( 'edit_post_meta', $meta->post_id, $key ) ) - die('-1'); - if ( $meta->meta_value != $value || $meta->meta_key != $key ) { - if ( !$u = update_metadata_by_mid( 'post', $mid, $value, $key ) ) - die('0'); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems). - } - - $x = new WP_Ajax_Response( array( - 'what' => 'meta', - 'id' => $mid, 'old_id' => $mid, - 'data' => _list_meta_row( array( - 'meta_key' => $key, - 'meta_value' => $value, - 'meta_id' => $mid - ), $c ), - 'position' => 0, - 'supplemental' => array('postid' => $meta->post_id) - ) ); - } - $x->send(); - break; -case 'add-user' : - check_ajax_referer( $action ); - if ( !current_user_can('create_users') ) - die('-1'); - if ( !$user_id = add_user() ) - die('0'); - elseif ( is_wp_error( $user_id ) ) { - $x = new WP_Ajax_Response( array( - 'what' => 'user', - 'id' => $user_id - ) ); - $x->send(); - } - $user_object = new WP_User( $user_id ); - - $wp_list_table = _get_list_table('WP_Users_List_Table'); - - $x = new WP_Ajax_Response( array( - 'what' => 'user', - 'id' => $user_id, - 'data' => $wp_list_table->single_row( $user_object, '', $user_object->roles[0] ), - 'supplemental' => array( - 'show-link' => sprintf(__( 'User <a href="#%s">%s</a> added' ), "user-$user_id", $user_object->user_login), - 'role' => $user_object->roles[0] - ) - ) ); - $x->send(); - break; -case 'autosave' : // The name of this action is hardcoded in edit_post() - define( 'DOING_AUTOSAVE', true ); - - $nonce_age = check_ajax_referer( 'autosave', 'autosavenonce' ); - - $_POST['post_category'] = explode(",", $_POST['catslist']); - if ( $_POST['post_type'] == 'page' || empty($_POST['post_category']) ) - unset($_POST['post_category']); - - $do_autosave = (bool) $_POST['autosave']; - $do_lock = true; - - $data = $alert = ''; - /* translators: draft saved date format, see http://php.net/date */ - $draft_saved_date_format = __('g:i:s a'); - /* translators: %s: date and time */ - $message = sprintf( __('Draft saved at %s.'), date_i18n( $draft_saved_date_format ) ); - - $supplemental = array(); - if ( isset($login_grace_period) ) - $alert .= sprintf( __('Your login has expired. Please open a new browser window and <a href="%s" target="_blank">log in again</a>. '), add_query_arg( 'interim-login', 1, wp_login_url() ) ); - - $id = $revision_id = 0; - - $post_ID = (int) $_POST['post_ID']; - $_POST['ID'] = $post_ID; - $post = get_post($post_ID); - if ( 'auto-draft' == $post->post_status ) - $_POST['post_status'] = 'draft'; - - if ( $last = wp_check_post_lock( $post->ID ) ) { - $do_autosave = $do_lock = false; - - $last_user = get_userdata( $last ); - $last_user_name = $last_user ? $last_user->display_name : __( 'Someone' ); - $data = __( 'Autosave disabled.' ); - - $supplemental['disable_autosave'] = 'disable'; - $alert .= sprintf( __( '%s is currently editing this article. If you update it, you will overwrite the changes.' ), esc_html( $last_user_name ) ); - } - - if ( 'page' == $post->post_type ) { - if ( !current_user_can('edit_page', $post_ID) ) - die(__('You are not allowed to edit this page.')); - } else { - if ( !current_user_can('edit_post', $post_ID) ) - die(__('You are not allowed to edit this post.')); - } - - if ( $do_autosave ) { - // Drafts and auto-drafts are just overwritten by autosave - if ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status ) { - $id = edit_post(); - } else { // Non drafts are not overwritten. The autosave is stored in a special post revision. - $revision_id = wp_create_post_autosave( $post->ID ); - if ( is_wp_error($revision_id) ) - $id = $revision_id; - else - $id = $post->ID; - } - $data = $message; - } else { - if ( ! empty( $_POST['auto_draft'] ) ) - $id = 0; // This tells us it didn't actually save - else - $id = $post->ID; - } - - if ( $do_lock && empty( $_POST['auto_draft'] ) && $id && is_numeric( $id ) ) { - $lock_result = wp_set_post_lock( $id ); - $supplemental['active-post-lock'] = implode( ':', $lock_result ); - } - - if ( $nonce_age == 2 ) { - $supplemental['replace-autosavenonce'] = wp_create_nonce('autosave'); - $supplemental['replace-getpermalinknonce'] = wp_create_nonce('getpermalink'); - $supplemental['replace-samplepermalinknonce'] = wp_create_nonce('samplepermalink'); - $supplemental['replace-closedpostboxesnonce'] = wp_create_nonce('closedpostboxes'); - $supplemental['replace-_ajax_linking_nonce'] = wp_create_nonce( 'internal-linking' ); - if ( $id ) { - if ( $_POST['post_type'] == 'post' ) - $supplemental['replace-_wpnonce'] = wp_create_nonce('update-post_' . $id); - elseif ( $_POST['post_type'] == 'page' ) - $supplemental['replace-_wpnonce'] = wp_create_nonce('update-page_' . $id); - } - } - - if ( ! empty($alert) ) - $supplemental['alert'] = $alert; - - $x = new WP_Ajax_Response( array( - 'what' => 'autosave', - 'id' => $id, - 'data' => $id ? $data : '', - 'supplemental' => $supplemental - ) ); - $x->send(); - break; -case 'closed-postboxes' : - check_ajax_referer( 'closedpostboxes', 'closedpostboxesnonce' ); - $closed = isset( $_POST['closed'] ) ? explode( ',', $_POST['closed']) : array(); - $closed = array_filter($closed); - - $hidden = isset( $_POST['hidden'] ) ? explode( ',', $_POST['hidden']) : array(); - $hidden = array_filter($hidden); - - $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; - - if ( $page != sanitize_key( $page ) ) - die('0'); - - if ( ! $user = wp_get_current_user() ) - die('-1'); - - if ( is_array($closed) ) - update_user_option($user->ID, "closedpostboxes_$page", $closed, true); - - if ( is_array($hidden) ) { - $hidden = array_diff( $hidden, array('submitdiv', 'linksubmitdiv', 'manage-menu', 'create-menu') ); // postboxes that are always shown - update_user_option($user->ID, "metaboxhidden_$page", $hidden, true); - } - - die('1'); - break; -case 'hidden-columns' : - check_ajax_referer( 'screen-options-nonce', 'screenoptionnonce' ); - $hidden = isset( $_POST['hidden'] ) ? $_POST['hidden'] : ''; - $hidden = explode( ',', $_POST['hidden'] ); - $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; - - if ( $page != sanitize_key( $page ) ) - die('0'); - - if ( ! $user = wp_get_current_user() ) - die('-1'); - - if ( is_array($hidden) ) - update_user_option($user->ID, "manage{$page}columnshidden", $hidden, true); - - die('1'); - break; -case 'update-welcome-panel' : - check_ajax_referer( 'welcome-panel-nonce', 'welcomepanelnonce' ); - - if ( ! current_user_can( 'edit_theme_options' ) ) - die('-1'); - - update_user_meta( get_current_user_id(), 'show_welcome_panel', empty( $_POST['visible'] ) ? 0 : 1 ); - - die('1'); - break; -case 'menu-get-metabox' : - if ( ! current_user_can( 'edit_theme_options' ) ) - die('-1'); - - require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; - - if ( isset( $_POST['item-type'] ) && 'post_type' == $_POST['item-type'] ) { - $type = 'posttype'; - $callback = 'wp_nav_menu_item_post_type_meta_box'; - $items = (array) get_post_types( array( 'show_in_nav_menus' => true ), 'object' ); - } elseif ( isset( $_POST['item-type'] ) && 'taxonomy' == $_POST['item-type'] ) { - $type = 'taxonomy'; - $callback = 'wp_nav_menu_item_taxonomy_meta_box'; - $items = (array) get_taxonomies( array( 'show_ui' => true ), 'object' ); - } - - if ( ! empty( $_POST['item-object'] ) && isset( $items[$_POST['item-object']] ) ) { - $item = apply_filters( 'nav_menu_meta_box_object', $items[ $_POST['item-object'] ] ); - ob_start(); - call_user_func_array($callback, array( - null, - array( - 'id' => 'add-' . $item->name, - 'title' => $item->labels->name, - 'callback' => $callback, - 'args' => $item, - ) - )); - - $markup = ob_get_clean(); - - echo json_encode(array( - 'replace-id' => $type . '-' . $item->name, - 'markup' => $markup, - )); - } - - exit; - break; -case 'menu-quick-search': - if ( ! current_user_can( 'edit_theme_options' ) ) - die('-1'); - - require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; - - _wp_ajax_menu_quick_search( $_REQUEST ); - - exit; - break; -case 'wp-link-ajax': - check_ajax_referer( 'internal-linking', '_ajax_linking_nonce' ); - - $args = array(); - - if ( isset( $_POST['search'] ) ) - $args['s'] = stripslashes( $_POST['search'] ); - $args['pagenum'] = ! empty( $_POST['page'] ) ? absint( $_POST['page'] ) : 1; - - require(ABSPATH . WPINC . '/class-wp-editor.php'); - $results = _WP_Editors::wp_link_query( $args ); - - if ( ! isset( $results ) ) - die( '0' ); - - echo json_encode( $results ); - echo "\n"; - - exit; - break; -case 'menu-locations-save': - if ( ! current_user_can( 'edit_theme_options' ) ) - die('-1'); - check_ajax_referer( 'add-menu_item', 'menu-settings-column-nonce' ); - if ( ! isset( $_POST['menu-locations'] ) ) - die('0'); - set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_POST['menu-locations'] ) ); - die('1'); - break; -case 'meta-box-order': - check_ajax_referer( 'meta-box-order' ); - $order = isset( $_POST['order'] ) ? (array) $_POST['order'] : false; - $page_columns = isset( $_POST['page_columns'] ) ? $_POST['page_columns'] : 'auto'; - - if ( $page_columns != 'auto' ) - $page_columns = (int) $page_columns; - - $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; - - if ( $page != sanitize_key( $page ) ) - die('0'); - - if ( ! $user = wp_get_current_user() ) - die('-1'); - - if ( $order ) - update_user_option($user->ID, "meta-box-order_$page", $order, true); - - if ( $page_columns ) - update_user_option($user->ID, "screen_layout_$page", $page_columns, true); - - die('1'); - break; -case 'get-permalink': - check_ajax_referer( 'getpermalink', 'getpermalinknonce' ); - $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0; - die(add_query_arg(array('preview' => 'true'), get_permalink($post_id))); -break; -case 'sample-permalink': - check_ajax_referer( 'samplepermalink', 'samplepermalinknonce' ); - $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0; - $title = isset($_POST['new_title'])? $_POST['new_title'] : ''; - $slug = isset($_POST['new_slug'])? $_POST['new_slug'] : null; - die(get_sample_permalink_html($post_id, $title, $slug)); -break; -case 'inline-save': - check_ajax_referer( 'inlineeditnonce', '_inline_edit' ); - - if ( ! isset($_POST['post_ID']) || ! ( $post_ID = (int) $_POST['post_ID'] ) ) - exit; - - if ( 'page' == $_POST['post_type'] ) { - if ( ! current_user_can( 'edit_page', $post_ID ) ) - die( __('You are not allowed to edit this page.') ); - } else { - if ( ! current_user_can( 'edit_post', $post_ID ) ) - die( __('You are not allowed to edit this post.') ); - } - - set_current_screen( $_POST['screen'] ); - - if ( $last = wp_check_post_lock( $post_ID ) ) { - $last_user = get_userdata( $last ); - $last_user_name = $last_user ? $last_user->display_name : __( 'Someone' ); - printf( $_POST['post_type'] == 'page' ? __( 'Saving is disabled: %s is currently editing this page.' ) : __( 'Saving is disabled: %s is currently editing this post.' ), esc_html( $last_user_name ) ); - exit; - } - - $data = &$_POST; - - $post = get_post( $post_ID, ARRAY_A ); - $post = add_magic_quotes($post); //since it is from db - - $data['content'] = $post['post_content']; - $data['excerpt'] = $post['post_excerpt']; - - // rename - $data['user_ID'] = $GLOBALS['user_ID']; - - if ( isset($data['post_parent']) ) - $data['parent_id'] = $data['post_parent']; - - // status - if ( isset($data['keep_private']) && 'private' == $data['keep_private'] ) - $data['post_status'] = 'private'; - else - $data['post_status'] = $data['_status']; - - if ( empty($data['comment_status']) ) - $data['comment_status'] = 'closed'; - if ( empty($data['ping_status']) ) - $data['ping_status'] = 'closed'; - - // update the post - edit_post(); - - $wp_list_table = _get_list_table('WP_Posts_List_Table'); - - $mode = $_POST['post_view']; - $wp_list_table->display_rows( array( get_post( $_POST['post_ID'] ) ) ); - - exit; - break; -case 'inline-save-tax': - check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' ); - - $taxonomy = sanitize_key( $_POST['taxonomy'] ); - $tax = get_taxonomy( $taxonomy ); - if ( ! $tax ) - die( '0' ); - - if ( ! current_user_can( $tax->cap->edit_terms ) ) - die( '-1' ); - - set_current_screen( 'edit-' . $taxonomy ); - - $wp_list_table = _get_list_table('WP_Terms_List_Table'); - - if ( ! isset($_POST['tax_ID']) || ! ( $id = (int) $_POST['tax_ID'] ) ) - die(-1); - - $tag = get_term( $id, $taxonomy ); - $_POST['description'] = $tag->description; - - $updated = wp_update_term($id, $taxonomy, $_POST); - if ( $updated && !is_wp_error($updated) ) { - $tag = get_term( $updated['term_id'], $taxonomy ); - if ( !$tag || is_wp_error( $tag ) ) { - if ( is_wp_error($tag) && $tag->get_error_message() ) - die( $tag->get_error_message() ); - die( __('Item not updated.') ); - } - - echo $wp_list_table->single_row( $tag ); - } else { - if ( is_wp_error($updated) && $updated->get_error_message() ) - die( $updated->get_error_message() ); - die( __('Item not updated.') ); - } - - exit; - break; -case 'find_posts': - check_ajax_referer( 'find-posts' ); - - if ( empty($_POST['ps']) ) - exit; - - if ( !empty($_POST['post_type']) && in_array( $_POST['post_type'], get_post_types() ) ) - $what = $_POST['post_type']; - else - $what = 'post'; - - $s = stripslashes($_POST['ps']); - preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $s, $matches); - $search_terms = array_map('_search_terms_tidy', $matches[0]); - - $searchand = $search = ''; - foreach ( (array) $search_terms as $term ) { - $term = esc_sql( like_escape( $term ) ); - $search .= "{$searchand}(($wpdb->posts.post_title LIKE '%{$term}%') OR ($wpdb->posts.post_content LIKE '%{$term}%'))"; - $searchand = ' AND '; - } - $term = esc_sql( like_escape( $s ) ); - if ( count($search_terms) > 1 && $search_terms[0] != $s ) - $search .= " OR ($wpdb->posts.post_title LIKE '%{$term}%') OR ($wpdb->posts.post_content LIKE '%{$term}%')"; - - $posts = $wpdb->get_results( "SELECT ID, post_title, post_status, post_date FROM $wpdb->posts WHERE post_type = '$what' AND post_status IN ('draft', 'publish') AND ($search) ORDER BY post_date_gmt DESC LIMIT 50" ); - - if ( ! $posts ) { - $posttype = get_post_type_object($what); - exit($posttype->labels->not_found); - } - - $html = '<table class="widefat" cellspacing="0"><thead><tr><th class="found-radio"><br /></th><th>'.__('Title').'</th><th>'.__('Date').'</th><th>'.__('Status').'</th></tr></thead><tbody>'; - foreach ( $posts as $post ) { - - switch ( $post->post_status ) { - case 'publish' : - case 'private' : - $stat = __('Published'); - break; - case 'future' : - $stat = __('Scheduled'); - break; - case 'pending' : - $stat = __('Pending Review'); - break; - case 'draft' : - $stat = __('Draft'); - break; - } - - if ( '0000-00-00 00:00:00' == $post->post_date ) { - $time = ''; - } else { - /* translators: date format in table columns, see http://php.net/date */ - $time = mysql2date(__('Y/m/d'), $post->post_date); - } - - $html .= '<tr class="found-posts"><td class="found-radio"><input type="radio" id="found-'.$post->ID.'" name="found_post_id" value="' . esc_attr($post->ID) . '"></td>'; - $html .= '<td><label for="found-'.$post->ID.'">'.esc_html( $post->post_title ).'</label></td><td>'.esc_html( $time ).'</td><td>'.esc_html( $stat ).'</td></tr>'."\n\n"; - } - $html .= '</tbody></table>'; - - $x = new WP_Ajax_Response(); - $x->add( array( - 'what' => $what, - 'data' => $html - )); - $x->send(); - - break; -case 'widgets-order' : - check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' ); - - if ( !current_user_can('edit_theme_options') ) - die('-1'); - - unset( $_POST['savewidgets'], $_POST['action'] ); - - // save widgets order for all sidebars - if ( is_array($_POST['sidebars']) ) { - $sidebars = array(); - foreach ( $_POST['sidebars'] as $key => $val ) { - $sb = array(); - if ( !empty($val) ) { - $val = explode(',', $val); - foreach ( $val as $k => $v ) { - if ( strpos($v, 'widget-') === false ) - continue; - - $sb[$k] = substr($v, strpos($v, '_') + 1); - } - } - $sidebars[$key] = $sb; - } - wp_set_sidebars_widgets($sidebars); - die('1'); - } - - die('-1'); - break; -case 'save-widget' : - check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' ); - - if ( !current_user_can('edit_theme_options') || !isset($_POST['id_base']) ) - die('-1'); - - unset( $_POST['savewidgets'], $_POST['action'] ); - - do_action('load-widgets.php'); - do_action('widgets.php'); - do_action('sidebar_admin_setup'); - - $id_base = $_POST['id_base']; - $widget_id = $_POST['widget-id']; - $sidebar_id = $_POST['sidebar']; - $multi_number = !empty($_POST['multi_number']) ? (int) $_POST['multi_number'] : 0; - $settings = isset($_POST['widget-' . $id_base]) && is_array($_POST['widget-' . $id_base]) ? $_POST['widget-' . $id_base] : false; - $error = '<p>' . __('An error has occurred. Please reload the page and try again.') . '</p>'; - - $sidebars = wp_get_sidebars_widgets(); - $sidebar = isset($sidebars[$sidebar_id]) ? $sidebars[$sidebar_id] : array(); - - // delete - if ( isset($_POST['delete_widget']) && $_POST['delete_widget'] ) { - - if ( !isset($wp_registered_widgets[$widget_id]) ) - die($error); - - $sidebar = array_diff( $sidebar, array($widget_id) ); - $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); - } elseif ( $settings && preg_match( '/__i__|%i%/', key($settings) ) ) { - if ( !$multi_number ) - die($error); - - $_POST['widget-' . $id_base] = array( $multi_number => array_shift($settings) ); - $widget_id = $id_base . '-' . $multi_number; - $sidebar[] = $widget_id; - } - $_POST['widget-id'] = $sidebar; - - foreach ( (array) $wp_registered_widget_updates as $name => $control ) { - - if ( $name == $id_base ) { - if ( !is_callable( $control['callback'] ) ) - continue; - - ob_start(); - call_user_func_array( $control['callback'], $control['params'] ); - ob_end_clean(); - break; - } - } - - if ( isset($_POST['delete_widget']) && $_POST['delete_widget'] ) { - $sidebars[$sidebar_id] = $sidebar; - wp_set_sidebars_widgets($sidebars); - echo "deleted:$widget_id"; - die(); - } - - if ( !empty($_POST['add_new']) ) - die(); - - if ( $form = $wp_registered_widget_controls[$widget_id] ) - call_user_func_array( $form['callback'], $form['params'] ); - - die(); - break; -case 'image-editor': - $attachment_id = intval($_POST['postid']); - if ( empty($attachment_id) || !current_user_can('edit_post', $attachment_id) ) - die('-1'); - - check_ajax_referer( "image_editor-$attachment_id" ); - include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); - - $msg = false; - switch ( $_POST['do'] ) { - case 'save' : - $msg = wp_save_image($attachment_id); - $msg = json_encode($msg); - die($msg); - break; - case 'scale' : - $msg = wp_save_image($attachment_id); - break; - case 'restore' : - $msg = wp_restore_image($attachment_id); - break; - } - - wp_image_editor($attachment_id, $msg); - die(); - break; -case 'set-post-thumbnail': - $post_ID = intval( $_POST['post_id'] ); - if ( !current_user_can( 'edit_post', $post_ID ) ) - die( '-1' ); - $thumbnail_id = intval( $_POST['thumbnail_id'] ); - - check_ajax_referer( "set_post_thumbnail-$post_ID" ); - - if ( $thumbnail_id == '-1' ) { - if ( delete_post_thumbnail( $post_ID ) ) - die( _wp_post_thumbnail_html() ); - else - die( '0' ); - } - - if ( set_post_thumbnail( $post_ID, $thumbnail_id ) ) - die( _wp_post_thumbnail_html( $thumbnail_id ) ); - die( '0' ); - break; -case 'date_format' : - die( date_i18n( sanitize_option( 'date_format', $_POST['date'] ) ) ); - break; -case 'time_format' : - die( date_i18n( sanitize_option( 'time_format', $_POST['date'] ) ) ); - break; -case 'wp-fullscreen-save-post' : - $post_id = isset( $_POST['post_ID'] ) ? (int) $_POST['post_ID'] : 0; - - $post = $post_type = null; - - if ( $post_id ) - $post = get_post( $post_id ); - - if ( $post ) - $post_type = $post->post_type; - elseif ( isset( $_POST['post_type'] ) && post_type_exists( $_POST['post_type'] ) ) - $post_type = $_POST['post_type']; - - check_ajax_referer('update-' . $post_type . '_' . $post_id, '_wpnonce'); - - $post_id = edit_post(); - - if ( is_wp_error($post_id) ) { - if ( $post_id->get_error_message() ) - $message = $post_id->get_error_message(); - else - $message = __('Save failed'); - - echo json_encode( array( 'message' => $message, 'last_edited' => '' ) ); - die(); - } else { - $message = __('Saved.'); - } - - if ( $post ) { - $last_date = mysql2date( get_option('date_format'), $post->post_modified ); - $last_time = mysql2date( get_option('time_format'), $post->post_modified ); - } else { - $last_date = date_i18n( get_option('date_format') ); - $last_time = date_i18n( get_option('time_format') ); - } - - if ( $last_id = get_post_meta($post_id, '_edit_last', true) ) { - $last_user = get_userdata($last_id); - $last_edited = sprintf( __('Last edited by %1$s on %2$s at %3$s'), esc_html( $last_user->display_name ), $last_date, $last_time ); - } else { - $last_edited = sprintf( __('Last edited on %1$s at %2$s'), $last_date, $last_time ); - } - - echo json_encode( array( 'message' => $message, 'last_edited' => $last_edited ) ); - die(); - break; -case 'wp-remove-post-lock' : - if ( empty( $_POST['post_ID'] ) || empty( $_POST['active_post_lock'] ) ) - die( '0' ); - $post_id = (int) $_POST['post_ID']; - if ( ! $post = get_post( $post_id ) ) - die( '0' ); - - check_ajax_referer( 'update-' . $post->post_type . '_' . $post_id ); - - if ( ! current_user_can( 'edit_post', $post_id ) ) - die( '-1' ); - - $active_lock = array_map( 'absint', explode( ':', $_POST['active_post_lock'] ) ); - if ( $active_lock[1] != get_current_user_id() ) - die( '0' ); - - $new_lock = ( time() - apply_filters( 'wp_check_post_lock_window', AUTOSAVE_INTERVAL * 2 ) + 5 ) . ':' . $active_lock[1]; - update_post_meta( $post_id, '_edit_lock', $new_lock, implode( ':', $active_lock ) ); - die( '1' ); -case 'dismiss-wp-pointer' : - $pointer = $_POST['pointer']; - if ( $pointer != sanitize_key( $pointer ) ) - die( '0' ); - -// check_ajax_referer( 'dismiss-pointer_' . $pointer ); - - $dismissed = array_filter( explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ) ); - - if ( in_array( $pointer, $dismissed ) ) - die( '0' ); - - $dismissed[] = $pointer; - $dismissed = implode( ',', $dismissed ); +send_nosniff_header(); - update_user_meta( get_current_user_id(), 'dismissed_wp_pointers', $dismissed ); - die( '1' ); - break; -default : - do_action( 'wp_ajax_' . $_POST['action'] ); - die('0'); - break; -endswitch; -?> +do_action( 'admin_init' ); + +$core_actions_get = array( + 'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache', + 'autocomplete-user', 'dashboard-widgets', 'logged-in', +); + +$core_actions_post = array( + 'oembed-cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link', + 'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment', + 'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment', + 'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'autosave', 'closed-postboxes', + 'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax', + 'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink', + 'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order', + 'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post', + 'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', +); + +// Register core Ajax calls. +if ( ! empty( $_GET['action'] ) && in_array( $_GET['action'], $core_actions_get ) ) + add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '_', $_GET['action'] ), 1 ); + +if ( ! empty( $_POST['action'] ) && in_array( $_POST['action'], $core_actions_post ) ) + add_action( 'wp_ajax_' . $_POST['action'], 'wp_ajax_' . str_replace( '-', '_', $_POST['action'] ), 1 ); + +add_action( 'wp_ajax_nopriv_autosave', 'wp_ajax_nopriv_autosave', 1 ); + +if ( is_user_logged_in() ) + do_action( 'wp_ajax_' . $_REQUEST['action'] ); // Authenticated actions +else + do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] ); // Non-admin actions + +// Default status +die( '0' ); diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php index b8c84fdad..f59674908 100644 --- a/wp-admin/admin-functions.php +++ b/wp-admin/admin-functions.php @@ -13,4 +13,3 @@ _deprecated_file( basename(__FILE__), '2.5', 'wp-admin/includes/admin.php' ); /** WordPress Administration API: Includes all Administration functions. */ require_once(ABSPATH . 'wp-admin/includes/admin.php'); -?> \ No newline at end of file diff --git a/wp-admin/admin-header.php b/wp-admin/admin-header.php index a34a51b88..248897c98 100644 --- a/wp-admin/admin-header.php +++ b/wp-admin/admin-header.php @@ -11,7 +11,7 @@ if ( ! defined( 'WP_ADMIN' ) ) require_once( './admin.php' ); // In case admin-header.php is included in a function. -global $title, $hook_suffix, $current_screen, $wp_locale, $pagenow, $wp_version, $is_iphone, +global $title, $hook_suffix, $current_screen, $wp_locale, $pagenow, $wp_version, $current_site, $update_title, $total_update_count, $parent_file; // Catch plugins that include admin-header.php before admin.php completes. @@ -55,7 +55,7 @@ var userSettings = { 'uid': '<?php if ( ! isset($current_user) ) $current_user = wp_get_current_user(); echo $current_user->ID; ?>', 'time':'<?php echo time() ?>' }, - ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>', + ajaxurl = '<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>', pagenow = '<?php echo $current_screen->id; ?>', typenow = '<?php echo $current_screen->post_type; ?>', adminpage = '<?php echo $admin_body_class; ?>', @@ -85,13 +85,26 @@ if ( is_rtl() ) $admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) ); $admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', $wp_version ) ); $admin_body_class .= ' admin-color-' . sanitize_html_class( get_user_option( 'admin_color' ), 'fresh' ); +$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); -if ( $is_iphone ) { ?> -<style type="text/css">.row-actions{visibility:visible;}</style> -<?php } ?> +if ( wp_is_mobile() ) + $admin_body_class .= ' mobile'; + +$admin_body_class .= ' no-customize-support'; + +?> </head> <body class="wp-admin no-js <?php echo apply_filters( 'admin_body_class', '' ) . " $admin_body_class"; ?>"> -<script type="text/javascript">document.body.className = document.body.className.replace('no-js','js');</script> +<script type="text/javascript"> + document.body.className = document.body.className.replace('no-js','js'); +</script> + +<?php +// If the customize-loader script is enqueued, make sure the customize +// body classes are correct as early as possible. +if ( wp_script_is( 'customize-loader', 'queue' ) && current_user_can( 'edit_theme_options' ) ) + wp_customize_support_script(); +?> <div id="wpwrap"> <?php require(ABSPATH . 'wp-admin/menu-header.php'); ?> diff --git a/wp-admin/admin-post.php b/wp-admin/admin-post.php index 5f9eccb54..f4af998e3 100644 --- a/wp-admin/admin-post.php +++ b/wp-admin/admin-post.php @@ -29,5 +29,3 @@ if ( !empty($_REQUEST['action']) ) $action .= '_' . $_REQUEST['action']; do_action($action); - -?> \ No newline at end of file diff --git a/wp-admin/admin.php b/wp-admin/admin.php index 46e45e34d..015ced301 100644 --- a/wp-admin/admin.php +++ b/wp-admin/admin.php @@ -12,16 +12,16 @@ * @since 2.3.2 */ if ( ! defined('WP_ADMIN') ) - define('WP_ADMIN', TRUE); + define('WP_ADMIN', true); if ( ! defined('WP_NETWORK_ADMIN') ) - define('WP_NETWORK_ADMIN', FALSE); + define('WP_NETWORK_ADMIN', false); if ( ! defined('WP_USER_ADMIN') ) - define('WP_USER_ADMIN', FALSE); + define('WP_USER_ADMIN', false); if ( ! WP_NETWORK_ADMIN && ! WP_USER_ADMIN ) { - define('WP_BLOG_ADMIN', TRUE); + define('WP_BLOG_ADMIN', true); } if ( isset($_GET['import']) && !defined('WP_LOAD_IMPORTERS') ) @@ -30,7 +30,7 @@ if ( isset($_GET['import']) && !defined('WP_LOAD_IMPORTERS') ) require_once(dirname(dirname(__FILE__)) . '/wp-load.php'); if ( get_option('db_upgraded') ) { - $wp_rewrite->flush_rules(); + flush_rewrite_rules(); update_option( 'db_upgraded', false ); /** @@ -153,7 +153,6 @@ if ( isset($plugin_page) ) { if ( validate_file($plugin_page) ) wp_die(__('Invalid plugin page')); - if ( !( file_exists(WP_PLUGIN_DIR . "/$plugin_page") && is_file(WP_PLUGIN_DIR . "/$plugin_page") ) && !( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") && is_file(WPMU_PLUGIN_DIR . "/$plugin_page") ) ) wp_die(sprintf(__('Cannot load %s.'), htmlentities($plugin_page))); @@ -229,5 +228,3 @@ if ( isset($plugin_page) ) { if ( !empty($_REQUEST['action']) ) do_action('admin_action_' . $_REQUEST['action']); - -?> diff --git a/wp-admin/async-upload.php b/wp-admin/async-upload.php index 1bd267fa5..e9d59e225 100644 --- a/wp-admin/async-upload.php +++ b/wp-admin/async-upload.php @@ -66,5 +66,3 @@ if ( $_REQUEST['short'] ) { $type = $_REQUEST['type']; echo apply_filters("async_upload_{$type}", $id); } - -?> diff --git a/wp-admin/comment.php b/wp-admin/comment.php index b2c69cb75..de5483e28 100644 --- a/wp-admin/comment.php +++ b/wp-admin/comment.php @@ -65,7 +65,7 @@ case 'editcomment' : $comment_id = absint( $_GET['c'] ); if ( !$comment = get_comment( $comment_id ) ) - comment_footer_die( __('Oops, no comment with this ID.') . sprintf(' <a href="%s">'.__('Go back').'</a>!', 'javascript:history.go(-1)') ); + comment_footer_die( __('Oops, no comment with this ID.') . sprintf(' <a href="%s">' . __('Go back') . '</a>.', 'javascript:history.go(-1)') ); if ( !current_user_can( 'edit_comment', $comment_id ) ) comment_footer_die( __('You are not allowed to edit this comment.') ); @@ -73,9 +73,6 @@ case 'editcomment' : if ( 'trash' == $comment->comment_approved ) comment_footer_die( __('This comment is in the Trash. Please move it out of the Trash if you want to edit it.') ); - if ( 'spam' == $comment->comment_approved ) - comment_footer_die( __('This comment is marked as Spam. Please mark it as Not Spam if you want to edit it.') ); - $comment = get_comment_to_edit( $comment_id ); include('./edit-form-comment.php'); @@ -222,7 +219,7 @@ case 'unapprovecomment' : $noredir = isset($_REQUEST['noredir']); if ( !$comment = get_comment($comment_id) ) - comment_footer_die( __('Oops, no comment with this ID.') . sprintf(' <a href="%s">'.__('Go back').'</a>!', 'edit-comments.php') ); + comment_footer_die( __('Oops, no comment with this ID.') . sprintf(' <a href="%s">' . __('Go back') . '</a>.', 'edit-comments.php') ); if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) comment_footer_die( __('You are not allowed to edit comments on this post.') ); @@ -295,5 +292,3 @@ default: } // end switch include('./admin-footer.php'); - -?> diff --git a/wp-admin/credits.php b/wp-admin/credits.php index cdc84c7c6..68f7ed6cf 100644 --- a/wp-admin/credits.php +++ b/wp-admin/credits.php @@ -17,7 +17,9 @@ function wp_credits() { $results = get_site_transient( 'wordpress_credits_' . $locale ); - if ( ! is_array( $results ) ) { + if ( ! is_array( $results ) + || ( isset( $results['data']['version'] ) && strpos( $wp_version, $results['data']['version'] ) !== 0 ) + ) { $response = wp_remote_get( "http://api.wordpress.org/core/credits/1.0/?version=$wp_version&locale=$locale" ); if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) @@ -44,13 +46,13 @@ function _wp_credits_build_object_link( &$data ) { list( $display_version ) = explode( '-', $wp_version ); -include( './admin-header.php' ); +include( ABSPATH . 'wp-admin/admin-header.php' ); ?> <div class="wrap about-wrap"> <h1><?php printf( __( 'Welcome to WordPress %s' ), $display_version ); ?></h1> -<div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Using WordPress %s will improve your looks, personality, and web publishing experience. Okay, just the last one, but still. :)' ), $display_version ); ?></div> +<div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! WordPress %s is already making your website better, faster, and more attractive, just like you!' ), $display_version ); ?></div> <div class="wp-badge"><?php printf( __( 'Version %s' ), $display_version ); ?></div> @@ -73,7 +75,7 @@ if ( ! $credits ) { 'http://wordpress.org/about/', /* translators: Url to the codex documentation on contributing to WordPress used on the credits page */ __( 'http://codex.wordpress.org/Contributing_to_WordPress' ) ) . '</p>'; - include( './admin-footer.php' ); + include( ABSPATH . 'wp-admin/admin-footer.php' ); exit; } @@ -134,7 +136,7 @@ foreach ( $credits['groups'] as $group_slug => $group_data ) { </div> <?php -include( './admin-footer.php' ); +include( ABSPATH . 'wp-admin/admin-footer.php' ); return; @@ -157,5 +159,3 @@ __( 'XML-RPC' ); __( 'Internationalization' ); __( 'External Libraries' ); __( 'Icon Design' ); - -?> diff --git a/wp-admin/css/colors-classic.css b/wp-admin/css/colors-classic.css index fae10241c..91017ee62 100644 --- a/wp-admin/css/colors-classic.css +++ b/wp-admin/css/colors-classic.css @@ -1 +1 @@ -html,.wp-dialog{background-color:#fff;}* html input,* html .widget{border-color:#dfdfdf;}textarea,input[type="text"],input[type="password"],input[type="file"],input[type="button"],input[type="submit"],input[type="reset"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="url"],select{border-color:#dfdfdf;background-color:#fff;}kbd,code{background:#eaeaea;}input[readonly]{background-color:#eee;}.find-box-search{border-color:#dfdfdf;background-color:#f1f1f1;}.find-box{background-color:#f1f1f1;}.find-box-inside{background-color:#fff;}a.page-numbers:hover{border-color:#999;}body,#wpbody,.form-table .pre{color:#333;}body>#upload-menu{border-bottom-color:#fff;}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#D1E5EE;}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red;}#poststuff .inside label.waiting{color:orange;}#poststuff .inside label.approved{color:green;}#postcustomstuff table{border-color:#dfdfdf;background-color:#F9F9F9;}#postcustomstuff thead th{background-color:#F1F1F1;}#postcustomstuff table input,#postcustomstuff table textarea{border-color:#dfdfdf;background-color:#fff;}.widefat{border-color:#D1E5EE;background-color:#fff;}div.dashboard-widget-error{background-color:#c43;}div.dashboard-widget-notice{background-color:#cfe1ef;}div.dashboard-widget-submit{border-top-color:#ccc;}div.tabs-panel,.wp-tab-panel,ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fff;}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fff;}input.disabled,textarea.disabled{background-color:#ccc;}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff;}.widget .widget-top,.postbox h3,.stuffbox h3,.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head,.sidebar-name,#nav-menu-header,#nav-menu-footer,.menu-item-handle,#fullscreen-topbar{background-color:#f5fafd;background-image:-ms-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-moz-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-o-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-webkit-gradient(linear,left top,left bottom,from(#f7fcfe),to(#eff8ff));background-image:-webkit-linear-gradient(top,#f7fcfe,#eff8ff);background-image:linear-gradient(top,#f7fcfe,#eff8ff);}.widget .widget-top,.postbox h3,.stuffbox h3{border-bottom-color:#D1E5EE;text-shadow:#fff 0 1px 0;-moz-box-shadow:0 1px 0 #fff;-webkit-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;}.form-table th,.form-wrap label{color:#222;text-shadow:#fff 0 1px 0;}.description,.form-wrap p{color:#666;}strong .post-com-count span{background-color:#21759b;}.sorthelper{background-color:#ccf3fa;}.ac_match,.subsubsub a.current{color:#000;}.wrap h2{color:#174f69;}.wrap .add-new-h2{background:#f1f1f1;}.subtitle{color:#777;}.ac_over{background-color:#f0f0b8;}.ac_results{background-color:#fff;border-color:#808080;}.ac_results li{color:#101010;}.alternate,.alt{background-color:#f7fcfe;}.available-theme a.screenshot{background-color:#f1f1f1;border-color:#ddd;}.bar{background-color:#e8e8e8;border-right-color:#99d;}#media-upload,#media-upload .media-item .slidetoggle{background:#fff;}#media-upload .slidetoggle{border-top-color:#dfdfdf;}div.error,.login #login_error{background-color:#ffebe8;border-color:#c00;}div.error a{color:#c00;}.form-invalid{background-color:#ffebe8!important;}.form-invalid input,.form-invalid select{border-color:#c00!important;}.submit{border-color:#DFDFDF;}.highlight{background-color:#e4f2fd;color:#000;}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666;}.media-upload-form label.form-help,td.help{color:#9a9a9a;}.post-com-count{background-image:url(../images/bubble_bg.gif);color:#fff;}.post-com-count span{background-color:#bbb;color:#fff;}.post-com-count:hover span{background-color:#d54e21;}.quicktags,.search{background-color:#ccc;color:#000;}.side-info h5{border-bottom-color:#dadada;}.side-info ul{color:#666;}.button,.button-secondary,.submit input,input[type=button],input[type=submit]{border-color:#bbb;color:#464646;}.button:hover,.button-secondary:hover,.submit input:hover,input[type=button]:hover,input[type=submit]:hover{color:#000;border-color:#666;}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top;text-shadow:rgba(255,255,255,1) 0 1px 0;}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top;}input.button-primary,button.button-primary,a.button-primary{border-color:#298cba;font-weight:bold;color:#fff;background:#21759B url(../images/button-grad.png) repeat-x scroll left top;text-shadow:rgba(0,0,0,0.3) 0 -1px 0;}input.button-primary:active,button.button-primary:active,a.button-primary:active{background:#21759b url(../images/button-grad-active.png) repeat-x scroll left top;color:#eaf2fa;}input.button-primary:hover,button.button-primary:hover,a.button-primary:hover,a.button-primary:focus,a.button-primary:active{border-color:#13455b;color:#eaf2fa;}.button-disabled,.button[disabled],.button:disabled,.button-secondary[disabled],.button-secondary:disabled,a.button.disabled{color:#aaa!important;border-color:#ddd!important;}.button-primary-disabled,.button-primary[disabled],.button-primary:disabled{color:#9FD0D5!important;background:#298CBA!important;}a:hover,a:active,a:focus{color:#d54e21;}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu ul.wp-submenu a:hover,#the-comment-list .comment a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover,.plugins .inactive a:hover,#all-plugins-table .plugins .inactive a:hover,#search-plugins-table .plugins .inactive a:hover{color:#d54e21;}#the-comment-list .comment-item,#dashboard-widgets #dashboard_quick_press form p.submit{border-color:#dfdfdf;}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333;}#rightnow .rbutton{background-color:#ebebeb;color:#264761;}.submitbox .submit{background-color:#464646;color:#ccc;}.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete{color:#f00;border-bottom-color:#f00;}.submitbox .submitdelete:hover,#media-items a.delete:hover{color:#fff;background-color:#f00;border-bottom-color:#f00;}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:#f00;border-bottom-color:#f00;}.tablenav .dots{border-color:transparent;}.tablenav .next,.tablenav .prev{border-color:transparent;color:#21759b;}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#d54e21;}div.updated,.login .message{background-color:#ffffe0;border-color:#e6db55;}.update-message{color:#000;}a.page-numbers{border-bottom-color:#B8D3E2;}.commentlist li{border-bottom-color:#ccc;}.widefat td,.widefat th{border-top-color:#fff;border-bottom-color:#D0DFE9;}.widefat th{text-shadow:rgba(255,255,255,0.8) 0 1px 0;}.widefat td{color:#555;}.widefat p,.widefat ol,.widefat ul{color:#333;}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head{color:#333;}th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333;}h3.dashboard-widget-title small a{color:#d7d7d7;}h3.dashboard-widget-title small a:hover{color:#fff;}a,#adminmenu a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,.plugins a.delete,.ui-tabs-nav a{color:#21759b;}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0;}#plugin-information .action-button{background-color:#d54e21;color:#fff;}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0;}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf;}#currenttheme img{border-color:#666;}#dashboard_secondary div.dashboard-widget-content ul li a{background-color:#f9f9f9;}input.readonly,textarea.readonly{background-color:#ddd;}.quicktags-toolbar input{background:#fff;background-image:-ms-linear-gradient(bottom,#e5f0f8,#fff);background-image:-moz-linear-gradient(bottom,#e5f0f8,#fff);background-image:-o-linear-gradient(bottom,#e5f0f8,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#e5f0f8),to(#fff));background-image:-webkit-linear-gradient(bottom,#e5f0f8,#fff)!important;background-image:linear-gradient(bottom,#e5f0f8,#fff);}#editable-post-name{background-color:#fffbcc;}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777;}.login #nav a,.login #backtoblog a{color:#21759b!important;}.login #nav a:hover,.login #backtoblog a:hover{color:#d54e21!important;}#footer{color:#777;border-color:#b0c8d7;}#media-items .media-item,.media-item .describe,.imgedit-group{border-color:#dfdfdf;}.checkbox,.side-info,.plugins tr,#your-profile #rich_editing{background-color:#fcfcfc;}.plugins .inactive,.plugins .inactive th,.plugins .inactive td,tr.inactive+tr.plugin-update-tr .plugin-update{background-color:#f4f4f4;}.plugin-update-tr .update-message{background-color:#fffbe4;border-color:#dfdfdf;}.plugins .active,.plugins .active th,.plugins .active td{color:#000;}.plugins .inactive a{color:#579;}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4;}#the-comment-list .unapproved{background-color:#ffffe0;}#the-comment-list .approve a{color:#006505;}#the-comment-list .unapprove a{color:#d98500;}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,#dashboard_recent_comments .delete a,#dashboard_recent_comments .trash a,#dashboard_recent_comments .spam a{color:#bc0b0b;}.welcome-panel{border-color:#d1e5ee;}.welcome-panel p{color:#777;}.welcome-panel-column p{color:#464646;}.welcome-panel h3{text-shadow:1px 1px 1px white;}.widget,#widget-list .widget-top,.postbox,#titlediv,#poststuff .postarea,.stuffbox{border-color:#d1e5ee;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;-webkit-border-radius:3px;border-radius:3px;}.widget,#widget-list .widget-top,.postbox,.menu-item-settings{background-color:#f7fcfe;}.postbox h3{color:#174f69;}.widget .widget-top{color:#174f69;}.sidebar-name:hover h3,.postbox h3:hover{color:#000;}.curtime #timestamp{background-image:url(../images/date-button.gif);}#quicktags #ed_link{color:#00f;}#rightnow .youhave{background-color:#f0f6fb;}#rightnow a{color:#448abd;}.tagchecklist span a,#bulk-titles div a{background:url(../images/xit.gif) no-repeat;}.tagchecklist span a:hover,#bulk-titles div a:hover{background:url(../images/xit.gif) no-repeat -10px 0;}#update-nag,.update-nag{background-color:#fffbcc;border-color:#e6db55;color:#555;}.login #backtoblog a{color:#464646;}#wphead{border-bottom:#d0dfe9 1px solid;}#wphead h1 a{color:#174f69;}#footer a:link,#footer a:visited{text-decoration:none;}#footer a:hover{color:#000;text-decoration:underline;}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover,#dashboard_recent_comments .delete a:hover,#dashboard_recent_comments .trash a:hover #dashboard_recent_comments .spam a:hover{color:#f00;}#pass-strength-result{background-color:#eee;border-color:#ddd!important;}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important;}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important;}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important;}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important;}#quicktags{border-color:#cfdfe9;background-color:#cfdfe9;background-image:url("../images/ed-bg-vs.gif?ver=20101102");}.quicktags-toolbar input{border-color:#b2c4c8;}.quicktags-toolbar input:hover{border-color:#d0dfe9;background:#f0f8fe;}#poststuff .wp-editor-wrap .wp_themeSkin .mceStatusbar{border-color:#d0dfe9;}#poststuff .wp-editor-wrap .wp_themeSkin .mceStatusbar *{color:#555;}#poststuff #editor-toolbar .active{border-color:#d0dfe9 #d0dfe9 #eff8ff;background-color:#eff8ff;color:#333;}#post-status-info{background-color:#eff8ff;}.wp-editor-wrap .wp_themeSkin *,.wp-editor-wrap .wp_themeSkin a:hover,.wp-editor-wrap .wp_themeSkin a:link,.wp-editor-wrap .wp_themeSkin a:visited,.wp-editor-wrap .wp_themeSkin a:active{color:#000;}.wp-editor-wrap .wp_themeSkin table.mceLayout{border-color:#bed1dd #bed1dd #d0dfe9;}#editorcontainer #content,#editorcontainer .wp-editor-wrap .wp_themeSkin .mceIframeContainer{-moz-box-shadow:inset 1px 1px 2px rgba(0,0,0,0.1);-webkit-box-shadow:inset 1px 1px 2px rgba(0,0,0,0.1);box-shadow:inset 1px 1px 2px rgba(0,0,0,0.1);}.wp-editor-wrap .wp_themeSkin iframe{background:transparent;}.wp-editor-wrap .wp_themeSkin .mceStatusbar{color:#000;background-color:#f5f5f5;}.wp-editor-wrap .wp_themeSkin .mceButton{border-color:#B0C8D7;background-color:#cfdfe9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff);}.wp-editor-wrap .wp_themeSkin a.mceButtonEnabled:hover{border-color:#5589AA!important;background-color:#c9c9c9;background-image:-ms-linear-gradient(bottom,#bdccd5,#fff);background-image:-moz-linear-gradient(bottom,#bdccd5,#fff);background-image:-o-linear-gradient(bottom,#bdccd5,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#bdccd5),to(#fff));background-image:-webkit-linear-gradient(bottom,#bdccd5,#fff)!important;background-image:linear-gradient(bottom,#bdccd5,#fff);}.wp-editor-wrap .wp_themeSkin a.mceButton:active,.wp-editor-wrap .wp_themeSkin a.mceButtonEnabled:active,.wp-editor-wrap .wp_themeSkin a.mceButtonSelected:active,.wp-editor-wrap .wp_themeSkin a.mceButtonActive,.wp-editor-wrap .wp_themeSkin a.mceButtonActive:active,.wp-editor-wrap .wp_themeSkin a.mceButtonActive:hover{background:#B0C8D7!important;background-image:-ms-linear-gradient(bottom,#fff,#cfdfe9);background-image:-moz-linear-gradient(bottom,#fff,#cfdfe9);background-image:-o-linear-gradient(bottom,#fff,#cfdfe9);background-image:-webkit-gradient(linear,left bottom,left top,from(#fff),to(#cfdfe9));background-image:-webkit-linear-gradient(bottom,#fff,#cfdfe9)!important;background-image:linear-gradient(bottom,#fff,#cfdfe9);border-color:#5589AA!important;}.wp-editor-wrap .wp_themeSkin .mceButtonDisabled{border-color:#B0C8D7!important;}.wp-editor-wrap .wp_themeSkin .mceListBox .mceText,.wp-editor-wrap .wp_themeSkin .mceListBox .mceOpen{border-color:#B0C8D7;background-color:#cfdfe9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff);}.wp-editor-wrap .wp_themeSkin .mceListBox .mceOpen{border-left:0!important;}.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxHover .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxHover:active .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxSelected .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxSelected .mceText,.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:active .mceText{background:#B0C8D7;border-color:#5589AA!important;}.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:hover .mceText,.wp-editor-wrap .wp_themeSkin .mceListBoxHover .mceText,.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxHover .mceOpen{border-color:#5589AA!important;background-color:#c9c9c9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff);}.wp-editor-wrap .wp_themeSkin select.mceListBox{border-color:#B2B2B2;background-color:#fff;}.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceAction,.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceOpen{border-color:#B0C8D7;}.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceOpen:hover,.wp-editor-wrap .wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp-editor-wrap .wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction,.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceAction:hover{border-color:#5589AA!important;}.wp-editor-wrap .wp_themeSkin table.mceSplitButton td{background-color:#cfdfe9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff);}.wp-editor-wrap .wp_themeSkin table.mceSplitButton:hover td{background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff);}.wp-editor-wrap .wp_themeSkin .mceSplitButtonActive{background-color:#B0C8D7;}.wp-editor-wrap .wp_themeSkin div.mceColorSplitMenu table{background-color:#ebebeb;border-color:#B2B2B2;}.wp-editor-wrap .wp_themeSkin .mceColorSplitMenu a{border-color:#B2B2B2;}.wp-editor-wrap .wp_themeSkin .mceColorSplitMenu a.mceMoreColors{border-color:#fff;}.wp-editor-wrap .wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover{border-color:#0A246A;background-color:#B6BDD2;}.wp-editor-wrap .wp_themeSkin a.mceMoreColors:hover{border-color:#0A246A;}.wp-editor-wrap .wp_themeSkin .mceMenu{border-color:#ddd;}.wp-editor-wrap .wp_themeSkin .mceMenu table{background-color:#ebeaeb;}.wp-editor-wrap .wp_themeSkin .mceMenu .mceText{color:#000;}.wp-editor-wrap .wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover,.wp-editor-wrap .wp_themeSkin .mceMenu .mceMenuItemActive{background-color:#f5f5f5;}.wp-editor-wrap .wp_themeSkin td.mceMenuItemSeparator{background-color:#aaa;}.wp-editor-wrap .wp_themeSkin .mceMenuItemTitle a{background-color:#ccc;border-bottom-color:#aaa;}.wp-editor-wrap .wp_themeSkin .mceMenuItemTitle span.mceText{color:#000;}.wp-editor-wrap .wp_themeSkin .mceMenuItemDisabled .mceText{color:#888;}.wp-editor-wrap .wp_themeSkin tr.mceFirst td.mceToolbar{background:#cfdfe9 url("../images/ed-bg-vs.gif?ver=20101102") repeat-x scroll left top;border-color:#cfdfe9;}.wp-admin #mceModalBlocker{background:#000;}.wp-admin .clearlooks2 .mceFocus .mceTop .mceLeft{background:#444;border-left:1px solid #999;border-top:1px solid #999;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;}.wp-admin .clearlooks2 .mceFocus .mceTop .mceRight{background:#444;border-right:1px solid #999;border-top:1px solid #999;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;}.wp-admin .clearlooks2 .mceMiddle .mceLeft{background:#f1f1f1;border-left:1px solid #999;}.wp-admin .clearlooks2 .mceMiddle .mceRight{background:#f1f1f1;border-right:1px solid #999;}.wp-admin .clearlooks2 .mceBottom{background:#f1f1f1;border-bottom:1px solid #999;}.wp-admin .clearlooks2 .mceBottom .mceLeft{background:#f1f1f1;border-bottom:1px solid #999;border-left:1px solid #999;}.wp-admin .clearlooks2 .mceBottom .mceCenter{background:#f1f1f1;border-bottom:1px solid #999;}.wp-admin .clearlooks2 .mceBottom .mceRight{background:#f1f1f1;border-bottom:1px solid #999;border-right:1px solid #999;}.wp-admin .clearlooks2 .mceFocus .mceTop span{color:#e5e5e5;}.wp-editor-wrap .wp-switch-editor{background-color:#f5fafd;border-color:#d1e5ee #d1e5ee #d1e5ee;color:#999;}.wp-editor-wrap.tmce-active .switch-tmce,.wp-editor-wrap.html-active .switch-html{background-color:#eff8ff;border-color:#d1e5ee #d1e5ee #eff8ff;color:#333;}.wp-editor-wrap.quicktags-toolbar input{color:#464646;border-color:#d1e5ee;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#eff8ff,#fff);background-image:-moz-linear-gradient(bottom,#eff8ff,#fff);background-image:-o-linear-gradient(bottom,#eff8ff,#fff);background-image:-webkit-linear-gradient(bottom,#eff8ff,#fff);background-image:linear-gradient(bottom,#eff8ff,#fff);}.wp-editor-wrap .quicktags-toolbar,.wp-editor-wrap.wp_themeSkin tr.mceFirst td.mceToolbar{border-bottom:1px solid #ccc;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:-o-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:-webkit-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:linear-gradient(bottom,#cfdfe9,#eff8ff);}.wp-editor-wrap .quicktags-toolbar input:hover{border-color:#aaa;background:#ddd;}.wp-editor-wrap.wp_themeSkin .mceButton,.wp-editor-wrap.wp_themeSkin .mceListBox .mceText,.wp-editor-wrap.wp_themeSkin .mceListBox .mceOpen{border-color:#ccc;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#eff8ff,#fff);background-image:-moz-linear-gradient(bottom,#eff8ff,#fff);background-image:-o-linear-gradient(bottom,#eff8ff,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#eff8ff),to(#fff));background-image:-webkit-linear-gradient(bottom,#eff8ff,#fff);background-image:linear-gradient(bottom,#eff8ff,#fff);}.wp-editor-wrap.wp_themeSkin a.mceButtonEnabled:hover{border-color:#a0a0a0;background:#ddd;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff);background-image:linear-gradient(bottom,#cfdfe9,#fff);}#titlediv #title{border-color:#bdccd5;}#editorcontainer{border-color:#bdccd5 #bdccd5 #d0dfe9;}#post-status-info{border-color:#d0dfe9 #bdccd5 #bdccd5;}.editwidget .widget-inside{border-color:#d0dfe9;}#titlediv #title{background-color:#fff;}#tTips p#tTips_inside{background-color:#ddd;color:#333;}#timestampdiv input,#namediv input,#poststuff .inside .the-tagcloud{border-color:#ddd;}#adminmenuback,#adminmenuwrap{background-color:#EFF8FF;border-color:#D1E5EE;}#adminmenushadow,#adminmenuback{background-image:url(../images/menu-shadow.png);background-position:top right;background-repeat:repeat-y;}#adminmenu li.wp-menu-separator{background:#D1E5EE;border-color:#bed1dd;}#adminmenu div.separator{border-color:#D1E5EE;}#adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,#adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark-vs.png) no-repeat -1px 6px;}#adminmenu .wp-has-submenu:hover .wp-menu-toggle,#adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows-vs.png) no-repeat -2px 6px;}#adminmenu a.menu-top,.folded #adminmenu li.menu-top,#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#fff;border-bottom-color:#cae6ff;}#adminmenu li.wp-menu-open{border-color:#d1e5ee;}#adminmenu li.menu-top:hover>a,#adminmenu li.menu-top.focused>a,#adminmenu li.menu-top>a:focus{background-color:#e0f1ff;text-shadow:0 1px 0 rgba(255,255,255,0.4);}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:#5589AA;background-image:-ms-linear-gradient(bottom,#5589AA,#619bbb);background-image:-moz-linear-gradient(bottom,#5589AA,#619bbb);background-image:-o-linear-gradient(bottom,#5589AA,#619bbb);background-image:-webkit-gradient(linear,left bottom,left top,from(#5589AA),to(#619bbb));background-image:-webkit-linear-gradient(bottom,#5589AA,#619bbb);background-image:linear-gradient(bottom,#5589AA,#619bbb);}#adminmenu .wp-menu-arrow div{background-color:#5589AA;background-image:-ms-linear-gradient(right bottom,#5589AA,#619bbb);background-image:-moz-linear-gradient(right bottom,#5589AA,#619bbb);background-image:-o-linear-gradient(right bottom,#5589AA,#619bbb);background-image:-webkit-gradient(linear,right bottom,left top,from(#5589AA),to(#619bbb));background-image:-webkit-linear-gradient(right bottom,#5589AA,#619bbb);background-image:linear-gradient(right bottom,#5589AA,#619bbb);}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#fff;border-bottom-color:#cae6ff;background:#e0f1ff;}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#e0f1ff;border-color:#cae6ff;}.folded #adminmenu li.menu-top li:hover a{background-image:none;}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{text-shadow:0 -1px 0 #333;color:#fff;border-top-color:#5A8FAD;border-bottom-color:#5589AA;}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-top-color:#5A8FAD;border-bottom-color:#5589AA;}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus{background-color:#EFF8FF;color:#333;}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover{color:#333;}#adminmenu .wp-submenu ul{background-color:#fff;}#adminmenu .wp-submenu-wrap,#adminmenu .wp-submenu ul{border-color:#d0dfe9;}#adminmenu .wp-submenu-wrap,.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,0.4);box-shadow:2px 2px 5px rgba(0,0,0,0.4);}#adminmenu .wp-submenu .wp-submenu-head{border-right-color:#e8eff4;background-color:#EFF8FF;}#adminmenu div.wp-submenu{background-color:transparent;}#collapse-menu{color:#A0C3D5;}#collapse-menu:hover{color:#5A8FAD;}#collapse-button{border-color:#d0dfe9;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#eff8ff,#fff);background-image:-moz-linear-gradient(bottom,#eff8ff,#fff);background-image:-o-linear-gradient(bottom,#eff8ff,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#eff8ff),to(#fff));background-image:-webkit-linear-gradient(bottom,#eff8ff,#fff);background-image:linear-gradient(bottom,#eff8ff,#fff);}#collapse-menu:hover #collapse-button{border-color:#A0C3D5;}#collapse-button div{background:transparent url(../images/arrows-vs.png) no-repeat 0 -72px;}.folded #collapse-button div{background-position:0 -108px;}.icon16.icon-dashboard,#adminmenu .menu-icon-dashboard div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -60px -33px;}#adminmenu .menu-icon-dashboard:hover div.wp-menu-image,#adminmenu .menu-icon-dashboard.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-dashboard.current div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -60px -1px;}.icon16.icon-post,#adminmenu .menu-icon-post div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -271px -33px;}#adminmenu .menu-icon-post:hover div.wp-menu-image,#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -271px -1px;}.icon16.icon-media,#adminmenu .menu-icon-media div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -120px -33px;}#adminmenu .menu-icon-media:hover div.wp-menu-image,#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -120px -1px;}.icon16.icon-links,#adminmenu .menu-icon-links div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -90px -33px;}#adminmenu .menu-icon-links:hover div.wp-menu-image,#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -90px -1px;}.icon16.icon-page,#adminmenu .menu-icon-page div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -150px -33px;}#adminmenu .menu-icon-page:hover div.wp-menu-image,#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -150px -1px;}.icon16.icon-comments,#adminmenu .menu-icon-comments div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -30px -33px;}#adminmenu .menu-icon-comments:hover div.wp-menu-image,#adminmenu .menu-icon-comments.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-comments.current div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -30px -1px;}.icon16.icon-appearance,#adminmenu .menu-icon-appearance div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll 0 -33px;}#adminmenu .menu-icon-appearance:hover div.wp-menu-image,#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll 0 -1px;}.icon16.icon-plugins,#adminmenu .menu-icon-plugins div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -180px -33px;}#adminmenu .menu-icon-plugins:hover div.wp-menu-image,#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -180px -1px;}.icon16.icon-users,#adminmenu .menu-icon-users div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -300px -33px;}#adminmenu .menu-icon-users:hover div.wp-menu-image,#adminmenu .menu-icon-users.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-users.current div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -300px -1px;}.icon16.icon-tools,#adminmenu .menu-icon-tools div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -210px -33px;}#adminmenu .menu-icon-tools:hover div.wp-menu-image,#adminmenu .menu-icon-tools.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-tools.current div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -210px -1px;}.icon16.icon-settings,#icon-options-general,#adminmenu .menu-icon-settings div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -240px -33px;}#adminmenu .menu-icon-settings:hover div.wp-menu-image,#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -240px -1px;}.icon16.icon-site,#adminmenu .menu-icon-site div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -360px -33px;}#adminmenu .menu-icon-site:hover div.wp-menu-image,#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -360px -1px;}.icon32.icon-post,#icon-edit,#icon-post{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -552px -5px;}.icon32.icon-dashboard,#icon-index{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -137px -5px;}.icon32.icon-media,#icon-upload{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -251px -5px;}.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -190px -5px;}.icon32.icon-page,#icon-edit-pages,#icon-page{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -312px -5px;}.icon32.icon-comments,#icon-edit-comments{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -72px -5px;}.icon32.icon-appearance,#icon-themes{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -11px -5px;}.icon32.icon-plugins,#icon-plugins{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -370px -5px;}.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -600px -5px;}.icon32.icon-tools,#icon-tools,#icon-admin{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -432px -5px;}.icon32.icon-settings,#icon-options-general{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -492px -5px;}.icon32.icon-site,#icon-ms-admin{background:transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -659px -5px;}table.diff .diff-deletedline{background-color:#fdd;}table.diff .diff-deletedline del{background-color:#f99;}table.diff .diff-addedline{background-color:#dfd;}table.diff .diff-addedline ins{background-color:#9f9;}#att-info{background-color:#E4F2FD;}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf;}#sidemenu a.current{background-color:#fff;border-color:#dfdfdf #dfdfdf #fff;color:#D54E21;}#screen-meta{background-color:#EFF8FF;border-color:#D1E5EE;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.05);box-shadow:0 1px 3px rgba(0,0,0,0.05);}#contextual-help-back{background:#fff;}.contextual-help-tabs a:hover{background-color:#ceeaff;color:#333;}#contextual-help-back,.contextual-help-tabs .active{border-color:#D1E5EE;}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#fff;color:#000;}#screen-options-link-wrap,#contextual-help-link-wrap{background-color:#eff8ff;border-right:1px solid #D1E5EE;border-left:1px solid #D1E5EE;border-bottom:1px solid #D1E5EE;background-image:-ms-linear-gradient(bottom,#eff8ff,#fff);background-image:-moz-linear-gradient(bottom,#eff8ff,#fff);background-image:-o-linear-gradient(bottom,#eff8ff,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#eff8ff),to(#fff));background-image:-webkit-linear-gradient(bottom,#eff8ff,#fff);background-image:linear-gradient(bottom,#eff8ff,#fff);}#screen-meta-links a.show-settings{color:#606060;}#screen-meta-links a.show-settings:hover{color:#000;}#screen-meta-links a.show-settings{background:transparent url(../images/arrows.png) no-repeat right 3px;}#screen-meta-links a.show-settings.screen-meta-active{background:transparent url(../images/arrows.png) no-repeat right -33px;}#replyerror{border-color:#ddd;background-color:#f9f9f9;}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important;}.star-average,.star.star-rating{background-color:#fc0;}div.star.select:hover{background-color:#d00;}div.star img{border-left:1px solid #fff;border-right:1px solid #fff;}#plugin-information .fyi ul{background-color:#eaf3fa;}#plugin-information .fyi h2.mainheader{background-color:#cee1ef;}#plugin-information pre,#plugin-information code{background-color:#ededff;}#plugin-information pre{border:1px solid #ccc;}.inline-edit-row fieldset input[type="text"],.inline-edit-row fieldset textarea,#bulk-titles{border-color:#ddd;}.inline-editor div.title{background-color:#EAF3FA;}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd;}.inline-editor .categories .catshow,.inline-editor .categories .cathide{color:#21759b;}.inline-editor .quick-edit-save{background-color:#f1f1f1;}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf;}.attention{color:#D54E21;}.meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows-vs.png) no-repeat 6px 7px;}.tablenav .tablenav-pages{color:#555;}.tablenav .tablenav-pages a{border-color:#d1e5ee;background:#eee url('../images/menu-bits-vs.gif?ver=20101102') repeat-x scroll left -379px;}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#d54e21;}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3;}#availablethemes,#availablethemes td{border-color:#ddd;}#current-theme img{border-color:#999;}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999;}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc;}.misc-pub-section{border-top-color:#fff;border-bottom-color:#eee;}#minor-publishing{border-bottom-color:#ddd;}#post-body .misc-pub-section{border-right-color:#eee;}.post-com-count span{background-color:#bbb;}.form-table .color-palette td{border-color:#fff;}.sortable-placeholder{border-color:#bbb;background-color:#f5f5f5;}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333;}.view-switch #view-switch-list{background:transparent url(../images/list.png) no-repeat 0 0;}.view-switch .current #view-switch-list{background:transparent url(../images/list.png) no-repeat -40px 0;}.view-switch #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -20px 0;}.view-switch .current #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -60px 0;}#header-logo{background:transparent url(../images/wp-logo-vs.png?ver=20101102) no-repeat scroll center center;}.popular-tags,.feature-filter{background-color:#fff;border-color:#DFDFDF;}#theme-information .action-button{border-top-color:#DFDFDF;}.theme-listing br.line{border-bottom-color:#ccc;}div.widgets-sortables,#widgets-left .inactive{background-color:#f7fcfe;border-color:#d0dfe9;}#available-widgets .widget-holder{background-color:#f7fcfe;border-color:#d0dfe9;}#available-widgets .widget-description{color:#555;}.sidebar-name{color:#464646;background-color:#f7fcfe;background-image:-ms-linear-gradient(top,#ECF8FE,#f7fcfe);background-image:-moz-linear-gradient(top,#ECF8FE,#f7fcfe);background-image:-o-linear-gradient(top,#ECF8FE,#f7fcfe);background-image:-webkit-gradient(linear,left top,left bottom,from(#ECF8FE),to(#f7fcfe));background-image:-webkit-linear-gradient(top,#ECF8FE,#f7fcfe);background-image:linear-gradient(top,#ECF8FE,#f7fcfe);text-shadow:#fff 0 1px 0;border-color:#d0dfe9;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;}.sidebar-name:hover,#removing-widget{color:#d54e21;}#removing-widget span{color:black;}.sidebar-name-arrow{background:transparent url(../images/arrows-vs.png) no-repeat 5px 9px;}.sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark-vs.png) no-repeat 5px 9px;}.in-widget-title{color:#606060;}.deleting .widget-title *{color:#aaa;}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1;}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea;}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5;}#dashboard_recent_comments div.undo{border-top-color:#dfdfdf;}.comment-ays,.comment-ays th{border-color:#ddd;}.comment-ays th{background-color:#f1f1f1;}#menu-management .menu-edit{border-color:#d0dfe9;}#post-body{background:#fff;border-top-color:#fff;border-bottom-color:#d0dfe9;}#nav-menu-header{border-bottom-color:#d0dfe9;}#nav-menu-footer{border-top-color:#fff;}#menu-management .nav-tabs-arrow a{color:#C1C1C1;}#menu-management .nav-tabs-arrow a:hover{color:#D54E21;}#menu-management .nav-tabs-arrow a:active{color:#464646;}#menu-management .nav-tab-active{border-color:#dfdfdf;}#menu-management .nav-tab{background:#f7fcfe;border-color:#d0dfe9;}.js .input-with-default-title{color:#aaa;}#cancel-save{color:#f00;}#cancel-save:hover{background-color:#F00;color:#fff;}.list-container{border-color:#dfdfdf;}.menu-item-handle{border-color:#d0dfe9;}.menu li.deleting .menu-item-handle{background-color:#f66;text-shadow:#ccc;}.item-type{color:#999;}.item-controls .menu-item-delete:hover{color:#f00;}.nav-menus-php .item-edit{background:transparent url(../images/arrows-vs.png) no-repeat 8px 10px;border-bottom-color:#eff8ff;}.item-edit:hover{background:transparent url(../images/arrows-dark-vs.png) no-repeat 8px 10px;}.menu-item-settings{border-color:#d0dfe9;}.link-to-original{color:#777;border-color:#d0dfe9;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.submitbox .submitcancel{color:#21759B;border-bottom-color:#21759B;}.submitbox .submitcancel:hover{background:#21759B;color:#fff;}#menu-management .nav-tab-active,.menu-item-handle,.menu-item-settings{-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;}#menu-management .nav-tab-active{background:#eff8ff;border-bottom-color:#eff8ff;}#upload-form label{color:#777;}.fullscreen-overlay{background:#fff;}.wp-fullscreen-focus #wp-fullscreen-title,.wp-fullscreen-focus #wp-fullscreen-container{border-color:#BED1DD;}#fullscreen-topbar{border-bottom-color:#D1E5EE;}.about-wrap h1{color:#333;text-shadow:1px 1px 1px white;}.about-text{color:#777;}.wp-badge{color:#fff;text-shadow:0 -1px 0 rgba(22,57,81,0.3);}.about-wrap h2 .nav-tab{color:#21759B;}.about-wrap h2 .nav-tab:hover{color:#d54e21;}.about-wrap h2 .nav-tab-active,.about-wrap h2 .nav-tab-active:hover{color:#333;}.about-wrap h2 .nav-tab-active{text-shadow:1px 1px 1px white;color:#464646;}.about-wrap h3{color:#333;text-shadow:1px 1px 1px white;}.about-wrap .feature-section h4{color:#464646;}.about-wrap .feature-section img{background:#fff;border-color:#dfdfdf;-moz-box-shadow:0 0 6px rgba(0,0,0,0.3);-webkit-box-shadow:0 0 6px rgba(0,0,0,0.3);box-shadow:0 0 6px rgba(0,0,0,0.3);}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf;}.about-wrap .point-releases h3{border-top:1px solid #dfdfdf;}.about-wrap .point-releases h3:first-child{border:0;}.about-wrap h4.wp-people-group{text-shadow:1px 1px 1px white;}.about-wrap li.wp-person img.gravatar{-moz-box-shadow:0 0 4px rgba(0,0,0,0.4);-webkit-box-shadow:0 0 4px rgba(0,0,0,0.4);box-shadow:0 0 4px rgba(0,0,0,0.4);}.about-wrap li.wp-person .title{color:#464646;text-shadow:1px 1px 1px white;}.freedoms-php .about-wrap ol li{color:#999;}.freedoms-php .about-wrap ol p{color:#464646;}.rtl .bar{border-right-color:none;border-left-color:#99d;}.rtl .post-com-count{background-image:url(../images/bubble_bg-rtl.gif);}.rtl #screen-meta-links a.show-settings{background-position:left 3px;}.rtl #screen-meta-links a.show-settings.screen-meta-active{background-position:left -33px;}.rtl #adminmenushadow,.rtl #adminmenuback{background-image:url(../images/menu-shadow-rtl.png);background-position:top left;}.rtl #adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,.rtl #adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark-vs.png) no-repeat 8px 6px;}.rtl #adminmenu .wp-has-submenu:hover .wp-menu-toggle,.rtl #adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows-vs.png) no-repeat 8px 6px;}.rtl #adminmenu .wp-submenu .wp-submenu-head{border-right-color:none;border-left-color:#d1e5ee;}.rtl #adminmenu .wp-submenu-wrap,.rtl.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);box-shadow:-2px 2px 5px rgba(0,0,0,0.4);}.rtl #collapse-button div{background-position:0 -108px;}.rtl.folded #collapse-button div{background-position:0 -72px;}.rtl .meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows-vs.png) no-repeat 6px 7px;}.rtl .tablenav .tablenav-pages a{border-color:#d1e5ee;background:#eee url('../images/menu-bits-rtl-vs.gif?ver=20100610') repeat-x scroll right -379px;}.rtl #post-body .misc-pub-section{border-right-color:none;border-left-color:#d1e5ee;}.rtl .sidebar-name-arrow{background:transparent url(../images/arrows-vs.png) no-repeat 5px 9px;}.rtl .sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark-vs.png) no-repeat 5px 9px;} \ No newline at end of file +html,.wp-dialog{background-color:#fff}* html input,* html .widget{border-color:#dfdfdf}textarea,input[type="text"],input[type="password"],input[type="file"],input[type="button"],input[type="submit"],input[type="reset"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="url"],select{border-color:#dfdfdf;background-color:#fff;color:#333}select{color:#000}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="file"]:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="url"]:focus,select:focus{border-color:#d1e5ee}kbd,code{background:#eaeaea}input[readonly]{background-color:#eee}.find-box-search{border-color:#dfdfdf;background-color:#f1f1f1}.find-box{background-color:#f1f1f1}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#333}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#d1e5ee}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}#postcustomstuff table input,#postcustomstuff table textarea{border-color:#dfdfdf;background-color:#fff}.widefat{border-color:#d1e5ee;background-color:#fff}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fff}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fff}input.disabled,textarea.disabled{background-color:#ccc}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.widget .widget-top,.postbox h3,.stuffbox h3,.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head,.sidebar-name,#nav-menu-header,#nav-menu-footer,.menu-item-handle,#fullscreen-topbar{background-color:#f5fafd;background-image:-ms-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-moz-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-o-linear-gradient(top,#f7fcfe,#eff8ff);background-image:-webkit-gradient(linear,left top,left bottom,from(#f7fcfe),to(#eff8ff));background-image:-webkit-linear-gradient(top,#f7fcfe,#eff8ff);background-image:linear-gradient(top,#f7fcfe,#eff8ff)}.widget .widget-top,.postbox h3,.stuffbox h3{border-bottom-color:#d1e5ee;text-shadow:#fff 0 1px 0;-moz-box-shadow:0 1px 0 #fff;-webkit-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff}.form-table th,.form-wrap label{color:#222;text-shadow:#fff 0 1px 0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#21759b}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}.wrap h2{color:#174f69}.wrap .add-new-h2{background:#f1f1f1}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:#808080}.ac_results li{color:#101010}.alternate,.alt{background-color:#f7fcfe}.available-theme a.screenshot{background-color:#f1f1f1;border-color:#ddd}.bar{background-color:#e8e8e8;border-right-color:#99d}#media-upload,#media-upload .media-item .slidetoggle{background:#fff}#media-upload .slidetoggle{border-top-color:#dfdfdf}div.error,.login #login_error{background-color:#ffebe8;border-color:#c00}div.error a{color:#c00}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit,#commentsdiv #add-new-comment{border-color:#dfdfdf}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{background-color:#eff8ff;border-color:#d1e5ee}.ui-autocomplete li a.ui-state-hover{background-color:#def1ff}.post-com-count{background-image:url(../images/bubble_bg.gif);color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#d54e21}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}.button,.button-secondary,.submit input,input[type=button],input[type=submit]{border-color:#bbb;color:#464646}.button:hover,.button-secondary:hover,.submit input:hover,input[type=button]:hover,input[type=submit]:hover{color:#000;border-color:#666}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top;text-shadow:rgba(255,255,255,1) 0 1px 0}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top}input.button-primary,button.button-primary,a.button-primary{border-color:#298cba;font-weight:bold;color:#fff;background:#21759b url(../images/button-grad.png) repeat-x scroll left top;text-shadow:rgba(0,0,0,0.3) 0 -1px 0}input.button-primary:active,button.button-primary:active,a.button-primary:active{background:#21759b url(../images/button-grad-active.png) repeat-x scroll left top;color:#eaf2fa}input.button-primary:hover,button.button-primary:hover,a.button-primary:hover,a.button-primary:focus,a.button-primary:active{border-color:#13455b;color:#eaf2fa}.button-disabled,.button[disabled],.button:disabled,.button-secondary[disabled],.button-secondary:disabled,a.button.disabled{color:#aaa!important;border-color:#ddd!important}.button-primary-disabled,.button-primary[disabled],.button-primary:disabled{color:#9fd0d5!important;background:#298cba!important}a:hover,a:active,a:focus{color:#d54e21}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu ul.wp-submenu a:hover,#the-comment-list .comment a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover,.plugins .inactive a:hover,#all-plugins-table .plugins .inactive a:hover,#search-plugins-table .plugins .inactive a:hover{color:#d54e21}#the-comment-list .comment-item,#dashboard-widgets #dashboard_quick_press form p.submit{border-color:#dfdfdf}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}.submitbox .submit{background-color:#464646;color:#ccc}.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete{color:#f00;border-bottom-color:#f00}.submitbox .submitdelete:hover,#media-items a.delete:hover{color:#fff;background-color:#f00;border-bottom-color:#f00}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:#f00;border-bottom-color:#f00}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#21759b}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#d54e21}div.updated,.login .message{background-color:#ffffe0;border-color:#e6db55}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{border-top-color:#fff;border-bottom-color:#d0dfe9}.widefat th{text-shadow:rgba(255,255,255,0.8) 0 1px 0}.widefat td{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head{color:#333}th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#adminmenu a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,.plugins a.delete,.ui-tabs-nav a{color:#21759b}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0}#plugin-information .action-button{background-color:#d54e21;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}#dashboard_secondary div.dashboard-widget-content ul li a{background-color:#f9f9f9}input.readonly,textarea.readonly{background-color:#ddd}.quicktags-toolbar input{background:#fff;background-image:-ms-linear-gradient(bottom,#e5f0f8,#fff);background-image:-moz-linear-gradient(bottom,#e5f0f8,#fff);background-image:-o-linear-gradient(bottom,#e5f0f8,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#e5f0f8),to(#fff));background-image:-webkit-linear-gradient(bottom,#e5f0f8,#fff)!important;background-image:linear-gradient(bottom,#e5f0f8,#fff)}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.login #nav a,.login #backtoblog a{color:#21759b!important}.login #nav a:hover,.login #backtoblog a:hover{color:#d54e21!important}#footer{color:#777;border-color:#b0c8d7}#media-items .media-item,.media-item .describe,.imgedit-group{border-color:#dfdfdf}.checkbox,.side-info,.plugins tr,#your-profile #rich_editing{background-color:#fcfcfc}.plugins .inactive,.plugins .inactive th,.plugins .inactive td,tr.inactive+tr.plugin-update-tr .plugin-update{background-color:#f4f4f4}.plugin-update-tr .update-message{background-color:#fffbe4;border-color:#dfdfdf}.plugins .active,.plugins .active th,.plugins .active td{color:#000}.plugins .inactive a{color:#579}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved{background-color:#ffffe0}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,#dashboard_recent_comments .delete a,#dashboard_recent_comments .trash a,#dashboard_recent_comments .spam a{color:#bc0b0b}.welcome-panel{border-color:#d1e5ee}.welcome-panel p{color:#777}.welcome-panel-column p{color:#464646}.welcome-panel h3{text-shadow:1px 1px 1px white}.widget,#widget-list .widget-top,.postbox,#titlediv,#poststuff .postarea,.stuffbox{border-color:#d1e5ee;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;-webkit-border-radius:3px;border-radius:3px}.widget,#widget-list .widget-top,.postbox,.menu-item-settings{background-color:#f7fcfe}.postbox h3{color:#174f69}.widget .widget-top{color:#174f69}.sidebar-name:hover h3,.postbox h3:hover{color:#000}.curtime #timestamp{background-image:url(../images/date-button.gif)}#quicktags #ed_link{color:#00f}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}.tagchecklist span a,#bulk-titles div a{background:url(../images/xit.gif) no-repeat}.tagchecklist span a:hover,#bulk-titles div a:hover{background:url(../images/xit.gif) no-repeat -10px 0}#update-nag,.update-nag{background-color:#fffbcc;border-color:#e6db55;color:#555}.login #backtoblog a{color:#464646}#wphead{border-bottom:#d0dfe9 1px solid}#wphead h1 a{color:#174f69}#footer a:link,#footer a:visited{text-decoration:none}#footer a:hover{color:#000;text-decoration:underline}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover,#dashboard_recent_comments .delete a:hover,#dashboard_recent_comments .trash a:hover #dashboard_recent_comments .spam a:hover{color:#f00}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#quicktags{border-color:#cfdfe9;background-color:#cfdfe9;background-image:url("../images/ed-bg-vs.gif?ver=20101102")}.quicktags-toolbar input{border-color:#b2c4c8}.quicktags-toolbar input:hover{border-color:#d0dfe9;background:#f0f8fe}#poststuff .wp-editor-wrap .wp_themeSkin .mceStatusbar{border-color:#d0dfe9}#poststuff .wp-editor-wrap .wp_themeSkin .mceStatusbar *{color:#555}#poststuff #editor-toolbar .active{border-color:#d0dfe9 #d0dfe9 #eff8ff;background-color:#eff8ff;color:#333}#post-status-info{background-color:#eff8ff}.wp-editor-wrap .wp_themeSkin *,.wp-editor-wrap .wp_themeSkin a:hover,.wp-editor-wrap .wp_themeSkin a:link,.wp-editor-wrap .wp_themeSkin a:visited,.wp-editor-wrap .wp_themeSkin a:active{color:#000}.wp-editor-wrap .wp_themeSkin table.mceLayout{border-color:#bed1dd #bed1dd #d0dfe9}#editorcontainer #content,#editorcontainer .wp-editor-wrap .wp_themeSkin .mceIframeContainer{-moz-box-shadow:inset 1px 1px 2px rgba(0,0,0,0.1);-webkit-box-shadow:inset 1px 1px 2px rgba(0,0,0,0.1);box-shadow:inset 1px 1px 2px rgba(0,0,0,0.1)}.wp-editor-wrap .wp_themeSkin iframe{background:transparent}.wp-editor-wrap .wp_themeSkin .mceStatusbar{color:#000;background-color:#f5f5f5}.wp-editor-wrap .wp_themeSkin .mceButton{border-color:#b0c8d7;background-color:#cfdfe9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff)}.wp-editor-wrap .wp_themeSkin a.mceButtonEnabled:hover{border-color:#5589aa!important;background-color:#c9c9c9;background-image:-ms-linear-gradient(bottom,#bdccd5,#fff);background-image:-moz-linear-gradient(bottom,#bdccd5,#fff);background-image:-o-linear-gradient(bottom,#bdccd5,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#bdccd5),to(#fff));background-image:-webkit-linear-gradient(bottom,#bdccd5,#fff)!important;background-image:linear-gradient(bottom,#bdccd5,#fff)}.wp-editor-wrap .wp_themeSkin a.mceButton:active,.wp-editor-wrap .wp_themeSkin a.mceButtonEnabled:active,.wp-editor-wrap .wp_themeSkin a.mceButtonSelected:active,.wp-editor-wrap .wp_themeSkin a.mceButtonActive,.wp-editor-wrap .wp_themeSkin a.mceButtonActive:active,.wp-editor-wrap .wp_themeSkin a.mceButtonActive:hover{background:#b0c8d7!important;background-image:-ms-linear-gradient(bottom,#fff,#cfdfe9);background-image:-moz-linear-gradient(bottom,#fff,#cfdfe9);background-image:-o-linear-gradient(bottom,#fff,#cfdfe9);background-image:-webkit-gradient(linear,left bottom,left top,from(#fff),to(#cfdfe9));background-image:-webkit-linear-gradient(bottom,#fff,#cfdfe9)!important;background-image:linear-gradient(bottom,#fff,#cfdfe9);border-color:#5589aa!important}.wp-editor-wrap .wp_themeSkin .mceButtonDisabled{border-color:#b0c8d7!important}.wp-editor-wrap .wp_themeSkin .mceListBox .mceText,.wp-editor-wrap .wp_themeSkin .mceListBox .mceOpen{border-color:#b0c8d7;background-color:#cfdfe9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff)}.wp-editor-wrap .wp_themeSkin .mceListBox .mceOpen{border-left:0!important}.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxHover .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxHover:active .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxSelected .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxSelected .mceText,.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:active .mceText{background:#b0c8d7;border-color:#5589aa!important}.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:hover .mceText,.wp-editor-wrap .wp_themeSkin .mceListBoxHover .mceText,.wp-editor-wrap .wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp-editor-wrap .wp_themeSkin .mceListBoxHover .mceOpen{border-color:#5589aa!important;background-color:#c9c9c9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff)}.wp-editor-wrap .wp_themeSkin select.mceListBox{border-color:#b2b2b2;background-color:#fff}.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceAction,.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceOpen{border-color:#b0c8d7}.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceOpen:hover,.wp-editor-wrap .wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp-editor-wrap .wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction,.wp-editor-wrap .wp_themeSkin .mceSplitButton a.mceAction:hover{border-color:#5589aa!important}.wp-editor-wrap .wp_themeSkin table.mceSplitButton td{background-color:#cfdfe9;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff)}.wp-editor-wrap .wp_themeSkin table.mceSplitButton:hover td{background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff)!important;background-image:linear-gradient(bottom,#cfdfe9,#fff)}.wp-editor-wrap .wp_themeSkin .mceSplitButtonActive{background-color:#b0c8d7}.wp-editor-wrap .wp_themeSkin div.mceColorSplitMenu table{background-color:#ebebeb;border-color:#b2b2b2}.wp-editor-wrap .wp_themeSkin .mceColorSplitMenu a{border-color:#b2b2b2}.wp-editor-wrap .wp_themeSkin .mceColorSplitMenu a.mceMoreColors{border-color:#fff}.wp-editor-wrap .wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover{border-color:#0a246a;background-color:#b6bdd2}.wp-editor-wrap .wp_themeSkin a.mceMoreColors:hover{border-color:#0a246a}.wp-editor-wrap .wp_themeSkin .mceMenu{border-color:#ddd}.wp-editor-wrap .wp_themeSkin .mceMenu table{background-color:#ebeaeb}.wp-editor-wrap .wp_themeSkin .mceMenu .mceText{color:#000}.wp-editor-wrap .wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover,.wp-editor-wrap .wp_themeSkin .mceMenu .mceMenuItemActive{background-color:#f5f5f5}.wp-editor-wrap .wp_themeSkin td.mceMenuItemSeparator{background-color:#aaa}.wp-editor-wrap .wp_themeSkin .mceMenuItemTitle a{background-color:#ccc;border-bottom-color:#aaa}.wp-editor-wrap .wp_themeSkin .mceMenuItemTitle span.mceText{color:#000}.wp-editor-wrap .wp_themeSkin .mceMenuItemDisabled .mceText{color:#888}.wp-editor-wrap .wp_themeSkin tr.mceFirst td.mceToolbar{background:#cfdfe9 url("../images/ed-bg-vs.gif?ver=20101102") repeat-x scroll left top;border-color:#cfdfe9}.wp-admin #mceModalBlocker{background:#000}.wp-admin .clearlooks2 .mceFocus .mceTop .mceLeft{background:#444;border-left:1px solid #999;border-top:1px solid #999;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.wp-admin .clearlooks2 .mceFocus .mceTop .mceRight{background:#444;border-right:1px solid #999;border-top:1px solid #999;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.wp-admin .clearlooks2 .mceMiddle .mceLeft{background:#f1f1f1;border-left:1px solid #999}.wp-admin .clearlooks2 .mceMiddle .mceRight{background:#f1f1f1;border-right:1px solid #999}.wp-admin .clearlooks2 .mceBottom{background:#f1f1f1;border-bottom:1px solid #999}.wp-admin .clearlooks2 .mceBottom .mceLeft{background:#f1f1f1;border-bottom:1px solid #999;border-left:1px solid #999}.wp-admin .clearlooks2 .mceBottom .mceCenter{background:#f1f1f1;border-bottom:1px solid #999}.wp-admin .clearlooks2 .mceBottom .mceRight{background:#f1f1f1;border-bottom:1px solid #999;border-right:1px solid #999}.wp-admin .clearlooks2 .mceFocus .mceTop span{color:#e5e5e5}.wp-editor-wrap .wp-switch-editor{background-color:#f5fafd;border-color:#d1e5ee #d1e5ee #d1e5ee;color:#999}.wp-editor-wrap.tmce-active .switch-tmce,.wp-editor-wrap.html-active .switch-html{background-color:#eff8ff;border-color:#d1e5ee #d1e5ee #eff8ff;color:#333}.wp-editor-wrap.quicktags-toolbar input{color:#464646;border-color:#d1e5ee;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#eff8ff,#fff);background-image:-moz-linear-gradient(bottom,#eff8ff,#fff);background-image:-o-linear-gradient(bottom,#eff8ff,#fff);background-image:-webkit-linear-gradient(bottom,#eff8ff,#fff);background-image:linear-gradient(bottom,#eff8ff,#fff)}.wp-editor-wrap .quicktags-toolbar,.wp-editor-wrap.wp_themeSkin tr.mceFirst td.mceToolbar{border-bottom:1px solid #ccc;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:-o-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:-webkit-linear-gradient(bottom,#cfdfe9,#eff8ff);background-image:linear-gradient(bottom,#cfdfe9,#eff8ff)}.wp-editor-wrap .quicktags-toolbar input:hover{border-color:#aaa;background:#ddd}.wp-editor-wrap.wp_themeSkin .mceButton,.wp-editor-wrap.wp_themeSkin .mceListBox .mceText,.wp-editor-wrap.wp_themeSkin .mceListBox .mceOpen{border-color:#ccc;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#eff8ff,#fff);background-image:-moz-linear-gradient(bottom,#eff8ff,#fff);background-image:-o-linear-gradient(bottom,#eff8ff,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#eff8ff),to(#fff));background-image:-webkit-linear-gradient(bottom,#eff8ff,#fff);background-image:linear-gradient(bottom,#eff8ff,#fff)}.wp-editor-wrap.wp_themeSkin a.mceButtonEnabled:hover{border-color:#a0a0a0;background:#ddd;background-image:-ms-linear-gradient(bottom,#cfdfe9,#fff);background-image:-moz-linear-gradient(bottom,#cfdfe9,#fff);background-image:-o-linear-gradient(bottom,#cfdfe9,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#cfdfe9),to(#fff));background-image:-webkit-linear-gradient(bottom,#cfdfe9,#fff);background-image:linear-gradient(bottom,#cfdfe9,#fff)}#titlediv #title{border-color:#bdccd5}#editorcontainer{border-color:#bdccd5 #bdccd5 #d0dfe9}#post-status-info{border-color:#d0dfe9 #bdccd5 #bdccd5}.editwidget .widget-inside{border-color:#d0dfe9}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#timestampdiv input,#namediv input,#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap{background-color:#eff8ff;border-color:#d1e5ee}#adminmenushadow,#adminmenuback{background-image:url(../images/menu-shadow.png);background-position:top right;background-repeat:repeat-y}#adminmenu li.wp-menu-separator{background:#d1e5ee;border-color:#bed1dd}#adminmenu div.separator{border-color:#d1e5ee}#adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,#adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark-vs.png) no-repeat -1px 6px}#adminmenu .wp-has-submenu:hover .wp-menu-toggle,#adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows-vs.png) no-repeat -2px 6px}#adminmenu a.menu-top,.folded #adminmenu li.menu-top,#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#fff;border-bottom-color:#cae6ff}#adminmenu li.wp-menu-open{border-color:#d1e5ee}#adminmenu li.menu-top:hover>a,#adminmenu li.menu-top.focused>a,#adminmenu li.menu-top>a:focus{background-color:#e0f1ff;text-shadow:0 1px 0 rgba(255,255,255,0.4)}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:#5589aa;background-image:-ms-linear-gradient(bottom,#5589aa,#619bbb);background-image:-moz-linear-gradient(bottom,#5589aa,#619bbb);background-image:-o-linear-gradient(bottom,#5589aa,#619bbb);background-image:-webkit-gradient(linear,left bottom,left top,from(#5589aa),to(#619bbb));background-image:-webkit-linear-gradient(bottom,#5589aa,#619bbb);background-image:linear-gradient(bottom,#5589aa,#619bbb)}#adminmenu .wp-menu-arrow div{background-color:#5589aa;background-image:-ms-linear-gradient(right bottom,#5589aa,#619bbb);background-image:-moz-linear-gradient(right bottom,#5589aa,#619bbb);background-image:-o-linear-gradient(right bottom,#5589aa,#619bbb);background-image:-webkit-gradient(linear,right bottom,left top,from(#5589aa),to(#619bbb));background-image:-webkit-linear-gradient(right bottom,#5589aa,#619bbb);background-image:linear-gradient(right bottom,#5589aa,#619bbb)}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#fff;border-bottom-color:#cae6ff;background:#e0f1ff}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#e0f1ff;border-color:#cae6ff}.folded #adminmenu li.menu-top li:hover a{background-image:none}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{text-shadow:0 -1px 0 #333;color:#fff;border-top-color:#5a8fad;border-bottom-color:#5589aa}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-top-color:#5a8fad;border-bottom-color:#5589aa}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus{background-color:#eff8ff;color:#333}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover{color:#333}#adminmenu .wp-submenu ul{background-color:#fff}#adminmenu .wp-submenu-wrap,#adminmenu .wp-submenu ul{border-color:#d0dfe9}#adminmenu .wp-submenu-wrap,.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,0.4);box-shadow:2px 2px 5px rgba(0,0,0,0.4)}#adminmenu .wp-submenu .wp-submenu-head{border-right-color:#e8eff4;background-color:#eff8ff}#adminmenu div.wp-submenu{background-color:transparent}#collapse-menu{color:#a0c3d5}#collapse-menu:hover{color:#5a8fad}#collapse-button{border-color:#d0dfe9;background-color:#eff8ff;background-image:-ms-linear-gradient(bottom,#eff8ff,#fff);background-image:-moz-linear-gradient(bottom,#eff8ff,#fff);background-image:-o-linear-gradient(bottom,#eff8ff,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#eff8ff),to(#fff));background-image:-webkit-linear-gradient(bottom,#eff8ff,#fff);background-image:linear-gradient(bottom,#eff8ff,#fff)}#collapse-menu:hover #collapse-button{border-color:#a0c3d5}#collapse-button div{background:transparent url(../images/arrows-vs.png) no-repeat 0 -72px}.folded #collapse-button div{background-position:0 -108px}@media only screen and (max-width:900px){#adminmenu li.menu-top{border-top-color:#fff;border-bottom-color:#cae6ff}#adminmenu li.wp-has-current-submenu,#adminmenu li.current.menu-top{background-color:#5589aa;background-image:-ms-linear-gradient(bottom,#5589aa,#619bbb);background-image:-moz-linear-gradient(bottom,#5589aa,#619bbb);background-image:-o-linear-gradient(bottom,#5589aa,#619bbb);background-image:-webkit-gradient(linear,left bottom,left top,from(#5589aa),to(#619bbb));background-image:-webkit-linear-gradient(bottom,#5589aa,#619bbb);background-image:linear-gradient(bottom,#5589aa,#619bbb)}#adminmenu li.menu-top li:hover a{background-image:none}#adminmenu li.wp-has-current-submenu,#adminmenu li.current.menu-top{border-top-color:#5a8fad;border-bottom-color:#5589aa}#adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,0.4);box-shadow:2px 2px 5px rgba(0,0,0,0.4)}#collapse-button div{background-position:0 -108px}}.icon16,.icon32,div.wp-menu-image{background-color:transparent;background-repeat:no-repeat}.icon16.icon-dashboard,.menu-icon-dashboard div.wp-menu-image,.icon16.icon-post,.menu-icon-post div.wp-menu-image,.icon16.icon-media,.menu-icon-media div.wp-menu-image,.icon16.icon-links,.menu-icon-links div.wp-menu-image,.icon16.icon-page,.menu-icon-page div.wp-menu-image,.icon16.icon-comments,.menu-icon-comments div.wp-menu-image,.icon16.icon-appearance,.menu-icon-appearance div.wp-menu-image,.icon16.icon-plugins,.menu-icon-plugins div.wp-menu-image,.icon16.icon-users,.menu-icon-users div.wp-menu-image,.icon16.icon-tools,.menu-icon-tools div.wp-menu-image,.icon16.icon-settings,.menu-icon-settings div.wp-menu-image,.icon16.icon-site,.menu-icon-site div.wp-menu-image{background-image:url('../images/menu-vs.png?ver=20120201')}.icon16.icon-dashboard,#adminmenu .menu-icon-dashboard div.wp-menu-image{background-position:-59px -33px}#adminmenu .menu-icon-dashboard:hover div.wp-menu-image,#adminmenu .menu-icon-dashboard.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-dashboard.current div.wp-menu-image{background-position:-59px -1px}.icon16.icon-post,#adminmenu .menu-icon-post div.wp-menu-image{background-position:-269px -33px}#adminmenu .menu-icon-post:hover div.wp-menu-image,#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-post.current div.wp-menu-image{background-position:-269px -1px}.icon16.icon-media,#adminmenu .menu-icon-media div.wp-menu-image{background-position:-119px -33px}#adminmenu .menu-icon-media:hover div.wp-menu-image,#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-media.current div.wp-menu-image{background-position:-119px -1px}.icon16.icon-links,#adminmenu .menu-icon-links div.wp-menu-image{background-position:-89px -33px}#adminmenu .menu-icon-links:hover div.wp-menu-image,#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-links.current div.wp-menu-image{background-position:-89px -1px}.icon16.icon-page,#adminmenu .menu-icon-page div.wp-menu-image{background-position:-149px -33px}#adminmenu .menu-icon-page:hover div.wp-menu-image,#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-page.current div.wp-menu-image{background-position:-149px -1px}.icon16.icon-comments,#adminmenu .menu-icon-comments div.wp-menu-image{background-position:-29px -33px}#adminmenu .menu-icon-comments:hover div.wp-menu-image,#adminmenu .menu-icon-comments.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-comments.current div.wp-menu-image{background-position:-29px -1px}.icon16.icon-appearance,#adminmenu .menu-icon-appearance div.wp-menu-image{background-position:1px -33px}#adminmenu .menu-icon-appearance:hover div.wp-menu-image,#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-appearance.current div.wp-menu-image{background-position:1px -1px}.icon16.icon-plugins,#adminmenu .menu-icon-plugins div.wp-menu-image{background-position:-179px -33px}#adminmenu .menu-icon-plugins:hover div.wp-menu-image,#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-plugins.current div.wp-menu-image{background-position:-179px -1px}.icon16.icon-users,#adminmenu .menu-icon-users div.wp-menu-image{background-position:-300px -33px}#adminmenu .menu-icon-users:hover div.wp-menu-image,#adminmenu .menu-icon-users.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-users.current div.wp-menu-image{background-position:-300px -1px}.icon16.icon-tools,#adminmenu .menu-icon-tools div.wp-menu-image{background-position:-209px -33px}#adminmenu .menu-icon-tools:hover div.wp-menu-image,#adminmenu .menu-icon-tools.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-tools.current div.wp-menu-image{background-position:-209px -1px}.icon16.icon-settings,#adminmenu .menu-icon-settings div.wp-menu-image{background-position:-239px -33px}#adminmenu .menu-icon-settings:hover div.wp-menu-image,#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-settings.current div.wp-menu-image{background-position:-239px -1px}.icon16.icon-site,#adminmenu .menu-icon-site div.wp-menu-image{background-position:-359px -33px}#adminmenu .menu-icon-site:hover div.wp-menu-image,#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-site.current div.wp-menu-image{background-position:-359px -1px}.icon32.icon-post,#icon-edit,#icon-post,.icon32.icon-dashboard,#icon-index,.icon32.icon-media,#icon-upload,.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category,.icon32.icon-page,#icon-edit-pages,#icon-page,.icon32.icon-comments,#icon-edit-comments,.icon32.icon-appearance,#icon-themes,.icon32.icon-plugins,#icon-plugins,.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit,.icon32.icon-tools,#icon-tools,#icon-admin,.icon32.icon-settings,#icon-options-general,.icon32.icon-site,#icon-ms-admin{background-image:url(../images/icons32-vs.png?ver=20111206)}.icon32.icon-post,#icon-edit,#icon-post{background-position:-552px -5px}.icon32.icon-dashboard,#icon-index{background-position:-137px -5px}.icon32.icon-media,#icon-upload{background-position:-251px -5px}.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category{background-position:-190px -5px}.icon32.icon-page,#icon-edit-pages,#icon-page{background-position:-312px -5px}.icon32.icon-comments,#icon-edit-comments{background-position:-72px -5px}.icon32.icon-appearance,#icon-themes{background-position:-11px -5px}.icon32.icon-plugins,#icon-plugins{background-position:-370px -5px}.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit{background-position:-600px -5px}.icon32.icon-tools,#icon-tools,#icon-admin{background-position:-432px -5px}.icon32.icon-settings,#icon-options-general{background-position:-492px -5px}.icon32.icon-site,#icon-ms-admin{background-position:-659px -5px}@media only screen and (-webkit-min-device-pixel-ratio:1.5){.icon32.icon-post,#icon-edit,#icon-post,.icon32.icon-dashboard,#icon-index,.icon32.icon-media,#icon-upload,.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category,.icon32.icon-page,#icon-edit-pages,#icon-page,.icon32.icon-comments,#icon-edit-comments,.icon32.icon-appearance,#icon-themes,.icon32.icon-plugins,#icon-plugins,.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit,.icon32.icon-tools,#icon-tools,#icon-admin,.icon32.icon-settings,#icon-options-general,.icon32.icon-site,#icon-ms-admin{background-image:url(../images/icons32-vs-2x.png?ver=20120412);background-size:708px 45px}.icon16.icon-dashboard,.menu-icon-dashboard div.wp-menu-image,.icon16.icon-post,.menu-icon-post div.wp-menu-image,.icon16.icon-media,.menu-icon-media div.wp-menu-image,.icon16.icon-links,.menu-icon-links div.wp-menu-image,.icon16.icon-page,.menu-icon-page div.wp-menu-image,.icon16.icon-comments,.menu-icon-comments div.wp-menu-image,.icon16.icon-appearance,.menu-icon-appearance div.wp-menu-image,.icon16.icon-plugins,.menu-icon-plugins div.wp-menu-image,.icon16.icon-users,.menu-icon-users div.wp-menu-image,.icon16.icon-tools,.menu-icon-tools div.wp-menu-image,.icon16.icon-settings,.menu-icon-settings div.wp-menu-image,.icon16.icon-site,.menu-icon-site div.wp-menu-image{background-image:url('../images/menu-2x.png?ver=20120412');background-size:390px 64px}}table.diff .diff-deletedline{background-color:#fdd}table.diff .diff-deletedline del{background-color:#f99}table.diff .diff-addedline{background-color:#dfd}table.diff .diff-addedline ins{background-color:#9f9}#att-info{background-color:#e4f2fd}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#fff;border-color:#dfdfdf #dfdfdf #fff;color:#d54e21}#screen-meta{background-color:#eff8ff;border-color:#d1e5ee;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.05);box-shadow:0 1px 3px rgba(0,0,0,0.05)}#contextual-help-back{background:#fff}.contextual-help-tabs a:hover{background-color:#ceeaff;color:#333}#contextual-help-back,.contextual-help-tabs .active{border-color:#d1e5ee}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#fff;color:#000}#screen-options-link-wrap,#contextual-help-link-wrap{background-color:#eff8ff;border-right:1px solid #d1e5ee;border-left:1px solid #d1e5ee;border-bottom:1px solid #d1e5ee;background-image:-ms-linear-gradient(bottom,#eff8ff,#eff8ff);background-image:-moz-linear-gradient(bottom,#def1ff,#eff8ff);background-image:-o-linear-gradient(bottom,#def1ff,#eff8ff);background-image:-webkit-gradient(linear,left bottom,left top,from(#def1ff),to(#eff8ff));background-image:-webkit-linear-gradient(bottom,#def1ff,#eff8ff);background-image:linear-gradient(bottom,#def1ff,#eff8ff)}#screen-meta-links a.show-settings{color:#606060}#screen-meta-links a.show-settings:hover{color:#000}#screen-meta-links a.show-settings{background:transparent url(../images/arrows-vs.png) no-repeat right 4px}#screen-meta-links a.show-settings.screen-meta-active{background:transparent url(../images/arrows-vs.png) no-repeat right -31px}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#e4f2fd!important}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border:1px solid #ccc}.inline-edit-row fieldset input[type="text"],.inline-edit-row fieldset textarea,#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .categories .catshow,.inline-editor .categories .cathide{color:#21759b}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#d54e21}.meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows-vs.png) no-repeat 6px 7px}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{border-color:#d1e5ee;background:#eee url('../images/menu-bits-vs.gif?ver=20101102') repeat-x scroll left -379px}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#d54e21}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{border-top-color:#fff;border-bottom-color:#eee}#minor-publishing{border-bottom-color:#ddd}#post-body .misc-pub-section{border-left-color:#eee}.post-com-count span{background-color:#bbb}.form-table .color-palette td{border-color:#fff}.sortable-placeholder{border-color:#bbb;background-color:#f5f5f5}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch #view-switch-list{background:transparent url(../images/list.png) no-repeat 0 0}.view-switch .current #view-switch-list{background:transparent url(../images/list.png) no-repeat -40px 0}.view-switch #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -20px 0}.view-switch .current #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -60px 0}#header-logo{background:transparent url(../images/wp-logo-vs.png?ver=20101102) no-repeat scroll center center}.popular-tags,.feature-filter{background-color:#fff;border-color:#dfdfdf}div.widgets-sortables,#widgets-left .inactive{background-color:#f7fcfe;border-color:#d0dfe9}#available-widgets .widget-holder{background-color:#f7fcfe;border-color:#d0dfe9}#available-widgets .widget-description{color:#555}.sidebar-name{color:#464646;background-color:#f7fcfe;background-image:-ms-linear-gradient(top,#ecf8fe,#f7fcfe);background-image:-moz-linear-gradient(top,#ecf8fe,#f7fcfe);background-image:-o-linear-gradient(top,#ecf8fe,#f7fcfe);background-image:-webkit-gradient(linear,left top,left bottom,from(#ecf8fe),to(#f7fcfe));background-image:-webkit-linear-gradient(top,#ecf8fe,#f7fcfe);background-image:linear-gradient(top,#ecf8fe,#f7fcfe);text-shadow:#fff 0 1px 0;border-color:#d0dfe9;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.sidebar-name:hover,#removing-widget{color:#d54e21}#removing-widget span{color:black}.sidebar-name-arrow{background:transparent url(../images/arrows-vs.png) no-repeat 5px 9px}.sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark-vs.png) no-repeat 5px 9px}.in-widget-title{color:#606060}.deleting .widget-title *{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#dashboard_recent_comments div.undo{border-top-color:#dfdfdf}.comment-ays,.comment-ays th{border-color:#ddd}.comment-ays th{background-color:#f1f1f1}#menu-management .menu-edit{border-color:#d0dfe9}#post-body{background:#fff;border-top-color:#fff;border-bottom-color:#d0dfe9}#nav-menu-header{border-bottom-color:#d0dfe9}#nav-menu-footer{border-top-color:#fff}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#d54e21}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#f7fcfe;border-color:#d0dfe9}.js .input-with-default-title{color:#aaa}#cancel-save{color:#f00}#cancel-save:hover{background-color:#f00;color:#fff}.list-container{border-color:#dfdfdf}.menu-item-handle{border-color:#d0dfe9}.menu li.deleting .menu-item-handle{background-color:#f66;text-shadow:#ccc}.item-type{color:#999}.item-controls .menu-item-delete:hover{color:#f00}.nav-menus-php .item-edit{background:transparent url(../images/arrows-vs.png) no-repeat 8px 10px;border-bottom-color:#eff8ff}.item-edit:hover{background:transparent url(../images/arrows-dark-vs.png) no-repeat 8px 10px}.menu-item-settings{border-color:#d0dfe9}.link-to-original{color:#777;border-color:#d0dfe9}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#21759b;border-bottom-color:#21759b}.submitbox .submitcancel:hover{background:#21759b;color:#fff}#menu-management .nav-tab-active,.menu-item-handle,.menu-item-settings{-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}#menu-management .nav-tab-active{background:#eff8ff;border-bottom-color:#eff8ff}#upload-form label{color:#777}.fullscreen-overlay{background:#fff}.wp-fullscreen-focus #wp-fullscreen-title,.wp-fullscreen-focus #wp-fullscreen-container{border-color:#bed1dd}#fullscreen-topbar{border-bottom-color:#d1e5ee}.about-wrap h1{color:#333;text-shadow:1px 1px 1px white}.about-text{color:#777}.wp-badge{color:#fff;text-shadow:0 -1px 0 rgba(22,57,81,0.3)}.about-wrap h2 .nav-tab{color:#21759b}.about-wrap h2 .nav-tab:hover{color:#d54e21}.about-wrap h2 .nav-tab-active,.about-wrap h2 .nav-tab-active:hover{color:#333}.about-wrap h2 .nav-tab-active{text-shadow:1px 1px 1px white;color:#464646}.about-wrap h3{color:#333;text-shadow:1px 1px 1px white}.about-wrap .feature-section h4{color:#464646}.about-wrap .feature-section img{background:#fff;border:1px #ccc solid;-moz-box-shadow:0 1px 3px rgba(0,0,0,0.3);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.3);box-shadow:0 1px 3px rgba(0,0,0,0.3)}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top:1px solid #dfdfdf}.about-wrap .point-releases h3:first-child{border:0}.about-wrap h4.wp-people-group{text-shadow:1px 1px 1px white}.about-wrap li.wp-person img.gravatar{-moz-box-shadow:0 0 4px rgba(0,0,0,0.4);-webkit-box-shadow:0 0 4px rgba(0,0,0,0.4);box-shadow:0 0 4px rgba(0,0,0,0.4)}.about-wrap li.wp-person .title{color:#464646;text-shadow:1px 1px 1px white}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.rtl .bar{border-right-color:none;border-left-color:#99d}.rtl .post-com-count{background-image:url(../images/bubble_bg-rtl.gif)}.rtl #screen-meta-links a.show-settings{background-position:left 3px}.rtl #screen-meta-links a.show-settings.screen-meta-active{background-position:left -33px}.rtl #adminmenushadow,.rtl #adminmenuback{background-image:url(../images/menu-shadow-rtl.png);background-position:top left}.rtl #adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,.rtl #adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark-vs.png) no-repeat 8px 6px}.rtl #adminmenu .wp-has-submenu:hover .wp-menu-toggle,.rtl #adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows-vs.png) no-repeat 8px 6px}.rtl #adminmenu .wp-submenu .wp-submenu-head{border-right-color:none;border-left-color:#d1e5ee}.rtl #adminmenu .wp-submenu-wrap,.rtl.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);box-shadow:-2px 2px 5px rgba(0,0,0,0.4)}.rtl #collapse-button div{background-position:0 -108px}.rtl.folded #collapse-button div{background-position:0 -72px}@media only screen and (max-width:900px){.rtl #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);box-shadow:-2px 2px 5px rgba(0,0,0,0.4)}.rtl #collapse-button div{background-position:0 -72px}}.rtl .meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows-vs.png) no-repeat 6px 7px}.rtl .tablenav .tablenav-pages a{border-color:#d1e5ee;background:#eee url('../images/menu-bits-rtl-vs.gif?ver=20100610') repeat-x scroll right -379px}.rtl #post-body .misc-pub-section{border-right-color:none;border-left-color:#d1e5ee}.rtl .sidebar-name-arrow{background:transparent url(../images/arrows-vs.png) no-repeat 5px 9px}.rtl .sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark-vs.png) no-repeat 5px 9px} \ No newline at end of file diff --git a/wp-admin/css/colors-classic.dev.css b/wp-admin/css/colors-classic.dev.css index 3c71473c9..b70e35df9 100644 --- a/wp-admin/css/colors-classic.dev.css +++ b/wp-admin/css/colors-classic.dev.css @@ -45,6 +45,27 @@ input[type="url"], select { border-color: #dfdfdf; background-color: #fff; + color: #333; +} + +select { + color: #000; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="file"]:focus, +input[type="button"]:focus, +input[type="submit"]:focus, +input[type="reset"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +select:focus { + border-color: #d1e5ee; } kbd, @@ -75,7 +96,8 @@ a.page-numbers:hover { body, #wpbody, -.form-table .pre { +.form-table .pre, +.ui-autocomplete li a { color: #333; } @@ -136,6 +158,10 @@ div.dashboard-widget-submit { border-top-color: #ccc; } +ul.category-tabs li { + border-color: transparent; +} + div.tabs-panel, .wp-tab-panel, ul.category-tabs li.tabs, @@ -287,8 +313,9 @@ div.error a { border-color: #c00 !important; } -.submit { - border-color: #DFDFDF; +.submit, +#commentsdiv #add-new-comment { + border-color: #dfdfdf; } .highlight { @@ -309,6 +336,15 @@ td.help { color: #9a9a9a; } +.ui-autocomplete { + background-color: #eff8ff; + border-color: #d1e5ee; +} + +.ui-autocomplete li a.ui-state-hover { + background-color: #def1ff; +} + .post-com-count { background-image: url(../images/bubble_bg.gif); color: #fff; @@ -1002,7 +1038,6 @@ table.widefat .spam a:hover, border-color: #5589AA !important; } - .wp-editor-wrap .wp_themeSkin table.mceSplitButton td { background-color: #cfdfe9; /* Fallback */ background-image: -ms-linear-gradient(bottom, #cfdfe9, #fff); /* IE10 */ @@ -1408,203 +1443,381 @@ table.widefat .spam a:hover, background-position: 0 -108px; } +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + #adminmenu li.menu-top { + border-top-color: #ffffff; + border-bottom-color: #cae6ff; + } + + #adminmenu li.wp-has-current-submenu, + #adminmenu li.current.menu-top { + background-color: #5589AA; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #5589AA, #619bbb); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #5589AA, #619bbb); /* Firefox */ + background-image: -o-linear-gradient(bottom, #5589AA, #619bbb); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#5589AA), to(#619bbb)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #5589AA, #619bbb); /* new Webkit */ + background-image: linear-gradient(bottom, #5589AA, #619bbb); /* proposed W3C Markup */ + } + + #adminmenu li.menu-top li:hover a { + background-image: none; + } + + #adminmenu li.wp-has-current-submenu, + #adminmenu li.current.menu-top { + border-top-color: #5A8FAD; + border-bottom-color: #5589AA; + } + + #adminmenu .wp-has-current-submenu .wp-submenu-wrap { + -moz-box-shadow: 2px 2px 5px rgba( 0, 0, 0, 0.4 ); + -webkit-box-shadow: 2px 2px 5px rgba( 0, 0, 0, 0.4 ); + box-shadow: 2px 2px 5px rgba( 0, 0, 0, 0.4 ); + } + + #collapse-button div { + background-position: 0 -108px; + } +} + /* menu and screen icons */ +.icon16, +.icon32, +div.wp-menu-image { + background-color: transparent; + background-repeat: no-repeat; +} + +.icon16.icon-dashboard, +.menu-icon-dashboard div.wp-menu-image, +.icon16.icon-post, +.menu-icon-post div.wp-menu-image, +.icon16.icon-media, +.menu-icon-media div.wp-menu-image, +.icon16.icon-links, +.menu-icon-links div.wp-menu-image, +.icon16.icon-page, +.menu-icon-page div.wp-menu-image, +.icon16.icon-comments, +.menu-icon-comments div.wp-menu-image, +.icon16.icon-appearance, +.menu-icon-appearance div.wp-menu-image, +.icon16.icon-plugins, +.menu-icon-plugins div.wp-menu-image, +.icon16.icon-users, +.menu-icon-users div.wp-menu-image, +.icon16.icon-tools, +.menu-icon-tools div.wp-menu-image, +.icon16.icon-settings, +.menu-icon-settings div.wp-menu-image, +.icon16.icon-site, +.menu-icon-site div.wp-menu-image { + background-image: url('../images/menu-vs.png?ver=20120201'); +} + .icon16.icon-dashboard, #adminmenu .menu-icon-dashboard div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -60px -33px; + background-position: -59px -33px; } #adminmenu .menu-icon-dashboard:hover div.wp-menu-image, #adminmenu .menu-icon-dashboard.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-dashboard.current div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -60px -1px; + background-position: -59px -1px; } .icon16.icon-post, #adminmenu .menu-icon-post div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -271px -33px; + background-position: -269px -33px; } #adminmenu .menu-icon-post:hover div.wp-menu-image, -#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -271px -1px; +#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-post.current div.wp-menu-image { + background-position: -269px -1px; } .icon16.icon-media, #adminmenu .menu-icon-media div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -120px -33px; + background-position: -119px -33px; } #adminmenu .menu-icon-media:hover div.wp-menu-image, -#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -120px -1px; +#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-media.current div.wp-menu-image { + background-position: -119px -1px; } .icon16.icon-links, #adminmenu .menu-icon-links div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -90px -33px; + background-position: -89px -33px; } #adminmenu .menu-icon-links:hover div.wp-menu-image, -#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -90px -1px; +#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-links.current div.wp-menu-image { + background-position: -89px -1px; } .icon16.icon-page, #adminmenu .menu-icon-page div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -150px -33px; + background-position: -149px -33px; } #adminmenu .menu-icon-page:hover div.wp-menu-image, -#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -150px -1px; +#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-page.current div.wp-menu-image { + background-position: -149px -1px; } .icon16.icon-comments, #adminmenu .menu-icon-comments div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -30px -33px; + background-position: -29px -33px; } #adminmenu .menu-icon-comments:hover div.wp-menu-image, #adminmenu .menu-icon-comments.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-comments.current div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -30px -1px; + background-position: -29px -1px; } .icon16.icon-appearance, #adminmenu .menu-icon-appearance div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll 0 -33px; + background-position: 1px -33px; } #adminmenu .menu-icon-appearance:hover div.wp-menu-image, -#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll 0 -1px; +#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-appearance.current div.wp-menu-image { + background-position: 1px -1px; } .icon16.icon-plugins, #adminmenu .menu-icon-plugins div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -180px -33px; + background-position: -179px -33px; } #adminmenu .menu-icon-plugins:hover div.wp-menu-image, -#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -180px -1px; +#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-plugins.current div.wp-menu-image { + background-position: -179px -1px; } .icon16.icon-users, #adminmenu .menu-icon-users div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -300px -33px; + background-position: -300px -33px; } #adminmenu .menu-icon-users:hover div.wp-menu-image, #adminmenu .menu-icon-users.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-users.current div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -300px -1px; + background-position: -300px -1px; } .icon16.icon-tools, #adminmenu .menu-icon-tools div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -210px -33px; + background-position: -209px -33px; } #adminmenu .menu-icon-tools:hover div.wp-menu-image, #adminmenu .menu-icon-tools.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-tools.current div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -210px -1px; + background-position: -209px -1px; } .icon16.icon-settings, -#icon-options-general, #adminmenu .menu-icon-settings div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -240px -33px; + background-position: -239px -33px; } #adminmenu .menu-icon-settings:hover div.wp-menu-image, -#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -240px -1px; +#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-settings.current div.wp-menu-image { + background-position: -239px -1px; } .icon16.icon-site, #adminmenu .menu-icon-site div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -360px -33px; + background-position: -359px -33px; } #adminmenu .menu-icon-site:hover div.wp-menu-image, -#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu-vs.png?ver=20111128') no-repeat scroll -360px -1px; +#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-site.current div.wp-menu-image { + background-position: -359px -1px; } /* end menu and screen icons */ /* Screen Icons */ +.icon32.icon-post, +#icon-edit, +#icon-post, +.icon32.icon-dashboard, +#icon-index, +.icon32.icon-media, +#icon-upload, +.icon32.icon-links, +#icon-link-manager, +#icon-link, +#icon-link-category, +.icon32.icon-page, +#icon-edit-pages, +#icon-page, +.icon32.icon-comments, +#icon-edit-comments, +.icon32.icon-appearance, +#icon-themes, +.icon32.icon-plugins, +#icon-plugins, +.icon32.icon-users, +#icon-users, +#icon-profile, +#icon-user-edit, +.icon32.icon-tools, +#icon-tools, +#icon-admin, +.icon32.icon-settings, +#icon-options-general, +.icon32.icon-site, +#icon-ms-admin { + background-image: url(../images/icons32-vs.png?ver=20111206); +} + .icon32.icon-post, #icon-edit, #icon-post { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -552px -5px; + background-position: -552px -5px; } .icon32.icon-dashboard, #icon-index { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -137px -5px; + background-position: -137px -5px; } .icon32.icon-media, #icon-upload { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -251px -5px; + background-position: -251px -5px; } .icon32.icon-links, #icon-link-manager, #icon-link, #icon-link-category { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -190px -5px; + background-position: -190px -5px; } .icon32.icon-page, #icon-edit-pages, #icon-page { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -312px -5px; + background-position: -312px -5px; } .icon32.icon-comments, #icon-edit-comments { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -72px -5px; + background-position: -72px -5px; } .icon32.icon-appearance, #icon-themes { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -11px -5px; + background-position: -11px -5px; } .icon32.icon-plugins, #icon-plugins { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -370px -5px; + background-position: -370px -5px; } .icon32.icon-users, #icon-users, #icon-profile, #icon-user-edit { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -600px -5px; + background-position: -600px -5px; } .icon32.icon-tools, #icon-tools, #icon-admin { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -432px -5px; + background-position: -432px -5px; } .icon32.icon-settings, #icon-options-general { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -492px -5px; + background-position: -492px -5px; } .icon32.icon-site, #icon-ms-admin { - background: transparent url(../images/icons32-vs.png?ver=20111206) no-repeat -659px -5px; + background-position: -659px -5px; +} + +@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { + .icon32.icon-post, + #icon-edit, + #icon-post, + .icon32.icon-dashboard, + #icon-index, + .icon32.icon-media, + #icon-upload, + .icon32.icon-links, + #icon-link-manager, + #icon-link, + #icon-link-category, + .icon32.icon-page, + #icon-edit-pages, + #icon-page, + .icon32.icon-comments, + #icon-edit-comments, + .icon32.icon-appearance, + #icon-themes, + .icon32.icon-plugins, + #icon-plugins, + .icon32.icon-users, + #icon-users, + #icon-profile, + #icon-user-edit, + .icon32.icon-tools, + #icon-tools, + #icon-admin, + .icon32.icon-settings, + #icon-options-general, + .icon32.icon-site, + #icon-ms-admin { + background-image: url(../images/icons32-vs-2x.png?ver=20120412); + background-size: 708px 45px; + } + + .icon16.icon-dashboard, + .menu-icon-dashboard div.wp-menu-image, + .icon16.icon-post, + .menu-icon-post div.wp-menu-image, + .icon16.icon-media, + .menu-icon-media div.wp-menu-image, + .icon16.icon-links, + .menu-icon-links div.wp-menu-image, + .icon16.icon-page, + .menu-icon-page div.wp-menu-image, + .icon16.icon-comments, + .menu-icon-comments div.wp-menu-image, + .icon16.icon-appearance, + .menu-icon-appearance div.wp-menu-image, + .icon16.icon-plugins, + .menu-icon-plugins div.wp-menu-image, + .icon16.icon-users, + .menu-icon-users div.wp-menu-image, + .icon16.icon-tools, + .menu-icon-tools div.wp-menu-image, + .icon16.icon-settings, + .menu-icon-settings div.wp-menu-image, + .icon16.icon-site, + .menu-icon-site div.wp-menu-image { + background-image: url('../images/menu-2x.png?ver=20120412'); + background-size: 390px 64px; + } } /* end screen icons */ - /* Diff */ table.diff .diff-deletedline { background-color: #fdd; @@ -1674,12 +1887,12 @@ table.diff .diff-addedline ins { border-right: 1px solid #D1E5EE; border-left: 1px solid #D1E5EE; border-bottom: 1px solid #D1E5EE; - background-image: -ms-linear-gradient(bottom, #eff8ff, #fff); /* IE10 */ - background-image: -moz-linear-gradient(bottom, #eff8ff, #fff); /* Firefox */ - background-image: -o-linear-gradient(bottom, #eff8ff, #fff); /* Opera */ - background-image: -webkit-gradient(linear, left bottom, left top, from(#eff8ff), to(#fff)); /* old Webkit */ - background-image: -webkit-linear-gradient(bottom, #eff8ff, #fff); /* new Webkit */ - background-image: linear-gradient(bottom, #eff8ff, #fff); /* proposed W3C Markup */ + background-image: -ms-linear-gradient(bottom, #eff8ff, #eff8ff); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #def1ff, #eff8ff); /* Firefox */ + background-image: -o-linear-gradient(bottom, #def1ff, #eff8ff); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#def1ff), to(#eff8ff)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #def1ff, #eff8ff); /* new Webkit */ + background-image: linear-gradient(bottom, #def1ff, #eff8ff); /* proposed W3C Markup */ } #screen-meta-links a.show-settings { @@ -1691,11 +1904,11 @@ table.diff .diff-addedline ins { } #screen-meta-links a.show-settings { - background: transparent url(../images/arrows.png) no-repeat right 3px; + background: transparent url(../images/arrows-vs.png) no-repeat right 4px; } #screen-meta-links a.show-settings.screen-meta-active { - background: transparent url(../images/arrows.png) no-repeat right -33px; + background: transparent url(../images/arrows-vs.png) no-repeat right -31px; } /* end screen options and help tabs */ @@ -1713,20 +1926,6 @@ table.diff .diff-addedline ins { } /* Install Plugins */ -.star-average, -.star.star-rating { - background-color: #fc0; -} - -div.star.select:hover { - background-color: #d00; -} - -div.star img { - border-left: 1px solid #fff; - border-right: 1px solid #fff; -} - #plugin-information .fyi ul { background-color: #eaf3fa; } @@ -1835,7 +2034,7 @@ fieldset.inline-edit-col-right .inline-edit-col { } #post-body .misc-pub-section { - border-right-color: #eee; + border-left-color: #eee; } .post-com-count span { @@ -1883,14 +2082,6 @@ body.press-this ul.category-tabs li.tabs a { border-color: #DFDFDF; } -#theme-information .action-button { - border-top-color: #DFDFDF; -} - -.theme-listing br.line { - border-bottom-color: #ccc; -} - div.widgets-sortables, #widgets-left .inactive { background-color: #f7fcfe; @@ -2108,7 +2299,6 @@ div.widgets-sortables, border-bottom-color: #eff8ff; } -/* custom header & background pages */ #upload-form label { color: #777; } @@ -2170,11 +2360,11 @@ div.widgets-sortables, .about-wrap .feature-section img { background: #fff; - border-color: #dfdfdf; + border: 1px #ccc solid; - -moz-box-shadow: 0 0 6px rgba( 0, 0, 0, 0.3 ); - -webkit-box-shadow: 0 0 6px rgba( 0, 0, 0, 0.3 ); - box-shadow: 0 0 6px rgba( 0, 0, 0, 0.3 ); + -moz-box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.3 ); + -webkit-box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.3 ); } .about-wrap .point-releases { @@ -2272,6 +2462,19 @@ div.widgets-sortables, background-position: 0 -72px; } +/* Auto-folding of the admin menu for RTL */ +@media only screen and (max-width: 900px) { + .rtl #adminmenu .wp-has-current-submenu .wp-submenu-wrap{ + -moz-box-shadow: -2px 2px 5px rgba( 0, 0, 0, 0.4 ); + -webkit-box-shadow: -2px 2px 5px rgba( 0, 0, 0, 0.4 ); + box-shadow: -2px 2px 5px rgba( 0, 0, 0, 0.4 ); + } + + .rtl #collapse-button div { + background-position: 0 -72px; + } +} + /* edit image */ .rtl .meta-box-sortables .postbox:hover .handlediv { background: transparent url(../images/arrows-vs.png) no-repeat 6px 7px; diff --git a/wp-admin/css/colors-fresh.css b/wp-admin/css/colors-fresh.css index 58c75d26a..f7f579273 100644 --- a/wp-admin/css/colors-fresh.css +++ b/wp-admin/css/colors-fresh.css @@ -1 +1 @@ -html,.wp-dialog{background-color:#fff;}textarea,input[type="text"],input[type="password"],input[type="file"],input[type="button"],input[type="submit"],input[type="reset"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="url"],select{border-color:#dfdfdf;background-color:#fff;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="file"]:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="url"]:focus,select:focus{border-color:#bbb;}kbd,code{background:#eaeaea;}input[readonly]{background-color:#eee;}.find-box-search{border-color:#dfdfdf;background-color:#f1f1f1;}.find-box{background-color:#f1f1f1;}.find-box-inside{background-color:#fff;}a.page-numbers:hover{border-color:#999;}body,#wpbody,.form-table .pre{color:#333;}body>#upload-menu{border-bottom-color:#fff;}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc;}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red;}#poststuff .inside label.waiting{color:orange;}#poststuff .inside label.approved{color:green;}#postcustomstuff table{border-color:#dfdfdf;background-color:#F9F9F9;}#postcustomstuff thead th{background-color:#F1F1F1;}.widefat{border-color:#dfdfdf;background-color:#f9f9f9;}textarea.widefat{background-color:#fff;}div.dashboard-widget-error{background-color:#c43;}div.dashboard-widget-notice{background-color:#cfe1ef;}div.dashboard-widget-submit{border-top-color:#ccc;}div.tabs-panel,.wp-tab-panel,ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fff;}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fff;}input.disabled,textarea.disabled{background-color:#ccc;}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff;}.widget .widget-top,.postbox h3,.stuffbox h3,.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head,.sidebar-name,#nav-menu-header,#nav-menu-footer,.menu-item-handle,#fullscreen-topbar{background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec);}.widget .widget-top,.postbox h3,.stuffbox h3{border-bottom-color:#dfdfdf;text-shadow:#fff 0 1px 0;-moz-box-shadow:0 1px 0 #fff;-webkit-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;}.form-table th,.form-wrap label{color:#222;text-shadow:#fff 0 1px 0;}.description,.form-wrap p{color:#666;}strong .post-com-count span{background-color:#21759b;}.sorthelper{background-color:#ccf3fa;}.ac_match,.subsubsub a.current{color:#000;}.wrap h2{color:#464646;}.wrap .add-new-h2{background:#f1f1f1;}.subtitle{color:#777;}.ac_over{background-color:#f0f0b8;}.ac_results{background-color:#fff;border-color:#808080;}.ac_results li{color:#101010;}.alternate,.alt{background-color:#fcfcfc;}.available-theme a.screenshot{background-color:#f1f1f1;border-color:#ddd;}.bar{background-color:#e8e8e8;border-right-color:#99d;}#media-upload,#media-upload .media-item .slidetoggle{background:#fff;}#media-upload .slidetoggle{border-top-color:#dfdfdf;}div.error,.login #login_error{background-color:#ffebe8;border-color:#c00;}div.error a{color:#c00;}.form-invalid{background-color:#ffebe8!important;}.form-invalid input,.form-invalid select{border-color:#c00!important;}.submit{border-color:#DFDFDF;}.highlight{background-color:#e4f2fd;color:#000;}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666;}.media-upload-form label.form-help,td.help{color:#9a9a9a;}.post-com-count{background-image:url(../images/bubble_bg.gif);color:#fff;}.post-com-count span{background-color:#bbb;color:#fff;}.post-com-count:hover span{background-color:#d54e21;}.quicktags,.search{background-color:#ccc;color:#000;}.side-info h5{border-bottom-color:#dadada;}.side-info ul{color:#666;}.button,.button-secondary,.submit input,input[type=button],input[type=submit]{border-color:#bbb;color:#464646;}.button:hover,.button-secondary:hover,.submit input:hover,input[type=button]:hover,input[type=submit]:hover{color:#000;border-color:#666;}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top;text-shadow:rgba(255,255,255,1) 0 1px 0;}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top;}input.button-primary,button.button-primary,a.button-primary{border-color:#298cba;font-weight:bold;color:#fff;background:#21759B url(../images/button-grad.png) repeat-x scroll left top;text-shadow:rgba(0,0,0,0.3) 0 -1px 0;}input.button-primary:active,button.button-primary:active,a.button-primary:active{background:#21759b url(../images/button-grad-active.png) repeat-x scroll left top;color:#eaf2fa;}input.button-primary:hover,button.button-primary:hover,a.button-primary:hover,a.button-primary:focus,a.button-primary:active{border-color:#13455b;color:#eaf2fa;}.button-disabled,.button[disabled],.button:disabled,.button-secondary[disabled],.button-secondary:disabled,a.button.disabled{color:#aaa!important;border-color:#ddd!important;}.button-primary-disabled,.button-primary[disabled],.button-primary:disabled{color:#9FD0D5!important;background:#298CBA!important;}a:hover,a:active,a:focus{color:#d54e21;}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu ul.wp-submenu a:hover,#the-comment-list .comment a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover,.plugins .inactive a:hover,#all-plugins-table .plugins .inactive a:hover,#search-plugins-table .plugins .inactive a:hover{color:#d54e21;}#the-comment-list .comment-item,#dashboard-widgets #dashboard_quick_press form p.submit{border-color:#dfdfdf;}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333;}#rightnow .rbutton{background-color:#ebebeb;color:#264761;}.submitbox .submit{background-color:#464646;color:#ccc;}.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete{color:#f00;border-bottom-color:#f00;}.submitbox .submitdelete:hover,#media-items a.delete:hover{color:#fff;background-color:#f00;border-bottom-color:#f00;}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:#f00;border-bottom-color:#f00;}.tablenav .dots{border-color:transparent;}.tablenav .next,.tablenav .prev{border-color:transparent;color:#21759b;}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#d54e21;}div.updated,.login .message{background-color:#ffffe0;border-color:#e6db55;}.update-message{color:#000;}a.page-numbers{border-bottom-color:#B8D3E2;}.commentlist li{border-bottom-color:#ccc;}.widefat td,.widefat th{border-top-color:#fff;border-bottom-color:#dfdfdf;}.widefat th{text-shadow:rgba(255,255,255,0.8) 0 1px 0;}.widefat td{color:#555;}.widefat p,.widefat ol,.widefat ul{color:#333;}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head{color:#333;}th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333;}h3.dashboard-widget-title small a{color:#d7d7d7;}h3.dashboard-widget-title small a:hover{color:#fff;}a,#adminmenu a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,.plugins a.delete,.ui-tabs-nav a{color:#21759b;}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0;}#plugin-information .action-button{background-color:#d54e21;color:#fff;}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0;}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf;}#currenttheme img{border-color:#666;}#dashboard_secondary div.dashboard-widget-content ul li a{background-color:#f9f9f9;}input.readonly,textarea.readonly{background-color:#ddd;}#editable-post-name{background-color:#fffbcc;}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777;}.login #nav a,.login #backtoblog a{color:#21759b!important;}.login #nav a:hover,.login #backtoblog a:hover{color:#d54e21!important;}#footer{color:#777;border-color:#dfdfdf;}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf;}.checkbox,.side-info,.plugins tr,#your-profile #rich_editing{background-color:#fcfcfc;}.plugins .inactive,.plugins .inactive th,.plugins .inactive td,tr.inactive+tr.plugin-update-tr .plugin-update{background-color:#f4f4f4;}.plugin-update-tr .update-message{background-color:#fffbe4;border-color:#dfdfdf;}.plugins .active,.plugins .active th,.plugins .active td{color:#000;}.plugins .inactive a{color:#579;}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4;}#the-comment-list .unapproved{background-color:#ffffe0;}#the-comment-list .approve a{color:#006505;}#the-comment-list .unapprove a{color:#d98500;}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,#dashboard_recent_comments .delete a,#dashboard_recent_comments .trash a,#dashboard_recent_comments .spam a{color:#bc0b0b;}.welcome-panel{border-color:#dfdfdf;}.welcome-panel p{color:#777;}.welcome-panel-column p{color:#464646;}.welcome-panel h3{text-shadow:1px 1px 1px white;}.widget,#widget-list .widget-top,.postbox,#titlediv,#poststuff .postarea,.stuffbox{border-color:#dfdfdf;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;-webkit-border-radius:3px;border-radius:3px;}.widget,#widget-list .widget-top,.postbox,.menu-item-settings{background-color:#f5f5f5;background-image:-ms-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:-moz-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:-o-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:linear-gradient(top,#f9f9f9,#f5f5f5);}.postbox h3{color:#464646;}.widget .widget-top{color:#222;}.sidebar-name:hover h3,.postbox h3:hover{color:#000;}.curtime #timestamp{background-image:url(../images/date-button.gif);}#quicktags #ed_link{color:#00f;}#rightnow .youhave{background-color:#f0f6fb;}#rightnow a{color:#448abd;}.tagchecklist span a,#bulk-titles div a{background:url(../images/xit.gif) no-repeat;}.tagchecklist span a:hover,#bulk-titles div a:hover{background:url(../images/xit.gif) no-repeat -10px 0;}#update-nag,.update-nag{background-color:#FFFBCC;border-color:#E6DB55;color:#555;}#screen-meta{background-color:#f1f1f1;border-color:#ccc;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.05);box-shadow:0 1px 3px rgba(0,0,0,0.05);}#contextual-help-back{background:#fff;}.contextual-help-tabs a:hover{color:#333;}#contextual-help-back,.contextual-help-tabs .active{border-color:#ccc;}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#fff;color:#000;}#screen-options-link-wrap,#contextual-help-link-wrap{background-color:#e3e3e3;border-right:1px solid transparent;border-left:1px solid transparent;border-bottom:1px solid transparent;background-image:-ms-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:-moz-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:-o-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:-webkit-gradient(linear,left bottom,left top,from(#dfdfdf),to(#f1f1f1));background-image:-webkit-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:linear-gradient(bottom,#dfdfdf,#f1f1f1);}#screen-meta-links a.show-settings{color:#777;}#screen-meta-links a.show-settings:hover{color:#000;}#screen-meta-links a.show-settings{background:transparent url(../images/arrows.png) no-repeat right 3px;}#screen-meta-links a.show-settings.screen-meta-active{background:transparent url(../images/arrows.png) no-repeat right -33px;}.login #backtoblog a{color:#464646;}#wphead{border-bottom:#dfdfdf 1px solid;}#wphead h1 a{color:#464646;}#footer a:link,#footer a:visited{text-decoration:none;}#footer a:hover{color:#000;text-decoration:underline;}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover,#dashboard_recent_comments .delete a:hover,#dashboard_recent_comments .trash a:hover #dashboard_recent_comments .spam a:hover{color:#f00;}#pass-strength-result{background-color:#eee;border-color:#ddd!important;}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important;}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important;}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important;}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important;}#titlediv #title{border-color:#ccc;}#post-status-info{border-color:#dfdfdf #ccc #ccc;background-color:#eaeaea;}.editwidget .widget-inside{border-color:#dfdfdf;}#titlediv #title{background-color:#fff;}#tTips p#tTips_inside{background-color:#ddd;color:#333;}#timestampdiv input,#namediv input,#poststuff .inside .the-tagcloud{border-color:#ddd;}#adminmenuback,#adminmenuwrap{background-color:#ececec;border-color:#ccc;}#adminmenushadow,#adminmenuback{background-image:url(../images/menu-shadow.png);background-position:top right;background-repeat:repeat-y;}#adminmenu li.wp-menu-separator{background:#dfdfdf;border-color:#cfcfcf;}#adminmenu div.separator{border-color:#e1e1e1;}#adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,#adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark.png) no-repeat -1px 6px;}#adminmenu .wp-has-submenu:hover .wp-menu-toggle,#adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows.png) no-repeat -2px 6px;}#adminmenu a.menu-top,.folded #adminmenu li.menu-top,#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;}#adminmenu li.wp-menu-open{border-color:#dfdfdf;}#adminmenu li.menu-top:hover>a,#adminmenu li.menu-top.focused>a,#adminmenu li.menu-top>a:focus{background-color:#e4e4e4;text-shadow:0 1px 0 rgba(255,255,255,0.4);}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:#777;background-image:-ms-linear-gradient(bottom,#6d6d6d,#808080);background-image:-moz-linear-gradient(bottom,#6d6d6d,#808080);background-image:-o-linear-gradient(bottom,#6d6d6d,#808080);background-image:-webkit-gradient(linear,left bottom,left top,from(#6d6d6d),to(#808080));background-image:-webkit-linear-gradient(bottom,#6d6d6d,#808080);background-image:linear-gradient(bottom,#6d6d6d,#808080);}#adminmenu .wp-menu-arrow div{background-color:#777;background-image:-ms-linear-gradient(right bottom,#6d6d6d,#808080);background-image:-moz-linear-gradient(right bottom,#6d6d6d,#808080);background-image:-o-linear-gradient(right bottom,#6d6d6d,#808080);background-image:-webkit-gradient(linear,right bottom,left top,from(#6d6d6d),to(#808080));background-image:-webkit-linear-gradient(right bottom,#6d6d6d,#808080);background-image:linear-gradient(right bottom,#6d6d6d,#808080);}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:#E4E4E4;}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#E4E4E4;border-color:#ccc;}.folded #adminmenu li.menu-top li:hover a{background-image:none;}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{text-shadow:0 -1px 0 #333;color:#fff;border-top-color:#808080;border-bottom-color:#6d6d6d;}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-top-color:#808080;border-bottom-color:#6d6d6d;}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus{background-color:#EAF2FA;color:#333;}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover{color:#333;}#adminmenu .wp-submenu ul{background-color:#fff;}#adminmenu .wp-submenu-wrap,#adminmenu .wp-submenu ul{border-color:#dfdfdf;}#adminmenu .wp-submenu-wrap,.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,0.4);box-shadow:2px 2px 5px rgba(0,0,0,0.4);}#adminmenu .wp-submenu .wp-submenu-head{border-right-color:#dfdfdf;background-color:#ececec;}#adminmenu div.wp-submenu{background-color:transparent;}#collapse-menu{color:#aaa;}#collapse-menu:hover{color:#999;}#collapse-button{border-color:#ccc;background-color:#f4f4f4;background-image:-ms-linear-gradient(bottom,#dfdfdf,#fff);background-image:-moz-linear-gradient(bottom,#dfdfdf,#fff);background-image:-o-linear-gradient(bottom,#dfdfdf,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#dfdfdf),to(#fff));background-image:-webkit-linear-gradient(bottom,#dfdfdf,#fff);background-image:linear-gradient(bottom,#dfdfdf,#fff);}#collapse-menu:hover #collapse-button{border-color:#aaa;}#collapse-button div{background:transparent url(../images/arrows.png) no-repeat 0 -72px;}.folded #collapse-button div{background-position:0 -108px;}.icon16.icon-dashboard,#adminmenu .menu-icon-dashboard div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -60px -33px;}#adminmenu .menu-icon-dashboard:hover div.wp-menu-image,#adminmenu .menu-icon-dashboard.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-dashboard.current div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -60px -1px;}.icon16.icon-post,#adminmenu .menu-icon-post div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -271px -33px;}#adminmenu .menu-icon-post:hover div.wp-menu-image,#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -271px -1px;}.icon16.icon-media,#adminmenu .menu-icon-media div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -120px -33px;}#adminmenu .menu-icon-media:hover div.wp-menu-image,#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -120px -1px;}.icon16.icon-links,#adminmenu .menu-icon-links div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -90px -33px;}#adminmenu .menu-icon-links:hover div.wp-menu-image,#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -90px -1px;}.icon16.icon-page,#adminmenu .menu-icon-page div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -150px -33px;}#adminmenu .menu-icon-page:hover div.wp-menu-image,#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -150px -1px;}.icon16.icon-comments,#adminmenu .menu-icon-comments div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -30px -33px;}#adminmenu .menu-icon-comments:hover div.wp-menu-image,#adminmenu .menu-icon-comments.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-comments.current div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -30px -1px;}.icon16.icon-appearance,#adminmenu .menu-icon-appearance div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll 0 -33px;}#adminmenu .menu-icon-appearance:hover div.wp-menu-image,#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll 0 -1px;}.icon16.icon-plugins,#adminmenu .menu-icon-plugins div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -180px -33px;}#adminmenu .menu-icon-plugins:hover div.wp-menu-image,#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -180px -1px;}.icon16.icon-users,#adminmenu .menu-icon-users div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -300px -33px;}#adminmenu .menu-icon-users:hover div.wp-menu-image,#adminmenu .menu-icon-users.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-users.current div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -300px -1px;}.icon16.icon-tools,#adminmenu .menu-icon-tools div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -210px -33px;}#adminmenu .menu-icon-tools:hover div.wp-menu-image,#adminmenu .menu-icon-tools.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-tools.current div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -210px -1px;}.icon16.icon-settings,#adminmenu .menu-icon-settings div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -240px -33px;}#adminmenu .menu-icon-settings:hover div.wp-menu-image,#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -240px -1px;}.icon16.icon-site,#adminmenu .menu-icon-site div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -360px -33px;}#adminmenu .menu-icon-site:hover div.wp-menu-image,#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image{background:transparent url('../images/menu.png?ver=20111128') no-repeat scroll -360px -1px;}.icon32.icon-post,#icon-edit,#icon-post{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -552px -5px;}.icon32.icon-dashboard,#icon-index{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -137px -5px;}.icon32.icon-media,#icon-upload{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -251px -5px;}.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -190px -5px;}.icon32.icon-page,#icon-edit-pages,#icon-page{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -312px -5px;}.icon32.icon-comments,#icon-edit-comments{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -72px -5px;}.icon32.icon-appearance,#icon-themes{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -11px -5px;}.icon32.icon-plugins,#icon-plugins{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -370px -5px;}.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -600px -5px;}.icon32.icon-tools,#icon-tools,#icon-admin{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -432px -5px;}.icon32.icon-settings,#icon-options-general{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -492px -5px;}.icon32.icon-site,#icon-ms-admin{background:transparent url(../images/icons32.png?ver=20111206) no-repeat -659px -5px;}table.diff .diff-deletedline{background-color:#fdd;}table.diff .diff-deletedline del{background-color:#f99;}table.diff .diff-addedline{background-color:#dfd;}table.diff .diff-addedline ins{background-color:#9f9;}#att-info{background-color:#E4F2FD;}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf;}#sidemenu a.current{background-color:#fff;border-color:#dfdfdf #dfdfdf #fff;color:#D54E21;}#replyerror{border-color:#ddd;background-color:#f9f9f9;}.vim-current,.vim-current th,.vim-current td{background-color:#E4F2FD!important;}.star-average,.star.star-rating{background-color:#fc0;}div.star.select:hover{background-color:#d00;}div.star img{border-left:1px solid #fff;border-right:1px solid #fff;}.widefat div.star img{border-left:1px solid #f9f9f9;border-right:1px solid #f9f9f9;}#plugin-information .fyi ul{background-color:#eaf3fa;}#plugin-information .fyi h2.mainheader{background-color:#cee1ef;}#plugin-information pre,#plugin-information code{background-color:#ededff;}#plugin-information pre{border:1px solid #ccc;}.inline-edit-row fieldset input[type="text"],.inline-edit-row fieldset textarea,#bulk-titles{border-color:#ddd;}.inline-editor div.title{background-color:#EAF3FA;}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd;}.inline-editor .categories .catshow,.inline-editor .categories .cathide{color:#21759b;}.inline-editor .quick-edit-save{background-color:#f1f1f1;}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf;}.attention{color:#D54E21;}.meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows.png) no-repeat 6px 7px;}.tablenav .tablenav-pages{color:#555;}.tablenav .tablenav-pages a{border-color:#e3e3e3;background:#eee url('../images/menu-bits.gif?ver=20100610') repeat-x scroll left -379px;}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#d54e21;}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa;}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3;}#availablethemes,#availablethemes td{border-color:#ddd;}#current-theme img{border-color:#999;}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999;}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc;}.misc-pub-section{border-top-color:#fff;border-bottom-color:#dfdfdf;}#minor-publishing{border-bottom-color:#dfdfdf;}#post-body .misc-pub-section{border-right-color:#eee;}.post-com-count span{background-color:#bbb;}.form-table .color-palette td{border-color:#fff;}.sortable-placeholder{border-color:#bbb;background-color:#f5f5f5;}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333;}.view-switch #view-switch-list{background:transparent url(../images/list.png) no-repeat 0 0;}.view-switch .current #view-switch-list{background:transparent url(../images/list.png) no-repeat -40px 0;}.view-switch #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -20px 0;}.view-switch .current #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -60px 0;}#header-logo{background:transparent url(../images/wp-logo.png?ver=20110504) no-repeat scroll center center;}.popular-tags,.feature-filter{background-color:#fff;border-color:#DFDFDF;}#theme-information .action-button{border-top-color:#DFDFDF;}.theme-listing br.line{border-bottom-color:#ccc;}div.widgets-sortables,#widgets-left .inactive{background-color:#fcfcfc;border-color:#dfdfdf;}#available-widgets .widget-holder{background-color:#fcfcfc;border-color:#dfdfdf;}#available-widgets .widget-description{color:#555;}.sidebar-name{color:#464646;text-shadow:#fff 0 1px 0;border-color:#dfdfdf;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;}.sidebar-name:hover,#removing-widget{color:#d54e21;}#removing-widget span{color:black;}.sidebar-name-arrow{background:transparent url(../images/arrows.png) no-repeat 5px 9px;}.sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark.png) no-repeat 5px 9px;}.in-widget-title{color:#606060;}.deleting .widget-title *{color:#aaa;}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1;}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea;}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5;}#dashboard_recent_comments div.undo{border-top-color:#dfdfdf;}.comment-ays,.comment-ays th{border-color:#ddd;}.comment-ays th{background-color:#f1f1f1;}#menu-management .menu-edit{border-color:#dfdfdf;}#post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf;}#nav-menu-header{border-bottom-color:#dfdfdf;}#nav-menu-footer{border-top-color:#fff;}#menu-management .nav-tabs-arrow a{color:#C1C1C1;}#menu-management .nav-tabs-arrow a:hover{color:#D54E21;}#menu-management .nav-tabs-arrow a:active{color:#464646;}#menu-management .nav-tab-active{border-color:#dfdfdf;}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf;}.js .input-with-default-title{color:#aaa;}#cancel-save{color:#f00;}#cancel-save:hover{background-color:#F00;color:#fff;}.list-container{border-color:#DFDFDF;}.menu-item-handle{border-color:#dfdfdf;}.menu li.deleting .menu-item-handle{background-color:#f66;text-shadow:#ccc;}.item-type{color:#999;}.item-controls .menu-item-delete:hover{color:#f00;}.nav-menus-php .item-edit{background:transparent url(../images/arrows.png) no-repeat 8px 10px;border-bottom-color:#eee;}.item-edit:hover{background:transparent url(../images/arrows-dark.png) no-repeat 8px 10px;}.menu-item-settings{border-color:#dfdfdf;}.link-to-original{color:#777;border-color:#dfdfdf;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.submitbox .submitcancel{color:#21759B;border-bottom-color:#21759B;}.submitbox .submitcancel:hover{background:#21759B;color:#fff;}#menu-management .nav-tab-active,.menu-item-handle,.menu-item-settings{-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;}#menu-management .nav-tab-active{background:#f9f9f9;border-bottom-color:#f9f9f9;}#upload-form label{color:#777;}.fullscreen-overlay{background:#fff;}.wp-fullscreen-focus #wp-fullscreen-title,.wp-fullscreen-focus #wp-fullscreen-container{border-color:#ccc;}#fullscreen-topbar{border-bottom-color:#DFDFDF;}.about-wrap h1{color:#333;text-shadow:1px 1px 1px white;}.about-text{color:#777;}.wp-badge{color:#fff;text-shadow:0 -1px 0 rgba(22,57,81,0.3);}.about-wrap h2 .nav-tab{color:#21759B;}.about-wrap h2 .nav-tab:hover{color:#d54e21;}.about-wrap h2 .nav-tab-active,.about-wrap h2 .nav-tab-active:hover{color:#333;}.about-wrap h2 .nav-tab-active{text-shadow:1px 1px 1px white;color:#464646;}.about-wrap h3{color:#333;text-shadow:1px 1px 1px white;}.about-wrap .feature-section h4{color:#464646;}.about-wrap .feature-section img{background:#fff;border-color:#dfdfdf;-moz-box-shadow:0 0 6px rgba(0,0,0,0.3);-webkit-box-shadow:0 0 6px rgba(0,0,0,0.3);box-shadow:0 0 6px rgba(0,0,0,0.3);}.about-wrap h4.wp-people-group{text-shadow:1px 1px 1px white;}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf;}.about-wrap .point-releases h3{border-top:1px solid #dfdfdf;}.about-wrap .point-releases h3:first-child{border:0;}.about-wrap li.wp-person img.gravatar{-moz-box-shadow:0 0 4px rgba(0,0,0,0.4);-webkit-box-shadow:0 0 4px rgba(0,0,0,0.4);box-shadow:0 0 4px rgba(0,0,0,0.4);}.about-wrap li.wp-person .title{color:#464646;text-shadow:1px 1px 1px white;}.freedoms-php .about-wrap ol li{color:#999;}.freedoms-php .about-wrap ol p{color:#464646;}.rtl .bar{border-right-color:none;border-left-color:#99d;}.rtl .post-com-count{background-image:url(../images/bubble_bg-rtl.gif);}.rtl #screen-meta-links a.show-settings{background-position:left 3px;}.rtl #screen-meta-links a.show-settings.screen-meta-active{background-position:left -33px;}.rtl #adminmenushadow,.rtl #adminmenuback{background-image:url(../images/menu-shadow-rtl.png);background-position:top left;}.rtl #adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,.rtl #adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark.png) no-repeat 8px 6px;}.rtl #adminmenu .wp-has-submenu:hover .wp-menu-toggle,.rtl #adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows.png) no-repeat 8px 6px;}.rtl #adminmenu .wp-submenu .wp-submenu-head{border-right-color:none;border-left-color:#dfdfdf;}.rtl #adminmenu .wp-submenu-wrap,.rtl.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);box-shadow:-2px 2px 5px rgba(0,0,0,0.4);}.rtl #collapse-button div{background-position:0 -108px;}.rtl.folded #collapse-button div{background-position:0 -72px;}.rtl .meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows.png) no-repeat 6px 7px;}.rtl .tablenav .tablenav-pages a{border-color:#e3e3e3;background:#eee url('../images/menu-bits-rtl.gif?ver=20100610') repeat-x scroll right -379px;}.rtl #post-body .misc-pub-section{border-right-color:none;border-left-color:#eee;}.rtl .sidebar-name-arrow{background:transparent url(../images/arrows.png) no-repeat 5px 9px;}.rtl .sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark.png) no-repeat 5px 9px;} \ No newline at end of file +html,.wp-dialog{background-color:#fff}textarea,input[type="text"],input[type="password"],input[type="file"],input[type="button"],input[type="submit"],input[type="reset"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="url"],select{border-color:#dfdfdf;background-color:#fff;color:#333}select{color:#000}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="file"]:focus,input[type="button"]:focus,input[type="submit"]:focus,input[type="reset"]:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="url"]:focus,select:focus{border-color:#bbb}kbd,code{background:#eaeaea}input[readonly]{background-color:#eee}.find-box-search{border-color:#dfdfdf;background-color:#f1f1f1}.find-box{background-color:#f1f1f1}.find-box-inside{background-color:#fff}a.page-numbers:hover{border-color:#999}body,#wpbody,.form-table .pre,.ui-autocomplete li a{color:#333}body>#upload-menu{border-bottom-color:#fff}#postcustomstuff table,#your-profile fieldset,#rightnow,div.dashboard-widget,#dashboard-widgets p.dashboard-widget-links{border-color:#ccc}#poststuff .inside label.spam,#poststuff .inside label.deleted{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}#postcustomstuff table{border-color:#dfdfdf;background-color:#f9f9f9}#postcustomstuff thead th{background-color:#f1f1f1}.widefat{border-color:#dfdfdf;background-color:#f9f9f9}textarea.widefat{background-color:#fff}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}div.dashboard-widget-submit{border-top-color:#ccc}ul.category-tabs li{border-color:transparent}div.tabs-panel,.wp-tab-panel,ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-color:#dfdfdf;background-color:#fff}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{background-color:#fff}input.disabled,textarea.disabled{background-color:#ccc}#plugin-information .action-button a,#plugin-information .action-button a:hover,#plugin-information .action-button a:visited{color:#fff}.widget .widget-top,.postbox h3,.stuffbox h3,.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head,.sidebar-name,#nav-menu-header,#nav-menu-footer,.menu-item-handle{background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec)}.widget .widget-top,.postbox h3,.stuffbox h3{border-bottom-color:#dfdfdf;text-shadow:#fff 0 1px 0;-moz-box-shadow:0 1px 0 #fff;-webkit-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff}.form-table th,.form-wrap label{color:#222;text-shadow:#fff 0 1px 0}.description,.form-wrap p{color:#666}strong .post-com-count span{background-color:#21759b}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}.wrap h2{color:#464646}.wrap .add-new-h2{background:#f1f1f1}.subtitle{color:#777}.ac_over{background-color:#f0f0b8}.ac_results{background-color:#fff;border-color:#808080}.ac_results li{color:#101010}.alternate,.alt{background-color:#fcfcfc}.available-theme a.screenshot{background-color:#f1f1f1;border-color:#ddd}.bar{background-color:#e8e8e8;border-right-color:#99d}#media-upload,#media-upload .media-item .slidetoggle{background:#fff}#media-upload .slidetoggle{border-top-color:#dfdfdf}div.error,.login #login_error{background-color:#ffebe8;border-color:#c00}div.error a{color:#c00}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.submit,#commentsdiv #add-new-comment{border-color:#dfdfdf}.highlight{background-color:#e4f2fd;color:#000}.howto,.nonessential,#edit-slug-box,.form-input-tip,.subsubsub{color:#666}.media-upload-form label.form-help,td.help{color:#9a9a9a}.ui-autocomplete{background-color:#efefef;border-color:#bbb}.ui-autocomplete li a.ui-state-hover{background-color:#ddd}.post-com-count{background-image:url(../images/bubble_bg.gif);color:#fff}.post-com-count span{background-color:#bbb;color:#fff}.post-com-count:hover span{background-color:#d54e21}.quicktags,.search{background-color:#ccc;color:#000}.side-info h5{border-bottom-color:#dadada}.side-info ul{color:#666}.button,.button-secondary,.submit input,input[type=button],input[type=submit]{border-color:#bbb;color:#464646}.button:hover,.button-secondary:hover,.submit input:hover,input[type=button]:hover,input[type=submit]:hover{color:#000;border-color:#666}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top;text-shadow:rgba(255,255,255,1) 0 1px 0}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top}input.button-primary,button.button-primary,a.button-primary{border-color:#298cba;font-weight:bold;color:#fff;background:#21759b url(../images/button-grad.png) repeat-x scroll left top;text-shadow:rgba(0,0,0,0.3) 0 -1px 0}input.button-primary:active,button.button-primary:active,a.button-primary:active{background:#21759b url(../images/button-grad-active.png) repeat-x scroll left top;color:#eaf2fa}input.button-primary:hover,button.button-primary:hover,a.button-primary:hover,a.button-primary:focus,a.button-primary:active{border-color:#13455b;color:#eaf2fa}.button-disabled,.button[disabled],.button:disabled,.button-secondary[disabled],.button-secondary:disabled,a.button.disabled{color:#aaa!important;border-color:#ddd!important}.button-primary-disabled,.button-primary[disabled],.button-primary:disabled{color:#9fd0d5!important;background:#298cba!important}a:hover,a:active,a:focus{color:#d54e21}#adminmenu a:hover,#adminmenu li.menu-top>a:focus,#adminmenu ul.wp-submenu a:hover,#the-comment-list .comment a:hover,#rightnow a:hover,#media-upload a.del-link:hover,div.dashboard-widget-submit input:hover,.subsubsub a:hover,.subsubsub a.current:hover,.ui-tabs-nav a:hover,.plugins .inactive a:hover,#all-plugins-table .plugins .inactive a:hover,#search-plugins-table .plugins .inactive a:hover{color:#d54e21}#the-comment-list .comment-item,#dashboard-widgets #dashboard_quick_press form p.submit{border-color:#dfdfdf}#side-sortables .category-tabs .tabs a,#side-sortables .add-menu-item-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}#rightnow .rbutton{background-color:#ebebeb;color:#264761}.submitbox .submit{background-color:#464646;color:#ccc}.plugins a.delete:hover,#all-plugins-table .plugins a.delete:hover,#search-plugins-table .plugins a.delete:hover,.submitbox .submitdelete{color:#f00;border-bottom-color:#f00}.submitbox .submitdelete:hover,#media-items a.delete:hover{color:#fff;background-color:#f00;border-bottom-color:#f00}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:#f00;border-bottom-color:#f00}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#21759b}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#d54e21}div.updated,.login .message{background-color:#ffffe0;border-color:#e6db55}.update-message{color:#000}a.page-numbers{border-bottom-color:#b8d3e2}.commentlist li{border-bottom-color:#ccc}.widefat td,.widefat th{border-top-color:#fff;border-bottom-color:#dfdfdf}.widefat th{text-shadow:rgba(255,255,255,0.8) 0 1px 0}.widefat td{color:#555}.widefat p,.widefat ol,.widefat ul{color:#333}.widefat thead tr th,.widefat tfoot tr th,h3.dashboard-widget-title,h3.dashboard-widget-title span,h3.dashboard-widget-title small,.find-box-head{color:#333}th.sortable a:hover,th.sortable a:active,th.sortable a:focus{color:#333}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}a,#adminmenu a,#the-comment-list p.comment-author strong a,#media-upload a.del-link,#media-items a.delete,.plugins a.delete,.ui-tabs-nav a{color:#21759b}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu a .update-plugins,#rightnow .reallynow{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0}#plugin-information .action-button{background-color:#d54e21;color:#fff}#adminmenu li.current a .awaiting-mod,#adminmenu li a.wp-has-current-submenu .update-plugins{background-color:#464646;color:#fff;-moz-box-shadow:rgba(255,255,255,0.5) 0 1px 0;-webkit-box-shadow:rgba(255,255,255,0.5) 0 1px 0;box-shadow:rgba(255,255,255,0.5) 0 1px 0}div#media-upload-header,div#plugin-information-header{background-color:#f9f9f9;border-bottom-color:#dfdfdf}#currenttheme img{border-color:#666}#dashboard_secondary div.dashboard-widget-content ul li a{background-color:#f9f9f9}input.readonly,textarea.readonly{background-color:#ddd}#editable-post-name{background-color:#fffbcc}#edit-slug-box strong,.tablenav .displaying-num,#submitted-on,.submitted-on{color:#777}.login #nav a,.login #backtoblog a{color:#21759b!important}.login #nav a:hover,.login #backtoblog a:hover{color:#d54e21!important}#footer{color:#777;border-color:#dfdfdf}.imgedit-group,#media-items .media-item,.media-item .describe{border-color:#dfdfdf}.checkbox,.side-info,.plugins tr,#your-profile #rich_editing{background-color:#fcfcfc}.plugins .inactive,.plugins .inactive th,.plugins .inactive td,tr.inactive+tr.plugin-update-tr .plugin-update{background-color:#f4f4f4}.plugin-update-tr .update-message{background-color:#fffbe4;border-color:#dfdfdf}.plugins .active,.plugins .active th,.plugins .active td{color:#000}.plugins .inactive a{color:#579}#the-comment-list tr.undo,#the-comment-list div.undo{background-color:#f4f4f4}#the-comment-list .unapproved{background-color:#ffffe0}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}table.widefat span.delete a,table.widefat span.trash a,table.widefat span.spam a,#dashboard_recent_comments .delete a,#dashboard_recent_comments .trash a,#dashboard_recent_comments .spam a{color:#bc0b0b}.welcome-panel{border-color:#dfdfdf}.welcome-panel p{color:#777}.welcome-panel-column p{color:#464646}.welcome-panel h3{text-shadow:1px 1px 1px white}.widget,#widget-list .widget-top,.postbox,#titlediv,#poststuff .postarea,.stuffbox{border-color:#dfdfdf;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;-webkit-border-radius:3px;border-radius:3px}.widget,#widget-list .widget-top,.postbox,.menu-item-settings{background-color:#f5f5f5;background-image:-ms-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:-moz-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:-o-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#f9f9f9,#f5f5f5);background-image:linear-gradient(top,#f9f9f9,#f5f5f5)}.postbox h3{color:#464646}.widget .widget-top{color:#222}.sidebar-name:hover h3,.postbox h3:hover{color:#000}.curtime #timestamp{background-image:url(../images/date-button.gif)}#quicktags #ed_link{color:#00f}#rightnow .youhave{background-color:#f0f6fb}#rightnow a{color:#448abd}.tagchecklist span a,#bulk-titles div a{background:url(../images/xit.gif) no-repeat}.tagchecklist span a:hover,#bulk-titles div a:hover{background:url(../images/xit.gif) no-repeat -10px 0}#update-nag,.update-nag{background-color:#fffbcc;border-color:#e6db55;color:#555}#screen-meta{background-color:#f1f1f1;border-color:#ccc;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.05);box-shadow:0 1px 3px rgba(0,0,0,0.05)}#contextual-help-back{background:#fff}.contextual-help-tabs a:hover{color:#333}#contextual-help-back,.contextual-help-tabs .active{border-color:#ccc}.contextual-help-tabs .active,.contextual-help-tabs .active a,.contextual-help-tabs .active a:hover{background:#fff;color:#333}#screen-options-link-wrap,#contextual-help-link-wrap{background-color:#e3e3e3;border-right:1px solid #ccc;border-left:1px solid #ccc;border-bottom:1px solid #ccc;background-image:-ms-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:-moz-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:-o-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:-webkit-gradient(linear,left bottom,left top,from(#dfdfdf),to(#f1f1f1));background-image:-webkit-linear-gradient(bottom,#dfdfdf,#f1f1f1);background-image:linear-gradient(bottom,#dfdfdf,#f1f1f1)}#screen-meta-links a.show-settings{color:#777}#screen-meta-links a.show-settings:hover{color:#333}#screen-meta-links a.show-settings{background:transparent url(../images/arrows.png) no-repeat right 4px}#screen-meta-links a.show-settings.screen-meta-active{background:transparent url(../images/arrows.png) no-repeat right -31px}.login #backtoblog a{color:#464646}#wphead{border-bottom:#dfdfdf 1px solid}#wphead h1 a{color:#464646}#footer a:link,#footer a:visited{text-decoration:none}#footer a:hover{text-decoration:underline}.file-error,abbr.required,.widget-control-remove:hover,table.widefat .delete a:hover,table.widefat .trash a:hover,table.widefat .spam a:hover,#dashboard_recent_comments .delete a:hover,#dashboard_recent_comments .trash a:hover #dashboard_recent_comments .spam a:hover{color:#f00}#pass-strength-result{background-color:#eee;border-color:#ddd!important}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}#titlediv #title{border-color:#ccc}#post-status-info{border-color:#dfdfdf #ccc #ccc;background-color:#eaeaea}.editwidget .widget-inside{border-color:#dfdfdf}#titlediv #title{background-color:#fff}#tTips p#tTips_inside{background-color:#ddd;color:#333}#timestampdiv input,#namediv input,#poststuff .inside .the-tagcloud{border-color:#ddd}#adminmenuback,#adminmenuwrap{background-color:#ececec;border-color:#ccc}#adminmenushadow,#adminmenuback{background-image:url(../images/menu-shadow.png);background-position:top right;background-repeat:repeat-y}#adminmenu li.wp-menu-separator{background:#dfdfdf;border-color:#cfcfcf}#adminmenu div.separator{border-color:#e1e1e1}#adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,#adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark.png) no-repeat -1px 6px}#adminmenu .wp-has-submenu:hover .wp-menu-toggle,#adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows.png) no-repeat -2px 6px}#adminmenu a.menu-top,.folded #adminmenu li.menu-top,#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf}#adminmenu li.wp-menu-open{border-color:#dfdfdf}#adminmenu li.menu-top:hover>a,#adminmenu li.menu-top.focused>a,#adminmenu li.menu-top>a:focus{background-color:#e4e4e4;text-shadow:0 1px 0 rgba(255,255,255,0.4)}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,#adminmenu .wp-menu-arrow,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:#777;background-image:-ms-linear-gradient(bottom,#6d6d6d,#808080);background-image:-moz-linear-gradient(bottom,#6d6d6d,#808080);background-image:-o-linear-gradient(bottom,#6d6d6d,#808080);background-image:-webkit-gradient(linear,left bottom,left top,from(#6d6d6d),to(#808080));background-image:-webkit-linear-gradient(bottom,#6d6d6d,#808080);background-image:linear-gradient(bottom,#6d6d6d,#808080)}#adminmenu .wp-menu-arrow div{background-color:#777;background-image:-ms-linear-gradient(right bottom,#6d6d6d,#808080);background-image:-moz-linear-gradient(right bottom,#6d6d6d,#808080);background-image:-o-linear-gradient(right bottom,#6d6d6d,#808080);background-image:-webkit-gradient(linear,right bottom,left top,from(#6d6d6d),to(#808080));background-image:-webkit-linear-gradient(right bottom,#6d6d6d,#808080);background-image:linear-gradient(right bottom,#6d6d6d,#808080)}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf;background:#e4e4e4}#adminmenu li.wp-not-current-submenu .wp-menu-arrow div{background:#e4e4e4;border-color:#ccc}.folded #adminmenu li.menu-top li:hover a{background-image:none}#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,#adminmenu li.current a.menu-top,#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{text-shadow:0 -1px 0 #333;color:#fff;border-top-color:#808080;border-bottom-color:#6d6d6d}.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{border-top-color:#808080;border-bottom-color:#6d6d6d}#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu a:focus{background-color:#eaf2fa;color:#333}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover{color:#333}#adminmenu .wp-submenu ul{background-color:#fff}#adminmenu .wp-submenu-wrap,#adminmenu .wp-submenu ul{border-color:#dfdfdf}#adminmenu .wp-submenu-wrap,.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,0.4);box-shadow:2px 2px 5px rgba(0,0,0,0.4)}#adminmenu .wp-submenu .wp-submenu-head{border-right-color:#dfdfdf;background-color:#ececec}#adminmenu div.wp-submenu{background-color:transparent}#collapse-menu{color:#aaa}#collapse-menu:hover{color:#999}#collapse-button{border-color:#ccc;background-color:#f4f4f4;background-image:-ms-linear-gradient(bottom,#dfdfdf,#fff);background-image:-moz-linear-gradient(bottom,#dfdfdf,#fff);background-image:-o-linear-gradient(bottom,#dfdfdf,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#dfdfdf),to(#fff));background-image:-webkit-linear-gradient(bottom,#dfdfdf,#fff);background-image:linear-gradient(bottom,#dfdfdf,#fff)}#collapse-menu:hover #collapse-button{border-color:#aaa}#collapse-button div{background:transparent url(../images/arrows.png) no-repeat 0 -72px}.folded #collapse-button div{background-position:0 -108px}@media only screen and (max-width:900px){#adminmenu li.menu-top{border-top-color:#f9f9f9;border-bottom-color:#dfdfdf}#adminmenu li.wp-has-current-submenu,#adminmenu li.current.menu-top{background-color:#777;background-image:-ms-linear-gradient(bottom,#6d6d6d,#808080);background-image:-moz-linear-gradient(bottom,#6d6d6d,#808080);background-image:-o-linear-gradient(bottom,#6d6d6d,#808080);background-image:-webkit-gradient(linear,left bottom,left top,from(#6d6d6d),to(#808080));background-image:-webkit-linear-gradient(bottom,#6d6d6d,#808080);background-image:linear-gradient(bottom,#6d6d6d,#808080)}#adminmenu li.menu-top li:hover a{background-image:none}#adminmenu li.wp-has-current-submenu,#adminmenu li.current.menu-top{border-top-color:#808080;border-bottom-color:#6d6d6d}#adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,0.4);box-shadow:2px 2px 5px rgba(0,0,0,0.4)}#collapse-button div{background-position:0 -108px}}.icon16,.icon32,div.wp-menu-image{background-color:transparent;background-repeat:no-repeat}.icon16.icon-dashboard,.menu-icon-dashboard div.wp-menu-image,.icon16.icon-post,.menu-icon-post div.wp-menu-image,.icon16.icon-media,.menu-icon-media div.wp-menu-image,.icon16.icon-links,.menu-icon-links div.wp-menu-image,.icon16.icon-page,.menu-icon-page div.wp-menu-image,.icon16.icon-comments,.menu-icon-comments div.wp-menu-image,.icon16.icon-appearance,.menu-icon-appearance div.wp-menu-image,.icon16.icon-plugins,.menu-icon-plugins div.wp-menu-image,.icon16.icon-users,.menu-icon-users div.wp-menu-image,.icon16.icon-tools,.menu-icon-tools div.wp-menu-image,.icon16.icon-settings,.menu-icon-settings div.wp-menu-image,.icon16.icon-site,.menu-icon-site div.wp-menu-image{background-image:url('../images/menu.png?ver=20120201')}.icon16.icon-dashboard,#adminmenu .menu-icon-dashboard div.wp-menu-image{background-position:-59px -33px}#adminmenu .menu-icon-dashboard:hover div.wp-menu-image,#adminmenu .menu-icon-dashboard.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-dashboard.current div.wp-menu-image{background-position:-59px -1px}.icon16.icon-post,#adminmenu .menu-icon-post div.wp-menu-image{background-position:-269px -33px}#adminmenu .menu-icon-post:hover div.wp-menu-image,#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-post.current div.wp-menu-image{background-position:-269px -1px}.icon16.icon-media,#adminmenu .menu-icon-media div.wp-menu-image{background-position:-119px -33px}#adminmenu .menu-icon-media:hover div.wp-menu-image,#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-media.current div.wp-menu-image{background-position:-119px -1px}.icon16.icon-links,#adminmenu .menu-icon-links div.wp-menu-image{background-position:-89px -33px}#adminmenu .menu-icon-links:hover div.wp-menu-image,#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-links.current div.wp-menu-image{background-position:-89px -1px}.icon16.icon-page,#adminmenu .menu-icon-page div.wp-menu-image{background-position:-149px -33px}#adminmenu .menu-icon-page:hover div.wp-menu-image,#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-page.current div.wp-menu-image{background-position:-149px -1px}.icon16.icon-comments,#adminmenu .menu-icon-comments div.wp-menu-image{background-position:-29px -33px}#adminmenu .menu-icon-comments:hover div.wp-menu-image,#adminmenu .menu-icon-comments.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-comments.current div.wp-menu-image{background-position:-29px -1px}.icon16.icon-appearance,#adminmenu .menu-icon-appearance div.wp-menu-image{background-position:1px -33px}#adminmenu .menu-icon-appearance:hover div.wp-menu-image,#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-appearance.current div.wp-menu-image{background-position:1px -1px}.icon16.icon-plugins,#adminmenu .menu-icon-plugins div.wp-menu-image{background-position:-179px -33px}#adminmenu .menu-icon-plugins:hover div.wp-menu-image,#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-plugins.current div.wp-menu-image{background-position:-179px -1px}.icon16.icon-users,#adminmenu .menu-icon-users div.wp-menu-image{background-position:-300px -33px}#adminmenu .menu-icon-users:hover div.wp-menu-image,#adminmenu .menu-icon-users.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-users.current div.wp-menu-image{background-position:-300px -1px}.icon16.icon-tools,#adminmenu .menu-icon-tools div.wp-menu-image{background-position:-209px -33px}#adminmenu .menu-icon-tools:hover div.wp-menu-image,#adminmenu .menu-icon-tools.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-tools.current div.wp-menu-image{background-position:-209px -1px}.icon16.icon-settings,#adminmenu .menu-icon-settings div.wp-menu-image{background-position:-239px -33px}#adminmenu .menu-icon-settings:hover div.wp-menu-image,#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-settings.current div.wp-menu-image{background-position:-239px -1px}.icon16.icon-site,#adminmenu .menu-icon-site div.wp-menu-image{background-position:-359px -33px}#adminmenu .menu-icon-site:hover div.wp-menu-image,#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image,#adminmenu .menu-icon-site.current div.wp-menu-image{background-position:-359px -1px}.icon32.icon-post,#icon-edit,#icon-post,.icon32.icon-dashboard,#icon-index,.icon32.icon-media,#icon-upload,.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category,.icon32.icon-page,#icon-edit-pages,#icon-page,.icon32.icon-comments,#icon-edit-comments,.icon32.icon-appearance,#icon-themes,.icon32.icon-plugins,#icon-plugins,.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit,.icon32.icon-tools,#icon-tools,#icon-admin,.icon32.icon-settings,#icon-options-general,.icon32.icon-site,#icon-ms-admin{background-image:url(../images/icons32.png?ver=20111206)}.icon32.icon-post,#icon-edit,#icon-post{background-position:-552px -5px}.icon32.icon-dashboard,#icon-index{background-position:-137px -5px}.icon32.icon-media,#icon-upload{background-position:-251px -5px}.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category{background-position:-190px -5px}.icon32.icon-page,#icon-edit-pages,#icon-page{background-position:-312px -5px}.icon32.icon-comments,#icon-edit-comments{background-position:-72px -5px}.icon32.icon-appearance,#icon-themes{background-position:-11px -5px}.icon32.icon-plugins,#icon-plugins{background-position:-370px -5px}.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit{background-position:-600px -5px}.icon32.icon-tools,#icon-tools,#icon-admin{background-position:-432px -5px}.icon32.icon-settings,#icon-options-general{background-position:-492px -5px}.icon32.icon-site,#icon-ms-admin{background-position:-659px -5px}@media only screen and (-webkit-min-device-pixel-ratio:1.5){.icon32.icon-post,#icon-edit,#icon-post,.icon32.icon-dashboard,#icon-index,.icon32.icon-media,#icon-upload,.icon32.icon-links,#icon-link-manager,#icon-link,#icon-link-category,.icon32.icon-page,#icon-edit-pages,#icon-page,.icon32.icon-comments,#icon-edit-comments,.icon32.icon-appearance,#icon-themes,.icon32.icon-plugins,#icon-plugins,.icon32.icon-users,#icon-users,#icon-profile,#icon-user-edit,.icon32.icon-tools,#icon-tools,#icon-admin,.icon32.icon-settings,#icon-options-general,.icon32.icon-site,#icon-ms-admin{background-image:url(../images/icons32-2x.png?ver=20120412);background-size:708px 45px}.icon16.icon-dashboard,.menu-icon-dashboard div.wp-menu-image,.icon16.icon-post,.menu-icon-post div.wp-menu-image,.icon16.icon-media,.menu-icon-media div.wp-menu-image,.icon16.icon-links,.menu-icon-links div.wp-menu-image,.icon16.icon-page,.menu-icon-page div.wp-menu-image,.icon16.icon-comments,.menu-icon-comments div.wp-menu-image,.icon16.icon-appearance,.menu-icon-appearance div.wp-menu-image,.icon16.icon-plugins,.menu-icon-plugins div.wp-menu-image,.icon16.icon-users,.menu-icon-users div.wp-menu-image,.icon16.icon-tools,.menu-icon-tools div.wp-menu-image,.icon16.icon-settings,.menu-icon-settings div.wp-menu-image,.icon16.icon-site,.menu-icon-site div.wp-menu-image{background-image:url('../images/menu-2x.png?ver=20120412');background-size:390px 64px}}table.diff .diff-deletedline{background-color:#fdd}table.diff .diff-deletedline del{background-color:#f99}table.diff .diff-addedline{background-color:#dfd}table.diff .diff-addedline ins{background-color:#9f9}#att-info{background-color:#e4f2fd}#sidemenu a{background-color:#f9f9f9;border-color:#f9f9f9;border-bottom-color:#dfdfdf}#sidemenu a.current{background-color:#fff;border-color:#dfdfdf #dfdfdf #fff;color:#d54e21}#replyerror{border-color:#ddd;background-color:#f9f9f9}.vim-current,.vim-current th,.vim-current td{background-color:#e4f2fd!important}#plugin-information .fyi ul{background-color:#eaf3fa}#plugin-information .fyi h2.mainheader{background-color:#cee1ef}#plugin-information pre,#plugin-information code{background-color:#ededff}#plugin-information pre{border:1px solid #ccc}.inline-edit-row fieldset input[type="text"],.inline-edit-row fieldset textarea,#bulk-titles{border-color:#ddd}.inline-editor div.title{background-color:#eaf3fa}.inline-editor ul.cat-checklist{background-color:#fff;border-color:#ddd}.inline-editor .categories .catshow,.inline-editor .categories .cathide{color:#21759b}.inline-editor .quick-edit-save{background-color:#f1f1f1}fieldset.inline-edit-col-right .inline-edit-col{border-color:#dfdfdf}.attention{color:#d54e21}.meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows.png) no-repeat 6px 7px}.tablenav .tablenav-pages{color:#555}.tablenav .tablenav-pages a{border-color:#e3e3e3;background:#eee url('../images/menu-bits.gif?ver=20100610') repeat-x scroll left -379px}.tablenav .tablenav-pages a:hover,.tablenav .tablenav-pages a:focus{color:#d54e21}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:focus{color:#aaa}.tablenav .tablenav-pages .current{background:#dfdfdf;border-color:#d3d3d3}#availablethemes,#availablethemes td{border-color:#ddd}#current-theme img{border-color:#999}#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{color:#999}#TB_window #TB_title a.tb-theme-preview-link:hover,#TB_window #TB_title a.tb-theme-preview-link:focus{color:#ccc}.misc-pub-section{border-top-color:#fff;border-bottom-color:#dfdfdf}#minor-publishing{border-bottom-color:#dfdfdf}#post-body .misc-pub-section{border-left-color:#eee}.post-com-count span{background-color:#bbb}.form-table .color-palette td{border-color:#fff}.sortable-placeholder{border-color:#bbb;background-color:#f5f5f5}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,body.press-this ul.category-tabs li.tabs a{color:#333}.view-switch #view-switch-list{background:transparent url(../images/list.png) no-repeat 0 0}.view-switch .current #view-switch-list{background:transparent url(../images/list.png) no-repeat -40px 0}.view-switch #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -20px 0}.view-switch .current #view-switch-excerpt{background:transparent url(../images/list.png) no-repeat -60px 0}#header-logo{background:transparent url(../images/wp-logo.png?ver=20110504) no-repeat scroll center center}.popular-tags,.feature-filter{background-color:#fff;border-color:#dfdfdf}div.widgets-sortables,#widgets-left .inactive,#available-widgets .widget-holder{background-color:#fcfcfc;border-color:#dfdfdf}#available-widgets .widget-description{color:#555}.sidebar-name{color:#464646;text-shadow:#fff 0 1px 0;border-color:#dfdfdf;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.sidebar-name:hover,#removing-widget{color:#d54e21}#removing-widget span{color:black}.sidebar-name-arrow{background:transparent url(../images/arrows.png) no-repeat 5px 9px}.sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark.png) no-repeat 5px 9px}.in-widget-title{color:#606060}.deleting .widget-title *{color:#aaa}.imgedit-menu div{border-color:#d5d5d5;background-color:#f1f1f1}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;filter:alpha(opacity=50);opacity:.5}#dashboard_recent_comments div.undo{border-top-color:#dfdfdf}.comment-ays,.comment-ays th{border-color:#ddd}.comment-ays th{background-color:#f1f1f1}#menu-management .menu-edit{border-color:#dfdfdf}#post-body{background:#fff;border-top-color:#fff;border-bottom-color:#dfdfdf}#nav-menu-header{border-bottom-color:#dfdfdf}#nav-menu-footer{border-top-color:#fff}#menu-management .nav-tabs-arrow a{color:#c1c1c1}#menu-management .nav-tabs-arrow a:hover{color:#d54e21}#menu-management .nav-tabs-arrow a:active{color:#464646}#menu-management .nav-tab-active{border-color:#dfdfdf}#menu-management .nav-tab{background:#fbfbfb;border-color:#dfdfdf}.js .input-with-default-title{color:#aaa}#cancel-save{color:#f00}#cancel-save:hover{background-color:#f00;color:#fff}.list-container,.menu-item-handle{border-color:#dfdfdf}.menu li.deleting .menu-item-handle{background-color:#f66;text-shadow:#ccc}.item-type{color:#999}.item-controls .menu-item-delete:hover{color:#f00}.nav-menus-php .item-edit{background:transparent url(../images/arrows.png) no-repeat 8px 10px;border-bottom-color:#eee}.item-edit:hover{background:transparent url(../images/arrows-dark.png) no-repeat 8px 10px}.menu-item-settings{border-color:#dfdfdf}.link-to-original{color:#777;border-color:#dfdfdf}#cancel-save:hover{color:#fff!important}#update-menu-item{color:#fff!important}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important}.submitbox .submitcancel{color:#21759b;border-bottom-color:#21759b}.submitbox .submitcancel:hover{background:#21759b;color:#fff}#menu-management .nav-tab-active,.menu-item-handle,.menu-item-settings{-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}#menu-management .nav-tab-active{background:#f9f9f9;border-bottom-color:#f9f9f9}#upload-form label{color:#777}.about-wrap h1{color:#333;text-shadow:1px 1px 1px white}.about-text{color:#777}.wp-badge{color:#fff;text-shadow:0 -1px 0 rgba(22,57,81,0.3)}.about-wrap h2 .nav-tab{color:#21759b}.about-wrap h2 .nav-tab:hover{color:#d54e21}.about-wrap h2 .nav-tab-active,.about-wrap h2 .nav-tab-active:hover{color:#333}.about-wrap h2 .nav-tab-active{text-shadow:1px 1px 1px white;color:#464646}.about-wrap h3{color:#333;text-shadow:1px 1px 1px white}.about-wrap .feature-section h4{color:#464646}.about-wrap .feature-section img{background:#fff;border:1px #ccc solid;-moz-box-shadow:0 1px 3px rgba(0,0,0,0.3);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.3);box-shadow:0 1px 3px rgba(0,0,0,0.3)}.about-wrap h4.wp-people-group{text-shadow:1px 1px 1px white}.about-wrap .point-releases{border-bottom:1px solid #dfdfdf}.about-wrap .point-releases h3{border-top:1px solid #dfdfdf}.about-wrap .point-releases h3:first-child{border:0}.about-wrap li.wp-person img.gravatar{-moz-box-shadow:0 0 4px rgba(0,0,0,0.4);-webkit-box-shadow:0 0 4px rgba(0,0,0,0.4);box-shadow:0 0 4px rgba(0,0,0,0.4)}.about-wrap li.wp-person .title{color:#464646;text-shadow:1px 1px 1px white}.freedoms-php .about-wrap ol li{color:#999}.freedoms-php .about-wrap ol p{color:#464646}.rtl .bar{border-right-color:none;border-left-color:#99d}.rtl .post-com-count{background-image:url(../images/bubble_bg-rtl.gif)}.rtl #screen-meta-links a.show-settings{background-position:left 3px}.rtl #screen-meta-links a.show-settings.screen-meta-active{background-position:left -33px}.rtl #adminmenushadow,.rtl #adminmenuback{background-image:url(../images/menu-shadow-rtl.png);background-position:top left}.rtl #adminmenu li.wp-has-current-submenu.wp-menu-open .wp-menu-toggle,.rtl #adminmenu li.wp-has-current-submenu:hover .wp-menu-toggle{background:transparent url(../images/arrows-dark.png) no-repeat 8px 6px}.rtl #adminmenu .wp-has-submenu:hover .wp-menu-toggle,.rtl #adminmenu .wp-menu-open .wp-menu-toggle{background:transparent url(../images/arrows.png) no-repeat 8px 6px}.rtl #adminmenu .wp-submenu .wp-submenu-head{border-right-color:none;border-left-color:#dfdfdf}.rtl #adminmenu .wp-submenu-wrap,.rtl.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);box-shadow:-2px 2px 5px rgba(0,0,0,0.4)}.rtl #collapse-button div{background-position:0 -108px}.rtl.folded #collapse-button div{background-position:0 -72px}@media only screen and (max-width:900px){.rtl #adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);-webkit-box-shadow:-2px 2px 5px rgba(0,0,0,0.4);box-shadow:-2px 2px 5px rgba(0,0,0,0.4)}.rtl #collapse-button div{background-position:0 -72px}}.rtl .meta-box-sortables .postbox:hover .handlediv{background:transparent url(../images/arrows.png) no-repeat 6px 7px}.rtl .tablenav .tablenav-pages a{border-color:#e3e3e3;background:#eee url('../images/menu-bits-rtl.gif?ver=20100610') repeat-x scroll right -379px}.rtl #post-body .misc-pub-section{border-right-color:none;border-left-color:#eee}.rtl .sidebar-name-arrow{background:transparent url(../images/arrows.png) no-repeat 5px 9px}.rtl .sidebar-name:hover .sidebar-name-arrow{background:transparent url(../images/arrows-dark.png) no-repeat 5px 9px} \ No newline at end of file diff --git a/wp-admin/css/colors-fresh.dev.css b/wp-admin/css/colors-fresh.dev.css index 4543e55b8..8049099e6 100644 --- a/wp-admin/css/colors-fresh.dev.css +++ b/wp-admin/css/colors-fresh.dev.css @@ -40,6 +40,11 @@ input[type="url"], select { border-color: #dfdfdf; background-color: #fff; + color: #333; +} + +select { + color: #000; } textarea:focus, @@ -86,7 +91,8 @@ a.page-numbers:hover { body, #wpbody, -.form-table .pre { +.form-table .pre, +.ui-autocomplete li a { color: #333; } @@ -144,6 +150,10 @@ div.dashboard-widget-submit { border-top-color: #ccc; } +ul.category-tabs li { + border-color: transparent; +} + div.tabs-panel, .wp-tab-panel, ul.category-tabs li.tabs, @@ -182,8 +192,7 @@ h3.dashboard-widget-title small, .sidebar-name, #nav-menu-header, #nav-menu-footer, -.menu-item-handle, -#fullscreen-topbar { +.menu-item-handle { background-color: #f1f1f1; /* Fallback */ background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); /* IE10 */ background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); /* Firefox */ @@ -295,8 +304,9 @@ div.error a { border-color: #c00 !important; } -.submit { - border-color: #DFDFDF; +.submit, +#commentsdiv #add-new-comment { + border-color: #dfdfdf; } .highlight { @@ -317,6 +327,15 @@ td.help { color: #9a9a9a; } +.ui-autocomplete { + background-color: #efefef; + border-color: #bbb; +} + +.ui-autocomplete li a.ui-state-hover { + background-color: #ddd; +} + .post-com-count { background-image: url(../images/bubble_bg.gif); color: #fff; @@ -804,16 +823,16 @@ table.widefat span.spam a, .contextual-help-tabs .active a, .contextual-help-tabs .active a:hover { background: #fff; - color: #000; + color: #333; } /* screen options and help tabs */ #screen-options-link-wrap, #contextual-help-link-wrap { background-color: #e3e3e3; /* Fallback */ - border-right: 1px solid transparent; - border-left: 1px solid transparent; - border-bottom: 1px solid transparent; + border-right: 1px solid #ccc; + border-left: 1px solid #ccc; + border-bottom: 1px solid #ccc; background-image: -ms-linear-gradient(bottom, #dfdfdf, #f1f1f1); /* IE10 */ background-image: -moz-linear-gradient(bottom, #dfdfdf, #f1f1f1); /* Firefox */ background-image: -o-linear-gradient(bottom, #dfdfdf, #f1f1f1); /* Opera */ @@ -827,15 +846,15 @@ table.widefat span.spam a, } #screen-meta-links a.show-settings:hover { - color: #000; + color: #333; } #screen-meta-links a.show-settings { - background: transparent url(../images/arrows.png) no-repeat right 3px; + background: transparent url(../images/arrows.png) no-repeat right 4px; } #screen-meta-links a.show-settings.screen-meta-active { - background: transparent url(../images/arrows.png) no-repeat right -33px; + background: transparent url(../images/arrows.png) no-repeat right -31px; } /* end screen options and help tabs */ @@ -858,7 +877,6 @@ table.widefat span.spam a, } #footer a:hover { - color: #000; text-decoration: underline; } @@ -1089,212 +1107,394 @@ table.widefat .spam a:hover, background-image: -webkit-linear-gradient(bottom, #dfdfdf, #fff); /* new Webkit */ background-image: linear-gradient(bottom, #dfdfdf, #fff); /* proposed W3C Markup */ } + #collapse-menu:hover #collapse-button { border-color: #aaa; } + #collapse-button div { background: transparent url(../images/arrows.png) no-repeat 0 -72px; } + .folded #collapse-button div { background-position: 0 -108px; } +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + #adminmenu li.menu-top { + border-top-color: #f9f9f9; + border-bottom-color: #dfdfdf; + } + + #adminmenu li.wp-has-current-submenu, + #adminmenu li.current.menu-top { + background-color: #777; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #6d6d6d, #808080); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #6d6d6d, #808080); /* Firefox */ + background-image: -o-linear-gradient(bottom, #6d6d6d, #808080); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#6d6d6d), to(#808080)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #6d6d6d, #808080); /* new Webkit */ + background-image: linear-gradient(bottom, #6d6d6d, #808080); /* proposed W3C Markup */ + } + + #adminmenu li.menu-top li:hover a { + background-image: none; + } + + #adminmenu li.wp-has-current-submenu, + #adminmenu li.current.menu-top { + border-top-color: #808080; + border-bottom-color: #6d6d6d; + } + + #adminmenu .wp-has-current-submenu .wp-submenu-wrap { + -moz-box-shadow: 2px 2px 5px rgba( 0, 0, 0, 0.4 ); + -webkit-box-shadow: 2px 2px 5px rgba( 0, 0, 0, 0.4 ); + box-shadow: 2px 2px 5px rgba( 0, 0, 0, 0.4 ); + } + + #collapse-button div { + background-position: 0 -108px; + } +} + /* menu and screen icons */ +.icon16, +.icon32, +div.wp-menu-image { + background-color: transparent; + background-repeat: no-repeat; +} + +.icon16.icon-dashboard, +.menu-icon-dashboard div.wp-menu-image, +.icon16.icon-post, +.menu-icon-post div.wp-menu-image, +.icon16.icon-media, +.menu-icon-media div.wp-menu-image, +.icon16.icon-links, +.menu-icon-links div.wp-menu-image, +.icon16.icon-page, +.menu-icon-page div.wp-menu-image, +.icon16.icon-comments, +.menu-icon-comments div.wp-menu-image, +.icon16.icon-appearance, +.menu-icon-appearance div.wp-menu-image, +.icon16.icon-plugins, +.menu-icon-plugins div.wp-menu-image, +.icon16.icon-users, +.menu-icon-users div.wp-menu-image, +.icon16.icon-tools, +.menu-icon-tools div.wp-menu-image, +.icon16.icon-settings, +.menu-icon-settings div.wp-menu-image, +.icon16.icon-site, +.menu-icon-site div.wp-menu-image { + background-image: url('../images/menu.png?ver=20120201'); +} + .icon16.icon-dashboard, #adminmenu .menu-icon-dashboard div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -60px -33px; + background-position: -59px -33px; } #adminmenu .menu-icon-dashboard:hover div.wp-menu-image, #adminmenu .menu-icon-dashboard.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-dashboard.current div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -60px -1px; + background-position: -59px -1px; } .icon16.icon-post, #adminmenu .menu-icon-post div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -271px -33px; + background-position: -269px -33px; } #adminmenu .menu-icon-post:hover div.wp-menu-image, -#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -271px -1px; +#adminmenu .menu-icon-post.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-post.current div.wp-menu-image { + background-position: -269px -1px; } .icon16.icon-media, #adminmenu .menu-icon-media div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -120px -33px; + background-position: -119px -33px; } #adminmenu .menu-icon-media:hover div.wp-menu-image, -#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -120px -1px; +#adminmenu .menu-icon-media.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-media.current div.wp-menu-image { + background-position: -119px -1px; } .icon16.icon-links, #adminmenu .menu-icon-links div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -90px -33px; + background-position: -89px -33px; } #adminmenu .menu-icon-links:hover div.wp-menu-image, -#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -90px -1px; +#adminmenu .menu-icon-links.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-links.current div.wp-menu-image { + background-position: -89px -1px; } .icon16.icon-page, #adminmenu .menu-icon-page div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -150px -33px; + background-position: -149px -33px; } #adminmenu .menu-icon-page:hover div.wp-menu-image, -#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -150px -1px; +#adminmenu .menu-icon-page.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-page.current div.wp-menu-image { + background-position: -149px -1px; } .icon16.icon-comments, #adminmenu .menu-icon-comments div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -30px -33px; + background-position: -29px -33px; } #adminmenu .menu-icon-comments:hover div.wp-menu-image, #adminmenu .menu-icon-comments.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-comments.current div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -30px -1px; + background-position: -29px -1px; } .icon16.icon-appearance, #adminmenu .menu-icon-appearance div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll 0 -33px; + background-position: 1px -33px; } #adminmenu .menu-icon-appearance:hover div.wp-menu-image, -#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll 0 -1px; +#adminmenu .menu-icon-appearance.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-appearance.current div.wp-menu-image { + background-position: 1px -1px; } .icon16.icon-plugins, #adminmenu .menu-icon-plugins div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -180px -33px; + background-position: -179px -33px; } #adminmenu .menu-icon-plugins:hover div.wp-menu-image, -#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -180px -1px; +#adminmenu .menu-icon-plugins.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-plugins.current div.wp-menu-image { + background-position: -179px -1px; } .icon16.icon-users, #adminmenu .menu-icon-users div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -300px -33px; + background-position: -300px -33px; } #adminmenu .menu-icon-users:hover div.wp-menu-image, #adminmenu .menu-icon-users.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-users.current div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -300px -1px; + background-position: -300px -1px; } .icon16.icon-tools, #adminmenu .menu-icon-tools div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -210px -33px; + background-position: -209px -33px; } #adminmenu .menu-icon-tools:hover div.wp-menu-image, #adminmenu .menu-icon-tools.wp-has-current-submenu div.wp-menu-image, #adminmenu .menu-icon-tools.current div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -210px -1px; + background-position: -209px -1px; } .icon16.icon-settings, #adminmenu .menu-icon-settings div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -240px -33px; + background-position: -239px -33px; } #adminmenu .menu-icon-settings:hover div.wp-menu-image, -#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -240px -1px; +#adminmenu .menu-icon-settings.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-settings.current div.wp-menu-image { + background-position: -239px -1px; } .icon16.icon-site, #adminmenu .menu-icon-site div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -360px -33px; + background-position: -359px -33px; } #adminmenu .menu-icon-site:hover div.wp-menu-image, -#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image { - background: transparent url('../images/menu.png?ver=20111128') no-repeat scroll -360px -1px; +#adminmenu .menu-icon-site.wp-has-current-submenu div.wp-menu-image, +#adminmenu .menu-icon-site.current div.wp-menu-image { + background-position: -359px -1px; } /* end menu and screen icons */ /* Screen Icons */ +.icon32.icon-post, +#icon-edit, +#icon-post, +.icon32.icon-dashboard, +#icon-index, +.icon32.icon-media, +#icon-upload, +.icon32.icon-links, +#icon-link-manager, +#icon-link, +#icon-link-category, +.icon32.icon-page, +#icon-edit-pages, +#icon-page, +.icon32.icon-comments, +#icon-edit-comments, +.icon32.icon-appearance, +#icon-themes, +.icon32.icon-plugins, +#icon-plugins, +.icon32.icon-users, +#icon-users, +#icon-profile, +#icon-user-edit, +.icon32.icon-tools, +#icon-tools, +#icon-admin, +.icon32.icon-settings, +#icon-options-general, +.icon32.icon-site, +#icon-ms-admin { + background-image: url(../images/icons32.png?ver=20111206); +} + .icon32.icon-post, #icon-edit, #icon-post { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -552px -5px; + background-position: -552px -5px; } .icon32.icon-dashboard, #icon-index { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -137px -5px; + background-position: -137px -5px; } .icon32.icon-media, #icon-upload { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -251px -5px; + background-position: -251px -5px; } .icon32.icon-links, #icon-link-manager, #icon-link, #icon-link-category { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -190px -5px; + background-position: -190px -5px; } .icon32.icon-page, #icon-edit-pages, #icon-page { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -312px -5px; + background-position: -312px -5px; } .icon32.icon-comments, #icon-edit-comments { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -72px -5px; + background-position: -72px -5px; } .icon32.icon-appearance, #icon-themes { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -11px -5px; + background-position: -11px -5px; } .icon32.icon-plugins, #icon-plugins { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -370px -5px; + background-position: -370px -5px; } .icon32.icon-users, #icon-users, #icon-profile, #icon-user-edit { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -600px -5px; + background-position: -600px -5px; } .icon32.icon-tools, #icon-tools, #icon-admin { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -432px -5px; + background-position: -432px -5px; } .icon32.icon-settings, #icon-options-general { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -492px -5px; + background-position: -492px -5px; } .icon32.icon-site, #icon-ms-admin { - background: transparent url(../images/icons32.png?ver=20111206) no-repeat -659px -5px; + background-position: -659px -5px; +} + +@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { + .icon32.icon-post, + #icon-edit, + #icon-post, + .icon32.icon-dashboard, + #icon-index, + .icon32.icon-media, + #icon-upload, + .icon32.icon-links, + #icon-link-manager, + #icon-link, + #icon-link-category, + .icon32.icon-page, + #icon-edit-pages, + #icon-page, + .icon32.icon-comments, + #icon-edit-comments, + .icon32.icon-appearance, + #icon-themes, + .icon32.icon-plugins, + #icon-plugins, + .icon32.icon-users, + #icon-users, + #icon-profile, + #icon-user-edit, + .icon32.icon-tools, + #icon-tools, + #icon-admin, + .icon32.icon-settings, + #icon-options-general, + .icon32.icon-site, + #icon-ms-admin { + background-image: url(../images/icons32-2x.png?ver=20120412); + background-size: 708px 45px; + } + + .icon16.icon-dashboard, + .menu-icon-dashboard div.wp-menu-image, + .icon16.icon-post, + .menu-icon-post div.wp-menu-image, + .icon16.icon-media, + .menu-icon-media div.wp-menu-image, + .icon16.icon-links, + .menu-icon-links div.wp-menu-image, + .icon16.icon-page, + .menu-icon-page div.wp-menu-image, + .icon16.icon-comments, + .menu-icon-comments div.wp-menu-image, + .icon16.icon-appearance, + .menu-icon-appearance div.wp-menu-image, + .icon16.icon-plugins, + .menu-icon-plugins div.wp-menu-image, + .icon16.icon-users, + .menu-icon-users div.wp-menu-image, + .icon16.icon-tools, + .menu-icon-tools div.wp-menu-image, + .icon16.icon-settings, + .menu-icon-settings div.wp-menu-image, + .icon16.icon-site, + .menu-icon-site div.wp-menu-image { + background-image: url('../images/menu-2x.png?ver=20120412'); + background-size: 390px 64px; + } } /* end screen icons */ - /* Diff */ table.diff .diff-deletedline { background-color: #fdd; @@ -1342,25 +1542,6 @@ table.diff .diff-addedline ins { } /* Install Plugins */ -.star-average, -.star.star-rating { - background-color: #fc0; -} - -div.star.select:hover { - background-color: #d00; -} - -div.star img { - border-left: 1px solid #fff; - border-right: 1px solid #fff; -} - -.widefat div.star img { - border-left: 1px solid #f9f9f9; - border-right: 1px solid #f9f9f9; -} - #plugin-information .fyi ul { background-color: #eaf3fa; } @@ -1469,7 +1650,7 @@ fieldset.inline-edit-col-right .inline-edit-col { } #post-body .misc-pub-section { - border-right-color: #eee; + border-left-color: #eee; } .post-com-count span { @@ -1517,20 +1698,8 @@ body.press-this ul.category-tabs li.tabs a { border-color: #DFDFDF; } -#theme-information .action-button { - border-top-color: #DFDFDF; -} - -.theme-listing br.line { - border-bottom-color: #ccc; -} - div.widgets-sortables, -#widgets-left .inactive { - background-color: #fcfcfc; - border-color: #dfdfdf; -} - +#widgets-left .inactive, #available-widgets .widget-holder { background-color: #fcfcfc; border-color: #dfdfdf; @@ -1657,10 +1826,7 @@ div.widgets-sortables, color: #fff; } -.list-container { - border-color: #DFDFDF; -} - +.list-container, .menu-item-handle { border-color: #dfdfdf; } @@ -1735,25 +1901,9 @@ div.widgets-sortables, border-bottom-color: #f9f9f9; } -/* custom header & background pages */ #upload-form label { color: #777; } -/* custom header & background pages */ - -/* full screen */ -.fullscreen-overlay { - background: #fff; -} - -.wp-fullscreen-focus #wp-fullscreen-title, -.wp-fullscreen-focus #wp-fullscreen-container { - border-color: #ccc; -} - -#fullscreen-topbar { - border-bottom-color: #DFDFDF; -} /* Begin About Pages */ @@ -1797,11 +1947,11 @@ div.widgets-sortables, .about-wrap .feature-section img { background: #fff; - border-color: #dfdfdf; + border: 1px #ccc solid; - -moz-box-shadow: 0 0 6px rgba( 0, 0, 0, 0.3 ); - -webkit-box-shadow: 0 0 6px rgba( 0, 0, 0, 0.3 ); - box-shadow: 0 0 6px rgba( 0, 0, 0, 0.3 ); + -moz-box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.3 ); + -webkit-box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.3 ); } .about-wrap h4.wp-people-group { @@ -1899,6 +2049,19 @@ div.widgets-sortables, background-position: 0 -72px; } +/* Auto-folding of the admin menu for RTL */ +@media only screen and (max-width: 900px) { + .rtl #adminmenu .wp-has-current-submenu .wp-submenu-wrap{ + -moz-box-shadow: -2px 2px 5px rgba( 0, 0, 0, 0.4 ); + -webkit-box-shadow: -2px 2px 5px rgba( 0, 0, 0, 0.4 ); + box-shadow: -2px 2px 5px rgba( 0, 0, 0, 0.4 ); + } + + .rtl #collapse-button div { + background-position: 0 -72px; + } +} + /* Edit Image */ .rtl .meta-box-sortables .postbox:hover .handlediv { background: transparent url(../images/arrows.png) no-repeat 6px 7px; diff --git a/wp-admin/css/customize-controls-rtl.css b/wp-admin/css/customize-controls-rtl.css new file mode 100644 index 000000000..1b1830f41 --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.css @@ -0,0 +1 @@ +.control-section .customize-section-title{font-family:Tahoma,Arial,sans-serif}.customize-section-title:after{right:auto;left:20px}#customize-header-actions .button-primary{float:left}#customize-header-actions img{float:left;margin-right:0;margin-left:4px}.customize-control{float:right}.customize-control-radio input,.customize-control-checkbox input{margin-right:0;margin-left:5px}.customize-section .dropdown{float:right}.customize-section .dropdown-content{float:right;margin-right:0;margin-left:16px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.customize-control .dropdown-arrow{right:auto;left:0;border-color:#ccc;border-style:solid;border-width:1px 0 1px 1px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.customize-control .dropdown-arrow:after{right:auto;left:4px}.customize-control-color .dropdown{margin-right:0;margin-left:5px}.customize-section input[type="text"].color-picker-hex,.customize-control-color .farbtastic-placeholder{float:right}.customize-section .customize-control-image .actions{text-align:left}.customize-control-image .library,.customize-control-image .actions,.customize-section .customize-control-image .library ul,.customize-section .customize-control-image .library li,.customize-section .customize-control-image .library-content{float:right} \ No newline at end of file diff --git a/wp-admin/css/customize-controls-rtl.dev.css b/wp-admin/css/customize-controls-rtl.dev.css new file mode 100644 index 000000000..1852fd91a --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.dev.css @@ -0,0 +1,86 @@ +.control-section .customize-section-title { + font-family: Tahoma, Arial, sans-serif; +} +.customize-section-title:after { + right: auto; + left: 20px; +} + +#customize-header-actions .button-primary { + float: left; +} + +#customize-header-actions img { + float: left; + margin-right: 0; + margin-left: 4px; +} + +.customize-control { + float: right; +} + +.customize-control-radio input, +.customize-control-checkbox input { + margin-right: 0; + margin-left: 5px; +} + +/* + * Dropdowns + */ +.customize-section .dropdown { + float: right; +} + +.customize-section .dropdown-content { + float: right; + margin-right: 0px; + margin-left: 16px; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.customize-control .dropdown-arrow { + right: auto; + left: 0; + + border-color: #ccc; + border-style: solid; + border-width: 1px 0 1px 1px; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.customize-control .dropdown-arrow:after { + right: auto; + left: 4px; +} + +/* + * Color Picker + */ +.customize-control-color .dropdown { + margin-right: 0; + margin-left: 5px; +} + +.customize-section input[type="text"].color-picker-hex, +.customize-control-color .farbtastic-placeholder { + float: right; +} + +/* + * Image Picker + */ +.customize-section .customize-control-image .actions { + text-align: left; +} + +.customize-control-image .library, +.customize-control-image .actions, +.customize-section .customize-control-image .library ul, +.customize-section .customize-control-image .library li, +.customize-section .customize-control-image .library-content { + float: right; +} diff --git a/wp-admin/css/customize-controls.css b/wp-admin/css/customize-controls.css new file mode 100644 index 000000000..9447cc3e7 --- /dev/null +++ b/wp-admin/css/customize-controls.css @@ -0,0 +1 @@ +body{overflow:hidden}#customize-controls a{text-decoration:none}.customize-section{border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;margin:0}.control-section.customize-section:hover,.control-section.customize-section.open{border-top-color:#808080}.control-section.customize-section:hover{border-bottom-color:#6d6d6d}.customize-section.open:hover{border-bottom-color:#dfdfdf}.customize-section:last-child{box-shadow:0 1px 0 0 #fff}.customize-section-title{margin:0;padding:15px 20px;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cannot-expand .customize-section-title{cursor:auto}.customize-section-content{display:none;padding:10px 20px 15px;overflow:hidden}.control-section .customize-section-title{padding:10px 20px;font-size:15px;font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-weight:normal;text-shadow:0 1px 0 #fff;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#eee);background-image:-moz-linear-gradient(top,#f5f5f5,#eee);background-image:-ms-linear-gradient(top,#f5f5f5,#eee);background-image:-o-linear-gradient(top,#f5f5f5,#eee);background-image:linear-gradient(top,#f5f5f5,#eee)}.control-section:hover .customize-section-title,.control-section .customize-section-title:hover,.control-section.open .customize-section-title{color:#fff;text-shadow:0 -1px 0 #333;background-color:#808080;background-image:-webkit-linear-gradient(top,#808080,#6d6d6d);background-image:-moz-linear-gradient(top,#808080,#6d6d6d);background-image:-ms-linear-gradient(top,#808080,#6d6d6d);background-image:-o-linear-gradient(top,#808080,#6d6d6d);background-image:linear-gradient(top,#808080,#6d6d6d)}.control-section.open .customize-section-title{border-bottom:1px solid #6d6d6d}.customize-section.open .customize-section-content{display:block;background:#fdfdfd}.customize-section-title:after{content:'';width:0;height:0;border-color:#ccc transparent;border-style:solid;border-width:6px 6px 0;position:absolute;top:25px;right:20px;z-index:1}.cannot-expand .customize-section-title:after{display:none}.customize-section-title:hover:after{border-color:#aaa transparent}.control-section .customize-section-title:hover:after{border-color:#eee transparent}.control-section .customize-section-title:after{top:15px}#customize-info .customize-section-content{background:transparent}#customize-info .preview-notice{font-size:13px;line-height:24px;color:#999}#customize-info .theme-name{font-size:20px;font-weight:200;line-height:24px;color:#333;display:block;text-shadow:0 1px 0 #fff}#customize-info .theme-screenshot{width:258px;border:1px solid #ccc}#customize-info .theme-description{margin-top:1em;color:#777;line-height:20px}#customize-controls .submit{text-align:center}#customize-theme-controls>ul,#customize-theme-controls .customize-section-content{margin:0}#customize-header-actions .button-primary{float:right;margin-top:11px}#customize-header-actions img{display:none;float:right;margin-top:13px;margin-right:4px}.saving #customize-header-actions img{display:block}.customize-control{width:100%;float:left;clear:both;margin-bottom:8px}.customize-control-title{display:block;line-height:24px;font-weight:bold}.customize-control select,.customize-control input[type="text"],.customize-control input[type="radio"],.customize-control input[type="checkbox"],.customize-control-color .color-picker,.customize-control-checkbox label,.customize-control-upload div{line-height:28px}.customize-control input[type="text"]{width:98%;line-height:18px;margin:0}.customize-control select{min-width:50%;max-width:100%;height:28px;line-height:28px}.customize-control-checkbox input{margin-right:5px}.customize-control-radio{padding:5px 0 10px}.customize-control-radio .customize-control-title{margin-bottom:0;line-height:22px}.customize-control-radio label{line-height:20px}.customize-control-radio input{margin-right:5px}#customize-preview iframe{width:100%;height:100%}.customize-section .dropdown{float:left;display:block;position:relative;cursor:pointer;-webkit-border-radius:3px;border-radius:3px}.customize-section .dropdown-content{overflow:hidden;float:left;min-width:30px;height:16px;line-height:16px;margin-right:16px;padding:4px 5px;background-color:#eee;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.customize-control .dropdown-arrow{position:absolute;top:0;bottom:0;right:0;width:15px;border-color:#ccc;border-style:solid;border-width:1px 1px 1px 0;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.customize-control .dropdown-arrow:after{content:'';width:0;height:0;border-color:#ccc transparent;border-style:solid;border-width:4px 4px 0 4px;position:absolute;top:50%;margin-top:-1px;right:4px;z-index:1}.customize-section .dropdown:hover .dropdown-content,.customize-control .dropdown:hover .dropdown-arrow{border-color:#aaa}.customize-section .dropdown:hover .dropdown-arrow:after{border-color:#aaa transparent}.customize-control .dropdown-status{display:none;max-width:112px;color:#777}.customize-control-color .color-picker-hex,.customize-control-color .farbtastic-placeholder{display:none}.customize-control-color.open .color-picker-hex,.customize-control-color.open .farbtastic-placeholder{display:block}.customize-control-color .dropdown{margin-right:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#fff;border:1px solid rgba(0,0,0,0.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,0.25)}.customize-section input[type="text"].color-picker-hex{float:left;width:85px;font-family:monospace;text-align:center}.customize-section input[type="text"].color-picker-hex:focus::-webkit-input-placeholder{color:transparent}.customize-section input[type="text"].color-picker-hex:-moz-placeholder{color:#999}.customize-control-color .farbtastic-placeholder{width:100%;margin:5px 0 10px;float:left}.customize-control-color .farbtastic{margin:0 auto}.customize-control-image .library,.customize-control-image .actions{display:none;float:left;width:100%}.customize-control-image.open .library,.customize-control-image.open .actions{display:block}.customize-section .customize-control-image .dropdown-content{height:auto;min-height:24px;min-width:40px;padding:0}.customize-section .customize-control-image .dropdown-status{padding:4px 5px}.customize-section .customize-control-image .preview-thumbnail img{display:block;width:100%;max-width:122px;max-height:98px;margin:0 auto}.customize-section .customize-control-image .actions{text-align:right}.customize-section .customize-control-image .library ul{border-bottom:1px solid #dfdfdf;float:left;width:100%;margin:10px 0 0}.customize-section .customize-control-image .library li{color:#999;float:left;padding:3px 5px;margin:0;border-style:solid;border-color:transparent;border-width:1px 1px 0 1px}.customize-section .customize-control-image .library li.library-selected{margin-bottom:-1px;padding-bottom:4px;color:#777;background:#fdfdfd;border-color:#dfdfdf;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.customize-section .customize-control-image .library-content{display:none;width:100%;float:left;padding:10px 0}.customize-section .customize-control-image .library-content.library-selected{display:block}.customize-section .customize-control-image .library .thumbnail{display:block;width:100%}.customize-section .customize-control-image .library .thumbnail:hover img{border-color:#21759b}.customize-section .customize-control-image .library .thumbnail img{display:block;max-width:90%;max-height:80px;margin:5px auto;padding:4px;background:#fff;border:1px solid #dfdfdf}.customize-section .customize-control-upload .upload-fallback,.customize-section .customize-control-image .upload-fallback{display:none}.customize-section .customize-control-upload .upload-dropzone,.customize-section .customize-control-image .upload-dropzone{display:none;padding:15px 10px;border:3px dashed #dfdfdf;margin:5px auto;text-align:center;color:#777;position:relative;cursor:default}.customize-section .customize-control-upload .upload-dropzone.supports-drag-drop,.customize-section .customize-control-image .upload-dropzone.supports-drag-drop{display:block;-webkit-transition:border-color .1s;-moz-transition:border-color .1s;-ms-transition:border-color .1s;-o-transition:border-color .1s;transition:border-color .1s}.customize-section .customize-control-upload .library ul li,.customize-section .customize-control-image .library ul li{cursor:pointer}.customize-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over,.customize-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over{border-color:#83b4d8}.ios .wp-full-overlay{position:relative}.ios #customize-preview{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}body.cheatin{min-width:0;background:#f9f9f9;padding:50px}body.cheatin p{max-width:700px;margin:0 auto;padding:2em;font-size:14px;background:#fff;border:1px solid #dfdfdf;-webkit-border-radius:3px;border-radius:3px} \ No newline at end of file diff --git a/wp-admin/css/customize-controls.dev.css b/wp-admin/css/customize-controls.dev.css new file mode 100644 index 000000000..908caa2d8 --- /dev/null +++ b/wp-admin/css/customize-controls.dev.css @@ -0,0 +1,537 @@ +body { + overflow: hidden; +} + +#customize-controls a { + text-decoration: none; +} + +.customize-section { + border-top: 1px solid #fff; + border-bottom: 1px solid #dfdfdf; + margin: 0; +} + +.control-section.customize-section:hover, +.control-section.customize-section.open { + border-top-color: #808080; +} + +.control-section.customize-section:hover { + border-bottom-color: #6d6d6d; +} + +.customize-section.open:hover { + border-bottom-color: #dfdfdf; +} + +.customize-section:last-child { + box-shadow: 0 1px 0 0px #fff; +} + +.customize-section-title { + margin: 0; + padding: 15px 20px; + position: relative; + + cursor: pointer; + + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.cannot-expand .customize-section-title { + cursor: auto; +} + +.customize-section-content { + display: none; + padding: 10px 20px 15px; + overflow: hidden; +} + +.control-section .customize-section-title { + padding: 10px 20px; + font-size: 15px; + font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; + font-weight: normal; + text-shadow: 0 1px 0 #fff; + + background-color: #f5f5f5; + background-image: -webkit-linear-gradient( top, #f5f5f5, #eee ); + background-image: -moz-linear-gradient( top, #f5f5f5, #eee ); + background-image: -ms-linear-gradient( top, #f5f5f5, #eee ); + background-image: -o-linear-gradient( top, #f5f5f5, #eee ); + background-image: linear-gradient( top, #f5f5f5, #eee ); +} + +.control-section:hover .customize-section-title, +.control-section .customize-section-title:hover, +.control-section.open .customize-section-title { + color: #fff; + text-shadow: 0 -1px 0 #333; + background-color: #808080; + background-image: -webkit-linear-gradient( top, #808080, #6d6d6d ); + background-image: -moz-linear-gradient( top, #808080, #6d6d6d ); + background-image: -ms-linear-gradient( top, #808080, #6d6d6d ); + background-image: -o-linear-gradient( top, #808080, #6d6d6d ); + background-image: linear-gradient( top, #808080, #6d6d6d ); +} + +.control-section.open .customize-section-title { + border-bottom: 1px solid #6d6d6d; +} + +.customize-section.open .customize-section-content { + display: block; + background: #fdfdfd; +} + +.customize-section-title:after { + content: ''; + width: 0; + height: 0; + border-color: #ccc transparent; + border-style: solid; + border-width: 6px 6px 0; + position: absolute; + top: 25px; + right: 20px; + z-index: 1; +} + +.cannot-expand .customize-section-title:after { + display: none; +} + +.customize-section-title:hover:after { + border-color: #aaa transparent; +} + +.control-section .customize-section-title:hover:after { + border-color: #eee transparent; +} + +.control-section .customize-section-title:after { + top: 15px; +} + +#customize-info .customize-section-content { + background: transparent; +} + +#customize-info .preview-notice { + font-size: 13px; + line-height: 24px; + color: #999; +} + +#customize-info .theme-name { + font-size: 20px; + font-weight: 200; + line-height: 24px; + color: #333; + display: block; + text-shadow: 0 1px 0 #fff; +} + +#customize-info .theme-screenshot { + width: 258px; + border: 1px solid #ccc; +} + +#customize-info .theme-description { + margin-top: 1em; + color: #777; + line-height: 20px; +} + +#customize-controls .submit { + text-align: center; +} + +#customize-theme-controls > ul, +#customize-theme-controls .customize-section-content { + margin: 0; +} + +#customize-header-actions .button-primary { + float: right; + margin-top: 11px; +} + +#customize-header-actions img { + display: none; + float: right; + margin-top: 13px; + margin-right: 4px; +} + +.saving #customize-header-actions img { + display: block; +} + +.customize-control { + width: 100%; + float: left; + clear: both; + margin-bottom: 8px; +} + +.customize-control-title { + display: block; + line-height: 24px; + font-weight: bold; +} + +.customize-control select, +.customize-control input[type="text"], +.customize-control input[type="radio"], +.customize-control input[type="checkbox"], +.customize-control-color .color-picker, +.customize-control-checkbox label, +.customize-control-upload div { + line-height: 28px; +} + +.customize-control input[type="text"] { + width: 98%; + line-height: 18px; + margin: 0; +} + +.customize-control select { + min-width: 50%; + max-width: 100%; + height: 28px; + line-height: 28px; +} + +.customize-control-checkbox input { + margin-right: 5px; +} + +.customize-control-radio { + padding: 5px 0 10px; +} + +.customize-control-radio .customize-control-title { + margin-bottom: 0; + line-height: 22px; +} + +.customize-control-radio label { + line-height: 20px; +} + +.customize-control-radio input { + margin-right: 5px; +} + +#customize-preview iframe { + width: 100%; + height: 100%; +} + +/* + * Style for custom settings + */ + +/* + * Dropdowns + */ +.customize-section .dropdown { + float: left; + display: block; + position: relative; + cursor: pointer; + + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.customize-section .dropdown-content { + overflow: hidden; + float: left; + min-width: 30px; + height: 16px; + line-height: 16px; + margin-right: 16px; + padding: 4px 5px; + background-color: #eee; + border: 1px solid #ccc; + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; + + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.customize-control .dropdown-arrow { + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 15px; + + border-color: #ccc; + border-style: solid; + border-width: 1px 1px 1px 0; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.customize-control .dropdown-arrow:after { + content: ''; + width: 0; + height: 0; + border-color: #ccc transparent; + border-style: solid; + border-width: 4px 4px 0 4px; + position: absolute; + top: 50%; + margin-top: -1px; + right: 4px; + z-index: 1; +} + +.customize-section .dropdown:hover .dropdown-content, +.customize-control .dropdown:hover .dropdown-arrow { + border-color: #aaa; +} + +.customize-section .dropdown:hover .dropdown-arrow:after { + border-color: #aaa transparent; +} + +.customize-control .dropdown-status { + display: none; + max-width: 112px; + color: #777; +} + +/* + * Color Picker + */ +.customize-control-color .color-picker-hex, +.customize-control-color .farbtastic-placeholder { + display: none; +} + +.customize-control-color.open .color-picker-hex, +.customize-control-color.open .farbtastic-placeholder { + display: block; +} + +.customize-control-color .dropdown { + margin-right: 5px; + margin-bottom: 5px; +} + +.customize-control-color .dropdown .dropdown-content { + background-color: #fff; + border: 1px solid rgba( 0, 0, 0, 0.15 ); +} + +.customize-control-color .dropdown:hover .dropdown-content { + border-color: rgba( 0, 0, 0, 0.25 ); +} + +.customize-section input[type="text"].color-picker-hex { + float: left; + width: 85px; + font-family: monospace; + text-align: center; +} + +/* The centered cursor overlaps the placeholder in webkit. Hide it when selected. */ +.customize-section input[type="text"].color-picker-hex:focus::-webkit-input-placeholder { + color: transparent; +} +.customize-section input[type="text"].color-picker-hex:-moz-placeholder { + color: #999; +} + +.customize-control-color .farbtastic-placeholder { + width: 100%; + margin: 5px 0 10px; + float: left; +} + +.customize-control-color .farbtastic { + margin: 0 auto; +} + +/* + * Image Picker + */ +.customize-control-image .library, +.customize-control-image .actions { + display: none; + float: left; + width: 100%; +} + +.customize-control-image.open .library, +.customize-control-image.open .actions { + display: block; +} + +.customize-section .customize-control-image .dropdown-content { + height: auto; + min-height: 24px; + min-width: 40px; + padding: 0; +} + +.customize-section .customize-control-image .dropdown-status { + padding: 4px 5px; +} + +.customize-section .customize-control-image .preview-thumbnail img { + display: block; + width: 100%; + max-width: 122px; + max-height: 98px; + margin: 0 auto; +} + +.customize-section .customize-control-image .actions { + text-align: right; +} + +.customize-section .customize-control-image .library ul { + border-bottom: 1px solid #dfdfdf; + float: left; + width: 100%; + margin: 10px 0 0; +} + +.customize-section .customize-control-image .library li { + color: #999; + float: left; + padding: 3px 5px; + margin: 0; + border-style: solid; + border-color: transparent; + border-width: 1px 1px 0 1px; +} + +.customize-section .customize-control-image .library li.library-selected { + margin-bottom: -1px; + padding-bottom: 4px; + + color: #777; + background: #fdfdfd; + border-color: #dfdfdf; + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0 ; +} + +.customize-section .customize-control-image .library-content { + display: none; + width: 100%; + float: left; + padding: 10px 0; +} + +.customize-section .customize-control-image .library-content.library-selected { + display: block; +} + +.customize-section .customize-control-image .library .thumbnail { + display: block; + width: 100%; +} + +.customize-section .customize-control-image .library .thumbnail:hover img { + border-color: #21759b; +} + +.customize-section .customize-control-image .library .thumbnail img { + display: block; + max-width: 90%; + max-height: 80px; + + margin: 5px auto; + padding: 4px; + background: #fff; + border: 1px solid #dfdfdf; +} + +.customize-section .customize-control-upload .upload-fallback, +.customize-section .customize-control-image .upload-fallback { + display: none; +} + +.customize-section .customize-control-upload .upload-dropzone, +.customize-section .customize-control-image .upload-dropzone { + display: none; + padding: 15px 10px; + border: 3px dashed #dfdfdf; + margin: 5px auto; + text-align: center; + color: #777; + position: relative; + cursor: default; +} + +.customize-section .customize-control-upload .upload-dropzone.supports-drag-drop, +.customize-section .customize-control-image .upload-dropzone.supports-drag-drop { + display: block; + -webkit-transition: border-color 0.1s; + -moz-transition: border-color 0.1s; + -ms-transition: border-color 0.1s; + -o-transition: border-color 0.1s; + transition: border-color 0.1s; +} + +.customize-section .customize-control-upload .library ul li, +.customize-section .customize-control-image .library ul li { + cursor: pointer; +} + +.customize-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over, +.customize-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over { + border-color: #83b4d8; +} + +/** + * iOS can't scroll iframes, + * instead it expands the iframe size to match the size of the content + */ +.ios .wp-full-overlay { + position: relative; +} + +.ios #customize-preview { + position: relative; +} + +.ios #customize-controls .wp-full-overlay-sidebar-content { + -webkit-overflow-scrolling: touch; +} + +/** + * Handle cheaters. + */ +body.cheatin { + min-width: 0; + background: #f9f9f9; + padding: 50px; +} + +body.cheatin p { + max-width: 700px; + margin: 0 auto; + padding: 2em; + font-size: 14px; + + background: #fff; + border: 1px solid #dfdfdf; + + -webkit-border-radius: 3px; + border-radius: 3px; +} \ No newline at end of file diff --git a/wp-admin/css/farbtastic.css b/wp-admin/css/farbtastic.css index 1022b71a1..ef1129c0d 100644 --- a/wp-admin/css/farbtastic.css +++ b/wp-admin/css/farbtastic.css @@ -40,7 +40,6 @@ background: url(../images/marker.png) no-repeat; } - /* farbtastic-rtl */ .rtl .farbtastic .color, .rtl .farbtastic .overlay { @@ -51,5 +50,3 @@ .rtl .farbtastic .marker { margin: -8px -8px 0 0; } - - diff --git a/wp-admin/css/ie-rtl.css b/wp-admin/css/ie-rtl.css index 274306d22..47dd4e5bd 100644 --- a/wp-admin/css/ie-rtl.css +++ b/wp-admin/css/ie-rtl.css @@ -1 +1 @@ -body{direction:rtl;width:99.5%;}.rtl #adminmenuback{left:auto;right:0;background-image:none;}.rtl #adminmenuback,.rtl #adminmenuwrap{border-width:0 0 0 1px;}#plupload-upload-ui{zoom:1;}.post-com-count-wrapper a.post-com-count{float:none;}#adminmenu .wp-submenu ul{width:99%;}#adminmenu .wp-submenu .wp-submenu .wp-submenu-wrap,#adminmenu .wp-menu-open .wp-submenu .wp-submenu-wrap{border:1px solid #dfdfdf;}.folded #adminmenu .wp-submenu{right:30px;top:-4px;}#adminmenu .wp-submenu .wp-submenu-head{padding:6px 10px 6px 4px;}#adminmenu .wp-menu-arrow{display:none!important;}#wpcontent #adminmenu .wp-submenu li.wp-submenu-head{padding:3px 10px 4px 4px;}div.quicktags-toolbar input{min-width:0;}.inline-edit-row fieldset label span.title{float:right;}.inline-edit-row fieldset label span.input-text-wrap{margin-right:0;}p.search-box{float:left;}#bh{margin:7px 10px 0 0;float:left;}.postbox div.inside,.wp-editor-wrap .wp-editor-container .wp-editor-area,#nav-menu-theme-locations .howto select{width:97.5%;}div#dashboard-widgets{padding-right:0;padding-left:1px;}#dashboard_quick_press h4{text-align:right;}.tagchecklist span a{margin:4px -9px 0 0;}.widefat th input{margin:0 5px 0 0;}#TB_window{width:670px;position:absolute;top:50%;left:50%;margin-right:335px!important;}#dashboard_plugins{direction:ltr;}#dashboard_plugins h3.hndle{direction:rtl;}#dashboard_incoming_links ul li,#dashboard_secondary ul li,#dashboard_primary ul li,p.row-actions{width:100%;}#post-status-info{height:25px;}p.submit{height:22px;}.inner-sidebar{position:static;}form#widgets-filter{position:static;}.menu-item-depth-0{margin-left:0;}.menu-item-depth-1{margin-left:-30px;}.menu-item-depth-2{margin-left:-60px;}.menu-item-depth-3{margin-left:-90px;}.menu-item-depth-4{margin-left:-120px;}.menu-item-depth-5{margin-left:-150px;}.menu-item-depth-6{margin-left:-180px;}.menu-item-depth-7{margin-left:-210px;}.menu-item-depth-8{margin-left:-240px;}.menu-item-depth-9{margin-left:-270px;}.menu-item-depth-10{margin-left:-300px;}.menu-item-depth-11{margin-left:-330px;}#menu-management,.nav-menus-php .menu-edit,#nav-menu-header .submitbox{zoom:1;}.nav-menus-php label{max-width:90%!important;}p.button-controls,.nav-menus-php .tabs-panel{max-width:90%;}.nav-menus-php .major-publishing-actions .publishing-action{float:none;}#wpbody #nav-menu-header label{float:none;}#nav-menu-header{margin-top:-10px;}#nav-menu-footer{margin-bottom:-20px;}#update-nav-menu .publishing-action{max-width:200px;}#nav-menus-frame #update-nav-menu .delete-action{margin-top:-25px;float:left;}#menu-to-edit li{margin-top:-10px;margin-bottom:-10px;}.sortable-placeholder{margin-top:0!important;margin-left:0!important;margin-bottom:13px!important;padding:0!important;}.auto-add-pages{clear:both;float:none;}#nav-menus-frame .open-label span{float:none;display:inline-block;}#nav-menus-frame .delete-action{float:none;} \ No newline at end of file +body{direction:rtl;width:99.5%}.rtl #adminmenuback{left:auto;right:0;background-image:none}.rtl #adminmenuback,.rtl #adminmenuwrap{border-width:0 0 0 1px}#plupload-upload-ui{zoom:1}.post-com-count-wrapper a.post-com-count{float:none}#adminmenu .wp-submenu ul{width:99%}#adminmenu .wp-submenu .wp-submenu .wp-submenu-wrap,#adminmenu .wp-menu-open .wp-submenu .wp-submenu-wrap{border:1px solid #dfdfdf}.folded #adminmenu .wp-submenu{right:30px;top:-4px}#adminmenu .wp-submenu .wp-submenu-head{padding:6px 10px 6px 4px}#adminmenu .wp-menu-arrow{display:none!important}#wpcontent #adminmenu .wp-submenu li.wp-submenu-head{padding:3px 10px 4px 4px}div.quicktags-toolbar input{min-width:0}.inline-edit-row fieldset label span.title{float:right}.inline-edit-row fieldset label span.input-text-wrap{margin-right:0}p.search-box{float:left}#bh{margin:7px 10px 0 0;float:left}.postbox div.inside,.wp-editor-wrap .wp-editor-container .wp-editor-area,#nav-menu-theme-locations .howto select{width:97.5%}div#dashboard-widgets{padding-right:0;padding-left:1px}#dashboard_quick_press h4{text-align:right}.tagchecklist span a{margin:4px -9px 0 0}.widefat th input{margin:0 5px 0 0}#TB_window{width:670px;position:absolute;top:50%;left:50%;margin-right:335px!important}#dashboard_plugins{direction:ltr}#dashboard_plugins h3.hndle{direction:rtl}#dashboard_incoming_links ul li,#dashboard_secondary ul li,#dashboard_primary ul li,p.row-actions{width:100%}#post-status-info{height:25px}p.submit{height:22px}form#widgets-filter{position:static}.menu-item-depth-0{margin-left:0}.menu-item-depth-1{margin-left:-30px}.menu-item-depth-2{margin-left:-60px}.menu-item-depth-3{margin-left:-90px}.menu-item-depth-4{margin-left:-120px}.menu-item-depth-5{margin-left:-150px}.menu-item-depth-6{margin-left:-180px}.menu-item-depth-7{margin-left:-210px}.menu-item-depth-8{margin-left:-240px}.menu-item-depth-9{margin-left:-270px}.menu-item-depth-10{margin-left:-300px}.menu-item-depth-11{margin-left:-330px}#menu-management,.nav-menus-php .menu-edit,#nav-menu-header .submitbox{zoom:1}.nav-menus-php label{max-width:90%!important}p.button-controls,.nav-menus-php .tabs-panel{max-width:90%}.nav-menus-php .major-publishing-actions .publishing-action{float:none}#wpbody #nav-menu-header label{float:none}#nav-menu-header{margin-top:-10px}#nav-menu-footer{margin-bottom:-20px}#update-nav-menu .publishing-action{max-width:200px}#nav-menus-frame #update-nav-menu .delete-action{margin-top:-25px;float:left}#menu-to-edit li{margin-top:-10px;margin-bottom:-10px}.sortable-placeholder{margin-top:0!important;margin-left:0!important;margin-bottom:13px!important;padding:0!important}.auto-add-pages{clear:both;float:none}#nav-menus-frame .open-label span{float:none;display:inline-block}#nav-menus-frame .delete-action{float:none} \ No newline at end of file diff --git a/wp-admin/css/ie-rtl.dev.css b/wp-admin/css/ie-rtl.dev.css index 78417d7de..16357de52 100644 --- a/wp-admin/css/ie-rtl.dev.css +++ b/wp-admin/css/ie-rtl.dev.css @@ -126,10 +126,6 @@ p.submit { /* quick edit and reply in edit-comments.php */ height:22px; } -.inner-sidebar { /* fix edit single comment */ - position: static; -} - form#widgets-filter { /* fix widget page */ position: static; } @@ -241,4 +237,3 @@ p.button-controls, #nav-menus-frame .delete-action { float: none; } - diff --git a/wp-admin/css/ie.css b/wp-admin/css/ie.css index d8c9a5e01..ec4709cd4 100644 --- a/wp-admin/css/ie.css +++ b/wp-admin/css/ie.css @@ -1 +1 @@ -.welcome-panel .wp-badge{position:absolute;}.welcome-panel .welcome-panel-column{margin:0 -25px 0 4%;}#wp-fullscreen-title{width:97%;}#wp_mce_fullscreen_ifr{background-color:#f9f9f9;}#wp-fullscreen-tagline{color:#888;font-size:14px;}#adminmenushadow{display:none;}#adminmenuback{left:0;background-image:none;}#adminmenuwrap{position:static;}#adminmenu{position:relative;}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1;}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd;}#adminmenu .separator{font-size:1px;line-height:1px;}#adminmenu .wp-submenu ul{margin:0;}.folded #adminmenu .wp-submenu ul{margin-left:5px;}#adminmenu li.menu-top{margin-bottom:-2px;}#adminmenu li.wp-not-current-submenu:hover .wp-menu-arrow{display:none;}#wpcontent #adminmenu .wp-submenu li.wp-submenu-head{padding:3px 4px 4px 10px;zoom:100%;}.js.folded #adminmenu .menu-top{height:30px;}.js.folded #adminmenu .wp-submenu{margin:-1px 0 0 0;}.js.folded #adminmenu li.menu-top{display:block;zoom:100%;}ul#adminmenu{z-index:99;}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto;}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal;}#wpcontent #adminmenu .wp-submenu li{padding:0;}#collapse-menu{line-height:23px;}#wpadminbar .ab-comments-icon{padding-top:7px;}table.fixed th,table.fixed td{border-top:1px solid #ddd;}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary,#wpbody-content input.button-highlighted{overflow:visible;}#dashboard-widgets #dashboard_quick_press form p.submit #publish{float:none;}#dashboard-widgets h3 a{height:14px;line-height:14px;}#dashboard_browser_nag{color:#fff;}#dashboard_browser_nag .browser-icon{position:relative;}.tablenav-pages .current-page{vertical-align:middle;}#wpbody-content .postbox{border:1px solid #dfdfdf;}#wpbody-content .postbox h3{margin-bottom:-1px;}.major-publishing-actions,.wp-submenu,.wp-submenu li,.wp-menu-toggle,#template,#template div,#editcat,#addcat{zoom:100%;}.wp-menu-arrow{height:28px;}.submitbox{margin-top:10px;}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:39%;}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:19%;}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:49%;}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:29%;}.inline-edit-row p.submit{zoom:100%;}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em;}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0;zoom:100%;}#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input{line-height:130%;}#wpbody-content .inline-edit-row .input-text-wrap input{width:95%;}#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input{width:8em;}#titlediv #title{width:98%;}a.button{line-height:1.4em;margin:1px;padding:2px 6px;}#screen-options-wrap{overflow:hidden;}#the-comment-list .comment-item,#post-status-info,#wpwrap,#wrap,#postdivrich,#postdiv,#poststuff,.metabox-holder,#titlediv,#post-body,#editorcontainer,.tablenav,.widget-liquid-left,.widget-liquid-right,#widgets-left,.widgets-sortables,#dragHelper,.widget .widget-top,.widget,.widget-control-actions,.tagchecklist,#col-container,#col-left,#col-right,.fileedit-sub{display:block;zoom:100%;}p.search-box{position:static;float:right;margin:-3px 0 4px;}#editorcontainer #content{overflow:auto;margin:auto;width:98%;}form#template div{width:100%;}#ed_toolbar input,#ed_reply_toolbar input{overflow:visible;padding:0 4px;}#poststuff h2{font-size:1.6em;}#bh{margin:7px 10px 0 0;float:right;}div#dashboard-widgets{padding-right:1px;}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block;}.tagchecklist span a{margin:4px 0 0 -9px;}.tablenav .button-secondary,.nav .button-secondary{padding-top:2px;padding-bottom:2px;}.tablenav select{font-size:13px;display:inline-block;vertical-align:top;margin-top:2px;}.tablenav .actions select{width:155px;}table.ie-fixed{table-layout:fixed;}.widefat tr,.widefat th{margin-bottom:0;border-spacing:0;}.widefat th input{margin:0 0 0 5px;}.widefat .check-column{padding:6px 0 2px;}.widefat tbody th.check-column{padding:4px 0 22px;}.widefat{empty-cells:show;border-collapse:collapse;}.tablenav a.button-secondary{display:inline-block;padding:2px 5px;}.inactive-sidebar .widgets-sortables{padding-bottom:8px;}#available-widgets .widget-holder{padding-bottom:65px;}#widgets-left .inactive{padding-bottom:10px;}.widget-liquid-right .widget,.inactive-sidebar .widget{position:relative;}#wpcontent .button-primary-disabled{color:#9FD0D5;background:#298CBA;}#wpcontent #ajax-loading,#wpcontent .ajax-loading{vertical-align:baseline;}#the-comment-list .unapproved tr,#the-comment-list .unapproved td{background-color:#ffffe0;}.imgedit-submit{width:300px;}#nav-menus-frame,#wpbody,.menu li{zoom:100%;}#update-nav-menu #post-body{overflow:hidden;}.menu li{min-width:100%;}.menu li.sortable-placeholder{min-width:400px;}.about-wrap img.element-screenshot{padding:2px;}.about-wrap .feature-section img,.about-wrap .feature-section .image-mask{border-width:1px;border-style:solid;}.about-wrap .feature-section.three-col img{margin-left:0;}* html .row-actions{visibility:visible;}* html div.widget-liquid-left,* html div.widget-liquid-right{display:block;position:relative;}* html #editorcontainer{padding:0;}* html #poststuff h2{margin-left:0;}* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea{border:1px solid #DFDFDF;}* html .feature-filter .feature-group li{width:145px;}* html .widget-top .widget-title-action a{background:url("../images/menu-bits.gif?ver=20100610") no-repeat scroll 0 -110px;}* html div.widget-liquid-left{width:99%;}* html .widgets-sortables{height:50px;}* html a#content_resize{right:-2px;}* html .widget-title h4{width:205px;}* html #removing-widget .in-widget-title{display:none;}* html .media-item .pinkynail{height:32px;width:40px;}* html .describe .field input.text,* html .describe .field textarea{width:440px;}* html input{border:1px solid #dfdfdf;}* html .meta-box-sortables .postbox .handlediv{background:transparent url(../images/menu-bits-vs.gif) no-repeat scroll left -111px;}* html .edit-box{display:inline;}* html .inner-sidebar #side-sortables,* html .postbox-container .meta-box-sortables{height:300px;}* html #wpbody-content #screen-options-link-wrap{display:inline-block;width:150px;text-align:center;}* html #wpbody-content #contextual-help-link-wrap{display:inline-block;width:100px;text-align:center;}* html #adminmenu{margin-left:-80px;}* html .folded #adminmenu{margin-left:-22px;}* html #wpcontent #adminmenu li.menu-top{display:inline;padding:0;margin:0;}* html #footer{margin:0;}* html #wpcontent #adminmenu .wp-menu-open .wp-menu-toggle{background:none;}* html #wpcontent #adminmenu .wp-has-submenu .wp-menu-toggle{background:url(../images/menu-bits.gif?ver=20100610) no-repeat scroll left -109px;}* html #wpcontent #adminmenu li.wp-has-current-submenu .wp-menu-toggle{background:url(../images/menu-bits.gif?ver=20100610) no-repeat scroll left -206px;}* html #adminmenu div.wp-menu-image{height:29px;} \ No newline at end of file +.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-left:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column{margin:0 -25px 0 4%}#wp-fullscreen-title{width:97%}#wp_mce_fullscreen_ifr{background-color:#f9f9f9}#wp-fullscreen-tagline{color:#888;font-size:14px}#adminmenushadow{display:none}#adminmenuback{left:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd}#adminmenu .separator{font-size:1px;line-height:1px}#adminmenu .wp-submenu ul{margin:0}.folded #adminmenu .wp-submenu ul{margin-left:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu li.wp-not-current-submenu:hover .wp-menu-arrow{display:none}#wpcontent #adminmenu .wp-submenu li.wp-submenu-head{padding:3px 4px 4px 10px;zoom:100%}.js.folded #adminmenu .menu-top{height:30px}.js.folded #adminmenu .wp-submenu{margin:-1px 0 0 0}.js.folded #adminmenu li.menu-top{display:block;zoom:100%}ul#adminmenu{z-index:99}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal}#wpcontent #adminmenu .wp-submenu li{padding:0}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}table.fixed th,table.fixed td{border-top:1px solid #ddd}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary,#wpbody-content input.button-highlighted{overflow:visible}#dashboard-widgets #dashboard_quick_press form p.submit #publish{float:none}#dashboard-widgets h3 a{height:14px;line-height:14px}#dashboard_browser_nag{color:#fff}#dashboard_browser_nag .browser-icon{position:relative}.tablenav-pages .current-page{vertical-align:middle}#wpbody-content .postbox{border:1px solid #dfdfdf}#wpbody-content .postbox h3{margin-bottom:-1px}.major-publishing-actions,.wp-submenu,.wp-submenu li,.wp-menu-toggle,#template,#template div,#editcat,#addcat{zoom:100%}.wp-menu-arrow{height:28px}.submitbox{margin-top:10px}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:19%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:29%}.inline-edit-row p.submit{zoom:100%}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0;zoom:100%}#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input{line-height:130%}#wpbody-content .inline-edit-row .input-text-wrap input{width:95%}#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input{width:8em}#titlediv #title{width:98%}a.button{line-height:1.4em;margin:1px;padding:2px 6px}#screen-options-wrap{overflow:hidden}#the-comment-list .comment-item,#post-status-info,#wpwrap,#wrap,#postdivrich,#postdiv,#poststuff,.metabox-holder,#titlediv,#post-body,#editorcontainer,.tablenav,.widget-liquid-left,.widget-liquid-right,#widgets-left,.widgets-sortables,#dragHelper,.widget .widget-top,.widget,.widget-control-actions,.tagchecklist,#col-container,#col-left,#col-right,.fileedit-sub{display:block;zoom:100%}p.search-box{position:static;float:right;margin:-3px 0 4px}#editorcontainer #content{overflow:auto;margin:auto;width:98%}form#template div{width:100%}.wp-editor-container .quicktags-toolbar input{overflow:visible;padding:0 4px}#poststuff h2{font-size:1.6em}#bh{margin:7px 10px 0 0;float:right}div#dashboard-widgets{padding-right:1px}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block}.tagchecklist span a{margin:4px 0 0 -9px}.tablenav .button-secondary,.nav .button-secondary{padding-top:2px;padding-bottom:2px}.tablenav select{font-size:13px;display:inline-block;vertical-align:top;margin-top:2px}.tablenav .actions select{width:155px}table.ie-fixed{table-layout:fixed}.widefat tr,.widefat th{margin-bottom:0;border-spacing:0}.widefat th input{margin:0 0 0 5px}.widefat .check-column{padding:6px 0 2px}.widefat tbody th.check-column{padding:4px 0 22px}.widefat{empty-cells:show;border-collapse:collapse}.tablenav a.button-secondary{display:inline-block;padding:2px 5px}.inactive-sidebar .widgets-sortables{padding-bottom:8px}#available-widgets .widget-holder{padding-bottom:65px}#widgets-left .inactive{padding-bottom:10px}.widget-liquid-right .widget,.inactive-sidebar .widget{position:relative}#wpcontent .button-primary-disabled{color:#9fd0d5;background:#298cba}#wpcontent #ajax-loading,#wpcontent .ajax-loading{vertical-align:baseline}#the-comment-list .unapproved tr,#the-comment-list .unapproved td{background-color:#ffffe0}.imgedit-submit{width:300px}#nav-menus-frame,#wpbody,.menu li{zoom:100%}#update-nav-menu #post-body{overflow:hidden}.menu li{min-width:100%}.menu li.sortable-placeholder{min-width:400px}.about-wrap img.element-screenshot{padding:2px}.about-wrap .feature-section img,.about-wrap .feature-section .image-mask{border-width:1px;border-style:solid}.about-wrap .feature-section.three-col img{margin-left:0}.available-theme{display:inline}.available-theme ul{margin:0}.about-wrap .three-col-images img{margin:0 .6% 10px}.about-wrap .three-col-images .last-feature,.about-wrap .three-col-images .first-feature{float:none}* html .row-actions{visibility:visible}* html div.widget-liquid-left,* html div.widget-liquid-right{display:block;position:relative}* html #editorcontainer{padding:0}* html #poststuff h2{margin-left:0}* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea{border:1px solid #dfdfdf}* html .feature-filter .feature-group li{width:145px}* html .widget-top .widget-title-action a{background:url("../images/menu-bits.gif?ver=20100610") no-repeat scroll 0 -110px}* html div.widget-liquid-left{width:99%}* html .widgets-sortables{height:50px}* html a#content_resize{right:-2px}* html .widget-title h4{width:205px}* html #removing-widget .in-widget-title{display:none}* html .media-item .pinkynail{height:32px;width:40px}* html .describe .field input.text,* html .describe .field textarea{width:440px}* html input{border:1px solid #dfdfdf}* html .meta-box-sortables .postbox .handlediv{background:transparent url(../images/menu-bits-vs.gif) no-repeat scroll left -111px}* html .edit-box{display:inline}* html .postbox-container .meta-box-sortables{height:300px}* html #wpbody-content #screen-options-link-wrap{display:inline-block;width:150px;text-align:center}* html #wpbody-content #contextual-help-link-wrap{display:inline-block;width:100px;text-align:center}* html #adminmenu{margin-left:-80px}* html .folded #adminmenu{margin-left:-22px}* html #wpcontent #adminmenu li.menu-top{display:inline;padding:0;margin:0}* html #footer{margin:0}* html #wpcontent #adminmenu .wp-menu-open .wp-menu-toggle{background:0}* html #wpcontent #adminmenu .wp-has-submenu .wp-menu-toggle{background:url(../images/menu-bits.gif?ver=20100610) no-repeat scroll left -109px}* html #wpcontent #adminmenu li.wp-has-current-submenu .wp-menu-toggle{background:url(../images/menu-bits.gif?ver=20100610) no-repeat scroll left -206px}* html #adminmenu div.wp-menu-image{height:29px} \ No newline at end of file diff --git a/wp-admin/css/ie.dev.css b/wp-admin/css/ie.dev.css index fa9f12ba9..b14f5586c 100644 --- a/wp-admin/css/ie.dev.css +++ b/wp-admin/css/ie.dev.css @@ -1,4 +1,13 @@ -/* Fixes for IE bugs */ +/* Fixes for IE 7 bugs */ + +.wp-editor-wrap .wp-editor-container textarea.wp-editor-area { + width: 97%; +} + +#post-body.columns-2 #postbox-container-1 { + padding-left: 19px; +} + .welcome-panel .wp-badge { position: absolute; } @@ -277,8 +286,7 @@ form#template div { width: 100%; } -#ed_toolbar input, -#ed_reply_toolbar input { +.wp-editor-container .quicktags-toolbar input { overflow: visible; padding: 0 4px; } @@ -371,8 +379,6 @@ table.ie-fixed { position: relative; } - - #wpcontent .button-primary-disabled { color: #9FD0D5; background: #298CBA; @@ -424,6 +430,22 @@ table.ie-fixed { margin-left: 0; } +.available-theme { + display: inline; +} + +.available-theme ul { + margin: 0; +} + +.about-wrap .three-col-images img { + margin: 0 0.6% 10px; +} + +.about-wrap .three-col-images .last-feature, +.about-wrap .three-col-images .first-feature { + float: none; +} /* IE6 leftovers */ * html .row-actions { @@ -500,7 +522,6 @@ table.ie-fixed { display: inline; } -* html .inner-sidebar #side-sortables, * html .postbox-container .meta-box-sortables { height: 300px; } @@ -550,4 +571,3 @@ table.ie-fixed { * html #adminmenu div.wp-menu-image { height: 29px; } - diff --git a/wp-admin/css/install.css b/wp-admin/css/install.css index 868b9810b..184969b07 100644 --- a/wp-admin/css/install.css +++ b/wp-admin/css/install.css @@ -1 +1 @@ -html{background:#f9f9f9;}body{background:#fff;color:#333;font-family:sans-serif;margin:2em auto;padding:1em 2em;-webkit-border-radius:3px;border-radius:3px;border:1px solid #dfdfdf;max-width:700px;}a{color:#21759B;text-decoration:none;}a:hover{color:#D54E21;}h1{border-bottom:1px solid #dadada;clear:both;color:#666;font:24px Georgia,"Times New Roman",Times,serif;margin:30px 0 0 0;padding:0;padding-bottom:7px;}h2{font-size:16px;}p,li,dd,dt{padding-bottom:2px;font-size:14px;line-height:1.5;}code,.code{font-size:14px;}ul,ol,dl{padding:5px 5px 5px 22px;}a img{border:0;}abbr{border:0;font-variant:normal;}#logo{margin:6px 0 14px 0;border-bottom:none;text-align:center;}.step{margin:20px 0 15px;}.step,th{text-align:left;padding:0;}.submit input,.button,.button-secondary{font-family:sans-serif;text-decoration:none;font-size:14px!important;line-height:16px;padding:6px 12px;cursor:pointer;border:1px solid #bbb;color:#464646;-webkit-border-radius:15px;border-radius:15px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}.button:hover,.button-secondary:hover,.submit input:hover{color:#000;border-color:#666;}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top;}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top;}textarea{border:1px solid #dfdfdf;-webkit-border-radius:3px;border-radius:3px;font-family:sans-serif;width:695px;}.form-table{border-collapse:collapse;margin-top:1em;width:100%;}.form-table td{margin-bottom:9px;padding:10px 20px 10px 0;border-bottom:8px solid #fff;font-size:14px;vertical-align:top;}.form-table th{font-size:14px;text-align:left;padding:16px 20px 10px 0;border-bottom:8px solid #fff;width:140px;vertical-align:top;}.form-table code{line-height:18px;font-size:14px;}.form-table p{margin:4px 0 0 0;font-size:11px;}.form-table input{line-height:20px;font-size:15px;padding:2px;border:1px #DFDFDF solid;-webkit-border-radius:3px;border-radius:3px;font-family:sans-serif;}.form-table input[type=text],.form-table input[type=password]{width:206px;}.form-table th p{font-weight:normal;}.form-table.install-success td{vertical-align:middle;padding:16px 20px 10px 0;}.form-table.install-success td p{margin:0;font-size:14px;}.form-table.install-success td code{margin:0;font-size:18px;}#error-page{margin-top:50px;}#error-page p{font-size:14px;line-height:18px;margin:25px 0 20px;}#error-page code,.code{font-family:Consolas,Monaco,monospace;}#pass-strength-result{background-color:#eee;border-color:#ddd!important;border-style:solid;border-width:1px;margin:5px 5px 5px 0;padding:5px;text-align:center;width:200px;display:none;}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important;}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important;}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important;}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important;}.message{border:1px solid #e6db55;padding:.3em .6em;margin:5px 0 15px;background-color:#ffffe0;}body.rtl{font-family:Tahoma,arial;}.rtl h1{font-family:arial;margin:5px -4px 0 0;}.rtl ul,.rtl ol{padding:5px 22px 5px 5px;}.rtl .step,.rtl th,.rtl .form-table th{text-align:right;}.rtl .submit input,.rtl .button,.rtl .button-secondary{margin-right:0;}.rtl #user_login,.rtl #admin_email,.rtl #pass1,.rtl #pass2{direction:ltr;} \ No newline at end of file +html{background:#f9f9f9}body{background:#fff;color:#333;font-family:sans-serif;margin:2em auto;padding:1em 2em;-webkit-border-radius:3px;border-radius:3px;border:1px solid #dfdfdf;max-width:700px}a{color:#21759b;text-decoration:none}a:hover{color:#d54e21}h1{border-bottom:1px solid #dadada;clear:both;color:#666;font:24px Georgia,"Times New Roman",Times,serif;margin:30px 0 0 0;padding:0;padding-bottom:7px}h2{font-size:16px}p,li,dd,dt{padding-bottom:2px;font-size:14px;line-height:1.5}code,.code{font-size:14px}ul,ol,dl{padding:5px 5px 5px 22px}a img{border:0}abbr{border:0;font-variant:normal}#logo{margin:6px 0 14px 0;border-bottom:0;text-align:center}.step{margin:20px 0 15px}.step,th{text-align:left;padding:0}.submit input,.button,.button-secondary{font-family:sans-serif;text-decoration:none;font-size:14px!important;line-height:16px;padding:6px 12px;cursor:pointer;border:1px solid #bbb;color:#464646;-webkit-border-radius:15px;border-radius:15px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}.button:hover,.button-secondary:hover,.submit input:hover{color:#000;border-color:#666}.button,.submit input,.button-secondary{background:#f2f2f2 url(../images/white-grad.png) repeat-x scroll left top}.button:active,.submit input:active,.button-secondary:active{background:#eee url(../images/white-grad-active.png) repeat-x scroll left top}textarea{border:1px solid #dfdfdf;-webkit-border-radius:3px;border-radius:3px;font-family:sans-serif;width:695px}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px;padding:10px 20px 10px 0;border-bottom:8px solid #fff;font-size:14px;vertical-align:top}.form-table th{font-size:14px;text-align:left;padding:16px 20px 10px 0;border-bottom:8px solid #fff;width:140px;vertical-align:top}.form-table code{line-height:18px;font-size:14px}.form-table p{margin:4px 0 0 0;font-size:11px}.form-table input{line-height:20px;font-size:15px;padding:2px;border:1px #dfdfdf solid;-webkit-border-radius:3px;border-radius:3px;font-family:sans-serif}.form-table input[type=text],.form-table input[type=password]{width:206px}.form-table th p{font-weight:normal}.form-table.install-success td{vertical-align:middle;padding:16px 20px 10px 0}.form-table.install-success td p{margin:0;font-size:14px}.form-table.install-success td code{margin:0;font-size:18px}#error-page{margin-top:50px}#error-page p{font-size:14px;line-height:18px;margin:25px 0 20px}#error-page code,.code{font-family:Consolas,Monaco,monospace}#pass-strength-result{background-color:#eee;border-color:#ddd!important;border-style:solid;border-width:1px;margin:5px 5px 5px 0;padding:5px;text-align:center;width:200px;display:none}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}.message{border:1px solid #e6db55;padding:.3em .6em;margin:5px 0 15px;background-color:#ffffe0}body.rtl{font-family:Tahoma,arial}.rtl h1{font-family:arial;margin:5px -4px 0 0}.rtl ul,.rtl ol{padding:5px 22px 5px 5px}.rtl .step,.rtl th,.rtl .form-table th{text-align:right}.rtl .submit input,.rtl .button,.rtl .button-secondary{margin-right:0}.rtl #dbname,.rtl #uname,.rtl #pwd,.rtl #dbhost,.rtl #prefix,.rtl #user_login,.rtl #admin_email,.rtl #pass1,.rtl #pass2{direction:ltr} \ No newline at end of file diff --git a/wp-admin/css/install.dev.css b/wp-admin/css/install.dev.css index 04ff488b0..d77260a83 100644 --- a/wp-admin/css/install.dev.css +++ b/wp-admin/css/install.dev.css @@ -228,7 +228,6 @@ textarea { background-color: #ffffe0; } - /* install-rtl */ body.rtl { font-family: Tahoma, arial; @@ -240,7 +239,7 @@ body.rtl { } .rtl ul, -.rtl ol { +.rtl ol { padding: 5px 22px 5px 5px; } @@ -256,10 +255,14 @@ body.rtl { margin-right: 0; } +.rtl #dbname, +.rtl #uname, +.rtl #pwd, +.rtl #dbhost, +.rtl #prefix, .rtl #user_login, .rtl #admin_email, .rtl #pass1, .rtl #pass2 { direction: ltr; } - diff --git a/wp-admin/css/media-rtl.css b/wp-admin/css/media-rtl.css index d5f7ef555..5f51b606b 100644 --- a/wp-admin/css/media-rtl.css +++ b/wp-admin/css/media-rtl.css @@ -1 +1 @@ -body#media-upload ul#sidemenu{left:auto;right:0;}#search-filter{text-align:left;}.align .field label{padding:0 23px 0 0;margin:0 3px 0 1em;}.image-align-none-label,.image-align-left-label,.image-align-center-label,.image-align-right-label{background-position:center right;}tr.image-size label{margin:0 5px 0 0;}.file-error{margin:0 50px 5px 0;}.progress{left:auto;right:0;}.describe td{padding:0 0 0 5px;}#media-upload .describe th.label{text-align:right;}.menu_order{float:left;}.media-upload-form label.form-help,td.help,#media-upload p.help,#media-upload label.help{font-family:Tahoma,Arial;}#gallery-settings #basic th.label{padding:5px 0 5px 5px;}#gallery-settings .title,h3.media-title{font-family:Tahoma,Arial;}#gallery-settings .describe th.label{text-align:right;}#gallery-settings label,#gallery-settings legend{margin-right:0;margin-left:15px;}#gallery-settings .align .field label{margin:0 3px 0 1em;}#sort-buttons{margin:3px 0 -8px 25px;text-align:left;}#sort-buttons #asc,#sort-buttons #showall{padding-left:0;padding-right:5px;}#sort-buttons span{margin-right:0;margin-left:25px;} \ No newline at end of file +body#media-upload ul#sidemenu{left:auto;right:0}#search-filter{text-align:left}.align .field label{padding:0 23px 0 0;margin:0 3px 0 1em}.image-align-none-label,.image-align-left-label,.image-align-center-label,.image-align-right-label{background-position:center right}tr.image-size label{margin:0 5px 0 0}.file-error{margin:0 50px 5px 0}.progress{left:auto;right:0}.describe td{padding:0 0 0 5px}#media-upload .describe th.label{text-align:right}.menu_order{float:left}.media-upload-form label.form-help,td.help,#media-upload p.help,#media-upload label.help{font-family:Tahoma,Arial}#gallery-settings #basic th.label{padding:5px 0 5px 5px}#gallery-settings .title,h3.media-title{font-family:Tahoma,Arial}#gallery-settings .describe th.label{text-align:right}#gallery-settings label,#gallery-settings legend{margin-right:0;margin-left:15px}#gallery-settings .align .field label{margin:0 3px 0 1em}#sort-buttons{margin:3px 0 -8px 25px;text-align:left}#sort-buttons #asc,#sort-buttons #showall{padding-left:0;padding-right:5px}#sort-buttons span{margin-right:0;margin-left:25px} \ No newline at end of file diff --git a/wp-admin/css/media.css b/wp-admin/css/media.css index 88b5f0318..272ce3b25 100644 --- a/wp-admin/css/media.css +++ b/wp-admin/css/media.css @@ -1 +1 @@ -div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:bold;position:relative;border-bottom-width:1px;border-bottom-style:solid;}body#media-upload ul#sidemenu{font-weight:normal;margin:0 5px;left:0;bottom:-1px;float:none;overflow:hidden;}form{margin:1em;}#search-filter{text-align:right;}th{position:relative;}.media-upload-form label.form-help,td.help{font-family:sans-serif;font-style:italic;font-weight:normal;}.media-upload-form p.help{margin:0;padding:0;}.media-upload-form fieldset{width:100%;border:none;text-align:justify;margin:0 0 1em 0;padding:0;}.image-align-none-label{background:url(../images/align-none.png) no-repeat center left;}.image-align-left-label{background:url(../images/align-left.png) no-repeat center left;}.image-align-center-label{background:url(../images/align-center.png) no-repeat center left;}.image-align-right-label{background:url(../images/align-right.png) no-repeat center left;}tr.image-size td{width:460px;}tr.image-size div.image-size-item{margin:0 0 5px;}#library-form .progress,#gallery-form .progress,.insert-gallery,.describe.startopen,.describe.startclosed{display:none;}.media-item .thumbnail{max-width:128px;max-height:128px;}thead.media-item-info tr{background-color:transparent;}.form-table thead.media-item-info{border:8px solid #fff;}abbr.required{text-decoration:none;border:none;}.describe label{display:inline;}.describe td.error{padding:2px 8px;}.describe td.A1{width:132px;}.describe input[type="text"],.describe textarea{width:460px;border-width:1px;border-style:solid;}#media-upload p.ml-submit{padding:1em 0;}#media-upload p.help,#media-upload label.help{font-family:sans-serif;font-style:italic;font-weight:normal;}#media-upload .ui-sortable .media-item{cursor:move;}#media-upload tr.image-size{margin-bottom:1em;height:3em;}#media-upload #filter{width:623px;}#media-upload #filter .subsubsub{margin:8px 0;}#filter .tablenav select{border-style:solid;border-width:1px;padding:2px;vertical-align:top;width:auto;}#media-upload .del-attachment{display:none;margin:5px 0;}.menu_order{float:right;font-size:11px;margin:10px 10px 0;}.menu_order_input{border:1px solid #ddd;font-size:10px;padding:1px;width:23px;}.ui-sortable-helper{background-color:#fff;border:1px solid #aaa;opacity:.6;filter:alpha(opacity=60);}#media-upload th.order-head{width:20%;text-align:center;}#media-upload th.actions-head{width:25%;text-align:center;}#media-upload a.wp-post-thumbnail{margin:0 20px;}#media-items a.delete{display:block;float:right;}#media-upload .widefat{width:626px;border-style:solid solid none;}.sorthelper{height:37px;width:623px;display:block;}#gallery-settings th.label{width:160px;}#gallery-settings #basic th.label{padding:5px 5px 5px 0;}#gallery-settings .title{clear:both;padding:0 0 3px;font-size:1.6em;border-bottom:1px solid #DADADA;}h3.media-title{font-size:1.6em;}h4.media-sub-title{border-bottom:1px solid #DADADA;font-size:1.3em;margin:12px;padding:0 0 3px;}#gallery-settings .title,h3.media-title,h4.media-sub-title{font-family:Georgia,"Times New Roman",Times,serif;font-weight:normal;color:#5A5A5A;}#gallery-settings .describe td{vertical-align:middle;height:3em;}#gallery-settings .describe th.label{padding-top:.5em;text-align:left;}#gallery-settings .describe{padding:5px;width:615px;clear:both;cursor:default;}#gallery-settings .describe select{width:15em;}#gallery-settings .describe select option,#gallery-settings .describe td{padding:0;}#gallery-settings label,#gallery-settings legend{font-size:13px;color:#464646;margin-right:15px;}#gallery-settings .align .field label{margin:0 1em 0 3px;}#gallery-settings p.ml-submit{border-top:1px solid #dfdfdf;}#gallery-settings select#columns{width:6em;}#sort-buttons{font-size:.8em;margin:3px 25px -8px 0;text-align:right;max-width:625px;}#sort-buttons a{text-decoration:none;}#sort-buttons #asc,#sort-buttons #showall{padding-left:5px;}#sort-buttons span{margin-right:25px;}p.media-types{margin:1em;}tr.not-image{display:none;}table.not-image tr.not-image{display:table-row;}table.not-image tr.image-only{display:none;} \ No newline at end of file +div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:bold;position:relative;border-bottom-width:1px;border-bottom-style:solid}body#media-upload ul#sidemenu{font-weight:normal;margin:0 5px;left:0;bottom:-1px;float:none;overflow:hidden}form{margin:1em}#search-filter{text-align:right}th{position:relative}.media-upload-form label.form-help,td.help{font-family:sans-serif;font-style:italic;font-weight:normal}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:0;text-align:justify;margin:0 0 1em 0;padding:0}.image-align-none-label{background:url(../images/align-none.png) no-repeat center left}.image-align-left-label{background:url(../images/align-left.png) no-repeat center left}.image-align-center-label{background:url(../images/align-center.png) no-repeat center left}.image-align-right-label{background:url(../images/align-right.png) no-repeat center left}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#library-form .progress,#gallery-form .progress,.insert-gallery,.describe.startopen,.describe.startclosed{display:none}.media-item .thumbnail{max-width:128px;max-height:128px}thead.media-item-info tr{background-color:transparent}.form-table thead.media-item-info{border:8px solid #fff}abbr.required{text-decoration:none;border:0}.describe label{display:inline}.describe td.error{padding:2px 8px}.describe td.A1{width:132px}.describe input[type="text"],.describe textarea{width:460px;border-width:1px;border-style:solid}#media-upload p.ml-submit{padding:1em 0}#media-upload p.help,#media-upload label.help{font-family:sans-serif;font-style:italic;font-weight:normal}#media-upload .ui-sortable .media-item{cursor:move}#media-upload tr.image-size{margin-bottom:1em;height:3em}#media-upload #filter{width:623px}#media-upload #filter .subsubsub{margin:8px 0}#filter .tablenav select{border-style:solid;border-width:1px;padding:2px;vertical-align:top;width:auto}#media-upload .del-attachment{display:none;margin:5px 0}.menu_order{float:right;font-size:11px;margin:10px 10px 0}.menu_order_input{border:1px solid #ddd;font-size:10px;padding:1px;width:23px}.ui-sortable-helper{background-color:#fff;border:1px solid #aaa;opacity:.6;filter:alpha(opacity=60)}#media-upload th.order-head{width:20%;text-align:center}#media-upload th.actions-head{width:25%;text-align:center}#media-upload a.wp-post-thumbnail{margin:0 20px}#media-items a.delete{display:block;float:right}#media-upload .widefat{width:626px;border-style:solid solid none}.sorthelper{height:37px;width:623px;display:block}#gallery-settings th.label{width:160px}#gallery-settings #basic th.label{padding:5px 5px 5px 0}#gallery-settings .title{clear:both;padding:0 0 3px;font-size:1.6em;border-bottom:1px solid #dadada}h3.media-title{font-size:1.6em}h4.media-sub-title{border-bottom:1px solid #dadada;font-size:1.3em;margin:12px;padding:0 0 3px}#gallery-settings .title,h3.media-title,h4.media-sub-title{font-family:Georgia,"Times New Roman",Times,serif;font-weight:normal;color:#5a5a5a}#gallery-settings .describe td{vertical-align:middle;height:3em}#gallery-settings .describe th.label{padding-top:.5em;text-align:left}#gallery-settings .describe{padding:5px;width:615px;clear:both;cursor:default}#gallery-settings .describe select{width:15em}#gallery-settings .describe select option,#gallery-settings .describe td{padding:0}#gallery-settings label,#gallery-settings legend{font-size:13px;color:#464646;margin-right:15px}#gallery-settings .align .field label{margin:0 1em 0 3px}#gallery-settings p.ml-submit{border-top:1px solid #dfdfdf}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 25px -8px 0;text-align:right;max-width:625px}#sort-buttons a{text-decoration:none}#sort-buttons #asc,#sort-buttons #showall{padding-left:5px}#sort-buttons span{margin-right:25px}p.media-types{margin:1em}tr.not-image{display:none}table.not-image tr.not-image{display:table-row}table.not-image tr.image-only{display:none} \ No newline at end of file diff --git a/wp-admin/css/media.dev.css b/wp-admin/css/media.dev.css index 38361bb4c..24b163eba 100644 --- a/wp-admin/css/media.dev.css +++ b/wp-admin/css/media.dev.css @@ -51,7 +51,6 @@ th { /* specific to the image upload form */ - .image-align-none-label { background: url(../images/align-none.png) no-repeat center left; } diff --git a/wp-admin/css/wp-admin-rtl.css b/wp-admin/css/wp-admin-rtl.css index c00bcec37..7cae6f167 100644 --- a/wp-admin/css/wp-admin-rtl.css +++ b/wp-admin/css/wp-admin-rtl.css @@ -1 +1 @@ -ol{margin-left:0;margin-right:2em;}.code,code{font-family:Tahoma,Arial,sans-serif;}.quicktags,.search{font:12px Tahoma,Arial,sans-serif;}.icon32{float:right;margin-right:0;margin-left:8px;}.icon16{float:right;margin-right:-8px;margin-left:0;}.howto{font-style:normal;font-family:Tahoma,Arial,sans-serif;}p.install-help{font-style:normal;}#doaction,#doaction2,#post-query-submit{margin-right:0;margin-left:8px;}#timezone_string option{margin-left:0;margin-right:1em;}#pass-strength-result{float:right;margin:13px 1px 5px 5px;}p.search-box{float:left;}#delete-action{float:right;}#publishing-action{float:left;}#post-body .misc-pub-section{border-right:0;border-left-width:1px;border-left-style:solid;float:right;}#post-body .misc-pub-section-last{border-left:0;}#minor-publishing-actions{padding:10px 8px 2px 10px;text-align:left;}#save-post{float:right;}#minor-publishing .ajax-loading{padding:3px 4px 0 0;float:right;}.preview{float:left;}#sticky-span{margin-left:0;margin-right:18px;}.side-info ul{padding-left:0;padding-right:18px;}td.action-links,th.action-links{text-align:left;}.describe .del-link{padding-left:0;padding-right:5px;}form.upgrade .hint{font-style:normal;}#ajax-response.alignleft{margin-left:0;margin-right:2em;}#quicktags{background-position:right top;}#ed_reply_toolbar input{margin:1px 1px 1px 2px;}#wp-fullscreen-body{right:0;left:auto;}#wp-fullscreen-tagline{float:left;}#fullscreen-topbar{left:auto;right:0;}#wp-fullscreen-mode-bar,#wp-fullscreen-button-bar,#wp-fullscreen-close,#wp-fullscreen-count{float:right;}#wp-fullscreen-save{float:left;}#wp-fullscreen-save{padding:2px 5px 0 2px;}#wp-fullscreen-buttons>div{float:right;}#wp-fullscreen-mode-bar{padding:1px 0 0 14px;}#wp-fullscreen-modes a{float:right;border-width:1px 0 1px 1px;}#wp-fullscreen-modes a:first-child{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:3px;border-width:1px;border-top-left-radius:0;border-top-right-radius:3px;border-bottom-right-left:0;border-bottom-right-radius:3px;}#wp-fullscreen-modes a:last-child{-webkit-border-top-right-radius:0;-webkit-border-top-left-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;border-top-right-radius:0;border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:3px;}#wp-fullscreen-save img,#wp-fullscreen-save span{padding-right:0;padding-left:4px;}#wphead{height:32px;margin-left:15px;margin-right:2px;}#header-logo{float:right;}#wphead h1{float:right;}#screen-meta-links{margin-right:0;margin-left:24px;}#screen-meta{margin-right:5px;margin-left:15px;}#screen-options-link-wrap,#contextual-help-link-wrap{float:left;margin-left:0;margin-right:6px;}#screen-meta-links a.show-settings{padding-right:6px;padding-left:16px;}.toggle-arrow{background-position:top right;}.toggle-arrow-active{background-position:bottom right;}.metabox-prefs label{padding-right:0;padding-left:15px;}.metabox-prefs label input{margin-right:2px;margin-left:5px;}#contextual-help-wrap{margin-left:0;margin-right:-4px;}#contextual-help-back{left:170px;right:150px;}#contextual-help-wrap.no-sidebar #contextual-help-back{left:0;right:150px;border-right-width:1px;border-left-width:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:2px;border-bottom-left-radius:2px;}.contextual-help-tabs{float:right;}.contextual-help-tabs a{padding-left:5px;padding-right:12px;}.contextual-help-tabs .active{margin-right:0;margin-left:-1px;}.contextual-help-tabs .active,.contextual-help-tabs-wrap{border-left:0;border-right-width:1px;}.help-tab-content{margin-right:0;margin-left:22px;}.help-tab-content li{margin-left:0;margin-right:18px;}.contextual-help-sidebar{float:left;padding-right:12px;padding-left:8px;}#adminmenuback,#adminmenuwrap{border-width:0 0 0 1px;}#adminmenushadow{right:auto;left:0;}#adminmenu li .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{left:auto;right:146px;}.folded #adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{left:auto;right:26px;}#adminmenu .wp-submenu.sub-open,#adminmenu li.focused.wp-not-current-submenu .wp-submenu,.folded #adminmenu li.focused.wp-has-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.no-js #adminmenu .wp-has-submenu:hover .wp-submenu,.no-js.folded #adminmenu .wp-has-current-submenu:hover .wp-submenu{padding:0 0 8px 8px;}#adminmenu div.wp-menu-image{float:right;}#adminmenu li li{margin-left:0;margin-right:8px;}#adminmenu .wp-submenu a,#adminmenu li li a,.folded #adminmenu .wp-not-current-submenu li a{padding-left:0;padding-right:12px;}#adminmenu .wp-not-current-submenu li a{padding-left:0;padding-right:18px;}.folded #adminmenu li li{margin-left:inherit;margin-right:0;}.folded #adminmenu li li a{padding-left:inherit;padding-right:0;}.wp-menu-arrow{right:0;-moz-transform:translate(-139px);-webkit-transform:translate(-139px);-o-transform:translate(-139px);-ms-transform:translate(-139px);transform:translate(-139px);}.ie8 .wp-menu-arrow{right:-20px;}#adminmenu .wp-menu-arrow div{left:-8px;width:16px;}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{-moz-transform:translate(-138px);-webkit-transform:translate(-138px);-o-transform:translate(-138px);-ms-transform:translate(-138px);transform:translate(-138px);}.folded .wp-menu-arrow{-moz-transform:translate(-27px);-webkit-transform:translate(-27px);-o-transform:translate(-27px);-ms-transform:translate(-27px);transform:translate(-27px);}#adminmenu .wp-not-current-submenu .wp-menu-arrow div{border-style:solid solid none none;border-width:1px 1px 0 0;}#adminmenu .wp-menu-image img{float:right;padding:5px 2px 0 0;}#adminmenu .wp-submenu .wp-submenu-head{padding:6px 10px 5px 4px;}#adminmenu li .wp-submenu-wrap{border-width:1px 0 1px 1px;border-style:solid none solid solid;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:3px;border-top-right-radius:0;border-top-left-radius:3px;}.folded #adminmenu .wp-submenu ul{border-width:0 1px 0 0;}.folded #adminmenu .wp-submenu a{padding-left:0;padding-right:10px;}.folded #adminmenu a.wp-has-submenu{margin-left:0;margin-right:40px;}#adminmenu .wp-menu-toggle{clear:left;float:left;padding:1px 0 0 2px;}#adminmenu .awaiting-mod,#adminmenu span.update-plugins,#sidemenu li a span.update-plugins{font-family:Tahoma,Arial,sans-serif;margin-left:0;margin-right:7px;}#collapse-button{float:right;}.post-com-count-wrapper{font-family:Tahoma,Arial,sans-serif;}.column-response .post-com-count{float:right;margin-right:0;margin-left:5px;}.response-links{float:right;}.widefat th{font-family:Tahoma,Arial,sans-serif;}.widefat td p{margin:2px 0 .8em;}.postbox-container{float:right;}.postbox .handlediv{float:left;}#the-comment-list p.comment-author img{float:right;margin-right:0;margin-left:8px;}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:0;padding-left:125px;}.welcome-panel .welcome-panel-close{right:auto;left:10px;}.welcome-panel .welcome-panel-close:before{left:auto;right:-12px;}.welcome-panel .wp-badge{float:right;}.welcome-panel-content .about-description,.welcome-panel h3{margin-left:0;margin-right:190px;}.welcome-panel .welcome-panel-column{margin:0 -25px 0 5%;padding-left:0;padding-right:25px;float:right;}.welcome-panel .welcome-panel-column.welcome-panel-last{margin-right:auto;padding-right:0;margin-left:0;}.welcome-panel h4 .icon16{margin-left:0;margin-right:-32px;}.welcome-panel .welcome-panel-column-container{padding:0 25px 0 0;}.welcome-panel .welcome-panel-column ul{margin:1.6em 1.3em 1em 1em;}.welcome-panel .welcome-panel-column li{padding-left:0;padding-right:2px;}.fixed .column-comments{text-align:right;}.fixed .column-comments .vers{padding-left:0;padding-right:3px;}.fixed .column-comments a{float:right;}.sorting-indicator{margin-left:0;margin-right:7px;}th.sortable a span,th.sorted a span{float:right;}.tablenav-pages a{margin-right:0;margin-left:1px;}.tablenav-pages .next-page{margin-left:0;margin-right:2px;}.tablenav a.button-secondary{margin:3px 0 0 8px;}.tablenav .tablenav-pages{float:left;}.tablenav .displaying-num{margin-right:0;margin-left:10px;font-family:Tahoma,Arial,sans-serif;font-style:bold;}.tablenav .actions{padding:2px 0 0 8px;}.tablenav .delete{margin-right:0;margin-left:20px;}.view-switch{float:left;}.filter{float:right;margin:-5px 10px 0 0;}.filter .subsubsub{margin-left:0;margin-right:-10px;}#posts-filter fieldset{float:right;margin:0 0 1em 1.5ex;}#posts-filter fieldset legend{padding:0 1px .2em 0;}#wpbody-content .inline-edit-row fieldset{float:right;}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 1px 0 0;}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:left;}.inline-edit-row fieldset label span.title{float:right;}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0;margin-right:5em;}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{padding-right:0;padding-left:.5em;}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-right:0;margin-left:.5em;}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{font-family:Tahoma,Arial,sans-serif;font-style:normal;}.inline-edit-row fieldset .inline-edit-date{float:right;}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row .catshow,.inline-edit-row .cathide,.inline-edit-row #bulk-titles div{font-family:Tahoma,Arial,sans-serif;}.quick-edit-row-post fieldset label.inline-edit-status{float:right;}#bulk-titles div a{float:right;margin:3px -2px 0 3px;overflow:hidden;text-indent:-9999px;}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{right:0;}#sample-permalink{direction:ltr;}#sample-permalink #editable-post-name{unicode-bidi:embed;}#wp-fullscreen-title-prompt-text{left:auto;right:0;}.postarea h3 label{float:right;}.submitbox .submit{text-align:right;}.inside-submitbox #post_status{margin:2px -2px 2px 0;}.submitbox .submit input{margin-right:0;margin-left:4px;}#normal-sortables .postbox .submit{float:left;}#post-body ul.category-tabs,#post-body ul.add-menu-item-tabs{float:right;text-align:left;margin:0 5px 0 -120px;}#post-body ul.category-tabs li.tabs,#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:3px;border-top-left-radius:0;border-top-right-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:3px;}#post-body .categorydiv div.tabs-panel,.taxonomy div.tabs-panel,#post-body #linkcategorydiv div.tabs-panel{margin:0 125px 0 5px;}#side-sortables .comments-box thead th,#normal-sortables .comments-box thead th{font-style:normal;}#commentsdiv img.waiting{padding-left:0;padding-right:5px;}#post-body .category-tabs li.tabs,#post-body .add-menu-item-tabs li.tabs{border-width:1px 1px 1px 0;margin-right:0;margin-left:-1px;}#posts-filter fieldset{float:right;margin:0 0 1em 1.5ex;}#posts-filter fieldset legend{padding:0 1px .2em 0;}#post-body .tagsdiv #newtag{margin-right:0;margin-left:5px;}.autosave-info{padding:2px 2px 2px 15px;text-align:left;}#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl.gif) no-repeat scroll left bottom;cursor:sw-resize;}.curtime #timestamp{background-position:right top;padding-left:0;padding-right:18px;}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{margin:8px 8px 8px 0;}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace;}.category-adder{margin-left:0;margin-right:120px;}#post-body ul.category-tabs,#post-body ul.add-menu-item-tabs{float:right;text-align:left;margin:0 5px 0 -120px;}#post-body ul.category-tabs li.tabs,#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:3px;border-top-left-radius:0;border-top-right-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:3px;}#front-page-warning,#front-static-pages ul,ul.export-filters,.inline-editor ul.cat-checklist ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,#linkcategorydiv ul.categorychecklist ul{margin-left:0;margin-right:18px;}#post-body .category-tabs li.tabs,#post-body .add-menu-item-tabs li.tabs{border-style:solid solid solid none;border-width:1px 1px 1px 0;margin-right:0;margin-left:-1px;}p.help,p.description,span.description,.form-wrap p{font-style:normal;font-family:Tahoma,Arial,sans-serif;}.taghint{margin:15px 12px -24px 0;}#poststuff .tagsdiv .howto{margin:0 8px 6px 0;}.ac_results li{text-align:right;}#wpbody-content .describe th{text-align:right;}.describe .media-item-info .A1B1{padding:0 10px 0 0;}.media-upload-form td label{margin-left:6px;margin-right:2px;}.media-upload-form .align .field label{padding:0 23px 0 0;margin:0 3px 0 1em;}.media-upload-form tr.image-size label{margin:0 5px 0 0;}#wpbody-content .describe p.help{padding:0 5px 0 0;}.media-item .error-div a.dismiss,.describe-toggle-on,.describe-toggle-off{float:left;margin-right:0;margin-left:15px;}.media-item .error-div a.dismiss{padding:0 15px 0 0;}.media-item .error-div{padding-left:0;padding-right:10px;}.media-item .pinkynail{float:right;}.media-item .describe td{padding:0 0 8px 8px;}.media-item .progress{float:left;margin:6px 0 0 10px;}#find-posts-response .found-radio{padding:5px 8px 0 0;}.find-box-search label{padding-right:0;padding-left:6px;}.find-box #resize-se{right:auto;left:1px;}form.upgrade .hint{font-style:normal;}.imgedit-menu div{float:right;}.imgedit-help{font-style:normal;}.imgedit-submit-btn{margin-left:0;margin-right:20px;}.form-table th{text-align:right;}.form-table input.tog{margin-right:0;margin-left:2px;float:right;}.form-table table.color-palette{float:right;}#replysubmit img.waiting,.inline-edit-save img.waiting{float:left;}#replysubmit .button{margin-right:0;margin-left:5px;}#edithead .inside{float:right;padding:3px 5px 2px 0;}.comment-ays th{border-right-style:none;border-left-style:solid;border-right-width:0;border-left-width:1px;}.spam-undo-inside .avatar,.trash-undo-inside .avatar{margin-left:8px;}#comment-status-radio input{margin:2px 0 5px 3px;}td.available-theme{text-align:right;}#current-theme img{float:right;margin-right:0;margin-left:1em;}#broken-themes{text-align:right;}.appearance_page_custom-header .available-headers .default-header{float:right;margin:0 0 20px 20px;}.appearance_page_custom-header .random-header{margin:0 0 20px 20px;}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-right:0;margin-left:10px;}.nav-tab{margin:0 0 -1px 6px;}h2 .nav-tab{font-family:Tahoma,Arial,sans-serif;}.plugins .desc ul,.plugins .desc ol{margin:0 2em 0 0;}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-right:0;padding-left:12px;}#profile-page .form-table #rich_editing{margin-right:0;margin-left:5px;}#your-profile legend{font-family:Tahoma,Arial,sans-serif;}.pressthis a span{background-position:-20px 5px;padding:8px 32px 8px 0;}.pressthis a:after{right:auto;left:10px;background:transparent;transform:skew(-20deg) rotate(-6deg);-webkit-transform:skew(-20deg) rotate(-6deg);-moz-transform:skew(-20deg) rotate(-6deg);}.pressthis a:hover:after{transform:skew(-20deg) rotate(-9deg);-webkit-transform:skew(-20deg) rotate(-9deg);-moz-transform:skew(-20deg) rotate(-9deg);}#utc-time,#local-time{padding-left:0;padding-right:25px;font-style:normal;font-family:Tahoma,Arial,sans-serif;}#footer{margin-left:20px;}#wpcontent,#footer{margin-right:165px;}.wrap.about-wrap{margin-left:40px;margin-right:20px;}.about-wrap h1,.about-text{margin-right:0;margin-left:200px;}.about-wrap h2.nav-tab-wrapper{padding-left:0;padding-right:6px;}.about-wrap .wp-badge{right:auto;left:0;}.about-wrap h2 .nav-tab{margin-right:0;margin-left:3px;}.about-wrap .changelog li{margin-left:0;margin-right:3em;}.about-wrap .feature-section .left-feature,.about-wrap .feature-section img,.about-wrap .feature-section .right-feature{float:right;}.about-wrap .feature-section .left-feature{margin-right:0;margin-left:0;}.about-wrap .feature-section .right-feature{margin-left:0;margin-right:0;}.about-wrap .feature-section.text-features{float:right;}.about-wrap .feature-section.screenshot-features{float:left;}.about-wrap .feature-section.screenshot-features .angled-right{margin-left:0;margin-right:2.5em;}.about-wrap .feature-section.screenshot-features .angled-right p{margin-left:0;margin-right:290px;}.about-wrap .feature-section .angled-right img,.about-wrap .feature-section .angled-left img{margin-right:0;margin-left:30px;}.about-wrap .feature-section.three-col div{margin-right:0;margin-left:4.999999999%;float:right;}.about-wrap .feature-section.three-col h4{text-align:right;}.about-wrap .feature-section.three-col img{margin-right:5px;margin-left:0;}.about-wrap .feature-section.three-col .last-feature{margin-left:0;}.about-wrap .feature-section .feature-images img{margin-right:auto;margin-left:5px;}.about-wrap .feature-section.images-stagger-left .angled-left{margin-left:auto;margin-right:5px;}.about-wrap .feature-section .angled-right{float:left;}.about-wrap .feature-section.images-stagger-right .feature-images{right:auto;left:0;}.about-wrap .feature-section.images-stagger-left .feature-images{left:auto;right:0;}.about-wrap .feature-section.images-stagger-right .left-feature{margin-right:0;margin-left:350px;}.about-wrap .feature-section.images-stagger-left .right-feature{margin-left:0;margin-right:350px;}.about-wrap li.wp-person,.about-wrap li.wp-person img.gravatar{float:right;margin-right:0;margin-left:10px;}#template div{margin-right:0;margin-left:190px;}.column-author img,.column-username img{float:right;margin-right:0;margin-left:10px;}.tagchecklist{margin-left:0;margin-right:14px;}.tagchecklist strong{margin-left:0;margin-right:-8px;}.tagchecklist span{margin-right:0;margin-left:25px;float:right;}.tagchecklist span a{margin:6px -9px 0 0;float:right;}#poststuff h2{clear:right;}#poststuff h3,.metabox-holder h3{font-family:Tahoma,Arial,sans-serif;}.tool-box .title{font-family:Tahoma,Arial,sans-serif;}#sidemenu{margin:-30px 315px 0 15px;float:left;padding-left:0;padding-right:10px;}#sidemenu a{float:right;}table .vers,table .column-visible,table .column-rating{text-align:right;}.screen-meta-toggle{right:auto;left:15px;}* html #template div{margin-left:0;}.list-ajax-loading{float:left;margin-right:0;margin-left:9px;}#editorcontainer .wp_themeSkin .mceStatusbar{padding-left:0;padding-right:5px;}#editorcontainer .wp_themeSkin .mceStatusbar div{float:right;}#editorcontainer .wp_themeSkin .mceStatusbar a.mceResize{float:left;}#wpcontent{margin-left:0;margin-right:165px;}.folded #wpcontent{margin-left:0;margin-right:52px;}.folded.wp-admin #footer{margin-left:15px;margin-right:52px;}#wpbody-content{float:right;}#adminmenuwrap{float:right;}#adminmenu{clear:right;}.inner-sidebar{float:left;clear:left;}.has-right-sidebar #post-body{float:right;clear:right;margin-right:0;margin-left:-340px;}.has-right-sidebar #post-body-content{margin-right:0;margin-left:300px;}#col-right{float:left;clear:left;}.alignleft{float:right;}.alignright{float:left;}.textleft{text-align:right;}.textright{text-align:left;}.screen-reader-text,.screen-reader-text span{left:auto;right:-1000em;}body,td,textarea,input,select{font-family:Tahoma,Arial,sans-serif;}ul.ul-disc,ul.ul-square,ol.ol-decimal{margin-left:0;margin-right:1.8em;}.subsubsub{float:right;}.widefat thead th:first-of-type{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:3px;border-top-left-radius:0;border-top-right-radius:3px;}.widefat thead th:last-of-type{-webkit-border-top-right-radius:0;-webkit-border-top-left-radius:3px;border-top-right-radius:0;border-top-left-radius:3px;}.widefat tfoot th:first-of-type{-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:3px;}.widefat tfoot th:last-of-type{-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:3px;}.widefat th{text-align:right;}.widefat th input{margin:0 8px 0 0;}.wrap{margin-right:0;margin-left:15px;}.wrap h2,.subtitle{font-family:Tahoma,Arial,sans-serif;}.wrap h2{padding-right:0;padding-left:15px;}.subtitle{padding-left:0;padding-right:25px;}.wrap .add-new-h2{font-family:Tahoma,Arial,sans-serif;margin-left:0;margin-right:4px;}.wrap h2.long-header{padding-left:0;}#dashboard-widgets-wrap .has-sidebar{margin-right:0;margin-left:-51%;}#dashboard-widgets-wrap .has-sidebar .has-sidebar-content{margin-right:0;margin-left:51%;}.view-all{right:auto;left:0;}#dashboard_right_now p.sub,#dashboard-widgets h4,a.rsswidget,#dashboard_plugins h4,#dashboard_plugins h5,#dashboard_recent_comments .comment-meta .approve{font-family:Tahoma,Arial;}#dashboard_right_now p.sub{left:auto;right:15px;}#dashboard_right_now td.b{padding-right:0;padding-left:6px;text-align:left;font-family:Tahoma,Arial;}#dashboard_right_now .t{padding-right:0;padding-left:12px;}#dashboard_right_now .table_content{float:right;}#dashboard_right_now .table_discussion{float:left;}#dashboard_right_now .versions a{font-family:Tahoma,Arial;}#dashboard_right_now a.button{float:left;clear:left;}#dashboard_plugins .inside span{padding-left:0;padding-right:5px;}#dashboard-widgets h3 .postbox-title-action{right:auto;left:30px;}#the-comment-list .pingback{padding-left:0!important;padding-right:9px!important;}#the-comment-list .comment-item{padding:1em 70px 1em 10px;}#the-comment-list .comment-item .avatar{float:right;margin-left:0;margin-right:-60px;}.rss-widget cite{text-align:left;}.rss-widget span.rss-date{font-family:Tahoma,Arial;margin-left:0;margin-right:3px;}#dashboard_quick_press h4{float:right;text-align:left;}#dashboard_quick_press .wp-media-buttons{margin:0 5em .5em 0;}#dashboard_quick_press h4 label{margin-right:0;margin-left:10px;}#dashboard_quick_press .input-text-wrap,#dashboard_quick_press .textarea-wrap{margin:0 5em 1em 0;}#dashboard_quick_press #media-buttons{margin:0 5em .5em 0;padding:0;}#dashboard-widgets #dashboard_quick_press form p.submit{margin-left:0;margin-right:4.6em;}#dashboard-widgets #dashboard_quick_press form p.submit input{float:right;}#dashboard-widgets #dashboard_quick_press form p.submit #save-post{margin:0 10px 0 1em;}#dashboard-widgets #dashboard_quick_press form p.submit #publish{float:left;}#dashboard-widgets #dashboard_quick_press form p.submit img.waiting{margin:4px 0 0 6px;}#dashboard_recent_drafts h4 abbr{font-family:Tahoma,Arial;margin-left:0;margin-right:3px;}body.login{font-family:Tahoma,arial;}.login form{margin-right:8px;margin-left:0;}.login form .forgetmenot{float:right;}.login form .submit{float:left;}#login form .submit input{font-family:Tahoma,arial;}.login #nav,.login #backtoblog{margin:0 16px 0 0;}#login_error,.login .message{margin:0 8px 16px 0;}.login #user_pass,.login #user_login,.login #user_email{margin-left:6px;margin-right:0;direction:ltr;}.login h1 a{text-decoration:none;}.login .button-primary{float:left;}#nav-menus-frame{margin-right:300px;margin-left:0;}#wpbody-content #menu-settings-column{margin-right:-300px;margin-left:0;float:right;}#menu-management-liquid{float:right;}#menu-management{margin-left:20px;margin-right:0;}.post-body-plain{padding:10px 0 0 10px;}#menu-management .nav-tabs-arrow-left{right:0;left:auto;}#menu-management .nav-tabs-arrow-right{left:0;right:auto;text-align:left;font-family:Tahoma,Arial,sans-serif;}#menu-management .nav-tabs{padding-right:20px;padding-left:10px;}.js #menu-management .nav-tabs{float:right;margin-right:0;margin-left:-400px;}#select-nav-menu-container{text-align:left;}#wpbody .open-label{float:right;}#wpbody .open-label span{padding-left:10px;padding-right:0;}.js .input-with-default-title{font-style:normal;font-weight:bold;}.postbox .howto input{float:left;}#nav-menu-theme-locations .button-controls{text-align:left;}.meta-sep,.submitcancel{float:right;}#cancel-save{margin-left:0;margin-right:20px;}.list-controls{float:right;}.add-to-menu{float:left;}#add-custom-link label span{float:right;padding-left:5px;padding-right:0;}.howto span{float:right;}.list li .menu-item-title input{margin-left:3px;margin-right:0;}.menu-item-handle{padding-right:10px;padding-left:0;}.menu-item-edit-active .menu-item-handle{-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;}.menu-item-handle .item-title{margin-left:13em;margin-right:0;}.menu-item-depth-0{margin-right:0;margin-left:0;}.menu-item-depth-1{margin-right:30px;margin-left:0;}.menu-item-depth-2{margin-right:60px;margin-left:0;}.menu-item-depth-3{margin-right:90px;margin-left:0;}.menu-item-depth-4{margin-right:120px;margin-left:0;}.menu-item-depth-5{margin-right:150px;margin-left:0;}.menu-item-depth-6{margin-right:180px;margin-left:0;}.menu-item-depth-7{margin-right:210px;margin-left:0;}.menu-item-depth-8{margin-right:240px;margin-left:0;}.menu-item-depth-9{margin-right:270px;margin-left:0;}.menu-item-depth-10{margin-right:300px;margin-left:0;}.menu-item-depth-11{margin-right:330px;margin-left:0;}.menu-item-depth-0 .menu-item-transport{margin-right:0;margin-left:0;}.menu-item-depth-1 .menu-item-transport{margin-right:-30px;margin-left:0;}.menu-item-depth-2 .menu-item-transport{margin-right:-60px;margin-left:0;}.menu-item-depth-3 .menu-item-transport{margin-right:-90px;margin-left:0;}.menu-item-depth-4 .menu-item-transport{margin-right:-120px;margin-left:0;}.menu-item-depth-5 .menu-item-transport{margin-right:-150px;margin-left:0;}.menu-item-depth-6 .menu-item-transport{margin-right:-180px;margin-left:0;}.menu-item-depth-7 .menu-item-transport{margin-right:-210px;margin-left:0;}.menu-item-depth-8 .menu-item-transport{margin-right:-240px;margin-left:0;}.menu-item-depth-9 .menu-item-transport{margin-right:-270px;margin-left:0;}.menu-item-depth-10 .menu-item-transport{margin-right:-300px;margin-left:0;}.menu-item-depth-11 .menu-item-transport{margin-right:-330px;margin-left:0;}.item-type{padding-left:10px;padding-right:0;}.item-controls{left:20px;right:auto;}.item-controls .item-order{padding-left:10px;padding-right:0;}.item-edit{left:-20px;right:auto;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0;}.menu-item-settings{padding:10px 10px 10px 0;border-width:0 1px 1px 1px;}.link-to-original{font-style:normal;font-weight:bold;}.link-to-original a{padding-right:4px;padding-left:0;}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-left:10px;margin-right:0;float:right;}.major-publishing-actions .publishing-action{text-align:left;float:left;}.major-publishing-actions .delete-action{text-align:right;float:right;padding-left:15px;padding-right:0;}.menu-name-label{margin-left:15px;margin-right:0;}.auto-add-pages{float:right;}div.star{left:auto;right:0;letter-spacing:0;}.star img,div.star a,div.star a:hover,div.star a:visited{right:auto;left:0;}#plugin-information ul#sidemenu{left:auto;right:0;}#plugin-information h2{margin-right:0;margin-left:200px;}#plugin-information .fyi{margin-left:5px;margin-right:20px;}#plugin-information .fyi h2{margin-left:0;}#plugin-information .fyi ul{padding:10px 7px 10px 5px;}#plugin-information #section-screenshots li p{padding-left:0;padding-right:20px;}#plugin-information .updated,#plugin-information pre{margin-right:0;margin-left:215px;}#plugin-information .updated,#plugin-information .error{clear:none;direction:rtl;}#section-description{direction:ltr;}.posting{margin-left:212px;margin-right:0;position:relative;}#side-info-column{float:left;right:auto;left:0;}h3.tb{margin-left:0;margin-right:5px;}#publish{float:left;}.postbox .handlediv{float:left;}.actions li{float:right;margin-right:0;margin-left:10px;}#extra-fields .actions{margin:-23px 0 0 -7px;}#img_container a{float:right;}#category-add input,#category-add select{font-family:Tahoma,Arial;}.inline-editor ul.cat-checklist ul,.categorydiv ul.categorychecklist ul,#linkcategorydiv ul.categorychecklist ul{margin-left:0;margin-right:18px;}.category-tabs li{padding-left:0;padding-right:8px;}#tagsdiv #newtag{margin-right:0;margin-left:5px;}#tagadd{margin-left:0;margin-right:3px;}#tagchecklist span{margin-left:.5em;margin-right:10px;float:right;}#tagchecklist span a{margin:6px -9px 0 0;float:right;}.submit input,.button,.button-primary,.button-secondary,.button-highlighted,#postcustomstuff .submit input{font-family:Tahoma,Arial,sans-serif;}.ac_results li{text-align:right;}#TB_ajaxContent #options{right:auto;left:25px;}#post_status{margin-left:0;margin-right:10px;}#templateside{float:left;}#template textarea{direction:ltr;}div.star{left:auto;right:0;}.star img,div.star a,div.star a:hover,div.star a:visited{right:auto;left:0;}.theme-listing .theme-item h3{font-style:normal;}#theme-information .theme-preview-img{float:right;margin:5px 15px 10px 25px;}#theme-information .action-button #cancel{float:right;}#theme-information .action-button #install{float:left;}.feature-filter .feature-group{float:right;}.feature-filter .feature-name{float:right;text-align:left;}.feature-filter .feature-group li{float:right;padding-right:0;padding-left:25px;}div.widget-liquid-left{float:right;clear:right;margin-right:0;margin-left:-325px;}div#widgets-left{margin-right:5px;margin-left:325px;}div.widget-liquid-right{float:left;clear:left;}.inactive-sidebar .widget{float:right;}div.sidebar-name h3{font-family:Tahoma,Arial,sans-serif;}#widget-list .widget{float:right;}.inactive-sidebar .widget-placeholder{float:right;}.widget-top .widget-title-action{float:left;}.widget-control-edit{padding:0 0 0 8px;}.sidebar-name-arrow{float:left;}.press-this-sidebar{float:left;} \ No newline at end of file +ol{margin-left:0;margin-right:2em}.code,code{font-family:monospace;direction:ltr}.quicktags,.search{font:12px Tahoma,Arial,sans-serif}.icon32{float:right;margin-right:0;margin-left:8px}.icon16{float:right;margin-right:-8px;margin-left:0}.howto{font-style:normal;font-family:Tahoma,Arial,sans-serif}p.install-help{font-style:normal}#doaction,#doaction2,#post-query-submit{margin-right:0;margin-left:8px}#timezone_string option{margin-left:0;margin-right:1em}#pass-strength-result{float:right;margin:13px 1px 5px 5px}p.search-box{float:left}input[type=password]{direction:ltr}input[type="text"].ui-autocomplete-loading{background:transparent url('../images/loading.gif') no-repeat left center}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete li{text-align:right}#delete-action{float:right}#publishing-action{float:left}#post-body .misc-pub-section{border-right:0;border-left-width:1px;border-left-style:solid}#post-body .misc-pub-section-last{border-left:0}#minor-publishing-actions{padding:10px 8px 2px 10px;text-align:left}#save-post{float:right}#minor-publishing .ajax-loading{padding:3px 4px 0 0;float:right}.preview{float:left}#sticky-span{margin-left:0;margin-right:18px}.side-info ul{padding-left:0;padding-right:18px}td.action-links,th.action-links{text-align:left}.describe .del-link{padding-left:0;padding-right:5px}form.upgrade .hint{font-style:normal}#ajax-response.alignleft{margin-left:0;margin-right:2em}#quicktags{background-position:right top}#ed_reply_toolbar input{margin:1px 1px 1px 2px}#wphead{height:32px;margin-left:15px;margin-right:2px}#header-logo{float:right}#wphead h1{float:right}#screen-meta-links{margin-right:0;margin-left:24px}#screen-meta{margin-right:5px;margin-left:15px}#screen-options-link-wrap,#contextual-help-link-wrap{float:left;margin-left:0;margin-right:6px}#screen-meta-links a.show-settings{padding-right:6px;padding-left:16px}.toggle-arrow{background-position:top right}.toggle-arrow-active{background-position:bottom right}.metabox-prefs label{padding-right:0;padding-left:15px}.metabox-prefs label input{margin-right:2px;margin-left:5px}#contextual-help-wrap{margin-left:0;margin-right:-4px}#contextual-help-back{left:170px;right:150px}#contextual-help-wrap.no-sidebar #contextual-help-back{left:0;right:150px;border-right-width:1px;border-left-width:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:2px;border-bottom-left-radius:2px}.contextual-help-tabs{float:right}.contextual-help-tabs a{padding-left:5px;padding-right:12px}.contextual-help-tabs .active{margin-right:0;margin-left:-1px}.contextual-help-tabs .active,.contextual-help-tabs-wrap{border-left:0;border-right-width:1px}.help-tab-content{margin-right:0;margin-left:22px}.help-tab-content li{margin-left:0;margin-right:18px}.contextual-help-sidebar{float:left;padding-right:12px;padding-left:8px}#adminmenuback,#adminmenuwrap{border-width:0 0 0 1px}#adminmenushadow{right:auto;left:0}#adminmenu li .wp-submenu{left:auto;right:146px}.folded #adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{left:auto;right:26px}#adminmenu .wp-submenu.sub-open,#adminmenu li.focused.wp-not-current-submenu .wp-submenu,.folded #adminmenu li.focused.wp-has-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.no-js #adminmenu .wp-has-submenu:hover .wp-submenu,.no-js.folded #adminmenu .wp-has-current-submenu:hover .wp-submenu{padding:0 0 8px 8px}#adminmenu div.wp-menu-image{float:right}#adminmenu li li{margin-left:0;margin-right:8px}#adminmenu .wp-submenu a,#adminmenu li li a,.folded #adminmenu .wp-not-current-submenu li a{padding-left:0;padding-right:12px}#adminmenu .wp-not-current-submenu li a{padding-left:0;padding-right:18px}.folded #adminmenu li li{margin-left:inherit;margin-right:0}.folded #adminmenu li li a{padding-left:inherit;padding-right:0}.wp-menu-arrow{right:0;-moz-transform:translate(-139px);-webkit-transform:translate(-139px);-o-transform:translate(-139px);-ms-transform:translate(-139px);transform:translate(-139px)}.ie8 .wp-menu-arrow{right:-20px}#adminmenu .wp-menu-arrow div{left:-8px;width:16px}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{-moz-transform:translate(-138px);-webkit-transform:translate(-138px);-o-transform:translate(-138px);-ms-transform:translate(-138px);transform:translate(-138px)}.folded .wp-menu-arrow{-moz-transform:translate(-27px);-webkit-transform:translate(-27px);-o-transform:translate(-27px);-ms-transform:translate(-27px);transform:translate(-27px)}#adminmenu .wp-not-current-submenu .wp-menu-arrow div{border-style:solid solid none none;border-width:1px 1px 0 0}#adminmenu .wp-menu-image img{float:right;padding:5px 2px 0 0}#adminmenu .wp-submenu .wp-submenu-head{padding:6px 10px 5px 4px}#adminmenu li .wp-submenu-wrap{border-width:1px 0 1px 1px;border-style:solid none solid solid;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:3px;border-top-right-radius:0;border-top-left-radius:3px}.folded #adminmenu .wp-submenu ul{border-width:0 1px 0 0}.folded #adminmenu .wp-submenu a{padding-left:0;padding-right:10px}.folded #adminmenu a.wp-has-submenu{margin-left:0;margin-right:40px}#adminmenu .wp-menu-toggle{clear:left;float:left;padding:1px 0 0 2px}#adminmenu .awaiting-mod,#adminmenu span.update-plugins,#sidemenu li a span.update-plugins{font-family:Tahoma,Arial,sans-serif;margin-left:0;margin-right:7px}#collapse-button{float:right}@media only screen and (max-width:900px){#adminmenu li .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu{left:auto;right:26px}#adminmenu li.focused.wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open{padding:0 0 8px 8px}.folded #adminmenu .wp-not-current-submenu li a{padding-left:0;padding-right:12px}#adminmenu li li,#adminmenu li li a{padding-left:inherit;padding-right:0}.wp-menu-arrow{-moz-transform:translate(-27px);-webkit-transform:translate(-27px);-o-transform:translate(-27px);-ms-transform:translate(-27px);transform:translate(-27px)}#adminmenu .wp-submenu ul{border-width:0 1px 0 0}#adminmenu .wp-submenu a{padding-left:0;padding-right:10px}#adminmenu a.wp-has-submenu{margin-left:0;margin-right:40px}body #wpcontent{margin-left:0;margin-right:52px}body .wp-admin #footer{margin-left:15px;margin-right:52px}}.post-com-count-wrapper{font-family:Tahoma,Arial,sans-serif}.column-response .post-com-count{float:right;margin-right:0;margin-left:5px}.response-links{float:right}.widefat th{font-family:Tahoma,Arial,sans-serif}.widefat td p{margin:2px 0 .8em}.postbox-container{float:right}.postbox .handlediv{float:left}#the-comment-list p.comment-author img{float:right;margin-right:0;margin-left:8px}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:0;padding-left:125px}.welcome-panel .welcome-panel-close{right:auto;left:10px}.welcome-panel .welcome-panel-close:before{left:auto;right:-12px}.welcome-panel .wp-badge{float:right}.welcome-panel-content .about-description,.welcome-panel h3{margin-left:0;margin-right:190px}.welcome-panel .welcome-panel-column{margin:0 -25px 0 5%;padding-left:0;padding-right:25px;float:right}.welcome-panel .welcome-panel-column.welcome-panel-last{margin-right:auto;padding-right:0;margin-left:0}.welcome-panel h4 .icon16{margin-left:0;margin-right:-32px}.welcome-panel .welcome-panel-column-container{padding:0 25px 0 0}.welcome-panel .welcome-panel-column ul{margin:1.6em 1.3em 1em 1em}.welcome-panel .welcome-panel-column li{padding-left:0;padding-right:2px}.fixed .column-comments{text-align:right}.fixed .column-comments .vers{padding-left:0;padding-right:3px}.fixed .column-comments a{float:right}.sorting-indicator{margin-left:0;margin-right:7px}th.sortable a span,th.sorted a span{float:right}.tablenav-pages a{margin-right:0;margin-left:1px}.tablenav-pages .next-page{margin-left:0;margin-right:2px}.tablenav a.button-secondary{margin:3px 0 0 8px}.tablenav .tablenav-pages{float:left}.tablenav .displaying-num{margin-right:0;margin-left:10px;font-family:Tahoma,Arial,sans-serif;font-style:normal}.tablenav .actions{padding:2px 0 0 8px}.tablenav .delete{margin-right:0;margin-left:20px}.view-switch{float:left}.filter{float:right;margin:-5px 10px 0 0}.filter .subsubsub{margin-left:0;margin-right:-10px}#posts-filter fieldset{float:right;margin:0 0 1em 1.5ex}#posts-filter fieldset legend{padding:0 1px .2em 0}#wpbody-content .inline-edit-row fieldset{float:right}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 1px 0 0}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:left}.inline-edit-row fieldset label span.title{float:right}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0;margin-right:5em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{padding-right:0;padding-left:.5em}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-right:0;margin-left:.5em}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{font-family:Tahoma,Arial,sans-serif;font-style:normal}.inline-edit-row fieldset .inline-edit-date{float:right}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row .catshow,.inline-edit-row .cathide,.inline-edit-row #bulk-titles div{font-family:Tahoma,Arial,sans-serif}.quick-edit-row-post fieldset label.inline-edit-status{float:right}#bulk-titles div a{float:right;margin:3px -2px 0 3px;overflow:hidden;text-indent:-9999px}#post-body-content{float:right}#poststuff #post-body.columns-2{margin-left:300px;margin-right:0}#post-body.columns-2 #postbox-container-1{float:left;margin-left:-300px;margin-right:0}@media only screen and (max-width:850px){#wpbody-content #post-body.columns-2 #postbox-container-1{margin-left:0}}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{right:0}#sample-permalink{direction:ltr}#sample-permalink #editable-post-name{unicode-bidi:embed}#wp-fullscreen-title-prompt-text{left:auto;right:0}.postarea h3 label{float:right}.submitbox .submit{text-align:right}.inside-submitbox #post_status{margin:2px -2px 2px 0}.submitbox .submit input{margin-right:0;margin-left:4px}#normal-sortables .postbox .submit{float:left}.taxonomy div.tabs-panel{margin:0 125px 0 5px}#side-sortables .comments-box thead th,#normal-sortables .comments-box thead th{font-style:normal}#commentsdiv img.waiting{padding-left:0;padding-right:5px}#post-body .add-menu-item-tabs li.tabs{border-width:1px 1px 1px 0;margin-right:0;margin-left:-1px}#post-body .tagsdiv #newtag{margin-right:0;margin-left:5px}.autosave-info{padding:2px 2px 2px 15px;text-align:left}#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl.gif) no-repeat scroll left bottom;cursor:sw-resize}.curtime #timestamp{background-position:right top;padding-left:0;padding-right:18px}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{margin:8px 8px 8px 0}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace}.category-adder{margin-left:0;margin-right:120px}#post-body ul.add-menu-item-tabs{float:right;text-align:left;margin:0 5px 0 -120px}#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:3px;border-top-left-radius:0;border-top-right-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:3px}#front-page-warning,#front-static-pages ul,ul.export-filters,.inline-editor ul.cat-checklist ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul{margin-left:0;margin-right:18px}#post-body .add-menu-item-tabs li.tabs{border-style:solid solid solid none;border-width:1px 1px 1px 0;margin-right:0;margin-left:-1px}p.help,p.description,span.description,.form-wrap p{font-style:normal;font-family:Tahoma,Arial,sans-serif}.taghint{margin:15px 12px -24px 0}#poststuff .tagsdiv .howto{margin:0 8px 6px 0}.ac_results li{text-align:right}.links-table th{text-align:right}#wpbody-content .describe th{text-align:right}.describe .media-item-info .A1B1{padding:0 10px 0 0}.media-upload-form td label{margin-left:6px;margin-right:2px}.media-upload-form .align .field label{padding:0 23px 0 0;margin:0 3px 0 1em}.media-upload-form tr.image-size label{margin:0 5px 0 0}#wpbody-content .describe p.help{padding:0 5px 0 0}.media-item .error-div a.dismiss,.describe-toggle-on,.describe-toggle-off{float:left;margin-right:0;margin-left:15px}.media-item .error-div a.dismiss{padding:0 15px 0 0}.media-item .error-div{padding-left:0;padding-right:10px}.media-item .pinkynail{float:right}.media-item .describe td{padding:0 0 8px 8px}.media-item .progress{float:left;margin:6px 0 0 10px}#find-posts-response .found-radio{padding:5px 8px 0 0}.find-box-search label{padding-right:0;padding-left:6px}.find-box #resize-se{right:auto;left:1px}form.upgrade .hint{font-style:normal}.imgedit-menu div{float:right}.imgedit-help{font-style:normal}.imgedit-submit-btn{margin-left:0;margin-right:20px}.form-table th{text-align:right}.form-table input.tog{margin-right:0;margin-left:2px;float:right}.form-table table.color-palette{float:right}#replysubmit img.waiting,.inline-edit-save img.waiting{float:left}#replysubmit .button{margin-right:0;margin-left:5px}#edithead .inside{float:right;padding:3px 5px 2px 0}.comment-ays th{border-right-style:none;border-left-style:solid;border-right-width:0;border-left-width:1px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{margin-left:8px}#comment-status-radio input{margin:2px 0 5px 3px}h3.available-themes{float:right}.available-theme{margin-right:0;margin-left:10px;padding:20px 0 20px 20px}#current-theme .theme-info li,.theme-options li,.available-theme .action-links li{float:right;padding-right:0;padding-left:10px;margin-right:0;margin-left:10px;border-right:0;border-left:1px solid #dfdfdf}.available-theme .action-links li{padding-left:8px;margin-left:8px}#current-theme .theme-info li:last-child,.theme-options li:last-child,.available-theme .action-links li:last-child{padding-left:0;margin-right:0;border-left:0}.available-theme .action-links .delete-theme{float:left;margin-left:0;margin-right:8px}.available-theme .action-links p{float:right}#current-theme.has-screenshot{padding-left:0;padding-right:330px}#current-theme h4 span{margin-left:0;margin-right:20px}#current-theme img{float:right;width:300px;margin-left:0;margin-right:-330px}.theme-options .load-customize{margin-right:0;margin-left:30px;float:right}.theme-options span{float:right;margin-right:0;margin-left:10px}.theme-options ul{float:right}@media only screen and (max-width:1200px){#current-theme.has-screenshot{padding-right:270px}#current-theme img{margin-right:-270px;width:240px}}#broken-themes{text-align:right}.appearance_page_custom-header .available-headers .default-header{float:right;margin:0 0 20px 20px}.appearance_page_custom-header .random-header{margin:0 0 20px 20px}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-right:0;margin-left:10px}.nav-tab{margin:0 0 -1px 6px}h2 .nav-tab{font-family:Tahoma,Arial,sans-serif}.plugins .desc ul,.plugins .desc ol{margin:0 2em 0 0}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-right:0;padding-left:12px}#profile-page .form-table #rich_editing{margin-right:0;margin-left:5px}#profile-page #pass1,#profile-page #pass2,#profile-page #user_login{direction:ltr}#your-profile legend{font-family:Tahoma,Arial,sans-serif}.pressthis a span{background-position:right 5px;padding:8px 27px 8px 11px}.pressthis a:after{right:auto;left:10px;background:transparent;transform:skew(-20deg) rotate(-6deg);-webkit-transform:skew(-20deg) rotate(-6deg);-moz-transform:skew(-20deg) rotate(-6deg)}.pressthis a:hover:after{transform:skew(-20deg) rotate(-9deg);-webkit-transform:skew(-20deg) rotate(-9deg);-moz-transform:skew(-20deg) rotate(-9deg)}#utc-time,#local-time{padding-left:0;padding-right:25px;font-style:normal;font-family:Tahoma,Arial,sans-serif}#footer{margin-left:20px}#wpcontent,#footer{margin-right:165px}.wrap.about-wrap{margin-left:40px;margin-right:20px}.about-wrap h1,.about-text{margin-right:0;margin-left:200px}.about-wrap h2.nav-tab-wrapper{padding-left:0;padding-right:6px}.about-wrap .wp-badge{right:auto;left:0}.about-wrap h2 .nav-tab{margin-right:0;margin-left:3px}.about-wrap .changelog li{margin-left:0;margin-right:3em}.about-wrap .three-col-images .last-feature{float:left}.about-wrap .three-col-images .first-feature{float:right}.about-wrap .feature-section.three-col div{margin-right:0;margin-left:4.999999999%;float:right}.about-wrap .feature-section.three-col h4{text-align:right}.about-wrap .feature-section.three-col img{margin-right:5px;margin-left:0}.about-wrap .feature-section.three-col .last-feature{margin-left:0}.about-wrap .feature-section img{margin:0 0 10px .7%}.about-wrap .feature-section.images-stagger-right img{float:left;margin:0 12px 12px 5px}.about-wrap .feature-section.images-stagger-left img{float:right;margin:0 5px 12px 12px}.about-wrap li.wp-person,.about-wrap li.wp-person img.gravatar{float:right;margin-right:0;margin-left:10px}#template div{margin-right:0;margin-left:190px}.column-author img,.column-username img{float:right;margin-right:0;margin-left:10px}.tagchecklist{margin-left:0;margin-right:14px}.tagchecklist strong{margin-left:0;margin-right:-8px}.tagchecklist span{margin-right:0;margin-left:25px;float:right}.tagchecklist span a{margin:6px -9px 0 0;float:right}#poststuff h2{clear:right}#poststuff h3,.metabox-holder h3{font-family:Tahoma,Arial,sans-serif}.tool-box .title{font-family:Tahoma,Arial,sans-serif}#sidemenu{margin:-30px 315px 0 15px;float:left;padding-left:0;padding-right:10px}#sidemenu a{float:right}table .vers,table .column-visible,table .column-rating{text-align:right}.screen-meta-toggle{right:auto;left:15px}* html #template div{margin-left:0}.list-ajax-loading{float:left;margin-right:0;margin-left:9px}#editorcontainer .wp_themeSkin .mceStatusbar{padding-left:0;padding-right:5px}#editorcontainer .wp_themeSkin .mceStatusbar div{float:right}#editorcontainer .wp_themeSkin .mceStatusbar a.mceResize{float:left}.wp-full-overlay .wp-full-overlay-sidebar{margin:0;left:auto;right:0;border-right:0;border-left:1px solid rgba(0,0,0,0.2)}.wp-full-overlay-sidebar:after{right:auto;left:0;box-shadow:inset 5px 0 4px -4px rgba(0,0,0,0.1)}.wp-full-overlay.collapsed,.wp-full-overlay.expanded .wp-full-overlay-sidebar{margin-right:0!important}.wp-full-overlay.expanded{margin-right:300px;margin-left:0}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-right:-300px;margin-left:0}.wp-full-overlay .collapse-sidebar{right:0;left:auto;margin-right:15px}.wp-full-overlay.collapsed .collapse-sidebar{right:100%}.wp-full-overlay .collapse-sidebar-arrow{margin-right:2px;margin-left:0;background:transparent url('../../wp-admin/images/arrows.png') no-repeat 0 -108px}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:0 -72px}.wp-full-overlay .collapse-sidebar-label{right:100%;left:auto;margin-right:10px;margin-left:0}.install-theme-info .theme-install{float:left}#wpcontent{margin-left:0;margin-right:165px}.folded #wpcontent{margin-left:0;margin-right:52px}.folded.wp-admin #footer{margin-left:15px;margin-right:52px}#wpbody-content{float:right}#adminmenuwrap{float:right}#adminmenu{clear:right}.inner-sidebar{float:left;clear:left}.has-right-sidebar #post-body{float:right;clear:right;margin-right:0;margin-left:-340px}.has-right-sidebar #post-body-content{margin-right:0;margin-left:300px}#col-right{float:left;clear:left}.alignleft{float:right}.alignright{float:left}.textleft{text-align:right}.textright{text-align:left}.screen-reader-text,.screen-reader-text span{left:auto;right:-1000em}body,td,textarea,input,select{font-family:Tahoma,Arial,sans-serif}ul.ul-disc,ul.ul-square,ol.ol-decimal{margin-left:0;margin-right:1.8em}.subsubsub{float:right}.widefat thead th:first-of-type{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:3px;border-top-left-radius:0;border-top-right-radius:3px}.widefat thead th:last-of-type{-webkit-border-top-right-radius:0;-webkit-border-top-left-radius:3px;border-top-right-radius:0;border-top-left-radius:3px}.widefat tfoot th:first-of-type{-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:0;border-bottom-right-radius:3px}.widefat tfoot th:last-of-type{-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:3px}.widefat th{text-align:right}.widefat th input{margin:0 8px 0 0}.wrap{margin-right:0;margin-left:15px}.wrap h2,.subtitle{font-family:Tahoma,Arial,sans-serif}.wrap h2{padding-right:0;padding-left:15px}.subtitle{padding-left:0;padding-right:25px}.wrap .add-new-h2{font-family:Tahoma,Arial,sans-serif;margin-left:0;margin-right:4px}.wrap h2.long-header{padding-left:0}#dashboard-widgets-wrap .has-sidebar{margin-right:0;margin-left:-51%}#dashboard-widgets-wrap .has-sidebar .has-sidebar-content{margin-right:0;margin-left:51%}.view-all{right:auto;left:0}#dashboard_right_now p.sub,#dashboard-widgets h4,a.rsswidget,#dashboard_plugins h4,#dashboard_plugins h5,#dashboard_recent_comments .comment-meta .approve,#dashboard_right_now td.b,#dashboard_right_now .versions a{font-family:Tahoma,Arial,sans-serif}#dashboard_right_now p.sub{left:auto;right:15px}#dashboard_right_now td.b{padding-right:0;padding-left:6px;text-align:left}#dashboard_right_now .t{padding-right:0;padding-left:12px}#dashboard_right_now .table_content{float:right}#dashboard_right_now .table_discussion{float:left}#dashboard_right_now a.button{float:left;clear:left}#dashboard_plugins .inside span{padding-left:0;padding-right:5px}#dashboard-widgets h3 .postbox-title-action{right:auto;left:30px}#the-comment-list .pingback{padding-left:0!important;padding-right:9px!important}#the-comment-list .comment-item{padding:1em 70px 1em 10px}#the-comment-list .comment-item .avatar{float:right;margin-left:0;margin-right:-60px}.rss-widget cite{text-align:left}.rss-widget span.rss-date{font-family:Tahoma,Arial,sans-serif;margin-left:0;margin-right:3px}#dashboard_quick_press h4{float:right;text-align:left}#dashboard_quick_press .wp-media-buttons{margin:0 5em .5em 0}#dashboard_quick_press h4 label{margin-right:0;margin-left:10px}#dashboard_quick_press .input-text-wrap,#dashboard_quick_press .textarea-wrap{margin:0 5em 1em 0}#dashboard_quick_press #media-buttons{margin:0 5em .5em 0;padding:0}#dashboard-widgets #dashboard_quick_press form p.submit{margin-left:0;margin-right:4.6em}#dashboard-widgets #dashboard_quick_press form p.submit input{float:right}#dashboard-widgets #dashboard_quick_press form p.submit #save-post{margin:0 10px 0 1em}#dashboard-widgets #dashboard_quick_press form p.submit #publish{float:left}#dashboard-widgets #dashboard_quick_press form p.submit img.waiting{margin:4px 0 0 6px}#dashboard_recent_drafts h4 abbr{font-family:Tahoma,Arial,sans-serif;margin-left:0;margin-right:3px}body.login{font-family:Tahoma,Arial,sans-serif}.login form{margin-right:8px;margin-left:0}.login form .forgetmenot{float:right}.login form .submit{float:left}#login form .submit input{font-family:Tahoma,Arial,sans-serif}.login #nav,.login #backtoblog{margin:0 16px 0 0}#login_error,.login .message{margin:0 8px 16px 0}.login #user_pass,.login #user_login,.login #user_email{margin-left:6px;margin-right:0;direction:ltr}.login h1 a{text-decoration:none}.login .button-primary{float:left}#nav-menus-frame{margin-right:300px;margin-left:0}#wpbody-content #menu-settings-column{margin-right:-300px;margin-left:0;float:right}#menu-management-liquid{float:right}#menu-management{margin-left:20px;margin-right:0}.post-body-plain{padding:10px 0 0 10px}#menu-management .nav-tabs-arrow-left{right:0;left:auto}#menu-management .nav-tabs-arrow-right{left:0;right:auto;text-align:left;font-family:Tahoma,Arial,sans-serif}#menu-management .nav-tabs{padding-right:20px;padding-left:10px}.js #menu-management .nav-tabs{float:right;margin-right:0;margin-left:-400px}#select-nav-menu-container{text-align:left}#wpbody .open-label{float:right}#wpbody .open-label span{padding-left:10px;padding-right:0}.js .input-with-default-title{font-style:normal;font-weight:bold}.postbox .howto input{float:left}#nav-menu-theme-locations .button-controls{text-align:left}.meta-sep,.submitcancel{float:right}#cancel-save{margin-left:0;margin-right:20px}.list-controls{float:right}.add-to-menu{float:left}#add-custom-link label span{float:right;padding-left:5px;padding-right:0}.nav-menus-php .howto span{float:right}.list li .menu-item-title input{margin-left:3px;margin-right:0}.menu-item-handle{padding-right:10px;padding-left:0}.menu-item-edit-active .menu-item-handle{-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.menu-item-handle .item-title{margin-left:13em;margin-right:0}.menu-item-handle .item-edit{right:auto;left:-20px}.menu-item-depth-0{margin-right:0;margin-left:0}.menu-item-depth-1{margin-right:30px;margin-left:0}.menu-item-depth-2{margin-right:60px;margin-left:0}.menu-item-depth-3{margin-right:90px;margin-left:0}.menu-item-depth-4{margin-right:120px;margin-left:0}.menu-item-depth-5{margin-right:150px;margin-left:0}.menu-item-depth-6{margin-right:180px;margin-left:0}.menu-item-depth-7{margin-right:210px;margin-left:0}.menu-item-depth-8{margin-right:240px;margin-left:0}.menu-item-depth-9{margin-right:270px;margin-left:0}.menu-item-depth-10{margin-right:300px;margin-left:0}.menu-item-depth-11{margin-right:330px;margin-left:0}.menu-item-depth-0 .menu-item-transport{margin-right:0;margin-left:0}.menu-item-depth-1 .menu-item-transport{margin-right:-30px;margin-left:0}.menu-item-depth-2 .menu-item-transport{margin-right:-60px;margin-left:0}.menu-item-depth-3 .menu-item-transport{margin-right:-90px;margin-left:0}.menu-item-depth-4 .menu-item-transport{margin-right:-120px;margin-left:0}.menu-item-depth-5 .menu-item-transport{margin-right:-150px;margin-left:0}.menu-item-depth-6 .menu-item-transport{margin-right:-180px;margin-left:0}.menu-item-depth-7 .menu-item-transport{margin-right:-210px;margin-left:0}.menu-item-depth-8 .menu-item-transport{margin-right:-240px;margin-left:0}.menu-item-depth-9 .menu-item-transport{margin-right:-270px;margin-left:0}.menu-item-depth-10 .menu-item-transport{margin-right:-300px;margin-left:0}.menu-item-depth-11 .menu-item-transport{margin-right:-330px;margin-left:0}.item-type{padding-left:10px;padding-right:0}.item-controls{left:20px;right:auto}.item-controls .item-order{padding-left:10px;padding-right:0}.item-edit{left:-20px;right:auto;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.menu-item-settings{padding:10px 10px 10px 0;border-width:0 1px 1px 1px}#custom-menu-item-url{direction:ltr}.link-to-original{font-style:normal;font-weight:bold}.link-to-original a{padding-right:4px;padding-left:0}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-left:10px;margin-right:0;float:right}.major-publishing-actions .publishing-action{text-align:left;float:left}.major-publishing-actions .delete-action{text-align:right;float:right;padding-left:15px;padding-right:0}.menu-name-label{margin-left:15px;margin-right:0}.auto-add-pages{float:right}div.star-holder{background:url('../images/stars-rtl.png?ver=20120506.png') repeat-x bottom right}div.star-holder .star-rating{background:url('../images/stars-rtl.png?ver=20120506.png') repeat-x top right;float:right}#plugin-information ul#sidemenu{left:auto;right:0}#plugin-information h2{margin-right:0;margin-left:200px}#plugin-information .fyi{margin-left:5px;margin-right:20px}#plugin-information .fyi h2{margin-left:0}#plugin-information .fyi ul{padding:10px 7px 10px 5px}#plugin-information #section-screenshots li p{padding-left:0;padding-right:20px}#plugin-information #section-screenshots ol,#plugin-information .updated,#plugin-information pre{margin-right:0;margin-left:215px}#plugin-information .updated,#plugin-information .error{clear:none;direction:rtl}#plugin-information #section-holder .section{direction:ltr}.posting{margin-left:212px;margin-right:0;position:relative}h3.tb{margin-left:0;margin-right:5px}#publish{float:left}.postbox .handlediv{float:left}.actions li{float:right;margin-right:0;margin-left:10px}#extra-fields .actions{margin:-23px 0 0 -7px}#img_container a{float:right}#category-add input,#category-add select{font-family:Tahoma,Arial,sans-serif}#tagsdiv #newtag{margin-right:0;margin-left:5px}#tagadd{margin-left:0;margin-right:3px}#tagchecklist span{margin-left:.5em;margin-right:10px;float:right}#tagchecklist span a{margin:6px -9px 0 0;float:right}.submit input,.button,.button-primary,.button-secondary,.button-highlighted,#postcustomstuff .submit input{font-family:Tahoma,Arial,sans-serif}.ac_results li{text-align:right}#TB_ajaxContent #options{right:auto;left:25px}#post_status{margin-left:0;margin-right:10px}#templateside{float:left}#template textarea,#docs-list{direction:ltr}.theme-details .theme-version{float:right}.theme-details .star-holder{float:left}.feature-filter .feature-group{float:right}.feature-filter .feature-name{float:right;text-align:left}.feature-filter .feature-group li{float:right;padding-right:0;padding-left:25px}div.widget-liquid-left{float:right;clear:right;margin-right:0;margin-left:-325px}div#widgets-left{margin-right:5px;margin-left:325px}div.widget-liquid-right{float:left;clear:left}.inactive-sidebar .widget{float:right}div.sidebar-name h3{font-family:Tahoma,Arial,sans-serif}#widget-list .widget{float:right}.inactive-sidebar .widget-placeholder{float:right}.widget-top .widget-title-action{float:left}.widget-control-edit{padding:0 0 0 8px}.sidebar-name-arrow{float:left}.press-this-sidebar{float:left}.press-this #header-logo,.press-this #wphead h1{float:right}.ltr{direction:ltr}body.locale-he-il,.locale-he-il .quicktags,.locale-he-il .search,.locale-he-il .howto,.locale-he-il #adminmenu .awaiting-mod,.locale-he-il #adminmenu span.update-plugins,.locale-he-il #sidemenu li a span.update-plugins,.locale-he-il .post-com-count-wrapper,.locale-he-il .widefat th,.locale-he-il .tablenav .displaying-num,.locale-he-il .inline-edit-row fieldset span.title,.locale-he-il .inline-edit-row fieldset span.checkbox-title,.locale-he-il .inline-edit-row fieldset ul.cat-checklist label,.locale-he-il .inline-edit-row .catshow,.locale-he-il .inline-edit-row .cathide,.locale-he-il .inline-edit-row #bulk-titles div,.locale-he-il p.help,.locale-he-il p.description,.locale-he-il span.description,.locale-he-il .form-wrap p,.locale-he-il h2 .nav-tab,.locale-he-il #your-profile legend,.locale-he-il #utc-time,.locale-he-il #local-time,.locale-he-il #poststuff h3,.locale-he-il .metabox-holder h3,.locale-he-il .tool-box .title,.locale-he-il td,.locale-he-il textarea,.locale-he-il input,.locale-he-il select,.locale-he-il .wrap h2,.locale-he-il .subtitle,.locale-he-il .wrap .add-new-h2,.locale-he-il #dashboard_right_now p.sub,.locale-he-il #dashboard-widgets h4,.locale-he-il a.rsswidget,.locale-he-il #dashboard_plugins h4,.locale-he-il #dashboard_plugins h5,.locale-he-il #dashboard_recent_comments .comment-meta .approve,.locale-he-il #dashboard_right_now td.b,.locale-he-il #dashboard_right_now .versions a,.locale-he-il .rss-widget span.rss-date,.locale-he-il #dashboard_recent_drafts h4 abbr,body.login.locale-he-il,.locale-he-il #login form .submit input,.locale-he-il #menu-management .nav-tabs-arrow-right,.locale-he-il #category-add input,.locale-he-il #category-add select,.locale-he-il .submit input,.locale-he-il .button,.locale-he-il .button-primary,.locale-he-il .button-secondary,.locale-he-il .button-highlighted,.locale-he-il #postcustomstuff .submit input,.locale-he-il div.sidebar-name h3{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:bold} \ No newline at end of file diff --git a/wp-admin/css/wp-admin-rtl.dev.css b/wp-admin/css/wp-admin-rtl.dev.css index 3bf4c0fb5..84c6c35d1 100644 --- a/wp-admin/css/wp-admin-rtl.dev.css +++ b/wp-admin/css/wp-admin-rtl.dev.css @@ -41,13 +41,13 @@ TABLE OF CONTENTS: 23.0 - Misc 24.0 - Dead 25.0 - TinyMCE tweaks +26.0 - Full Overlay w/ Sidebar +27.0 - Customize Loader ------------------------------------------------------------------------------*/ - - /*------------------------------------------------------------------------------ 1.0 - Text Styles ------------------------------------------------------------------------------*/ @@ -58,10 +58,10 @@ ol { } .code, code { - font-family: Tahoma, Arial, sans-serif; + font-family: monospace; + direction: ltr; } - .quicktags, .search { font: 12px Tahoma, Arial, sans-serif; } @@ -113,6 +113,21 @@ p.search-box { float: left; } +input[type=password] { + direction: ltr; +} + +input[type="text"].ui-autocomplete-loading { + background: transparent url('../images/loading.gif') no-repeat left center; +} + +ul#add-to-blog-users { + margin: 0 14px 0 0; +} + +.ui-autocomplete li { + text-align: right; +} /*------------------------------------------------------------------------------ 3.0 - Actions @@ -130,7 +145,6 @@ p.search-box { border-right:0; border-left-width: 1px; border-left-style: solid; - float: right; } #post-body .misc-pub-section-last { @@ -202,98 +216,6 @@ form.upgrade .hint { margin: 1px 1px 1px 2px; } -/* Distraction Free Writing mode - * =Overlay Styles --------------------------------------------------------------- */ - -/* No RTL for now, this space intentionally left blank */ - -/* =Overlay Body --------------------------------------------------------------- */ -#wp-fullscreen-body { - right: 0; - left:auto; -} - -#wp-fullscreen-tagline { - float: left; -} - -/* =Top bar --------------------------------------------------------------- */ -#fullscreen-topbar { - left:auto; - right: 0; -} - -#wp-fullscreen-mode-bar, -#wp-fullscreen-button-bar, -#wp-fullscreen-close, -#wp-fullscreen-count { - float: right; -} - -#wp-fullscreen-save { - float: left; -} - -#wp-fullscreen-save { - padding: 2px 5px 0 2px; -} - -#wp-fullscreen-buttons > div { - float: right; -} - -#wp-fullscreen-mode-bar { - padding: 1px 0 0 14px; -} - -#wp-fullscreen-modes a { - float: right; - border-width: 1px 0 1px 1px; -} - -#wp-fullscreen-modes a:first-child { - -webkit-border-top-left-radius: 0; - -webkit-border-top-right-radius: 3px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-bottom-right-radius: 3px; - border-width: 1px; - border-top-left-radius: 0; - border-top-right-radius: 3px; - border-bottom-right-left: 0; - border-bottom-right-radius: 3px; -} - -#wp-fullscreen-modes a:last-child { - -webkit-border-top-right-radius: 0; - -webkit-border-top-left-radius: 3px; - -webkit-border-bottom-right-radius: 0; - -webkit-border-bottom-left-radius: 3px; - border-top-right-radius: 0; - border-top-left-radius: 3px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 3px; -} - -#wp-fullscreen-save img, -#wp-fullscreen-save span { - padding-right: 0; - padding-left: 4px; -} - -/* =Thickbox Adjustments --------------------------------------------------------------- */ -/* No RTL for now, this space intentionally left blank */ - - -/* =TinyMCE Adjustments --------------------------------------------------------------- */ -/* No RTL for now, this space intentionally left blank */ - - - /*------------------------------------------------------------------------------ 6.0 - Admin Header ------------------------------------------------------------------------------*/ @@ -430,8 +352,7 @@ form.upgrade .hint { left: 0; } -#adminmenu li .wp-submenu, -.folded #adminmenu .wp-has-current-submenu .wp-submenu { +#adminmenu li .wp-submenu { left: auto; right: 146px; } @@ -576,6 +497,62 @@ form.upgrade .hint { float: right; } +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + #adminmenu li .wp-submenu, + #adminmenu .wp-has-current-submenu .wp-submenu { + left: auto; + right: 26px; + } + + #adminmenu li.focused.wp-has-current-submenu .wp-submenu, + #adminmenu .wp-has-current-submenu .wp-submenu.sub-open { + padding: 0 0 8px 8px; + } + + .folded #adminmenu .wp-not-current-submenu li a { + padding-left: 0; + padding-right: 12px; + } + + #adminmenu li li, + #adminmenu li li a { + padding-left: inherit; + padding-right: 0 + } + + .wp-menu-arrow { + -moz-transform: translate( -27px ); + -webkit-transform: translate( -27px ); + -o-transform: translate( -27px ); + -ms-transform: translate( -27px ); + transform: translate( -27px ); + } + + #adminmenu .wp-submenu ul { + border-width: 0 1px 0 0; + } + + #adminmenu .wp-submenu a { + padding-left: 0; + padding-right: 10px; + } + + #adminmenu a.wp-has-submenu { + margin-left: 0; + margin-right: 40px; + } + + body #wpcontent { + margin-left: 0; + margin-right: 52px; + } + + body .wp-admin #footer { + margin-left: 15px; + margin-right: 52px; + } +} /* List table styles */ .post-com-count-wrapper { @@ -725,7 +702,7 @@ th.sorted a span { margin-right: 0; margin-left: 10px; font-family: Tahoma, Arial, sans-serif; - font-style: bold; + font-style: normal; } .tablenav .actions { @@ -829,6 +806,27 @@ th.sorted a span { /*------------------------------------------------------------------------------ 11.0 - Write/Edit Post Screen ------------------------------------------------------------------------------*/ +/* structural/layout */ +#post-body-content { + float: right; +} + +#poststuff #post-body.columns-2 { + margin-left: 300px; + margin-right: 0; +} + +#post-body.columns-2 #postbox-container-1 { + float: left; + margin-left: -300px; + margin-right: 0; +} + +@media only screen and (max-width: 850px) { + #wpbody-content #post-body.columns-2 #postbox-container-1 { + margin-left: 0; + } +} #titlediv #title-prompt-text, #wp-fullscreen-title-prompt-text { @@ -868,31 +866,7 @@ th.sorted a span { float: left; } - -#post-body ul.category-tabs, -#post-body ul.add-menu-item-tabs { - float: right; - text-align: left; - /* Negative margin for the sake of those without JS: all tabs display */ - margin: 0 5px 0 -120px; -} - - -#post-body ul.category-tabs li.tabs, -#post-body ul.add-menu-item-tabs li.tabs { - -webkit-border-top-left-radius: 0; - -webkit-border-top-right-radius: 3px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-bottom-right-radius: 3px; - border-top-left-radius: 0; - border-top-right-radius: 3px; - border-bottom-left-radius: 0; - border-bottom-right-radius: 3px; -} - -#post-body .categorydiv div.tabs-panel, -.taxonomy div.tabs-panel, -#post-body #linkcategorydiv div.tabs-panel { +.taxonomy div.tabs-panel { margin: 0 125px 0 5px; } @@ -906,24 +880,12 @@ th.sorted a span { padding-right: 5px; } -#post-body .category-tabs li.tabs, #post-body .add-menu-item-tabs li.tabs { border-width: 1px 1px 1px 0; margin-right: 0; margin-left: -1px; } -/* positioning etc. */ - -#posts-filter fieldset { - float: right; - margin: 0 0 1em 1.5ex; -} - -#posts-filter fieldset legend { - padding: 0 1px .2em 0; -} - /* Global classes */ #post-body .tagsdiv #newtag { @@ -974,8 +936,6 @@ table.diff td, table.diff th { margin-right: 120px; } - -#post-body ul.category-tabs, #post-body ul.add-menu-item-tabs { float: right; text-align: left; @@ -983,7 +943,6 @@ table.diff td, table.diff th { margin: 0 5px 0 -120px; } -#post-body ul.category-tabs li.tabs, #post-body ul.add-menu-item-tabs li.tabs { -webkit-border-top-left-radius: 0; -webkit-border-top-right-radius: 3px; @@ -1002,13 +961,11 @@ ul.export-filters, .categorydiv ul.categorychecklist ul, .customlinkdiv ul.categorychecklist ul, .posttypediv ul.categorychecklist ul, -.taxonomydiv ul.categorychecklist ul, -#linkcategorydiv ul.categorychecklist ul { +.taxonomydiv ul.categorychecklist ul { margin-left: 0; margin-right: 18px; } -#post-body .category-tabs li.tabs, #post-body .add-menu-item-tabs li.tabs { border-style: solid solid solid none; border-width: 1px 1px 1px 0; @@ -1040,6 +997,10 @@ span.description, text-align: right; } +.links-table th { + text-align: right; +} + /*------------------------------------------------------------------------------ 14.0 - Media Screen ------------------------------------------------------------------------------*/ @@ -1109,7 +1070,6 @@ span.description, padding: 5px 8px 0 0; } - .find-box-search label { padding-right: 0; padding-left: 6px; @@ -1120,7 +1080,6 @@ span.description, left: 1px; } - form.upgrade .hint { font-style: normal; } @@ -1195,20 +1154,98 @@ form.upgrade .hint { margin: 2px 0 5px 3px; } - - /*------------------------------------------------------------------------------ 16.0 - Themes ------------------------------------------------------------------------------*/ -td.available-theme { - text-align: right; +h3.available-themes { + float: right; +} + +.available-theme { + margin-right: 0; + margin-left: 10px; + padding: 20px 0 20px 20px; +} + +#current-theme .theme-info li, +.theme-options li, +.available-theme .action-links li { + float: right; + padding-right: 0; + padding-left: 10px; + margin-right: 0; + margin-left: 10px; + border-right: none; + border-left: 1px solid #dfdfdf; +} + +.available-theme .action-links li { + padding-left: 8px; + margin-left: 8px; +} + +#current-theme .theme-info li:last-child, +.theme-options li:last-child, +.available-theme .action-links li:last-child { + padding-left: 0; + margin-right: 0; + border-left: 0; +} + +.available-theme .action-links .delete-theme { + float: left; + margin-left: 0; + margin-right: 8px; +} + +.available-theme .action-links p { + float: right; +} + +#current-theme.has-screenshot { + padding-left: 0; + padding-right: 330px; +} + +#current-theme h4 span { + margin-left: 0; + margin-right: 20px; } #current-theme img { + float: right; + width: 300px; + margin-left: 0; + margin-right: -330px; +} + +.theme-options .load-customize { + margin-right: 0; + margin-left: 30px; + float: right; +} + +.theme-options span { float: right; margin-right: 0; - margin-left: 1em; + margin-left: 10px; +} + +.theme-options ul { + float: right; +} + +/* Allow for three-up on 1024px wide screens, e.g. tablets */ +@media only screen and (max-width: 1200px) { + #current-theme.has-screenshot { + padding-right: 270px; + } + + #current-theme img { + margin-right: -270px; + width: 240px; + } } #broken-themes { @@ -1278,6 +1315,12 @@ h2 .nav-tab { margin-left: 5px } +#profile-page #pass1, +#profile-page #pass2, +#profile-page #user_login { + direction: ltr; +} + #your-profile legend { font-family: Tahoma, Arial, sans-serif; } @@ -1287,8 +1330,8 @@ h2 .nav-tab { ------------------------------------------------------------------------------*/ .pressthis a span { - background-position: -20px 5px ; - padding: 8px 32px 8px 0; + background-position: right 5px; + padding: 8px 27px 8px 11px; } .pressthis a:after { @@ -1366,41 +1409,12 @@ h2 .nav-tab { margin-right: 3em; } -.about-wrap .feature-section .left-feature, -.about-wrap .feature-section img, -.about-wrap .feature-section .right-feature { - float: right; -} - -.about-wrap .feature-section .left-feature { - margin-right: 0; - margin-left: 0; -} - -.about-wrap .feature-section .right-feature { - margin-left: 0; - margin-right: 0; -} - -.about-wrap .feature-section.text-features { - float: right; -} -.about-wrap .feature-section.screenshot-features { +.about-wrap .three-col-images .last-feature { float: left; } -.about-wrap .feature-section.screenshot-features .angled-right { - margin-left: 0; - margin-right: 2.5em; -} -.about-wrap .feature-section.screenshot-features .angled-right p { - margin-left: 0; - margin-right: 290px; -} -.about-wrap .feature-section .angled-right img, -.about-wrap .feature-section .angled-left img { - margin-right: 0; - margin-left: 30px; +.about-wrap .three-col-images .first-feature { + float: right; } .about-wrap .feature-section.three-col div { @@ -1408,43 +1422,32 @@ h2 .nav-tab { margin-left: 4.999999999%; float: right; } + .about-wrap .feature-section.three-col h4 { text-align: right; } + .about-wrap .feature-section.three-col img { margin-right: 5px; margin-left: 0; } + .about-wrap .feature-section.three-col .last-feature { margin-left: 0; } -.about-wrap .feature-section .feature-images img { - margin-right: auto; - margin-left: 5px; +.about-wrap .feature-section img { + margin: 0 0 10px 0.7%; } -.about-wrap .feature-section.images-stagger-left .angled-left { - margin-left: auto; - margin-right: 5px; -} -.about-wrap .feature-section .angled-right { + +.about-wrap .feature-section.images-stagger-right img { float: left; + margin: 0 12px 12px 5px; } -.about-wrap .feature-section.images-stagger-right .feature-images { - right: auto; - left: 0; -} -.about-wrap .feature-section.images-stagger-left .feature-images { - left: auto; - right: 0; -} -.about-wrap .feature-section.images-stagger-right .left-feature { - margin-right: 0; - margin-left: 350px; -} -.about-wrap .feature-section.images-stagger-left .right-feature { - margin-left: 0; - margin-right: 350px; + +.about-wrap .feature-section.images-stagger-left img { + float: right; + margin: 0 5px 12px 12px; } .about-wrap li.wp-person, @@ -1566,6 +1569,72 @@ table .column-rating { float: left; } +/*------------------------------------------------------------------------------ + 26.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ +.wp-full-overlay .wp-full-overlay-sidebar { + margin: 0; + left: auto; + right: 0; + border-right: 0; + border-left: 1px solid rgba( 0, 0, 0, 0.2 ); +} + +.wp-full-overlay-sidebar:after { + right: auto; + left: 0; + box-shadow: inset 5px 0 4px -4px rgba(0, 0, 0, 0.1); +} + +.wp-full-overlay.collapsed, +.wp-full-overlay.expanded .wp-full-overlay-sidebar { + margin-right: 0 !important; +} + +.wp-full-overlay.expanded { + margin-right: 300px; + margin-left: 0; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-right: -300px; + margin-left: 0; +} + +/* Collapse Button */ +.wp-full-overlay .collapse-sidebar { + right: 0; + left: auto; + margin-right: 15px; +} + +.wp-full-overlay.collapsed .collapse-sidebar { + right: 100%; +} + +.wp-full-overlay .collapse-sidebar-arrow { + margin-right: 2px; + margin-left: 0; + background: transparent url('../../wp-admin/images/arrows.png') no-repeat 0 -108px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow { + background-position: 0 -72px; +} + +.wp-full-overlay .collapse-sidebar-label { + right: 100%; + left: auto; + margin-right: 10px; + margin-left: 0; +} + +/*------------------------------------------------------------------------------ + 27.0 - Customize Loader +------------------------------------------------------------------------------*/ +.install-theme-info .theme-install { + float: left; +} /* MERGED */ @@ -1708,11 +1777,11 @@ ol.ol-decimal { margin-left: 15px; } - .wrap h2, .subtitle { font-family: Tahoma, Arial, sans-serif; } + .wrap h2 { padding-right: 0; padding-left: 15px; @@ -1733,7 +1802,6 @@ ol.ol-decimal { padding-left: 0; } - /* dashboard */ #dashboard-widgets-wrap .has-sidebar { margin-right: 0; @@ -1755,8 +1823,10 @@ ol.ol-decimal { a.rsswidget, #dashboard_plugins h4, #dashboard_plugins h5, -#dashboard_recent_comments .comment-meta .approve { - font-family: Tahoma, Arial; +#dashboard_recent_comments .comment-meta .approve, +#dashboard_right_now td.b, +#dashboard_right_now .versions a { + font-family: Tahoma, Arial, sans-serif; } #dashboard_right_now p.sub { @@ -1768,7 +1838,6 @@ a.rsswidget, padding-right: 0; padding-left: 6px; text-align: left; - font-family: Tahoma, Arial; } #dashboard_right_now .t { @@ -1784,10 +1853,6 @@ a.rsswidget, float:left; } -#dashboard_right_now .versions a { - font-family: Tahoma, Arial; -} - #dashboard_right_now a.button { float: left; clear: left; @@ -1825,7 +1890,7 @@ a.rsswidget, } .rss-widget span.rss-date { - font-family: Tahoma, Arial; + font-family: Tahoma, Arial, sans-serif; margin-left: 0; margin-right: 3px; } @@ -1878,14 +1943,14 @@ a.rsswidget, /* Recent Drafts */ #dashboard_recent_drafts h4 abbr { - font-family: Tahoma, Arial; + font-family: Tahoma, Arial, sans-serif; margin-left:0; margin-right: 3px; } /* login */ body.login { - font-family: Tahoma, arial; + font-family: Tahoma, Arial, sans-serif; } .login form { @@ -1902,7 +1967,7 @@ body.login { } #login form .submit input { - font-family: Tahoma, arial; + font-family: Tahoma, Arial, sans-serif; } .login #nav, @@ -1920,7 +1985,7 @@ body.login { .login #user_email { margin-left: 6px; margin-right: 0; - direction:ltr; + direction: ltr; } .login h1 a { @@ -1931,7 +1996,6 @@ body.login { float: left; } - /* nav-menu */ #nav-menus-frame { margin-right: 300px; @@ -2030,10 +2094,20 @@ body.login { } /* Custom Links */ -#add-custom-link label span { float: right; padding-left: 5px; padding-right:0;} -.howto span { float: right; } +#add-custom-link label span { + float: right; + padding-left: 5px; + padding-right: 0; +} -.list li .menu-item-title input { margin-left: 3px; margin-right: 0 } +.nav-menus-php .howto span { + float: right; +} + +.list li .menu-item-title input { + margin-left: 3px; + margin-right: 0; +} /* Nav Menu */ .menu-item-handle { @@ -2050,7 +2124,10 @@ body.login { margin-left:13em; margin-right:0; } - +.menu-item-handle .item-edit { + right: auto; + left: -20px; +} /* WARNING: The factor of 30px is hardcoded into the nav-menus javascript. */ .menu-item-depth-0 { margin-right: 0px; margin-left:0;} @@ -2110,14 +2187,19 @@ body.login { border-width: 0 1px 1px 1px; } +#custom-menu-item-url { + direction: ltr; +} + .link-to-original { font-style: normal; font-weight: bold; } - .link-to-original a { - padding-right: 4px; - padding-left:0; - } + +.link-to-original a { + padding-right: 4px; + padding-left:0; +} .menu-item-settings .description-thin, .menu-item-settings .description-wide { @@ -2148,17 +2230,13 @@ body.login { float: right; } - -/* plugin-install */ -div.star { - left: auto; - right: 0; - letter-spacing: 0; +/* Star ratings */ +div.star-holder { + background: url('../images/stars-rtl.png?ver=20120506.png') repeat-x bottom right; } - -.star img, div.star a, div.star a:hover, div.star a:visited { - right: auto; - left: 0; +div.star-holder .star-rating { + background: url('../images/stars-rtl.png?ver=20120506.png') repeat-x top right; + float: right; } #plugin-information ul#sidemenu { @@ -2189,6 +2267,7 @@ div.star { padding-right: 20px; } +#plugin-information #section-screenshots ol, #plugin-information .updated, #plugin-information pre { margin-right: 0; @@ -2201,7 +2280,7 @@ div.star { direction: rtl; } -#section-description { +#plugin-information #section-holder .section { direction: ltr; } @@ -2212,12 +2291,6 @@ div.star { position: relative; } -#side-info-column { - float: left; - right: auto; - left: 0; -} - h3.tb { margin-left: 0; margin-right: 5px; @@ -2248,20 +2321,7 @@ h3.tb { #category-add input, #category-add select { - font-family: Tahoma, Arial; -} - -.inline-editor ul.cat-checklist ul, -.categorydiv ul.categorychecklist ul, -#linkcategorydiv ul.categorychecklist ul { - margin-left: 0; - margin-right: 18px; -} - -/* Categories */ -.category-tabs li { - padding-left: 0; - padding-right: 8px; + font-family: Tahoma, Arial, sans-serif; } /* Tags */ @@ -2308,43 +2368,22 @@ h3.tb { margin-right: 10px; } -/* theme-editor */ +/* theme-editor, plugin-editor */ #templateside { float: left; } -#template textarea { +#template textarea, +#docs-list { direction: ltr; } /* theme-install */ -div.star { - left:auto; - right: 0; -} - -.star img, -div.star a, -div.star a:hover, -div.star a:visited { - right: auto; - left: 0; -} - -.theme-listing .theme-item h3 { - font-style: normal; -} - -#theme-information .theme-preview-img { +.theme-details .theme-version { float: right; - margin: 5px 15px 10px 25px; } -#theme-information .action-button #cancel { - float: right; -} - -#theme-information .action-button #install { +.theme-details .star-holder { float: left; } @@ -2415,4 +2454,79 @@ div.sidebar-name h3 { float: left; } +.press-this #header-logo, +.press-this #wphead h1 { + float: right; +} + +/* RTL */ +.ltr { + direction: ltr; +} +/* =Localized CSS +-------------------------------------------------------------- */ + +/* he_IL: Remove Tahoma from the font stack. Arial is best for Hebrew. */ +body.locale-he-il, +.locale-he-il .quicktags, .locale-he-il .search, +.locale-he-il .howto, +.locale-he-il #adminmenu .awaiting-mod, +.locale-he-il #adminmenu span.update-plugins, +.locale-he-il #sidemenu li a span.update-plugins, +.locale-he-il .post-com-count-wrapper, +.locale-he-il .widefat th, +.locale-he-il .tablenav .displaying-num, +.locale-he-il .inline-edit-row fieldset span.title, +.locale-he-il .inline-edit-row fieldset span.checkbox-title, +.locale-he-il .inline-edit-row fieldset ul.cat-checklist label, +.locale-he-il .inline-edit-row .catshow, +.locale-he-il .inline-edit-row .cathide, +.locale-he-il .inline-edit-row #bulk-titles div, +.locale-he-il p.help, +.locale-he-il p.description, +.locale-he-il span.description, +.locale-he-il .form-wrap p, +.locale-he-il h2 .nav-tab, +.locale-he-il #your-profile legend, +.locale-he-il #utc-time, .locale-he-il #local-time, +.locale-he-il #poststuff h3, +.locale-he-il .metabox-holder h3, +.locale-he-il .tool-box .title, +.locale-he-il td, +.locale-he-il textarea, +.locale-he-il input, +.locale-he-il select, +.locale-he-il .wrap h2, +.locale-he-il .subtitle, +.locale-he-il .wrap .add-new-h2, +.locale-he-il #dashboard_right_now p.sub, +.locale-he-il #dashboard-widgets h4, +.locale-he-il a.rsswidget, +.locale-he-il #dashboard_plugins h4, +.locale-he-il #dashboard_plugins h5, +.locale-he-il #dashboard_recent_comments .comment-meta .approve, +.locale-he-il #dashboard_right_now td.b, +.locale-he-il #dashboard_right_now .versions a, +.locale-he-il .rss-widget span.rss-date, +.locale-he-il #dashboard_recent_drafts h4 abbr, +body.login.locale-he-il, +.locale-he-il #login form .submit input, +.locale-he-il #menu-management .nav-tabs-arrow-right, +.locale-he-il #category-add input, +.locale-he-il #category-add select, +.locale-he-il .submit input, +.locale-he-il .button, +.locale-he-il .button-primary, +.locale-he-il .button-secondary, +.locale-he-il .button-highlighted, +.locale-he-il #postcustomstuff .submit input, +.locale-he-il div.sidebar-name h3 { + font-family: Arial, sans-serif; +} + +/* he_IL: Have <em> be bold rather than italic. */ +.locale-he-il em { + font-style: normal; + font-weight: bold; +} diff --git a/wp-admin/css/wp-admin.css b/wp-admin/css/wp-admin.css index 006b1971c..3c41a559c 100644 --- a/wp-admin/css/wp-admin.css +++ b/wp-admin/css/wp-admin.css @@ -1 +1 @@ -#wpwrap{height:auto;min-height:100%;width:100%;position:relative;}#wpcontent{height:100%;}#wpcontent,#footer{margin-left:165px;}.folded #wpcontent,.folded #footer{margin-left:52px;}#wpbody-content{padding-bottom:65px;float:left;width:100%;}#adminmenuback,#adminmenuwrap,#adminmenu,#adminmenu .wp-submenu,#adminmenu .wp-submenu-wrap,.folded #adminmenu .wp-has-current-submenu .wp-submenu{width:145px;}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1;}#adminmenu{clear:left;margin:0;padding:0;list-style:none;}.folded #adminmenuback,.folded #adminmenuwrap,.folded #adminmenu,.folded #adminmenu li.menu-top{width:32px;}.inner-sidebar{float:right;clear:right;display:none;width:281px;position:relative;}.columns-2 .inner-sidebar{margin-right:auto;width:286px;display:block;}.inner-sidebar #side-sortables,.columns-2 .inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0;}.has-right-sidebar .inner-sidebar{display:block;}.has-right-sidebar #post-body{float:left;clear:left;width:100%;margin-right:-2000px;}.has-right-sidebar #post-body-content{margin-right:300px;}#post-body-content #side-sortables.empty-container{border:0 none;height:0;}#col-container,#col-left,#col-right{overflow:hidden;padding:0;margin:0;}#col-left{width:35%;}#col-right{float:right;clear:right;width:65%;}.col-wrap{padding:0 7px;}.alignleft{float:left;}.alignright{float:right;}.textleft{text-align:left;}.textright{text-align:right;}.clear{clear:both;}.screen-reader-text,.screen-reader-text span{position:absolute;left:-1000em;height:1px;width:1px;overflow:hidden;}.hidden,.js .closed .inside,.js .hide-if-js,.no-js .hide-if-no-js{display:none;}input[type="text"],input[type="password"],textarea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}input[type="checkbox"],input[type="radio"]{vertical-align:text-bottom;}html,body{height:100%;margin:0;padding:0;}body{font-family:sans-serif;font-size:12px;line-height:1.4em;min-width:600px;}body.iframe{min-width:0;}body.login{background:#fbfbfb;min-width:0;}iframe,img{border:0;}td,textarea,input,select{font-family:inherit;font-size:inherit;font-weight:inherit;}td,textarea{line-height:inherit;}input,select{line-height:15px;}a,input,select{outline:0;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}p{margin:1em 0;}blockquote{margin:1em;}label{cursor:pointer;}li,dd{margin-bottom:6px;}textarea,input,select{margin:1px;padding:3px;}h1,h2,h3,h4,h5,h6{display:block;font-weight:bold;}h1{font-size:2em;margin:.67em 0;}h2{font-size:1.5em;margin:.83em 0;}h3{font-size:1.17em;margin:1em 0;}h4{font-size:1em;margin:1.33em 0;}h5{font-size:.83em;margin:1.67em 0;}h6{font-size:.67em;margin:2.33em 0;}ul,ol{padding:0;}ul{list-style:none;}ol{list-style-type:decimal;margin-left:2em;}ul.ul-disc{list-style:disc outside;}ul.ul-square{list-style:square outside;}ol.ol-decimal{list-style:decimal outside;}ul.ul-disc,ul.ul-square,ol.ol-decimal{margin-left:1.8em;}ul.ul-disc>li,ul.ul-square>li,ol.ol-decimal>li{margin:0 0 .5em;}.code,code{font-family:Consolas,Monaco,monospace;}kbd,code{padding:1px 3px;margin:0 1px;font-size:11px;}.subsubsub{list-style:none;margin:8px 0 5px;padding:0;white-space:nowrap;font-size:12px;float:left;}.subsubsub a{line-height:2;padding:.2em;text-decoration:none;}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:normal;}.subsubsub a.current{font-weight:bold;background:none;border:none;}.subsubsub li{display:inline;margin:0;padding:0;}.widefat,div.updated,div.error,.wrap .add-new-h2,textarea,input[type="text"],input[type="password"],input[type="file"],input[type="button"],input[type="submit"],input[type="reset"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="url"],select,.tablenav .tablenav-pages a,.tablenav-pages span.current,#titlediv #title,.postbox,#postcustomstuff table,#postcustomstuff input,#postcustomstuff textarea,.imgedit-menu div,.plugin-update-tr .update-message,#poststuff .inside .the-tagcloud,.login form,#login_error,.login .message,#menu-management .menu-edit,.nav-menus-php .list-container,.menu-item-handle,.link-to-original,.nav-menus-php .major-publishing-actions .form-invalid,.press-this #message,#TB_window,.tbtitle,.highlight,.feature-filter,#widget-list .widget-top,.editwidget .widget-inside{-webkit-border-radius:3px;border-radius:3px;border-width:1px;border-style:solid;}.widefat{border-spacing:0;width:100%;clear:both;margin:0;}.widefat *{word-wrap:break-word;}.widefat a{text-decoration:none;}.widefat thead th:first-of-type{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;}.widefat thead th:last-of-type{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;}.widefat tfoot th:first-of-type{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.widefat tfoot th:last-of-type{-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.widefat td,.widefat th{border-width:1px 0;border-style:solid;}.widefat tfoot th{border-bottom:none;}.widefat .no-items td{border-bottom-width:0;}.widefat td{font-size:12px;padding:4px 7px 2px;vertical-align:top;}.widefat td p,.widefat td ol,.widefat td ul{font-size:12px;}.widefat th{padding:7px 7px 8px;text-align:left;line-height:1.3em;font-size:14px;}.widefat th input{margin:0 0 0 8px;padding:0;vertical-align:text-top;}.widefat .check-column{width:2.2em;padding:11px 0 0;vertical-align:top;}.widefat tbody th.check-column{padding:9px 0 22px;}.widefat .num,.column-comments,.column-links,.column-posts{text-align:center;}.widefat th#comments{vertical-align:middle;}.wrap{margin:4px 15px 0 0;}div.updated,div.error{padding:0 .6em;margin:5px 15px 2px;}div.updated p,div.error p{margin:.5em 0;padding:2px;}.wrap div.updated,.wrap div.error,.media-upload-form div.error{margin:5px 0 15px;}.wrap h2,.subtitle{font-weight:normal;margin:0;text-shadow:#fff 0 1px 0;}.wrap h2{font-size:23px;padding:9px 15px 4px 0;line-height:29px;}.subtitle{font-size:14px;padding-left:25px;}.wrap .add-new-h2{font-family:sans-serif;margin-left:4px;padding:3px 8px;position:relative;top:-3px;text-decoration:none;font-size:12px;border:0 none;}.wrap h2.long-header{padding-right:0;}.fade-1000,.fade-600,.fade-400,.fade-300{opacity:0;-moz-transition-property:opacity;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity;}.fade-1000{-moz-transition-duration:1s;-webkit-transition-duration:1s;-o-transition-duration:1s;transition-duration:1s;}.fade-600{-moz-transition-duration:.6s;-webkit-transition-duration:.6s;-o-transition-duration:.6s;transition-duration:.6s;}.fade-400{-moz-transition-duration:.4s;-webkit-transition-duration:.4s;-o-transition-duration:.4s;transition-duration:.4s;}.fade-300{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;}.fade-trigger{opacity:1;}div.sidebar-name h3,#menu-management .nav-tab,#dashboard_plugins h5,a.rsswidget,#dashboard_right_now td.b,#dashboard-widgets h4,.tool-box .title,#poststuff h3,.metabox-holder h3,.pressthis a,#your-profile legend,.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title,.tablenav .displaying-num,.widefat th,.quicktags,.search{font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;}h2 .nav-tab,.wrap h2,.subtitle,.login form .input{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;}.quicktags,.search{font-size:12px;}.icon32{float:left;height:34px;margin:7px 8px 0 0;width:36px;}.icon16{height:18px;width:18px;padding:6px 6px;margin:-6px 0 0 -8px;float:left;}.key-labels label{line-height:24px;}.pre{white-space:pre-wrap;white-space:-moz-pre-wrap!important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;}.howto{font-style:italic;display:block;font-family:sans-serif;}p.install-help{margin:8px 0;font-style:italic;}.no-break{white-space:nowrap;}.wp-admin select{padding:2px;height:2em;}.wp-admin select[multiple]{height:auto;}select option{padding:2px;}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;}form p.submit a.cancel:hover{text-decoration:none;}.submit input,.button,input.button,.button-primary,input.button-primary,.button-secondary,input.button-secondary,.button-highlighted,input.button-highlighted,#postcustomstuff .submit input{text-decoration:none;font-size:12px!important;line-height:13px;padding:3px 8px;cursor:pointer;border-width:1px;border-style:solid;-webkit-border-radius:11px;border-radius:11px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}#minor-publishing-actions input,#major-publishing-actions input,#minor-publishing-actions .preview{min-width:80px;text-align:center;}textarea.all-options,input.all-options{width:250px;}input.large-text,textarea.large-text{width:99%;}input.regular-text,#adduser .form-field input{width:25em;}input.small-text{width:50px;}#doaction,#doaction2,#post-query-submit{margin-right:8px;}.tablenav select[name="action"],.tablenav select[name="action2"]{width:130px;}.tablenav select[name="m"]{width:155px;}.tablenav select#cat{width:170px;}#wpcontent option{padding:2px;}#timezone_string option{margin-left:1em;}label,#your-profile label+a{vertical-align:middle;}#misc-publishing-actions label{vertical-align:baseline;}#pass-strength-result{border-style:solid;border-width:1px;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none;}.indicator-hint{padding-top:8px;}p.search-box{float:right;margin:0;}#major-publishing-actions{padding:10px 10px 8px;clear:both;border-top:none;}#delete-action{line-height:25px;vertical-align:middle;text-align:left;float:left;}#publishing-action{text-align:right;float:right;line-height:23px;}#post-body #minor-publishing{padding-bottom:10px;}#post-body #misc-publishing-actions{padding:0;}#post-body .misc-pub-section{border-right-width:1px;border-right-style:solid;border-top:0;border-bottom:0;min-height:30px;float:left;max-width:32%;}#post-body .misc-pub-section-last{border-right:0;}#misc-publishing-actions{padding:6px 0 0;}.misc-pub-section{padding:6px 10px 8px;border-width:1px 0;border-style:solid;}.misc-pub-section:first-child{border-top-width:0;}.misc-pub-section-last{border-bottom-width:0;}#minor-publishing-actions{padding:10px 10px 2px 8px;text-align:right;}#minor-publishing{border-bottom-width:1px;border-bottom-style:solid;-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff;}#save-post{float:left;}#minor-publishing .ajax-loading{padding:3px 0 0 4px;float:left;}.preview{float:right;}#sticky-span{margin-left:18px;}.side-info{margin:0;padding:4px;font-size:11px;}.side-info h5{padding-bottom:7px;font-size:14px;margin:12px 2px 5px;border-bottom-width:1px;border-bottom-style:solid;}.side-info ul{margin:0;padding-left:18px;list-style:square;}a.button,a.button-primary,a.button-secondary{line-height:15px;padding:3px 10px;white-space:nowrap;-webkit-border-radius:10px;}.approve,.unapproved .unapprove{display:none;}.unapproved .approve,.spam .approve,.trash .approve{display:inline;}td.action-links,th.action-links{text-align:right;}.describe .del-link{padding-left:5px;}#update-nag,.update-nag{line-height:19px;padding:5px 0;font-size:12px;text-align:center;margin:-1px 15px 0 5px;border-width:1px;border-style:solid;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;}.plugins .plugin-update{padding:0;}.plugin-update .update-message{margin:0 10px 8px 31px;font-weight:bold;}ul#dismissed-updates{display:none;}form.upgrade{margin-top:8px;}form.upgrade .hint{font-style:italic;font-size:85%;margin:-0.5em 0 2em 0;}.ajax-feedback{visibility:hidden;vertical-align:bottom;}#ajax-response.alignleft{margin-left:2em;}.fullscreen-overlay{z-index:149999;display:none;position:fixed;top:0;bottom:0;left:0;right:0;filter:inherit;}.fullscreen-active .fullscreen-overlay,.fullscreen-active #wp-fullscreen-body{display:block;}.fullscreen-fader{z-index:200000;}.fullscreen-active .fullscreen-fader{display:none;}#wp-fullscreen-body{width:100%;z-index:150005;display:none;position:absolute;top:0;left:0;}#wp-fullscreen-wrap{margin:0 auto 50px;position:relative;padding-top:60px;}#wp-fullscreen-title{font-size:1.7em;line-height:100%;outline:medium none;padding:6px 7px;width:100%;margin-bottom:30px;}#wp-fullscreen-container{padding:4px 10px 50px;}#wp-fullscreen-title,#wp-fullscreen-container{-webkit-border-radius:0;border-radius:0;border:1px dashed transparent;background:transparent;-moz-transition-property:border-color;-moz-transition-duration:.6s;-webkit-transition-property:border-color;-webkit-transition-duration:.6s;-o-transition-property:border-color;-o-transition-duration:.6s;transition-property:border-color;transition-duration:.6s;}#wp_mce_fullscreen{width:100%;min-height:300px;border:0;background:transparent;font-family:Consolas,Monaco,monospace;line-height:1.6em;padding:0;overflow-y:hidden;outline:none;resize:none;}#wp-fullscreen-tagline{color:#BBB;font-size:18px;float:right;padding-top:5px;}#fullscreen-topbar{position:fixed;top:0;left:0;z-index:150050;border-bottom-style:solid;border-bottom-width:1px;min-width:800px;width:100%;height:40px;}#wp-fullscreen-toolbar{padding:6px 10px 0;clear:both;max-width:1100px;min-width:820px;margin:0 auto;}#wp-fullscreen-mode-bar,#wp-fullscreen-button-bar,#wp-fullscreen-close,#wp-fullscreen-count{float:left;}#wp-fullscreen-save{float:right;padding:2px 2px 0 5px;}#wp-fullscreen-count,#wp-fullscreen-close{padding-top:5px;}#wp-fullscreen-central-toolbar{margin:auto;padding:0;}#wp-fullscreen-buttons>div{float:left;}#wp-fullscreen-mode-bar{padding:1px 14px 0 0;}#wp-fullscreen-modes a{display:block;font-size:11px;text-decoration:none;float:left;margin:1px 0 0 0;padding:2px 6px 2px;border-width:1px 1px 1px 0;border-style:solid;border-color:#bbb;color:#777;text-shadow:0 1px 0 #fff;background-color:#f4f4f4;background-image:-moz-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:-webkit-gradient(linear,left bottom,left top,from(#e4e4e4),to(#f9f9f9));}#wp-fullscreen-modes a:hover,.wp-html-mode #wp-fullscreen-modes a:last-child,.wp-tmce-mode #wp-fullscreen-modes a:first-child{color:#333;border-color:#999;background-color:#eee;background-image:-moz-linear-gradient(bottom,#f9f9f9,#e0e0e0);background-image:-webkit-gradient(linear,left bottom,left top,from(#f9f9f9),to(#e0e0e0));}#wp-fullscreen-modes a:first-child{border-width:1px;-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px;}#wp-fullscreen-modes a:last-child{-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;}#wp-fullscreen-buttons .active a{background:inherit;}#wp-fullscreen-buttons .hidden{display:none;}#wp-fullscreen-buttons .disabled{opacity:.5;}.wp-html-mode #wp-fullscreen-buttons div{display:none;}.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both{display:block;}#fullscreen-topbar.fullscreen-make-sticky{display:block!important;}#wp-fullscreen-save img{vertical-align:middle;}#wp-fullscreen-save img,#wp-fullscreen-save span{padding-right:4px;display:none;}#wp-fullscreen-buttons .mce_image .mce_image{background-image:url('../images/menu.png?ver=20111128');background-position:-124px -38px;}#wp-fullscreen-buttons .mce_image .mce_image:hover{background-position:-124px -6px;}.fullscreen-active #TB_overlay{z-index:150100;}.fullscreen-active #TB_window{z-index:150102;}#wp_mce_fullscreen_ifr{background:transparent;}#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst{display:none;}#wp-fullscreen-container .wp_themeSkin table td{vertical-align:top;}#adminmenu a,#sidemenu a,#taglist a,#catlist a{text-decoration:none;}#screen-options-wrap,#contextual-help-wrap{margin:0;padding:8px 20px 12px;position:relative;overflow:auto;}#screen-meta .screen-reader-text{visibility:hidden;}#screen-meta-links{margin:0 24px 0 0;}#screen-meta{display:none;position:relative;margin:0 15px 0 5px;border-width:0 1px 1px;border-style:none solid solid;}#screen-options-link-wrap,#contextual-help-link-wrap{float:right;height:22px;padding:0;margin:0 0 0 6px;font-family:sans-serif;}#screen-options-link-wrap,#contextual-help-link-wrap,#screen-meta{-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;}#screen-meta-links a.show-settings{text-decoration:none;z-index:1;padding:0 16px 0 6px;height:22px;line-height:22px;font-size:12px;display:block;text-shadow:rgba(255,255,255,0.7) 0 1px 0;}#screen-meta-links a.show-settings:hover{text-decoration:none;}.toggle-arrow{background-repeat:no-repeat;background-position:top left;background-color:transparent;height:22px;line-height:22px;display:block;}.toggle-arrow-active{background-position:bottom left;}#screen-options-wrap h5,#contextual-help-wrap h5{margin:8px 0;font-size:13px;}.metabox-prefs label{display:inline-block;padding-right:15px;white-space:nowrap;line-height:30px;}.metabox-prefs label input{margin:0 5px 0 2px;}.metabox-prefs label a{display:none;}#contextual-help-wrap{padding:0;margin-left:-4px;}#contextual-help-columns{position:relative;}#contextual-help-back{position:absolute;top:0;bottom:0;left:150px;right:170px;border-width:0 1px;border-style:solid;}#contextual-help-wrap.no-sidebar #contextual-help-back{right:0;border-right-width:0;-webkit-border-bottom-right-radius:2px;border-bottom-right-radius:2px;}.contextual-help-tabs{float:left;width:150px;margin:0;}.contextual-help-tabs ul{margin:1em 0;}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:1px 0;border-color:transparent;}.contextual-help-tabs a{display:block;padding:5px 5px 5px 12px;line-height:18px;text-decoration:none;}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-width:1px 0 1px 1px;border-style:solid;}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto;}.help-tab-content{display:none;margin:0 22px 12px 0;line-height:1.6em;}.help-tab-content.active{display:block;}.help-tab-content li{list-style-type:disc;margin-left:18px;}.contextual-help-sidebar{width:150px;float:right;padding:0 8px 0 12px;overflow:auto;}#adminmenuback,#adminmenuwrap{border-width:0 1px 0 0;border-style:solid;}#adminmenuwrap{position:relative;float:left;}#adminmenushadow{position:absolute;top:0;right:0;bottom:0;width:6px;z-index:20;}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;user-select:none;}#adminmenu .wp-submenu{list-style:none;padding:0;margin:0;overflow:hidden;}#adminmenu li .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{display:none;position:absolute;top:-1px;left:146px;z-index:999;overflow:hidden;}.js #adminmenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.no-js #adminmenu .wp-has-submenu:hover .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu li.focused .wp-submenu{display:block;}#adminmenu .wp-has-current-submenu .wp-submenu{position:relative;z-index:2;top:auto;left:auto;right:auto;bottom:auto;padding:0;}#adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}.folded #adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{top:-5px;left:26px;}#adminmenu .wp-submenu.sub-open,#adminmenu li.focused.wp-not-current-submenu .wp-submenu,.folded #adminmenu li.focused.wp-has-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.no-js #adminmenu .wp-has-submenu:hover .wp-submenu,.no-js.folded #adminmenu .wp-has-current-submenu:hover .wp-submenu{padding:0 8px 8px 0;}.no-js #adminmenu .wp-has-current-submenu:hover .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu{padding:0;}#adminmenu .wp-submenu a{font-size:12px;line-height:18px;}#adminmenu a.menu-top,#adminmenu .wp-submenu-head{font-size:13px;line-height:18px;}#adminmenu div.wp-submenu-head{display:none;}.folded #adminmenu div.wp-submenu-head{display:block;}.folded #adminmenu a.menu-top,body.no-js #adminmenu .wp-menu-toggle,.folded #adminmenu div.wp-menu-toggle{display:none;}#adminmenu div.wp-menu-image{float:left;width:28px;height:28px;}.folded #adminmenu div.wp-menu-image{width:32px;}#adminmenu li{margin:0;padding:0;cursor:pointer;}#adminmenu a{display:block;line-height:18px;padding:2px 5px;}#adminmenu li.menu-top{min-height:29px;position:relative;}#adminmenu a.menu-top{font-weight:bold;line-height:18px;min-width:10em;padding:5px 5px;border-width:1px 0 1px;border-style:solid;}#adminmenu li.wp-menu-open{border-width:0 0 1px;border-style:solid;}#adminmenu .wp-submenu ul{padding:4px 0;}#adminmenu .wp-submenu a{margin:0;}#adminmenu li li{margin-left:8px;}#adminmenu .wp-submenu a,#adminmenu li li a,.folded #adminmenu .wp-not-current-submenu li a{padding-left:12px;}#adminmenu .wp-not-current-submenu li a{padding-left:18px;}.folded #adminmenu li li{margin-left:0;}.folded #adminmenu li li a{padding-left:0;}.wp-menu-arrow{display:none;cursor:auto;z-index:25;position:absolute;right:100%;margin:0;height:30px;width:6px;-moz-transform:translate(146px);-webkit-transform:translate(146px);-o-transform:translate(146px);-ms-transform:translate(146px);transform:translate(146px);}#adminmenu li.wp-has-current-submenu .wp-menu-arrow,#adminmenu li.menu-top:hover .wp-menu-arrow,#adminmenu li.current .wp-menu-arrow,#adminmenu li.focused .wp-menu-arrow,#adminmenu li.menu-top.wp-has-submenu:hover .wp-menu-arrow div{display:block;}#adminmenu li.wp-not-current-submenu:hover .wp-menu-arrow div{display:none;}#adminmenu li.menu-top:hover .wp-menu-arrow,#adminmenu li.menu-top.focused .wp-menu-arrow{z-index:1001;}#adminmenu .wp-menu-arrow div{position:absolute;top:7px;left:-1px;width:14px;height:15px;-moz-transform:matrix(-0.6,1,0.6,1,0,0);-webkit-transform:matrix(-0.6,1,0.6,1,0,0);-o-transform:matrix(-0.6,1,0.6,1,0,0);-ms-transform:matrix(-0.6,1,0.6,1,0,0);transform:matrix(-0.6,1,0.6,1,0,0);}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{-moz-transform:translate(145px);-webkit-transform:translate(145px);-o-transform:translate(145px);-ms-transform:translate(145px);transform:translate(145px);height:28px;border-width:1px 0;border-style:solid;}.folded .wp-menu-arrow{-moz-transform:translate(33px);-webkit-transform:translate(33px);-o-transform:translate(33px);-ms-transform:translate(33px);transform:translate(33px);}#adminmenu .wp-not-current-submenu .wp-menu-arrow div{width:15px;top:6px;border-width:0 0 1px 1px;border-style:solid;}.wp-menu-arrow,.folded #adminmenu li.menu-top:hover .wp-menu-arrow{display:none;}.folded #adminmenu li.current:hover .wp-menu-arrow,.folded #adminmenu li.menu-top.wp-menu-open:hover .wp-menu-arrow{display:block;z-index:125;}#adminmenu .wp-submenu li{padding:0;margin:0;}.folded #adminmenu li.menu-top{border-width:1px 0;border-style:solid none;}#adminmenu .wp-menu-image img{float:left;padding:5px 0 0 2px;opacity:.6;filter:alpha(opacity=60);}#adminmenu li.menu-top:hover .wp-menu-image img,#adminmenu li.wp-has-current-submenu .wp-menu-image img{opacity:1;filter:alpha(opacity=100);}#adminmenu li.wp-menu-separator{height:3px;padding:0;margin:0;border-width:1px 0;border-style:solid;cursor:inherit;}#adminmenu div.separator{height:1px;padding:0;border-width:1px 0 0 0;border-style:solid;}#adminmenu .wp-submenu .wp-submenu-head{padding:6px 4px 5px 10px;cursor:default;border-width:1px 0;border-style:solid;}#adminmenu li .wp-submenu-wrap{border-width:1px 1px 1px 0;border-style:solid solid solid none;position:relative;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px;}#adminmenu li.wp-menu-open .wp-submenu-wrap{border:0 none;}.folded #adminmenu .wp-submenu .wp-submenu-wrap{margin-top:3px;}.folded #adminmenu .wp-has-current-submenu{margin-bottom:1px;}.folded #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0;}.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{margin-top:4px;}.folded #adminmenu .wp-submenu ul{border-width:0 0 0 1px;border-style:solid;}.folded #adminmenu .wp-submenu a{padding-left:10px;}.folded #adminmenu a.wp-has-submenu{margin-left:40px;}#adminmenu .wp-menu-toggle{width:18px;clear:right;float:right;margin:1px 0 0;height:27px;padding:1px 2px 0 0;cursor:pointer;}#adminmenu .wp-menu-image a{height:24px;}#adminmenu .awaiting-mod,#adminmenu span.update-plugins,#sidemenu li a span.update-plugins{position:absolute;font-family:sans-serif;font-size:9px;line-height:17px;font-weight:bold;margin-top:1px;margin-left:7px;-webkit-border-radius:10px;border-radius:10px;}#adminmenu li .awaiting-mod span,#adminmenu li span.update-plugins span,#sidemenu li a span.update-plugins span{display:block;padding:0 6px;}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none;}#collapse-menu{font-size:12px;line-height:34px;}.folded #collapse-menu span{display:none;}#collapse-button,#collapse-button div{width:15px;height:15px;}#collapse-button{float:left;margin:8px 6px;border-width:1px;border-style:solid;-webkit-border-radius:10px;border-radius:10px;}.post-com-count-wrapper{min-width:22px;font-family:sans-serif;}.post-com-count{height:1.3em;line-height:1.1em;display:block;text-decoration:none;padding:0 0 6px;cursor:pointer;background-position:center -80px;background-repeat:no-repeat;}.post-com-count span{font-size:11px;font-weight:bold;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px;}strong .post-com-count{background-position:center -55px;}.post-com-count:hover{background-position:center -3px;}.column-response .post-com-count{float:left;margin-right:5px;text-align:center;}.response-links{float:left;}#the-comment-list .attachment-80x60{padding:4px 8px;}body.admin-bar #wpcontent,body.admin-bar #adminmenu{padding-top:28px;}.narrow{width:70%;margin-bottom:40px;}.narrow p{line-height:150%;}.widefat th,.widefat td{overflow:hidden;}.widefat th{font-weight:normal;}.widefat td p{margin:2px 0 .8em;}.widefat .column-comment p{margin:.6em 0;}.postbox-container{float:left;}.postbox-container .meta-box-sortables{min-height:350px;}.postbox-container .meta-box-sortables.empty-container,#side-sortables.empty-container{border:3px dashed #CCC;height:350px;}.postbox .hndle{cursor:move;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;}.postbox.closed .hndle{-webkit-border-radius:3px;border-radius:3px;}.hndle a{font-size:11px;font-weight:normal;}.postbox .handlediv{float:right;width:27px;height:30px;cursor:pointer;}.sortable-placeholder{border-width:1px;border-style:dashed;margin-bottom:20px;}.widget,.postbox,.stuffbox{margin-bottom:20px;padding:0;border-width:1px;border-style:solid;line-height:1;}.widget .widget-top,.postbox h3,.stuffbox h3{margin-top:1px;border-bottom-width:1px;border-bottom-style:solid;cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none;}.postbox .inside,.stuffbox .inside{padding:0 10px;line-height:1.4em;}.postbox .inside{margin:10px 0;position:relative;}.postbox.closed h3{border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}.postbox table.form-table{margin-bottom:0;}.temp-border{border:1px dotted #ccc;}.columns-prefs label{padding:0 5px;}#wpbody-content .metabox-holder{padding-top:10px;}#dashboard-widgets .meta-box-sortables{margin:0 8px;}#dashboard_recent_comments div.undo{border-top-style:solid;border-top-width:1px;margin:0 -10px;padding:3px 8px;font-size:11px;}#the-comment-list td.comment p.comment-author{margin-top:0;margin-left:0;}#the-comment-list p.comment-author img{float:left;margin-right:8px;}#the-comment-list p.comment-author strong a{border:none;}#the-comment-list td{vertical-align:top;}#the-comment-list td.comment{word-wrap:break-word;}.welcome-panel{margin:20px 8px;padding:30px 10px 20px;border-width:1px 0;border-style:solid;position:relative;line-height:1.6em;overflow:auto;}.welcome-panel h3{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-size:32px;font-weight:normal;line-height:1.2;margin:.1em 0 .8em;}.welcome-panel h4{font-size:14px;}.welcome-panel .welcome-panel-close{position:absolute;top:0;right:10px;padding:8px 3px;font-size:13px;text-decoration:none;}.welcome-panel .welcome-panel-close:before{background:url('../images/xit.gif') 0 17% no-repeat;content:' ';height:100%;width:10px;left:-12px;position:absolute;}.welcome-panel .welcome-panel-close:hover:before{background-position:100% 17%;}.welcome-panel .wp-badge{float:left;margin-bottom:20px;}.welcome-panel-content{max-width:1500px;}.welcome-panel-content .about-description,.welcome-panel h3{margin-left:190px;}.welcome-panel p.welcome-panel-dismiss{clear:both;padding:1em 0 0 0;}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative;padding-left:25px;}.welcome-panel .welcome-panel-column{margin:0 5% 0 -25px;padding-left:25px;width:30%;min-width:200px;float:left;}.welcome-panel .welcome-panel-column.welcome-panel-last{margin-right:0;}.welcome-panel h4 .icon16{margin-left:-32px;}.welcome-panel .welcome-panel-column ul{margin:1.6em 1em 1em 1.3em;}.welcome-panel .welcome-panel-column li{list-style-type:disc;padding-left:2px;}table.fixed{table-layout:fixed;}.fixed .column-rating,.fixed .column-visible{width:8%;}.fixed .column-date,.fixed .column-parent,.fixed .column-links{width:10%;}.fixed .column-response,.fixed .column-author,.fixed .column-categories,.fixed .column-tags,.fixed .column-rel,.fixed .column-role{width:15%;}.fixed .column-comments{width:4em;padding:8px 0;text-align:left;}.fixed .column-comments .vers{padding-left:3px;}.fixed .column-comments a{float:left;}.fixed .column-slug{width:25%;}.fixed .column-posts{width:10%;}.fixed .column-icon{width:80px;}#commentsdiv .fixed .column-author,#comments-form .fixed .column-author{width:20%;}#commentsdiv.postbox .inside{margin:0;padding:0;}#commentsdiv.postbox .inside .row-actions{line-height:18px;}#commentsdiv.postbox .inside td{padding:1em 10px;}#commentsdiv.postbox .inside .column-author{width:33%;}#commentsdiv.postbox .inside p{margin:6px 10px 8px;}#commentsdiv.postbox .column-comment p{margin:.6em 0;}#commentsdiv.postbox #replyrow td{padding:0;}.sorting-indicator{display:none;width:7px;height:4px;margin-top:8px;margin-left:7px;background-image:url(../images/sort.gif);background-repeat:no-repeat;}.fixed .column-comments .sorting-indicator{margin-top:3px;}.widefat th.sortable,.widefat th.sorted{padding:0;}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 7px 8px;}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0;}th.sortable a span,th.sorted a span{float:left;cursor:pointer;}th.sorted.asc .sorting-indicator,th.desc:hover span.sorting-indicator{display:block;background-position:0 0;}th.sorted.desc .sorting-indicator,th.asc:hover span.sorting-indicator{display:block;background-position:-7px 0;}.tablenav-pages a{border-bottom-style:solid;border-bottom-width:2px;font-weight:bold;margin-right:1px;padding:0 2px;}.tablenav-pages .current-page{text-align:center;}.tablenav-pages .next-page{margin-left:2px;}.tablenav a.button-secondary{display:block;margin:3px 8px 0 0;}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle;}.tablenav.themes{max-width:98%;}.tablenav .tablenav-pages{float:right;display:block;cursor:default;height:30px;line-height:30px;font-size:12px;}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none;}.tablenav .tablenav-pages a,.tablenav-pages span.current{text-decoration:none;padding:3px 6px;}.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:active{cursor:default;}.tablenav .displaying-num{margin-right:10px;font-size:12px;font-style:italic;}.tablenav .actions{padding:2px 8px 0 0;}.tablenav .delete{margin-right:20px;}.view-switch{float:right;margin:6px 8px 0;}.view-switch a{text-decoration:none;}.filter{float:left;margin:-5px 0 0 10px;}.filter .subsubsub{margin-left:-10px;margin-top:13px;}.screen-per-page{width:3em;}#posts-filter fieldset{float:left;margin:0 1.5ex 1em 0;padding:0;}#posts-filter fieldset legend{padding:0 0 .2em 1px;}span.post-state-format{font-weight:normal;}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:left;margin:0;padding:0;width:100%;}tr.inline-edit-row td,#wpbody-content .inline-edit-row fieldset .inline-edit-col{padding:0 .5em;}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 0 0 1px;border-style:none none none solid;}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:40%;}#wpbody-content .quick-edit-row-post .inline-edit-col-right{width:39%;}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:20%;}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:50%;}#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right{width:49%;}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:30%;}#wpbody-content .bulk-edit-row-page .inline-edit-col-right{width:69%;}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:right;width:69%;}#wpbody-content .inline-edit-row-page .inline-edit-col-right{margin-top:27px;}.inline-edit-row fieldset .inline-edit-group{clear:both;}.inline-edit-row fieldset .inline-edit-group:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.inline-edit-row p.submit{clear:both;padding:.5em;margin:.5em 0 0;}.inline-edit-row span.error{line-height:22px;margin:0 15px;padding:3px 5px;}.inline-edit-row h4{margin:.2em 0;padding:0;line-height:23px;}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{margin:0;padding:0;line-height:27px;}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0;}.inline-edit-row fieldset label.inline-edit-tags{margin-top:0;}.inline-edit-row fieldset label.inline-edit-tags span.title{margin:.2em 0;}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em;}.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-left:5em;}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-right:.5em;}.inline-edit-row .input-text-wrap input[type=text]{width:100%;}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:text-bottom;}.inline-edit-row fieldset label textarea{width:100%;height:4em;}#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:50%;}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-right:.5em;}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em;}.inline-edit-row h4{text-transform:uppercase;}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{font-style:italic;line-height:1.8em;}.inline-edit-row fieldset input[type="text"],.inline-edit-row fieldset textarea{border-style:solid;border-width:1px;}.inline-edit-row fieldset .inline-edit-date{float:left;}.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=mn]{font-size:12px;width:2.1em;}.inline-edit-row fieldset input[name=aa]{font-size:12px;width:3.5em;}.inline-edit-row fieldset label input.inline-edit-password-input{width:8em;}.inline-edit-row .catshow,.inline-edit-row .cathide{cursor:pointer;}ul.cat-checklist{height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0;}#bulk-titles{display:block;height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0 0 5px;}.inline-edit-row fieldset ul.cat-checklist li,.inline-edit-row fieldset ul.cat-checklist input{margin:0;}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row .catshow,.inline-edit-row .cathide,.inline-edit-row #bulk-titles div{font-family:sans-serif;font-style:normal;font-size:11px;}table .inline-edit-row fieldset ul.cat-hover{height:auto;max-height:30em;overflow-y:auto;position:absolute;}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em;}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%;}.quick-edit-row-post fieldset label.inline-edit-status{float:left;}#bulk-titles{line-height:140%;}#bulk-titles div{margin:.2em .3em;}#bulk-titles div a{cursor:pointer;display:block;float:left;height:10px;margin:3px 3px 0 -2px;overflow:hidden;position:relative;text-indent:-9999px;width:10px;}#titlediv{position:relative;margin-bottom:20px;}#titlediv label{cursor:text;}#titlediv div.inside{margin:0;}#poststuff #titlewrap{border:0;padding:0;}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;width:100%;outline:none;}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{color:#bbb;position:absolute;font-size:1.7em;padding:8px 10px;}#wp-fullscreen-title-prompt-text{left:0;padding:11px;}#poststuff .inside-submitbox,#side-sortables .inside-submitbox{margin:0 3px;font-size:11px;}input#link_description,input#link_url{width:98%;}#pending{background:0 none;border:0 none;padding:0;font-size:11px;margin-top:-1px;}#edit-slug-box{height:1em;margin-top:8px;padding:0 10px;}#editable-post-name-full{display:none;}#editable-post-name input{width:16em;}.postarea h3 label{float:left;}#submitpost #ajax-loading,#submitpost .ajax-loading{vertical-align:middle;}#wpcontent .ajax-loading{visibility:hidden;}.submitbox .submit{text-align:left;padding:12px 10px 10px;font-size:11px;}.submitbox .submitdelete{text-decoration:none;padding:1px 2px;}.submitbox .submitdelete,.submitbox .submit a:hover{border-bottom-width:1px;border-bottom-style:solid;}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px;}.inside-submitbox #post_status{margin:2px 0 2px -2px;}#post-status-select,#post-format{line-height:2.5em;margin-top:3px;}#post-body #normal-sortables{min-height:50px;}.postbox{position:relative;min-width:255px;}#trackback_url{width:99%;}#normal-sortables .postbox .submit{background:transparent none;border:0 none;float:right;padding:0 12px;margin:0;}.category-add input[type="text"],.category-add select{width:100%;max-width:260px;}#post-body ul.category-tabs,#post-body ul.add-menu-item-tabs{float:left;width:120px;text-align:right;margin:0 -120px 0 5px;padding:0;}#post-body ul.category-tabs li,#post-body ul.add-menu-item-tabs li{padding:8px;}#post-body ul.category-tabs li.tabs,#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px;}.wp-tab-panel,.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,#linkcategorydiv div.tabs-panel{height:200px;overflow:auto;padding:.5em .9em;border-style:solid;border-width:1px;}.nav-menus-php .customlinkdiv div.tabs-panel,.nav-menus-php .posttypediv div.tabs-panel,.nav-menus-php .taxonomydiv div.tabs-panel{height:auto;max-height:205px;}div.tabs-panel-active{display:block;}div.tabs-panel-inactive{display:none;}#post-body .categorydiv div.tabs-panel,.taxonomy div.tabs-panel,#post-body #linkcategorydiv div.tabs-panel{margin:0 5px 0 125px;}.press-this #side-sortables .category-tabs li,.has-right-sidebar #side-sortables .category-tabs li,#side-sortables .add-menu-item-tabs li,.wp-tab-bar li{display:inline;line-height:1.35em;}.no-js #side-sortables .category-tabs li.hide-if-no-js{display:none;}#side-sortables .category-tabs a,#side-sortables .add-menu-item-tabs a,.wp-tab-bar a{text-decoration:none;}#side-sortables .category-tabs{margin:8px 0 3px;}#category-adder h4{margin:10px 0;}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px;}.categorydiv ul,.customlinkdiv ul,.posttypediv ul,.taxonomydiv ul,#linkcategorydiv ul{list-style:none;padding:0;margin:0;}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:3px 7px;}#side-sortables .submitbox .submit input,#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover{border:0 none;}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0;}#side-sortables .comments-box,#normal-sortables .comments-box{border:0 none;}ul.category-tabs,ul.add-menu-item-tabs,ul.wp-tab-bar{margin-top:12px;}#side-sortables .comments-box thead th,#normal-sortables .comments-box thead th{background:transparent;padding:0 7px 4px;font-style:italic;}ul.category-tabs li.tabs,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-style:solid solid none;border-width:1px 1px 0;}#commentsdiv img.waiting{padding-left:5px;}#post-body .category-tabs li.tabs,#post-body .add-menu-item-tabs li.tabs{border-style:solid none solid solid;border-width:1px 0 1px 1px;margin-right:-1px;}ul.category-tabs li,ul.add-menu-item-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;}form#tags-filter{position:relative;}.screen-per-page{width:3em;}#posts-filter fieldset{float:left;margin:0 1.5ex 1em 0;padding:0;}#posts-filter fieldset legend{padding:0 0 .2em 1px;}td.post-title strong,td.plugin-title strong{display:block;margin-bottom:.2em;}td.post-title p,td.plugin-title p{margin:6px 0;}.wp-hidden-children .wp-hidden-child,.ui-tabs-hide{display:none;}.commentlist .avatar{vertical-align:text-top;}#post-body .tagsdiv #newtag{margin-right:5px;width:16em;}#side-sortables input#post_password{width:94%;}#side-sortables .tagsdiv #newtag{width:68%;}#post-status-info{border-width:0 1px 1px;border-style:none solid solid;width:100%;-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;}#post-status-info td{font-size:12px;}.autosave-info{padding:2px 15px;text-align:right;}#editorcontent #post-status-info{border:none;}#post-body .wp_themeSkin .mceStatusbar a.mceResize{display:block;background:transparent url(../images/resize.gif) no-repeat scroll right bottom;width:12px;cursor:se-resize;margin:0 2px;position:relative;top:-2px;}#post-body .postarea .wp_themeSkin .mceStatusbar a.mceResize{top:20px;}#wp-word-count{display:block;padding:2px 10px;}#timestampdiv select{height:20px;line-height:14px;padding:0;vertical-align:top;}#aa,#jj,#hh,#mn{padding:1px;font-size:12px;}#jj,#hh,#mn{width:2em;}#aa{width:3.4em;}.curtime #timestamp{background-repeat:no-repeat;background-position:left top;padding-left:18px;}#timestampdiv{padding-top:5px;line-height:23px;}#timestampdiv p{margin:8px 0 6px;}#timestampdiv input{border-width:1px;border-style:solid;}#postcustomstuff .updatemeta,#postcustomstuff .deletemeta{margin:auto;}#postcustomstuff thead th{padding:5px 8px 8px;}#postcustom #postcustomstuff .submit{border:0 none;float:none;padding:5px 8px;}#side-sortables #postcustom #postcustomstuff .submit{padding:0 5px;}#side-sortables #postcustom #postcustomstuff td.left input{margin:3px 3px 0;}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px;margin:3px;}#postcustomstuff table{margin:0;width:100%;border-width:1px;border-style:solid;border-spacing:0;}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:95%;margin:8px 0 8px 8px;}#postcustomstuff th.left,#postcustomstuff td.left{width:38%;}#postcustomstuff #newmeta .submit{padding:0 8px;}#postcustomstuff .submit input,#postcustomstuff table #addmetasub{width:auto;}#postcustomstuff #newmetaleft{vertical-align:top;}#postcustomstuff #newmetaleft a{padding:0 10px;text-decoration:none;}table.diff{width:100%;}table.diff col.content{width:50%;}table.diff tr{background-color:transparent;}table.diff td,table.diff th{padding:.5em;font-family:Consolas,Monaco,monospace;border:none;}table.diff .diff-deletedline del,table.diff .diff-addedline ins{text-decoration:none;}.category-adder{margin-left:120px;padding:4px 0;}.category-adder h4{margin:0 0 8px;}#side-sortables .category-adder{margin:0;}#post-body ul.category-tabs,#post-body ul.add-menu-item-tabs{float:left;width:120px;text-align:right;margin:0 -120px 0 5px;padding:0;}#post-body ul.category-tabs li,#post-body ul.add-menu-item-tabs li{padding:8px;}#post-body ul.category-tabs li.tabs,#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px;}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,#linkcategorydiv div.tabs-panel{height:200px;overflow:auto;padding:.5em .9em;border-style:solid;border-width:1px;}.nav-menus-php .customlinkdiv div.tabs-panel,.nav-menus-php .posttypediv div.tabs-panel,.nav-menus-php .taxonomydiv div.tabs-panel{height:auto;max-height:205px;}div.tabs-panel-active{display:block;}div.tabs-panel-inactive{display:none;}#post-body .categorydiv div.tabs-panel,.taxonomy div.tabs-panel,#post-body #linkcategorydiv div.tabs-panel{margin:0 5px 0 125px;}.categorydiv ul,.customlinkdiv ul,.posttypediv ul,.taxonomydiv ul,#linkcategorydiv ul{list-style:none;padding:0;margin:0;}#front-page-warning,#front-static-pages ul,ul.export-filters,.inline-editor ul.cat-checklist ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,#linkcategorydiv ul.categorychecklist ul{margin-left:18px;}ul.categorychecklist li{margin:0;padding:0;line-height:19px;word-wrap:break-word;}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid;}.form-wrap p,.form-wrap label{font-size:11px;}.form-wrap label{display:block;padding:2px;font-size:12px;}.form-field input,.form-field textarea{border-style:solid;border-width:1px;width:95%;}p.description,.form-wrap p{margin:2px 0 5px;}p.help,p.description,span.description,.form-wrap p{font-size:12px;font-style:italic;font-family:sans-serif;}.form-wrap .form-field{margin:0 0 10px;padding:8px;}.col-wrap h3{margin:12px 0;font-size:1.1em;}.col-wrap p.submit{margin-top:-10px;}#poststuff .taghint{color:#aaa;margin:15px 0 -24px 12px;}#poststuff .tagsdiv .howto{margin:0 0 6px 8px;}.ajaxtag .newtag{position:relative;}.tagsdiv .newtag{width:180px;}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px;}#post-body-content .tagsdiv .the-tags{margin:0 5px;}p.popular-tags{-webkit-border-radius:8px;border-radius:8px;border-width:1px;border-style:solid;line-height:2em;max-width:1000px;padding:8px 12px 12px;text-align:justify;}p.popular-tags a{padding:0 3px;}.tagcloud{width:97%;margin:0 0 40px;text-align:justify;}.tagcloud h3{margin:2px 0 12px;}.ac_results{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;display:none;border-width:1px;border-style:solid;}.ac_results li{padding:2px 5px;white-space:nowrap;text-align:left;}.ac_over{cursor:pointer;}.ac_match{text-decoration:underline;}.media-item .describe{border-collapse:collapse;width:100%;border-top-style:solid;border-top-width:1px;clear:both;cursor:default;}.media-item.media-blank .describe{border:0;}.media-item .describe th{vertical-align:top;text-align:left;padding:5px 10px 10px;width:140px;}.media-item .describe .align th{padding-top:0;}.media-item .media-item-info tr{background-color:transparent;}.media-item .describe td{padding:0 8px 8px 0;vertical-align:top;}.media-item thead.media-item-info td{padding:4px 10px 0;}.media-item .media-item-info .A1B1{padding:0 0 0 10px;}.media-item td.savesend{padding-bottom:15px;}.media-item .thumbnail{max-height:128px;max-width:128px;}#wpbody-content #async-upload-wrap a{display:none;}.media-upload-form{margin-top:20px;}.media-upload-form td label{margin-right:6px;margin-left:2px;}.media-upload-form .align .field label{display:inline;padding:0 0 0 23px;margin:0 1em 0 3px;font-weight:bold;}.media-upload-form tr.image-size label{margin:0 0 0 5px;font-weight:bold;}.media-upload-form th.label label{font-weight:bold;margin:.5em;font-size:13px;}.media-upload-form th.label label span{padding:0 5px;}abbr.required{border:medium none;text-decoration:none;}.media-item .describe input[type="text"],.media-item .describe textarea{width:460px;}.media-item .describe p.help{margin:0;padding:0 0 0 5px;}.describe-toggle-on,.describe-toggle-off{display:block;line-height:36px;float:right;margin-right:15px;}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on,.media-item.open img.pinkynail{display:none;}.media-item.open .describe-toggle-off{display:block;}#media-items .media-item{border-style:solid;border-width:1px;min-height:36px;position:relative;margin-top:-1px;width:100%;}#media-items{width:623px;}#media-items:empty{border:0 none;}.media-item .filename{line-height:36px;overflow:hidden;padding:0 10px;}.media-item .error-div{padding-left:10px;}.media-item .pinkynail{float:left;margin:2px 2px 0;max-width:40px;max-height:32px;}.media-item .startopen,.media-item .startclosed{display:none;}.media-item .original{position:relative;height:34px;}.media-item .progress{float:right;height:22px;margin:6px 10px 0 0;width:200px;line-height:2em;padding:0;overflow:hidden;margin-bottom:2px;border:1px solid #d1d1d1;background:#fff;background-image:linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-o-linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-moz-linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-webkit-linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-ms-linear-gradient(bottom,#fff 0,#f7f7f7 100%);-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.1);box-shadow:inset 0 0 3px rgba(0,0,0,0.1);}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-24px;background-color:#83B4D8;background-image:linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-o-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-moz-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-webkit-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-ms-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.3);box-shadow:0 0 3px rgba(0,0,0,0.3);}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0 8px;text-shadow:0 1px 0 rgba(255,255,255,0.4);color:rgba(0,0,0,0.6);}.upload-php .fixed .column-parent{width:25%;}.js .html-uploader #plupload-upload-ui{display:none;}.js .html-uploader #html-upload-ui{display:block;}.media-upload-form .media-item.error{margin:0;padding:0;}.media-upload-form .media-item.error p,.media-item .error-div{line-height:16px;font-size:12px;margin:10px;padding:0;}.media-item .error-div a.dismiss{float:right;padding-left:15px;}.find-box{width:500px;height:300px;overflow:hidden;padding:33px 5px 40px;position:absolute;z-index:1000;}.find-box-head{cursor:move;font-weight:bold;height:2em;line-height:2em;padding:1px 12px;position:absolute;top:5px;width:100%;}.find-box-inside{overflow:auto;width:100%;height:100%;}.find-box-search{padding:12px;border-width:1px;border-style:none none solid;}#find-posts-response{margin:8px 0;padding:0 1px;}#find-posts-response table{width:100%;}#find-posts-response .found-radio{padding:5px 0 0 8px;width:15px;}.find-box-buttons{width:480px;margin:8px;}.find-box-search label{padding-right:6px;}.find-box #resize-se{position:absolute;right:1px;bottom:1px;}ul#dismissed-updates{display:none;}form.upgrade{margin-top:8px;}form.upgrade .hint{font-style:italic;font-size:85%;margin:-0.5em 0 2em 0;}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border-width:1px;border-style:solid;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px;}.drag-drop #drag-drop-area{border:4px dashed #DDD;height:200px;}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px;}.drag-drop-inside p{color:#aaa;font-size:14px;margin:5px 0;display:none;}.drag-drop .drag-drop-inside p{text-align:center;}.drag-drop-inside p.drag-drop-info{font-size:20px;}.drag-drop .drag-drop-inside p,.drag-drop-inside p.drag-drop-buttons{display:block;}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8;}#plupload-upload-ui{position:relative;}.describe .image-editor{vertical-align:top;}.imgedit-wrap{position:relative;}.imgedit-settings p{margin:8px 0;}.describe .imgedit-wrap table td{vertical-align:top;padding-top:0;}.imgedit-wrap p,.describe .imgedit-wrap table td{font-size:11px;line-height:18px;}.describe .imgedit-wrap table td.imgedit-settings{padding:0 5px;}td.imgedit-settings input{vertical-align:middle;}.imgedit-wait{position:absolute;top:0;background:#FFF url(../images/wpspin_light.gif) no-repeat scroll 22px 10px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none;}.media-disabled,.imgedit-settings .disabled{color:grey;}.imgedit-wait-spin{padding:0 4px 4px;vertical-align:bottom;visibility:hidden;}.imgedit-menu{margin:0 0 12px;min-width:300px;}.imgedit-menu div{float:left;width:32px;height:32px;}.imgedit-crop-wrap{position:relative;}.imgedit-crop{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -9px -31px;margin:0 8px 0 0;}.imgedit-crop.disabled:hover{background-position:-9px -31px;}.imgedit-crop:hover{background-position:-9px -1px;}.imgedit-rleft{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -46px -31px;margin:0 3px;}.imgedit-rleft.disabled:hover{background-position:-46px -31px;}.imgedit-rleft:hover{background-position:-46px -1px;}.imgedit-rright{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -77px -31px;margin:0 8px 0 3px;}.imgedit-rright.disabled:hover{background-position:-77px -31px;}.imgedit-rright:hover{background-position:-77px -1px;}.imgedit-flipv{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -115px -31px;margin:0 3px;}.imgedit-flipv.disabled:hover{background-position:-115px -31px;}.imgedit-flipv:hover{background-position:-115px -1px;}.imgedit-fliph{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -147px -31px;margin:0 8px 0 3px;}.imgedit-fliph.disabled:hover{background-position:-147px -31px;}.imgedit-fliph:hover{background-position:-147px -1px;}.imgedit-undo{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -184px -31px;margin:0 3px;}.imgedit-undo.disabled:hover{background-position:-184px -31px;}.imgedit-undo:hover{background-position:-184px -1px;}.imgedit-redo{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -215px -31px;margin:0 8px 0 3px;}.imgedit-redo.disabled:hover{background-position:-215px -31px;}.imgedit-redo:hover{background-position:-215px -1px;}.imgedit-applyto img{margin:0 8px 0 0;}.imgedit-group-top{margin:5px 0;}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block;}.imgedit-help{display:none;font-style:italic;margin-bottom:8px;}.imgedit-help ul li{font-size:11px;}a.imgedit-help-toggle{text-decoration:none;}#wpbody-content .imgedit-response div{width:600px;margin:8px;}.form-table td.imgedit-response{padding:0;}.imgedit-submit{margin:8px 0;}.imgedit-submit-btn{margin-left:20px;}.imgedit-wrap .nowrap{white-space:nowrap;}span.imgedit-scale-warn{color:red;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle;}.imgedit-group{border-width:1px;border-style:solid;-webkit-border-radius:8px;border-radius:8px;margin-bottom:8px;padding:2px 10px;}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;margin-bottom:-8px;clear:both;}.form-table td{margin-bottom:9px;padding:8px 10px;line-height:20px;font-size:12px;}.form-table th,.form-wrap label{font-weight:normal;text-shadow:#fff 0 1px 0;}.form-table th{vertical-align:top;text-align:left;padding:10px;width:200px;}.form-table th.th-full{width:auto;}.form-table div.color-option{display:block;clear:both;margin-top:12px;}.form-table input.tog{margin-top:2px;margin-right:2px;float:left;}.form-table td p{margin-top:4px;}.form-table table.color-palette{vertical-align:bottom;float:left;margin:-12px 3px 11px;}.form-table .color-palette td{border-width:1px 1px 0;border-style:solid solid none;height:10px;line-height:20px;width:10px;}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom-width:1px;border-bottom-style:solid;}.commentlist li li{border-bottom:0;padding:0;}.commentlist p{padding:0;margin:0 0 .8em;}#replyrow input{border-width:1px;border-style:solid;}#replyrow td{padding:2px;}#replysubmit{margin:0;padding:0 7px 3px;text-align:center;}#replysubmit img.waiting,.inline-edit-save img.waiting{padding:4px 10px 0;vertical-align:top;float:right;}#replysubmit .button{margin-right:5px;}#replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center;}#replyrow h5{margin:.2em 0 0;padding:0 5px;line-height:1.4em;font-size:1em;}#edithead .inside{float:left;padding:3px 0 2px 5px;margin:0;text-align:center;}#edithead .inside input{width:180px;}#edithead label{padding:2px 0;}#replycontainer{padding:5px;}#replycontent{height:120px;}.comment-ays{margin-bottom:0;border-style:solid;border-width:1px;}.comment-ays th{border-right-style:solid;border-right-width:1px;}.trash-undo-inside,.spam-undo-inside{margin:1px 8px 1px 0;line-height:16px;}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-right:8px;vertical-align:middle;}.stuffbox .editcomment{clear:none;}#comment-status-radio p{margin:3px 0 5px;}#comment-status-radio input{margin:2px 3px 5px 0;vertical-align:middle;}#comment-status-radio label{padding:5px 0;}.commentlist .avatar{vertical-align:text-top;}.theme-install-php .tablenav{height:auto;}.available-theme{display:inline-block;margin-bottom:10px;margin-right:25px;overflow:hidden;padding:20px;vertical-align:top;width:240px;}.available-theme a.screenshot{width:240px;height:180px;display:block;border-width:1px;border-style:solid;margin-bottom:10px;overflow:hidden;}.available-theme img{width:240px;}.available-theme h3{margin:15px 0 5px;}#current-theme{margin:1em 0 1.5em;}#current-theme a{border-bottom:none;}#current-theme h3{font-size:17px;font-weight:normal;margin:0;}#current-theme .theme-description{margin-top:5px;}#current-theme img{float:left;border-width:1px;border-style:solid;margin-right:1em;margin-bottom:1.5em;width:150px;}.theme-options span{text-transform:uppercase;font-size:13px;}.theme-options a{font-size:15px;}#post-body ul.category-tabs li.tabs a,#post-body ul.add-menu-item-tabs li.tabs a,#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{font-weight:bold;text-decoration:none;}#TB_window #TB_title{background-color:#222;color:#cfcfcf;}#broken-themes{text-align:left;width:50%;border-spacing:3px;padding:3px;}.theme-install-php h4{margin:2.5em 0 8px;}.appearance_page_custom-header #headimg{border:1px solid #DFDFDF;min-height:100px;width:100%;}.appearance_page_custom-header #upload-form p label{font-size:12px;}.appearance_page_custom-header .available-headers .default-header{float:left;margin:0 20px 20px 0;}.appearance_page_custom-header .random-header{clear:both;margin:0 20px 20px 0;vertical-align:middle;}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-right:10px;}.appearance_page_custom-header .available-headers label img{vertical-align:middle;}div#custom-background-image{min-height:100px;border:1px solid #dfdfdf;}div#custom-background-image img{max-width:400px;max-height:300px;}.nav-tab{border-style:solid;border-color:#dfdfdf #dfdfdf #fff;border-width:1px 1px 0;color:#aaa;text-shadow:#fff 0 1px 0;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:0 6px -1px 0;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;}.nav-tab-active{border-width:1px;color:#464646;}.nav-tab:hover,.nav-tab-active{border-color:#ccc #ccc #fff;}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom:1px solid #ccc;padding-bottom:0;}h2 .nav-tab{padding:4px 10px 6px;font-weight:200;font-size:20px;line-height:24px;}#dashboard_right_now .versions .b,#post-status-display,#post-visibility-display,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,.media-item .percent,.plugins .name,#pass-strength-result.strong,#pass-strength-result.short,.button-highlighted,input.button-highlighted,#quicktags #ed_strong,#ed_reply_toolbar #ed_reply_strong,.item-controls .item-order a,.feature-filter .feature-name{font-weight:bold;}.plugins p{margin:0 4px;padding:0;}.plugins .desc p{margin:0 0 8px;}.plugins td.desc{line-height:1.5em;}.plugins .desc ul,.plugins .desc ol{margin:0 0 0 2em;}.plugins .desc ul{list-style-type:disc;}.plugins .row-actions-visible{padding:0;}.plugins tbody th.check-column{padding:7px 0;}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th{border-top-style:solid;border-top-width:1px;padding:5px 7px 0;}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-right:12px;white-space:nowrap;}.plugins .second,.plugins .row-actions-visible{padding:0 0 5px;}.plugins-php .widefat tfoot th,.plugins-php .widefat tfoot td{border-top-style:solid;border-top-width:1px;}.plugin-update-tr .update-message{margin:5px;padding:3px 5px;}.plugin-install-php h4{margin:2.5em 0 8px;}#profile-page .form-table textarea{width:500px;margin-bottom:6px;}#profile-page .form-table #rich_editing{margin-right:5px;}#your-profile legend{font-size:22px;}#your-profile #rich_editing{border:none;}#display_name{width:15em;}#createuser .form-field input{width:25em;}.pressthis{margin:20px 0;}.pressthis a{display:inline-block;width:113px;position:relative;cursor:move;color:#333;background:#dfdfdf;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0.07,#e6e6e6),color-stop(0.77,#d8d8d8));background-image:-moz-linear-gradient(center bottom,#e6e6e6 7%,#d8d8d8 77%);background-repeat:no-repeat;background-image-position:10px 8px;-webkit-border-radius:5px;border-radius:5px;border:1px #b4b4b4 solid;font-style:normal;line-height:16px;font-size:14px;text-decoration:none;text-shadow:#fff 0 1px 0;}.pressthis a:hover,.pressthis a:active{color:#333;}.pressthis a:hover:after{transform:skew(20deg) rotate(9deg);-webkit-transform:skew(20deg) rotate(9deg);-moz-transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,0.7);-webkit-box-shadow:0 10px 8px rgba(0,0,0,0.7);-moz-box-shadow:0 10px 8px rgba(0,0,0,0.7);}.pressthis a span{background:url(../images/press-this.png) no-repeat -45px 5px;padding:8px 0 8px 32px;display:inline-block;}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:transparent;transform:skew(20deg) rotate(6deg);-webkit-transform:skew(20deg) rotate(6deg);-moz-transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,0.6);-webkit-box-shadow:0 10px 8px rgba(0,0,0,0.6);-moz-box-shadow:0 10px 8px rgba(0,0,0,0.6);}#utc-time,#local-time{padding-left:25px;font-style:italic;font-family:sans-serif;}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle;}#footer{position:absolute;bottom:0;left:0;right:0;padding:10px 0;margin-right:20px;border-top-width:1px;border-top-style:solid;}#footer p{margin:0;line-height:20px;}#footer a{text-decoration:none;}#footer a:hover{text-decoration:underline;}.about-wrap{position:relative;margin:25px 40px 0 20px;min-width:770px;max-width:1050px;font-size:15px;}.about-wrap div.updated,.about-wrap div.error{display:none!important;}.about-wrap p{line-height:1.6em;}.about-wrap h1{margin:.2em 200px 0 0;line-height:1.2em;font-size:2.8em;font-weight:200;}.about-text,.about-description,.about-wrap li.wp-person a.web{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-weight:normal;line-height:1.6em;font-size:20px;}.about-description{margin-top:1.4em;}.about-text{margin:1em 200px 1.4em 0;min-height:60px;font-size:24px;}.about-wrap h3{font-size:24px;margin-bottom:1em;padding-top:20px;}.about-wrap .changelog{padding-bottom:10px;overflow:hidden;}.about-wrap .changelog li{list-style-type:disc;margin-left:3em;}.about-wrap .feature-section h4{margin-bottom:.6em;}.about-wrap .feature-section p{margin-top:.6em;}.about-wrap code{font-size:14px;}html.ie8 .about-wrap img.element-screenshot{padding:2px;}.about-wrap .point-releases{margin-top:5px;}.about-wrap .changelog.point-releases h3{padding-top:35px;}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px;}.wp-badge{padding-top:142px;height:50px;width:173px;font-weight:bold;font-size:14px;text-align:center;margin:0 -5px;background:url('../images/wp-badge.png?ver=20111120') no-repeat;}.about-wrap .wp-badge{position:absolute;top:0;right:0;}.about-wrap h2.nav-tab-wrapper{padding-left:6px;}.about-wrap h2 .nav-tab{padding:4px 10px 6px;margin:0 3px -1px 0;font-size:18px;vertical-align:top;}.about-wrap h2 .nav-tab-active{font-weight:bold;padding-top:3px;}.about-wrap .feature-section .left-feature,.about-wrap .feature-section img,.about-wrap .feature-section .right-feature{float:left;}.about-wrap .feature-section{min-height:100px;overflow:hidden;clear:both;}.about-wrap .feature-section img{margin:5px auto;border:none;-webkit-border-radius:3px;border-radius:3px;}html.ie8 .about-wrap .feature-section img,html.ie8 .about-wrap .feature-section .image-mask{border-width:1px;border-style:solid;}.about-wrap .feature-section.text-features{width:31%;float:left;overflow:visible;}.about-wrap .feature-section.text-features div{width:112%;}.about-wrap .feature-section.screenshot-features{width:67%;margin-top:1.33em;float:right;clear:none;overflow:visible;}.about-wrap .feature-section.screenshot-features .angled-right{margin-top:-1em;margin-left:2.5em;}.about-wrap .feature-section.screenshot-features .angled-right p{margin-left:290px;}.about-wrap .feature-section .angled-right h4,.about-wrap .feature-section .angled-left h4{margin-top:0;}.about-wrap .feature-section .angled-right img,.about-wrap .feature-section .angled-left img{margin-top:.1em;margin-right:30px;}.about-wrap .feature-section.three-col{padding-top:15px;margin-bottom:0;}.about-wrap .feature-section.three-col div{width:30%;margin-right:4.999999999%;float:left;}.about-wrap .feature-section.three-col h4{margin:0 0 .6em 0;}.about-wrap .feature-section.three-col img{margin:.5em 0 .5em 5px;max-width:100%;float:none;}html.ie8 .about-wrap .feature-section.three-col img{margin-left:0;}.about-wrap .feature-section.three-col .last-feature{margin-right:0;}.about-wrap .feature-section .feature-images{width:300px;position:absolute;margin-top:1.1em;}.about-wrap .feature-section .feature-images img{width:250px;height:150px;margin-right:5px;}.about-wrap .feature-section.images-stagger-left,.about-wrap .feature-section.images-stagger-right{min-height:265px;}.about-wrap .feature-section.images-stagger-right .angled-right,.about-wrap .feature-section.images-stagger-left .angled-left{margin-bottom:-30px;}.about-wrap .feature-section.images-stagger-left .angled-left{margin-left:5px;}.about-wrap .feature-section .angled-right{float:right;}.about-wrap .feature-section.images-stagger-right .feature-images{right:0;}.about-wrap .feature-section.images-stagger-left .feature-images{left:0;}.about-wrap .feature-section.images-stagger-right .left-feature{margin-right:350px;}.about-wrap .feature-section.images-stagger-left .right-feature{margin-left:350px;}.about-wrap .return-to-dashboard{margin:30px 0 0 -5px;font-size:14px;font-weight:bold;}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px;}.about-wrap h4.wp-people-group{margin-top:2.6em;font-size:16px;}.about-wrap ul.wp-people-group{overflow:hidden;padding:5px;margin:0 -15px 0 -5px;}.about-wrap ul.compact{margin-bottom:0;}.about-wrap li.wp-person{float:left;margin-right:10px;}.about-wrap li.wp-person img.gravatar{float:left;margin:0 10px 10px 0;padding:2px;width:60px;height:60px;}.about-wrap ul.compact li.wp-person img.gravatar{width:30px;height:30px;}.about-wrap li.wp-person{height:70px;width:280px;padding-bottom:15px;}.about-wrap ul.compact li.wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0;}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0;}.about-wrap li.wp-person a.web{display:block;margin:6px 0 2px;font-size:16px;text-decoration:none;}.about-wrap p.wp-credits-list a{white-space:nowrap;}.freedoms-php .about-wrap ol{margin:40px 60px;}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:bold;}.freedoms-php .about-wrap ol p{font-weight:normal;margin:.6em 0;}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%;}.wp-editor-container textarea.wp-editor-area{width:99.9%;}#template div{margin-right:190px;}p.pagenav{margin:0;display:inline;}.pagenav span{font-weight:bold;margin:0 6px;}.row-title{font-size:13px!important;font-weight:bold;}.column-author img,.column-username img{float:left;margin-right:10px;margin-top:1px;}.row-actions{visibility:hidden;padding:2px 0 0;}tr:hover .row-actions,div.comment-item:hover .row-actions{visibility:visible;}.row-actions-visible{padding:2px 0 0;}.form-table .pre{padding:8px;margin:0;}table.form-table td .updated{font-size:13px;}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto;}.tagchecklist strong{margin-left:-8px;position:absolute;}.tagchecklist span{margin-right:25px;display:block;float:left;font-size:11px;line-height:1.8em;white-space:nowrap;cursor:default;}.tagchecklist span a{margin:6px 0 0 -9px;cursor:pointer;width:10px;height:10px;display:block;float:left;text-indent:-9999px;overflow:hidden;position:absolute;}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:left;}#poststuff h3,.metabox-holder h3{font-size:15px;font-weight:normal;padding:7px 10px;margin:0;line-height:1;}#poststuff .inside{margin:6px 0 8px;}#post-visibility-select,#post-formats-select{line-height:1.5em;margin-top:3px;}#poststuff #submitdiv .inside{margin:0;padding:0;}#titlediv,#poststuff .postarea{margin-bottom:20px;}td.post-title strong,td.plugin-title strong{display:block;margin-bottom:.2em;}td.post-title p,td.plugin-title p{margin:6px 0;}#templateside ul li a{text-decoration:none;}.tool-box .title{margin:8px 0;font-size:18px;font-weight:normal;line-height:24px;}#sidemenu{margin:-30px 15px 0 315px;list-style:none;position:relative;float:right;padding-left:10px;font-size:12px;}#sidemenu a{padding:0 7px;display:block;float:left;line-height:28px;border-top-width:1px;border-top-style:solid;border-bottom-width:1px;border-bottom-style:solid;}#sidemenu li{display:inline;line-height:200%;list-style:none;text-align:center;white-space:nowrap;margin:0;padding:0;}#sidemenu a.current{font-weight:normal;padding-left:6px;padding-right:6px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;border-width:1px;border-style:solid;}#sidemenu li a .count-0{display:none;}.plugin-install #description,.plugin-install-network #description{width:60%;}table .vers,table .column-visible,table .column-rating{text-align:left;}.error-message{color:red;font-weight:bold;}body.iframe{height:98%;}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px;}td.media-icon img{max-width:80px;max-height:60px;}.screen-per-page{width:3em;}.list-ajax-loading{float:right;margin-right:9px;margin-top:-1px;}.tablenav .list-ajax-loading{margin-top:7px;}#howto{font-size:11px;margin:0 5px;display:block;}.importers td{padding-right:14px;}.importers{font-size:16px;width:auto;}#namediv table{width:100%;}#namediv td.first{width:10px;white-space:nowrap;}#namediv input{width:98%;}#namediv p{margin:10px 0;}#submitdiv h3{margin-bottom:0!important;}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute;}br.clear{height:2px;line-height:2px;}.checkbox{border:none;margin:0;padding:0;}fieldset{border:0;padding:0;margin:0;}.post-categories{display:inline;margin:0;padding:0;}.post-categories li{display:inline;}.edit-box{display:none;}h3:hover .edit-box{display:inline;}.index-php form .input-text-wrap{background:#fff;border-style:solid;border-width:1px;padding:2px 3px;border-color:#ccc;}#dashboard-widgets form .input-text-wrap input{border:0 none;outline:none;margin:0;padding:0;width:99%;color:#333;}form .textarea-wrap{background:#fff;border-style:solid;border-width:1px;padding:2px;border-color:#ccc;}#dashboard-widgets form .textarea-wrap textarea{border:0 none;padding:0;outline:none;width:99%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:none;}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit input{margin:0;}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0;}#dashboard-widgets a{text-decoration:none;}#dashboard-widgets h3 a{text-decoration:underline;}#dashboard-widgets h3 .postbox-title-action{position:absolute;right:30px;padding:0;top:5px;}#dashboard-widgets h4{font-weight:normal;font-size:13px;margin:0 0 .2em;padding:0;}#dashboard_right_now p.sub,#dashboard_right_now .table,#dashboard_right_now .versions{margin:-12px;}#dashboard_right_now .inside{font-size:12px;padding-top:20px;}#dashboard_right_now p.sub{padding:5px 0 15px;color:#8f8f8f;font-size:14px;position:absolute;top:-17px;left:15px;}#dashboard_right_now .table{margin:0;padding:0;position:relative;}#dashboard_right_now .table_content{float:left;border-top:#ececec 1px solid;width:45%;}#dashboard_right_now .table_discussion{float:right;border-top:#ececec 1px solid;width:45%;}#dashboard_right_now table td{padding:3px 0;white-space:nowrap;}#dashboard_right_now table tr.first td{border-top:none;}#dashboard_right_now td.b{padding-right:6px;text-align:right;font-size:14px;width:1%;}#dashboard_right_now td.b a{font-size:18px;}#dashboard_right_now td.b a:hover{color:#d54e21;}#dashboard_right_now .t{font-size:12px;padding-right:12px;padding-top:6px;color:#777;}#dashboard_right_now .t a{white-space:nowrap;}#dashboard_right_now .spam{color:red;}#dashboard_right_now .waiting{color:#e66f00;}#dashboard_right_now .approved{color:green;}#dashboard_right_now .versions{padding:6px 10px 12px;clear:both;}#dashboard_right_now a.button{float:right;clear:right;position:relative;top:-5px;}#dashboard_recent_comments h3{margin-bottom:0;}#dashboard_recent_comments .inside{margin-top:0;}#dashboard_recent_comments .comment-meta .approve{font-style:italic;font-family:sans-serif;font-size:10px;}#dashboard_recent_comments .subsubsub{float:none;white-space:normal;}#the-comment-list{position:relative;}#the-comment-list .comment-item{padding:1em 10px;border-top:1px solid;}#the-comment-list .pingback{padding-left:9px!important;}#the-comment-list .comment-item,#the-comment-list #replyrow{margin:0 -10px;}#the-comment-list .comment-item:first-child{border-top:none;}#the-comment-list .comment-item .avatar{float:left;margin:0 10px 5px 0;}#the-comment-list .comment-item h4{line-height:1.7em;margin-top:-0.4em;color:#777;}#the-comment-list .comment-item h4 cite{font-style:normal;font-weight:normal;}#the-comment-list .comment-item blockquote,#the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline;}#dashboard_recent_comments #the-comment-list .trackback blockquote,#dashboard_recent_comments #the-comment-list .pingback blockquote{display:block;}#the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:12px;}#dashboard_quick_press h4{font-family:sans-serif;float:left;width:5em;clear:both;font-weight:normal;text-align:right;font-size:12px;}#dashboard_quick_press h4 label{margin-right:10px;}#dashboard_quick_press .input-text-wrap,#dashboard_quick_press .textarea-wrap{margin:0 0 1em 5em;}#dashboard_quick_press .wp-media-buttons{margin:0 0 .5em 5em;padding:0;}#dashboard_quick_press .wp-media-buttons a{color:#777;}#dashboard-widgets #dashboard_quick_press form p.submit{margin-left:4.6em;}#dashboard-widgets #dashboard_quick_press form p.submit input{float:left;}#dashboard-widgets #dashboard_quick_press form p.submit #save-post{margin:0 1em 0 10px;}#dashboard-widgets #dashboard_quick_press form p.submit #publish{float:right;}#dashboard-widgets #dashboard_quick_press form p.submit img.waiting{vertical-align:middle;visibility:hidden;margin:4px 6px 0 0;}#dashboard_recent_drafts ul,#dashboard_recent_drafts p{margin:0;padding:0;}#dashboard_recent_drafts ul{list-style:none;}#dashboard_recent_drafts ul li{margin-bottom:1em;}#dashboard_recent_drafts h4{line-height:1.7em;}#dashboard_recent_drafts h4 abbr{font-weight:normal;font-family:sans-serif;font-size:12px;color:#999;margin-left:3px;}.rss-widget ul{margin:0;padding:0;list-style:none;}a.rsswidget{font-size:13px;line-height:1.7em;}.rss-widget ul li{line-height:1.5em;margin-bottom:12px;}.rss-widget span.rss-date{color:#999;font-size:12px;margin-left:3px;}.rss-widget cite{display:block;text-align:right;margin:0 0 1em;padding:0;}.rss-widget cite:before{content:'\2014';}#dashboard_plugins h4{line-height:1.7em;}#dashboard_plugins h5{font-weight:normal;font-size:13px;margin:0;display:inline;line-height:1.4em;}#dashboard_plugins h5 a{line-height:1.4em;}#dashboard_plugins .inside span{font-size:12px;padding-left:5px;}#dashboard_plugins p{margin:.3em 0 1.4em;line-height:1.4em;}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word;}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:bold;}#dashboard_browser_nag a{text-decoration:underline;}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:125px;}#dashboard_browser_nag .browser-icon{margin-top:-35px;}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b;}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;color:#fff;}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff;}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;text-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background:transparent none;color:#fff;}#dashboard_browser_nag a{color:#fff;}#dashboard_browser_nag.browser-insecure a.browse-happy-link,#dashboard_browser_nag.browser-insecure a.update-browser-link{text-shadow:#871b15 0 1px 0;}#dashboard_browser_nag a.browse-happy-link,#dashboard_browser_nag a.update-browser-link{text-shadow:#d29a04 0 1px 0;}.login *{margin:0;padding:0;}.login form{margin-left:8px;padding:26px 24px 46px;font-weight:normal;background:#fff;border:1px solid #e5e5e5;-moz-box-shadow:rgba(200,200,200,0.7) 0 4px 10px -1px;-webkit-box-shadow:rgba(200,200,200,0.7) 0 4px 10px -1px;box-shadow:rgba(200,200,200,0.7) 0 4px 10px -1px;}.login form .forgetmenot{font-weight:normal;float:left;margin-bottom:0;}.login .button-primary{font-size:13px!important;line-height:16px;padding:3px 10px;float:right;}#login form p{margin-bottom:0;}#login form p.submit{padding:0;}.login label{color:#777;font-size:14px;}.login form .forgetmenot label{font-size:12px;line-height:19px;}.login form p{margin-bottom:24px;}.login h1 a{background:url(../images/logo-login.png) no-repeat top center;width:326px;height:67px;text-indent:-9999px;overflow:hidden;padding-bottom:15px;display:block;}#login{width:320px;padding:114px 0 0;margin:auto;}#login_error,.login .message{margin:0 0 16px 8px;padding:12px;}.login #nav,.login #backtoblog{text-shadow:#fff 0 1px 0;margin:0 0 0 16px;padding:16px 16px 0;}#backtoblog{padding:12px 16px 0;}.login form .input{font-weight:200;font-size:24px;line-height:1;width:100%;padding:3px;margin-top:2px;margin-right:6px;margin-bottom:16px;border:1px solid #e5e5e5;background:#fbfbfb;outline:none;-moz-box-shadow:inset 1px 1px 2px rgba(200,200,200,0.2);-webkit-box-shadow:inset 1px 1px 2px rgba(200,200,200,0.2);box-shadow:inset 1px 1px 2px rgba(200,200,200,0.2);}.login input{color:#555;}.login #pass-strength-result{width:250px;font-weight:bold;border-style:solid;border-width:1px;margin:12px 0 6px;padding:6px 5px;text-align:center;}#dashboard_right_now p.musub{margin-top:12px;border-top:1px solid #ececec;padding-left:16px;position:static;}.rtl #dashboard_right_now p.musub{padding-left:0;padding-right:16px;}#dashboard_right_now td.b a.musublink{font-size:16px;}#dashboard_right_now div.musubtable{border-top:none;}#dashboard_right_now div.musubtable .t{white-space:normal;}.wp-list-table .site-deleted{background:#ff8573;}.wp-list-table .site-spammed{background:#faafaa;}.wp-list-table .site-archived{background:#ffebe8;}.wp-list-table .site-mature{background:#fecac2;}#nav-menus-frame{margin-left:300px;}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-left:-300px;clear:both;float:left;padding-top:24px;}.no-js #wpbody-content #menu-settings-column{padding-top:31px;}#menu-settings-column .inside{clear:both;}.metabox-holder-disabled .postbox{opacity:.5;filter:alpha(opacity=50);}.metabox-holder-disabled .button-controls .select-all{display:none;}#wpbody{position:relative;}#menu-management-liquid{float:left;min-width:100%;}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%;}#menu-management .menu-edit{margin-bottom:20px;}.nav-menus-php #post-body{padding:10px;border-width:1px 0;border-style:solid;}#nav-menu-header,#nav-menu-footer{padding:0 10px;}#nav-menu-header{border-bottom:1px solid;}#nav-menu-footer{border-top:1px solid;}.nav-menus-php #post-body div.updated,.nav-menus-php #post-body div.error{margin:0;}.nav-menus-php #post-body-content{position:relative;}#menu-management .menu-add-new abbr{font-weight:bold;}#menu-management .nav-tabs-nav{margin:0 20px;}#menu-management .nav-tabs-arrow{width:10px;padding:0 5px 4px;cursor:pointer;position:absolute;top:0;line-height:22px;font-size:18px;text-shadow:0 1px 0 #fff;}#menu-management .nav-tabs-arrow-left{left:0;}#menu-management .nav-tabs-arrow-right{right:0;text-align:right;}#menu-management .nav-tabs-wrapper{width:100%;height:28px;margin-bottom:-1px;overflow:hidden;}#menu-management .nav-tabs{padding-left:20px;padding-right:10px;}.js #menu-management .nav-tabs{float:left;margin-left:0;margin-right:-400px;}#menu-management .nav-tab{margin-bottom:0;font-size:14px;}#select-nav-menu-container{text-align:right;padding:0 10px 3px 10px;margin-bottom:5px;}#select-nav-menu{width:100px;display:inline;}#menu-name-label{margin-top:-2px;}#wpbody .open-label{display:block;float:left;}#wpbody .open-label span{padding-right:10px;}.js .input-with-default-title{font-style:italic;}#menu-management .inside{padding:0 10px;}.postbox .howto input{width:180px;float:right;}.customlinkdiv .howto input{width:200px;}#nav-menu-theme-locations .howto select{width:100%;}#nav-menu-theme-locations .button-controls{text-align:right;}.add-menu-item-view-all{height:400px;}#menu-container .submit{margin:0 0 10px;padding:0;}.nav-menus-php .meta-sep,.nav-menus-php .submitdelete,.nav-menus-php .submitcancel{display:block;float:left;margin:4px 0;line-height:15px;}.meta-sep{padding:0 2px;}#cancel-save{text-decoration:underline;font-size:12px;margin-left:20px;margin-top:5px;}.list-controls{float:left;margin-top:5px;}.add-to-menu{float:right;}.postbox img.waiting{display:none;vertical-align:middle;}.button-controls{clear:both;margin:10px 0;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}#menu-name{width:270px;}#manage-menu .inside{padding:0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:12px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}.menu-item-textbox{width:180px;}.nav-menus-php .howto span{margin-top:4px;display:block;float:left;}.quick-search{width:190px;}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px;}.nav-menus-php .list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;}.nav-menus-php .postbox p.submit{margin-bottom:0;}.nav-menus-php .list li{display:none;margin:0;margin-bottom:5px;}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block;}.nav-menus-php .list li .menu-item-title input{margin-right:3px;margin-top:-3px;}#menu-container .inside{padding-bottom:10px;}.menu{padding-top:1em;}#menu-to-edit{padding:1em 0;}.menu ul{width:100%;}.menu li{margin-bottom:0;position:relative;}.menu-item-bar{clear:both;line-height:1.5em;position:relative;margin:13px 0 0 0;}.menu-item-handle{border:1px solid #dfdfdf;position:relative;padding-left:10px;height:auto;width:400px;line-height:35px;text-shadow:0 1px 0 #FFF;overflow:hidden;word-wrap:break-word;}#menu-to-edit .menu-item-invalid .menu-item-handle{background-color:#f6c9cc;background-image:-ms-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:-moz-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:-o-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:-webkit-gradient(linear,left bottom,left top,from(#f6c9cc),to(#fdf8ff));background-image:-webkit-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:linear-gradient(bottom,#f6c9cc,#fdf8ff);}.menu-item-edit-active .menu-item-handle{-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0;}.no-js .menu-item-edit-active .item-edit{display:none;}.js .menu-item-handle{cursor:move;}.menu li.deleting .menu-item-handle{background-image:none;text-shadow:0;}.menu-item-handle .item-title{font-size:12px;font-weight:bold;padding:7px 0;line-height:20px;display:block;margin-right:13em;}li.menu-item.ui-sortable-helper dl{margin-top:0;}li.menu-item.ui-sortable-helper .menu-item-transport dl{margin-top:13px;}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px;}.menu-item-depth-0{margin-left:0;}.menu-item-depth-1{margin-left:30px;}.menu-item-depth-2{margin-left:60px;}.menu-item-depth-3{margin-left:90px;}.menu-item-depth-4{margin-left:120px;}.menu-item-depth-5{margin-left:150px;}.menu-item-depth-6{margin-left:180px;}.menu-item-depth-7{margin-left:210px;}.menu-item-depth-8{margin-left:240px;}.menu-item-depth-9{margin-left:270px;}.menu-item-depth-10{margin-left:300px;}.menu-item-depth-11{margin-left:330px;}.menu-item-depth-0 .menu-item-transport{margin-left:0;}.menu-item-depth-1 .menu-item-transport{margin-left:-30px;}.menu-item-depth-2 .menu-item-transport{margin-left:-60px;}.menu-item-depth-3 .menu-item-transport{margin-left:-90px;}.menu-item-depth-4 .menu-item-transport{margin-left:-120px;}.menu-item-depth-5 .menu-item-transport{margin-left:-150px;}.menu-item-depth-6 .menu-item-transport{margin-left:-180px;}.menu-item-depth-7 .menu-item-transport{margin-left:-210px;}.menu-item-depth-8 .menu-item-transport{margin-left:-240px;}.menu-item-depth-9 .menu-item-transport{margin-left:-270px;}.menu-item-depth-10 .menu-item-transport{margin-left:-300px;}.menu-item-depth-11 .menu-item-transport{margin-left:-330px;}body.menu-max-depth-0{min-width:950px!important;}body.menu-max-depth-1{min-width:980px!important;}body.menu-max-depth-2{min-width:1010px!important;}body.menu-max-depth-3{min-width:1040px!important;}body.menu-max-depth-4{min-width:1070px!important;}body.menu-max-depth-5{min-width:1100px!important;}body.menu-max-depth-6{min-width:1130px!important;}body.menu-max-depth-7{min-width:1160px!important;}body.menu-max-depth-8{min-width:1190px!important;}body.menu-max-depth-9{min-width:1220px!important;}body.menu-max-depth-10{min-width:1250px!important;}body.menu-max-depth-11{min-width:1280px!important;}.item-type{font-size:12px;padding-right:10px;}.item-controls{font-size:12px;position:absolute;right:20px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .item-order{padding-right:10px;}.nav-menus-php .item-edit{position:absolute;right:-20px;top:0;display:block;width:30px;height:36px;overflow:hidden;text-indent:-999em;border-bottom:1px solid;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.menu-instructions-inactive{display:none;}.menu-item-settings{display:block;width:400px;padding:10px 0 10px 10px;border:solid;border-width:0 1px 1px 1px;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;}.menu-item-edit-active .menu-item-settings{display:block;}.menu-item-edit-inactive .menu-item-settings{display:none;}.add-menu-item-pagelinks{margin:.5em auto;text-align:center;}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;font-size:12px;font-style:italic;}.link-to-original a{padding-left:4px;font-style:normal;}.hidden-field{display:none;}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-right:10px;float:left;}.description-thin{width:190px;height:40px;}.description-wide{width:390px;}.menu-item-actions{padding-top:15px;}#cancel-save{cursor:pointer;}.nav-menus-php .major-publishing-actions{clear:both;padding:3px 0 5px;}.nav-menus-php .major-publishing-actions .publishing-action{text-align:right;float:right;line-height:23px;margin:5px 0 1px;}.nav-menus-php .major-publishing-actions .delete-action{vertical-align:middle;text-align:left;float:left;padding-right:15px;margin-top:5px;}.menu-name-label span,.auto-add-pages label{font-size:12px;font-style:normal;}.menu-name-label{margin-right:15px;}.auto-add-pages input{margin-top:0;}.auto-add-pages{margin-top:4px;float:left;}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid;padding:1px 2px;text-decoration:none;}.nav-menus-php .major-publishing-actions .form-invalid{padding-left:4px;margin-left:-4px;border:0 none;}#menu-item-name-wrap:after,#menu-item-url-wrap:after,#menu-name-label:after,#menu-settings-column .inside:after,#nav-menus-frame:after,.nav-menus-php #post-body-content:after,.nav-menus-php .button-controls:after,.nav-menus-php .major-publishing-actions:after,.nav-menus-php .menu-item-settings:after{clear:both;content:".";display:block;height:0;visibility:hidden;}#nav-menus-frame,.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block;}div.star-holder{position:relative;height:19px;width:100px;font-size:19px;}div.action-links{font-weight:normal;margin:6px 0 0;}div.star{height:100%;position:absolute;top:0;left:0;background-color:transparent;letter-spacing:1ex;border:none;}.star1{width:20%;}.star2{width:40%;}.star3{width:60%;}.star4{width:80%;}.star5{width:100%;}.star img,div.star a,div.star a:hover,div.star a:visited{display:block;position:absolute;right:0;border:none;text-decoration:none;}div.star img{width:19px;height:19px;}#plugin-information-header{margin:0;padding:0 5px;font-weight:bold;position:relative;border-bottom-width:1px;border-bottom-style:solid;height:2.5em;}#plugin-information ul#sidemenu{font-weight:normal;margin:0 5px;position:absolute;left:0;bottom:-1px;}#plugin-information p.action-button{width:100%;padding-bottom:0;margin-bottom:0;margin-top:10px;-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px;}#plugin-information .action-button a{text-align:center;font-weight:bold;text-decoration:none;display:block;line-height:2em;}#plugin-information h2{clear:none!important;margin-right:200px;}#plugin-information .fyi{margin:0 10px 50px;width:210px;}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-right:0;}#plugin-information .fyi h2.mainheader{padding:5px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;}#plugin-information .fyi ul{padding:10px 5px 10px 7px;margin:0;list-style:none;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}#plugin-information .fyi li{margin-right:0;}#plugin-information #section-holder{padding:10px;}#plugin-information .section ul,#plugin-information .section ol{margin-left:16px;list-style-type:square;list-style-image:none;}#plugin-information #section-screenshots li img{vertical-align:text-top;}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px;padding-bottom:2em;}#plugin-information .updated,#plugin-information pre{margin-right:215px;}#plugin-information pre{padding:7px;overflow:auto;}body.press-this{color:#333;margin:0;padding:0;min-width:675px;min-height:400px;}img{border:none;}.press-this #wphead{height:32px;margin-right:5px;margin-bottom:5px;}.press-this #header-logo{float:left;margin:7px 7px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none;}.press-this #wphead h1{font-weight:normal;font-size:16px;line-height:32px;margin:0;float:left;}.press-this #wphead h1 a{text-decoration:none;}.press-this #wphead h1 a:hover{text-decoration:underline;}.press-this-sidebar{float:right;width:200px;padding-top:10px;}.press-this #title{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}.press-this .tagchecklist span a{background:transparent url(../images/xit.gif) no-repeat 0 0;}.press-this #titlediv{margin:0;}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 0;}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block;}.press-this #poststuff{margin:0 10px 10px;}#poststuff #editor-toolbar{height:30px;}div.zerosize{border:0 none;height:0;margin:0;overflow:hidden;padding:0;width:0;}.posting{margin-right:212px;position:relative;}.press-this .inner-sidebar{width:200px;}.press-this .inner-sidebar .sleeve{padding-top:5px;}.press-this #submitdiv p{margin:0;padding:6px;}.press-this #submitdiv #publishing-actions{border-bottom:1px solid #dfdfdf;}.press-this #publish{float:right;}.press-this #poststuff h2,.press-this #poststuff h3{font-size:14px;line-height:1;}.press-this #tagsdiv-post_tag h3,.press-this #categorydiv h3{cursor:pointer;}.press-this #submitdiv h3{cursor:default;}h3.tb{text-shadow:0 1px 0 #fff;font-weight:bold;font-size:12px;margin-left:5px;}#TB_window{border:1px solid #333;}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0;}.postbox:hover .handlediv,.stuffbox:hover .handlediv{background:transparent url(../images/arrows.png) no-repeat 6px 7px;}.press-this #submitdiv:hover .handlediv{background:none;}.tbtitle{font-size:1.7em;outline:none;padding:3px 4px;border-color:#dfdfdf;}.press-this .actions{float:right;margin:-19px 0 0;}.press-this #extra-fields .actions{margin:-25px -7px 0 0;}.press-this .actions li{float:left;list-style:none;margin-right:10px;}#extra-fields .button{margin-right:5px;}#photo_saving{margin:0 8px 8px;vertical-align:middle;}#img_container_container{overflow:auto;}#extra-fields{margin-top:10px;position:relative;}#extra-fields h2{margin:12px;}#waiting{margin-top:10px;}#extra-fields .postbox{margin-bottom:5px;}#extra-fields .titlewrap{padding:0;overflow:auto;height:100px;}#img_container a{display:block;float:left;overflow:hidden;vertical-align:center;}#img_container img,#img_container a{width:68px;height:68px;}#img_container img{border:none;background-color:#f4f4f4;cursor:pointer;}#img_container a,#img_container a:link,#img_container a:visited{border:1px solid #ccc;display:block;position:relative;}#img_container a:hover,#img_container a:active{border-color:#000;z-index:1000;border-width:2px;margin:-1px;}#embed-code{width:100%;height:98px;}.press-this .categorydiv div.tabs-panel{height:100px;}.press-this .tagsdiv .newtag{width:130px;}.press-this #content{margin:5px 0;padding:0 5px;border:0 none;height:357px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:transparent;}#saving{display:inline;vertical-align:middle;}#TB_ajaxContent #options{position:absolute;top:20px;right:25px;padding:5px;}#TB_ajaxContent h3{margin-bottom:.25em;}.error a{text-decoration:underline;}.updated a{text-decoration:none;padding-bottom:2px;}.taghint{color:#aaa;margin:-17px 0 0 7px;visibility:hidden;}input.newtag ~ div.taghint{visibility:visible;}input.newtag:focus ~ div.taghint{visibility:hidden;}#mce_fullscreen_container{background:#fff;}#photo-add-url-div input[type="text"]{width:300px;}.alignleft h3{margin:0;}h3 span{font-weight:normal;}#template textarea{font-family:Consolas,Monaco,monospace;font-size:12px;width:97%;background:#f9f9f9;outline:none;}#template p{width:97%;}#templateside{float:right;width:190px;word-wrap:break-word;}#templateside h3,#postcustomstuff p.submit{margin:0;}#templateside h4{margin:1em 0 0;}#templateside ol,#templateside ul{margin:.5em;padding:0;}#templateside li{margin:4px 0;}#templateside ul li a span.highlight{display:block;}.nonessential{font-size:11px;font-style:italic;padding-left:12px;}.highlight{padding:3px 3px 3px 12px;margin-left:-12px;font-weight:bold;border:0 none;}#documentation{margin-top:10px;}#documentation label{line-height:22px;vertical-align:top;font-weight:bold;}.fileedit-sub{padding:10px 0 8px;line-height:180%;}.theme-listing .theme-item{display:inline-block;width:200px;border:thin solid #ccc;vertical-align:top;}.theme-listing .theme-item h3{text-align:center;font-size:14px;font-style:italic;margin:0;padding:0;}.theme-listing .theme-item img{max-width:150px;max-height:150px;}.theme-listing .theme-item-info span,.theme-listing .theme-item:hover .theme-item-info span.dots{display:none;}.theme-listing .theme-item:hover .theme-item-info span{display:inline;}.theme-listing .theme-item-info span.action-links{font-weight:bold;text-align:center;}.theme-listing br.line{border-bottom-width:1px;border-bottom-style:solid;margin-bottom:3px;}#theme-information .available-theme,.available-theme{padding:20px 15px;}#theme-information .available-theme{overflow:visible;width:440px;}#theme-information .theme-preview-img{float:left;margin:5px 25px 10px 15px;width:300px;}#theme-information .action-button{border-top-width:1px;border-top-style:solid;margin:10px 5px 0;}#theme-information .action-button #cancel,#theme-information .action-button #install{margin:10px 5px;}#theme-information .action-button #cancel{float:left;}#theme-information .action-button #install{float:right;}#theme-information .available-theme h3{margin:1em 0;}body#theme-information{height:auto;}.feature-filter{padding:8px 12px 0;}.feature-filter .feature-group{float:left;margin:5px 10px 10px;}.feature-filter .feature-group li{display:inline;float:left;list-style-type:none;padding-right:25px;min-width:150px;}.feature-container{width:100%;overflow:auto;margin-bottom:10px;}div.widget-liquid-left{float:left;clear:left;width:100%;margin-right:-325px;}div#widgets-left{margin-left:5px;margin-right:325px;}div#widgets-right{width:285px;margin:0 auto;}div.widget-liquid-right{float:right;clear:right;width:300px;}.widget-liquid-right .widget,.inactive-sidebar .widget,.widget-liquid-right .sidebar-description{width:250px;margin:0 auto 20px;overflow:hidden;}.widget-liquid-right .sidebar-description{margin-bottom:10px;}.inactive-sidebar .widget{margin:0 10px 20px;float:left;}div.sidebar-name h3{font-weight:normal;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;}div.sidebar-name{cursor:pointer;font-size:13px;border-width:1px;border-style:solid;-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px;}.js .closed .sidebar-name{-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;}.widget-liquid-right .widgets-sortables,#widgets-left .widget-holder{border-width:0 1px 1px;border-style:none solid solid;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;}.js .closed .widgets-sortables,.js .closed .widget-holder{display:none;}.widget-liquid-right .widgets-sortables{padding:15px 0 0;}#available-widgets .widget-holder{padding:7px 5px 0;}#available-widgets .widget{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}.inactive-sidebar{padding:5px 5px 0;}#widget-list .widget{width:250px;margin:0 10px 15px;border:0 none;background:transparent;float:left;}#widget-list .widget-description{padding:5px 8px;}.widget-placeholder{border-width:1px;border-style:dashed;margin:0 auto 20px;height:26px;width:250px;}.inactive-sidebar .widget-placeholder{margin:0 10px 20px;float:left;}div.widgets-holder-wrap{padding:0;margin:10px 0 20px;}#widgets-left #available-widgets{background-color:transparent;border:0 none;}ul#widget-list{list-style:none;margin:0;padding:0;min-height:100px;}.widget .widget-top{margin-bottom:-1px;font-size:12px;font-weight:bold;height:26px;overflow:hidden;}.widget-top .widget-title{padding:7px 9px;}.widget-top .widget-title-action{float:right;}a.widget-action{display:block;width:24px;height:26px;}#available-widgets a.widget-action{display:none;}.widget-top a.widget-action{background:transparent url(../images/arrows.png) no-repeat 4px 6px;}.widget-top a.widget-action:hover{background:transparent url(../images/arrows-dark.png) no-repeat 4px 6px;}.widget .widget-inside,.widget .widget-description{padding:12px 12px 10px;font-size:12px;line-height:16px;}.widget-inside,.widget-description{display:none;}#available-widgets .widget-description{display:block;}.widget .widget-inside p{margin:0 0 1em;padding:0;}.widget-title h4{margin:0;line-height:1;overflow:hidden;white-space:nowrap;}.widgets-sortables{min-height:90px;}.widget-control-actions{margin-top:8px;}.widget-control-actions a{text-decoration:none;}.widget-control-actions a:hover{text-decoration:underline;}.widget-control-actions .ajax-feedback{padding-bottom:3px;}.widget-control-actions div.alignleft{margin-top:6px;}div#sidebar-info{padding:0 1em;margin-bottom:1em;font-size:12px;}.widget-title a,.widget-title a:hover{text-decoration:none;border-bottom:none;}.widget-control-edit{display:block;font-size:12px;font-weight:normal;line-height:26px;padding:0 8px 0 0;}a.widget-control-edit{text-decoration:none;}.widget-control-edit .add,.widget-control-edit .edit{display:none;}#available-widgets .widget-control-edit .add,#widgets-right .widget-control-edit .edit,.inactive-sidebar .widget-control-edit .edit{display:inline;}.editwidget{margin:0 auto 15px;}.editwidget .widget-inside{display:block;padding:10px;}.inactive p.description{margin:5px 15px 10px;}#available-widgets p.description{margin:0 12px 12px;}.widget-position{margin-top:8px;}.inactive{padding-top:2px;}.sidebar-name-arrow{float:right;height:29px;width:26px;}.widget-title .in-widget-title{font-size:12px;white-space:nowrap;}#removing-widget{display:none;font-weight:normal;padding-left:15px;font-size:12px;line-height:1;}.widget-control-noform,#access-off,.widgets_access .widget-action,.widgets_access .sidebar-name-arrow,.widgets_access #access-on,.widgets_access .widget-holder .description{display:none;}.widgets_access .widget-holder,.widgets_access #widget-list{padding-top:10px;}.widgets_access #access-off{display:inline;}.widgets_access #wpbody-content .widget-title-action,.widgets_access #wpbody-content .widget-control-edit,.widgets_access .closed .widgets-sortables,.widgets_access .closed .widget-holder{display:block;}.widgets_access .closed .sidebar-name{-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0;}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default;}@media only screen and(max-width:768px){#col-left{width:100%;}#col-right{width:100%;}}@media only screen and(min-width:769px){#col-left{width:35%;}#col-right{width:65%;}}@media only screen and(max-width:860px){#col-left{width:35%;}#col-right{width:65%;}}@media only screen and(min-width:980px){#col-left{width:35%;}#col-right{width:65%;}}@media only screen and(max-width:768px){#col-left{width:100%;}#col-right{width:100%;}.form-field input,.form-field textarea{width:99%;}.form-wrap .form-field{padding:0;}#profile-page .form-table textarea{max-width:400px;width:auto;}} \ No newline at end of file +#wpwrap{height:auto;min-height:100%;width:100%;position:relative}#wpcontent{height:100%}#wpcontent,#footer{margin-left:165px}.folded #wpcontent,.folded #footer{margin-left:52px}#wpbody-content{padding-bottom:65px;float:left;width:100%}#adminmenuback,#adminmenuwrap,#adminmenu,#adminmenu .wp-submenu,#adminmenu .wp-submenu-wrap,.folded #adminmenu .wp-has-current-submenu .wp-submenu{width:145px}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1}#adminmenu{clear:left;margin:0;padding:0;list-style:none}.folded #adminmenuback,.folded #adminmenuwrap,.folded #adminmenu,.folded #adminmenu li.menu-top{width:32px}.inner-sidebar{float:right;clear:right;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-right:auto;width:286px;display:block}.inner-sidebar #side-sortables,.columns-2 .inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:left;clear:left;width:100%;margin-right:-2000px}.has-right-sidebar #post-body-content{margin-right:300px;float:none;width:auto}#col-container,#col-left,#col-right{overflow:hidden;padding:0;margin:0}#col-left{width:35%}#col-right{float:right;clear:right;width:65%}.col-wrap{padding:0 7px}.alignleft{float:left}.alignright{float:right}.textleft{text-align:left}.textright{text-align:right}.clear{clear:both}.screen-reader-text,.screen-reader-text span{position:absolute;left:-1000em;height:1px;width:1px;overflow:hidden}.hidden,.js .closed .inside,.js .hide-if-js,.no-js .hide-if-no-js{display:none}input[type="text"],input[type="password"],input[type="number"],input[type="search"],input[type="email"],input[type="url"],textarea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}input[type="checkbox"],input[type="radio"]{vertical-align:text-top;padding:0;margin:1px 0 0}input[type="search"]{-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration{display:none}html,body{height:100%;margin:0;padding:0}body{font-family:sans-serif;font-size:12px;line-height:1.4em;min-width:600px}body.iframe{min-width:0}body.login{background:#fbfbfb;min-width:0}iframe,img{border:0}td,textarea,input,select{font-family:inherit;font-size:inherit;font-weight:inherit}td,textarea{line-height:inherit}input,select{line-height:15px}a,input,select{outline:0}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}p{margin:1em 0}blockquote{margin:1em}label{cursor:pointer}li,dd{margin-bottom:6px}textarea,input,select{margin:1px;padding:3px}h1,h2,h3,h4,h5,h6{display:block;font-weight:bold}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ul,ol{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-left:2em}ul.ul-disc{list-style:disc outside}ul.ul-square{list-style:square outside}ol.ol-decimal{list-style:decimal outside}ul.ul-disc,ul.ul-square,ol.ol-decimal{margin-left:1.8em}ul.ul-disc>li,ul.ul-square>li,ol.ol-decimal>li{margin:0 0 .5em}.code,code{font-family:Consolas,Monaco,monospace}kbd,code{padding:1px 3px;margin:0 1px;font-size:11px}.subsubsub{list-style:none;margin:8px 0 5px;padding:0;white-space:nowrap;font-size:12px;float:left}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:normal}.subsubsub a.current{font-weight:bold;background:0;border:0}.subsubsub li{display:inline;margin:0;padding:0}.widefat,div.updated,div.error,.wrap .add-new-h2,textarea,input[type="text"],input[type="password"],input[type="file"],input[type="button"],input[type="submit"],input[type="reset"],input[type="email"],input[type="number"],input[type="search"],input[type="tel"],input[type="url"],select,.tablenav .tablenav-pages a,.tablenav-pages span.current,#titlediv #title,.postbox,#postcustomstuff table,#postcustomstuff input,#postcustomstuff textarea,.imgedit-menu div,.plugin-update-tr .update-message,#poststuff .inside .the-tagcloud,.login form,#login_error,.login .message,#menu-management .menu-edit,.nav-menus-php .list-container,.menu-item-handle,.link-to-original,.nav-menus-php .major-publishing-actions .form-invalid,.press-this #message,#TB_window,.tbtitle,.highlight,.feature-filter,#widget-list .widget-top,.editwidget .widget-inside{-webkit-border-radius:3px;border-radius:3px;border-width:1px;border-style:solid}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat *{word-wrap:break-word}.widefat a{text-decoration:none}.widefat thead th:first-of-type{-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.widefat thead th:last-of-type{-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.widefat tfoot th:first-of-type{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.widefat tfoot th:last-of-type{-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.widefat td,.widefat th{border-width:1px 0;border-style:solid}.widefat tfoot th{border-bottom:0}.widefat .no-items td{border-bottom-width:0}.widefat td{font-size:12px;padding:4px 7px 2px;vertical-align:top}.widefat td p,.widefat td ol,.widefat td ul{font-size:12px}.widefat th{padding:7px 7px 8px;text-align:left;line-height:1.3em;font-size:14px}.widefat th input{margin:0 0 0 8px;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:11px 0 0;vertical-align:top}.widefat tbody th.check-column{padding:9px 0 22px}.widefat .num,.column-comments,.column-links,.column-posts{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:4px 15px 0 0}div.updated,div.error{padding:0 .6em;margin:5px 15px 2px}div.updated p,div.error p{margin:.5em 0;padding:2px}.wrap div.updated,.wrap div.error,.media-upload-form div.error{margin:5px 0 15px}.wrap h2,.subtitle{font-weight:normal;margin:0;text-shadow:#fff 0 1px 0}.wrap h2{font-size:23px;padding:9px 15px 4px 0;line-height:29px}.subtitle{font-size:14px;padding-left:25px}.wrap .add-new-h2{font-family:sans-serif;margin-left:4px;padding:3px 8px;position:relative;top:-3px;text-decoration:none;font-size:12px;border:0 none}.wrap h2.long-header{padding-right:0}div.sidebar-name h3,#menu-management .nav-tab,#dashboard_plugins h5,a.rsswidget,#dashboard_right_now td.b,#dashboard-widgets h4,.tool-box .title,#poststuff h3,.metabox-holder h3,.pressthis a,#your-profile legend,.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title,.tablenav .displaying-num,.widefat th,.quicktags,.search{font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif}h2 .nav-tab,.wrap h2,.subtitle,.login form .input{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif}.quicktags,.search{font-size:12px}.icon32{float:left;height:34px;margin:7px 8px 0 0;width:36px}.icon16{height:18px;width:18px;padding:6px 6px;margin:-6px 0 0 -8px;float:left}.key-labels label{line-height:24px}.pre{white-space:pre-wrap;white-space:-moz-pre-wrap!important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.howto{font-style:italic;display:block;font-family:sans-serif}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}.wp-admin select{padding:2px;height:2em}.wp-admin select[multiple]{height:auto}select option{padding:2px}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}form p.submit a.cancel:hover{text-decoration:none}.submit input,.button,input.button,.button-primary,input.button-primary,.button-secondary,input.button-secondary,.button-highlighted,input.button-highlighted,#postcustomstuff .submit input{text-decoration:none;font-size:12px!important;line-height:13px;padding:3px 8px;cursor:pointer;border-width:1px;border-style:solid;-webkit-border-radius:11px;border-radius:11px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#minor-publishing-actions input,#major-publishing-actions input,#minor-publishing-actions .preview{min-width:80px;text-align:center}textarea.all-options,input.all-options{width:250px}input.large-text,textarea.large-text{width:99%}input.regular-text,#adduser .form-field input{width:25em}input.small-text{width:50px}input[type="number"].small-text{width:60px}#doaction,#doaction2,#post-query-submit{margin-right:8px}.tablenav select[name="action"],.tablenav select[name="action2"]{width:130px}.tablenav select[name="m"]{width:155px}.tablenav select#cat{width:170px}#wpcontent option{padding:2px}#timezone_string option{margin-left:1em}label,#your-profile label+a{vertical-align:middle}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{border-style:solid;border-width:1px;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none}.indicator-hint{padding-top:8px}p.search-box{float:right;margin:0}input[type="text"].ui-autocomplete-loading{background:transparent url('../images/loading.gif') no-repeat right center;visibility:visible}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete-input.open{border-bottom-right-radius:0;border-bottom-left-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-width:1px;border-style:solid}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:left}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px}.ui-autocomplete li a.ui-state-hover{cursor:pointer}#major-publishing-actions{padding:10px 10px 8px;clear:both;border-top:1px solid #f5f5f5;margin-top:-2px}#delete-action{line-height:25px;vertical-align:middle;text-align:left;float:left}#publishing-action{text-align:right;float:right;line-height:23px}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px;border-width:1px 0;border-style:solid}.misc-pub-section:first-child{border-top-width:0}.misc-pub-section-last{border-bottom-width:0}#minor-publishing-actions{padding:10px 10px 2px 8px;text-align:right}#minor-publishing{border-bottom-width:1px;border-bottom-style:solid;-webkit-box-shadow:0 1px 0 #fff;-moz-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff}#save-post{float:left}#minor-publishing .ajax-loading{padding:3px 0 0 4px;float:left}.preview{float:right}#sticky-span{margin-left:18px}.side-info{margin:0;padding:4px;font-size:11px}.side-info h5{padding-bottom:7px;font-size:14px;margin:12px 2px 5px;border-bottom-width:1px;border-bottom-style:solid}.side-info ul{margin:0;padding-left:18px;list-style:square}a.button,a.button-primary,a.button-secondary{line-height:15px;padding:3px 10px;white-space:nowrap;-webkit-border-radius:10px}.approve,.unapproved .unapprove{display:none}.unapproved .approve,.spam .approve,.trash .approve{display:inline}td.action-links,th.action-links{text-align:right}.describe .del-link{padding-left:5px}#update-nag,.update-nag{line-height:19px;padding:5px 0;font-size:12px;text-align:center;margin:-1px 15px 0 5px;border-width:1px;border-style:solid;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.plugins .plugin-update{padding:0}.plugin-update .update-message{margin:0 10px 8px 31px;font-weight:bold}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-0.5em 0 2em 0}.ajax-feedback{visibility:hidden;vertical-align:bottom}#ajax-response.alignleft{margin-left:2em}#adminmenu a,#sidemenu a,#taglist a,#catlist a{text-decoration:none}#screen-options-wrap,#contextual-help-wrap{margin:0;padding:8px 20px 12px;position:relative;overflow:auto}#screen-meta .screen-reader-text{visibility:hidden}#screen-meta-links{margin:0 24px 0 0}#screen-meta{display:none;position:relative;margin:0 15px 0 5px;border-width:0 1px 1px;border-style:none solid solid}#screen-options-link-wrap,#contextual-help-link-wrap{float:right;height:23px;padding:0;margin:0 0 0 6px;font-family:sans-serif}#screen-options-link-wrap,#contextual-help-link-wrap,#screen-meta{-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}#screen-meta-links .screen-meta-toggle{position:relative;top:-1px}#screen-meta-links a.show-settings{text-decoration:none;z-index:1;padding:1px 16px 0 6px;height:22px;line-height:22px;font-size:12px;display:block;text-shadow:rgba(255,255,255,0.7) 0 1px 0}#screen-meta-links a.show-settings:hover{text-decoration:none}.toggle-arrow{background-repeat:no-repeat;background-position:top left;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom left}#screen-options-wrap h5,#contextual-help-wrap h5{margin:8px 0;font-size:13px}.metabox-prefs label{display:inline-block;padding-right:15px;white-space:nowrap;line-height:30px}.metabox-prefs label input{margin:0 5px 0 2px}.metabox-prefs .columns-prefs label input{margin:0 2px}.metabox-prefs label a{display:none}#contextual-help-wrap{padding:0;margin-left:-4px}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;left:150px;right:170px;border-width:0 1px;border-style:solid}#contextual-help-wrap.no-sidebar #contextual-help-back{right:0;border-right-width:0;-webkit-border-bottom-right-radius:2px;border-bottom-right-radius:2px}.contextual-help-tabs{float:left;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:1px 0;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 5px 5px 12px;line-height:18px;text-decoration:none}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-width:1px 0 1px 1px;border-style:solid}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 22px 12px 0;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content li{list-style-type:disc;margin-left:18px}.contextual-help-sidebar{width:150px;float:right;padding:0 8px 0 12px;overflow:auto}#adminmenuback,#adminmenuwrap{border-width:0 1px 0 0;border-style:solid}#adminmenuwrap{position:relative;float:left}#adminmenushadow{position:absolute;top:0;right:0;bottom:0;width:6px;z-index:20}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;user-select:none}#adminmenu .wp-submenu{list-style:none;padding:0;margin:0;overflow:hidden}#adminmenu li .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{display:none;position:absolute;top:-1px;left:146px;z-index:999;overflow:hidden}.js #adminmenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.no-js #adminmenu .wp-has-submenu:hover .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu li.focused .wp-submenu{display:block}#adminmenu .wp-has-current-submenu .wp-submenu{position:relative;z-index:2;top:auto;left:auto;right:auto;bottom:auto;padding:0}#adminmenu .wp-has-current-submenu .wp-submenu-wrap{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.folded #adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{top:-5px;left:26px}#adminmenu .wp-submenu.sub-open,#adminmenu li.focused.wp-not-current-submenu .wp-submenu,.folded #adminmenu li.focused.wp-has-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.no-js #adminmenu .wp-has-submenu:hover .wp-submenu,.no-js.folded #adminmenu .wp-has-current-submenu:hover .wp-submenu{padding:0 8px 8px 0}.no-js #adminmenu .wp-has-current-submenu:hover .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu{padding:0}#adminmenu .wp-submenu a{font-size:12px;line-height:18px}#adminmenu a.menu-top,#adminmenu .wp-submenu-head{font-size:13px;line-height:18px}#adminmenu div.wp-submenu-head{display:none}.folded #adminmenu div.wp-submenu-head{display:block}.folded #adminmenu a.menu-top,body.no-js #adminmenu .wp-menu-toggle,.folded #adminmenu div.wp-menu-toggle{display:none}#adminmenu div.wp-menu-image{float:left;width:28px;height:28px}.folded #adminmenu div.wp-menu-image{width:30px}#adminmenu li{margin:0;padding:0;cursor:pointer}#adminmenu a{display:block;line-height:18px;padding:2px 5px}#adminmenu li.menu-top{min-height:29px;position:relative}#adminmenu a.menu-top{font-weight:bold;line-height:18px;min-width:10em;padding:5px 5px;border-width:1px 0 1px;border-style:solid}#adminmenu li.wp-menu-open{border-width:0 0 1px;border-style:solid}#adminmenu .wp-submenu ul{padding:4px 0}#adminmenu .wp-submenu a{margin:0}#adminmenu li li{margin-left:8px}#adminmenu .wp-submenu a,#adminmenu li li a,.folded #adminmenu .wp-not-current-submenu li a{padding-left:12px}#adminmenu .wp-not-current-submenu li a{padding-left:18px}.folded #adminmenu li li{margin-left:0}.folded #adminmenu li li a{padding-left:0}.wp-menu-arrow{display:none;cursor:auto;z-index:25;position:absolute;right:100%;margin:0;height:30px;width:6px;-moz-transform:translate(146px);-webkit-transform:translate(146px);-o-transform:translate(146px);-ms-transform:translate(146px);transform:translate(146px)}#adminmenu li.wp-has-current-submenu .wp-menu-arrow,#adminmenu li.menu-top:hover .wp-menu-arrow,#adminmenu li.current .wp-menu-arrow,#adminmenu li.focused .wp-menu-arrow,#adminmenu li.menu-top.wp-has-submenu:hover .wp-menu-arrow div{display:block}#adminmenu li.wp-not-current-submenu:hover .wp-menu-arrow div{display:none}#adminmenu li.menu-top:hover .wp-menu-arrow,#adminmenu li.menu-top.focused .wp-menu-arrow{z-index:1001}.ie8 #adminmenu li.menu-top:hover .wp-menu-arrow{display:none}#adminmenu .wp-menu-arrow div{position:absolute;top:7px;left:-1px;width:14px;height:15px;-moz-transform:matrix(-0.6,1,0.6,1,0,0);-webkit-transform:matrix(-0.6,1,0.6,1,0,0);-o-transform:matrix(-0.6,1,0.6,1,0,0);-ms-transform:matrix(-0.6,1,0.6,1,0,0);transform:matrix(-0.6,1,0.6,1,0,0)}#adminmenu li.wp-not-current-submenu .wp-menu-arrow{-moz-transform:translate(145px);-webkit-transform:translate(145px);-o-transform:translate(145px);-ms-transform:translate(145px);transform:translate(145px);height:28px;border-width:1px 0;border-style:solid}.folded .wp-menu-arrow{-moz-transform:translate(33px);-webkit-transform:translate(33px);-o-transform:translate(33px);-ms-transform:translate(33px);transform:translate(33px)}#adminmenu .wp-not-current-submenu .wp-menu-arrow div{width:15px;top:6px;border-width:0 0 1px 1px;border-style:solid}.wp-menu-arrow,.folded #adminmenu li.menu-top:hover .wp-menu-arrow{display:none}.folded #adminmenu li.current:hover .wp-menu-arrow,.folded #adminmenu li.menu-top.wp-menu-open:hover .wp-menu-arrow{display:block;z-index:125}#adminmenu .wp-submenu li{padding:0;margin:0}.folded #adminmenu li.menu-top{border-width:1px 0;border-style:solid none}#adminmenu .wp-menu-image img{float:left;padding:5px 0 0 2px;opacity:.6;filter:alpha(opacity=60)}#adminmenu li.menu-top:hover .wp-menu-image img,#adminmenu li.wp-has-current-submenu .wp-menu-image img{opacity:1;filter:alpha(opacity=100)}#adminmenu li.wp-menu-separator{height:3px;padding:0;margin:0;border-width:1px 0;border-style:solid;cursor:inherit}#adminmenu div.separator{height:1px;padding:0;border-width:1px 0 0 0;border-style:solid}#adminmenu .wp-submenu .wp-submenu-head{padding:6px 4px 5px 10px;cursor:default;border-width:1px 0;border-style:solid}#adminmenu li .wp-submenu-wrap{border-width:1px 1px 1px 0;border-style:solid solid solid none;position:relative;-webkit-border-bottom-right-radius:3px;-webkit-border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-right-radius:3px}#adminmenu li.wp-menu-open .wp-submenu-wrap{border:0 none}.folded #adminmenu .wp-submenu .wp-submenu-wrap{margin-top:3px}.folded #adminmenu .wp-has-current-submenu{margin-bottom:1px}.folded #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}.folded #adminmenu .wp-has-current-submenu .wp-submenu-wrap{margin-top:4px}.folded #adminmenu .wp-submenu ul{border-width:0 0 0 1px;border-style:solid}.folded #adminmenu .wp-submenu a{padding-left:10px}.folded #adminmenu a.wp-has-submenu{margin-left:40px}#adminmenu .wp-menu-toggle{width:18px;clear:right;float:right;margin:1px 0 0;height:27px;padding:1px 2px 0 0;cursor:pointer}#adminmenu .wp-menu-image a{height:24px}#adminmenu .awaiting-mod,#adminmenu span.update-plugins,#sidemenu li a span.update-plugins{position:absolute;font-family:sans-serif;font-size:9px;line-height:17px;font-weight:bold;margin-top:1px;margin-left:7px;-webkit-border-radius:10px;border-radius:10px}#adminmenu li .awaiting-mod span,#adminmenu li span.update-plugins span,#sidemenu li a span.update-plugins span{display:block;padding:0 6px}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none}#collapse-menu{font-size:12px;line-height:34px}.folded #collapse-menu span{display:none}#collapse-button,#collapse-button div{width:15px;height:15px}#collapse-button{float:left;margin:8px 6px;border-width:1px;border-style:solid;-webkit-border-radius:10px;border-radius:10px}@media only screen and (max-width:900px){#wpcontent,#footer{margin-left:52px}#adminmenuback,#adminmenuwrap,#adminmenu,#adminmenu li.menu-top{width:32px}#adminmenu .wp-has-current-submenu .wp-submenu{display:none;position:absolute;width:145px;z-index:999;overflow:hidden}#adminmenu .wp-has-current-submenu .wp-submenu.sub-open{display:block}#adminmenu li .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu{top:-5px;left:26px}#adminmenu li.focused.wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open{padding:0 8px 8px 0}#adminmenu div.wp-submenu-head{display:block}#adminmenu a.menu-top,#adminmenu div.wp-menu-toggle{display:none}#adminmenu div.wp-menu-image{width:30px}#adminmenu .wp-not-current-submenu li a{padding-left:12px}#adminmenu li li{margin-left:0}#adminmenu li li a{padding-left:0}.wp-menu-arrow{-moz-transform:translate(33px);-webkit-transform:translate(33px);-o-transform:translate(33px);-ms-transform:translate(33px);transform:translate(33px)}#adminmenu li.menu-top:hover .wp-menu-arrow{display:none}#adminmenu li.current:hover .wp-menu-arrow,#adminmenu li.menu-top.wp-menu-open:hover .wp-menu-arrow{display:block;z-index:125}#adminmenu li.menu-top{border-width:1px 0;border-style:solid none}#adminmenu .wp-submenu .wp-submenu-wrap{margin-top:3px}#adminmenu .wp-has-current-submenu{margin-bottom:1px}#adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}#adminmenu .wp-has-current-submenu .wp-submenu-wrap{margin-top:4px}#adminmenu .wp-submenu ul{border-width:0 0 0 1px;border-style:solid}#adminmenu .wp-submenu a{padding-left:10px}#adminmenu a.wp-has-submenu{margin-left:40px}#collapse-menu{display:none}}.post-com-count-wrapper{min-width:22px;font-family:sans-serif}.post-com-count{height:1.3em;line-height:1.1em;display:block;text-decoration:none;padding:0 0 6px;cursor:pointer;background-position:center -80px;background-repeat:no-repeat}.post-com-count span{font-size:11px;font-weight:bold;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px}strong .post-com-count{background-position:center -55px}.post-com-count:hover{background-position:center -3px}.column-response .post-com-count{float:left;margin-right:5px;text-align:center}.response-links{float:left}#the-comment-list .attachment-80x60{padding:4px 8px}html.wp-toolbar{padding-top:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.narrow{width:70%;margin-bottom:40px}.narrow p{line-height:150%}.widefat th,.widefat td{overflow:hidden}.widefat th{font-weight:normal}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.postbox-container{float:left}#dashboard-widgets.columns-1 .postbox-container{width:100%}#dashboard-widgets.columns-2 .postbox-container{width:49.5%}#dashboard-widgets.columns-2 #postbox-container-2,#dashboard-widgets.columns-2 #postbox-container-3,#dashboard-widgets.columns-2 #postbox-container-4{float:right;width:50.5%}#dashboard-widgets.columns-3 .postbox-container{width:33.5%}#dashboard-widgets.columns-3 #postbox-container-1{width:33%}#dashboard-widgets.columns-3 #postbox-container-3,#dashboard-widgets.columns-3 #postbox-container-4{float:right}#dashboard-widgets.columns-4 .postbox-container{width:25%}.postbox-container .meta-box-sortables{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.postbox-container .meta-box-sortables:empty{min-height:0;height:0}.metabox-holder .postbox-container .empty-container,#post-body.columns-2 #side-sortables:empty{border:3px dashed #ccc;height:250px}.metabox-holder.columns-1 .postbox-container .empty-container,.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#poststuff{padding-top:10px}#poststuff #post-body{padding:0}#post-body-content{width:100%;float:left}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#post-body.columns-2 #postbox-container-1{float:right;margin-right:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}#wpbody-content .metabox-holder .postbox-container .empty-container{border:0 none;height:0;min-height:0}}@media only screen and (min-width:800px) and (max-width:1200px){#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets.metabox-holder .postbox-container .empty-container,#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0 none;height:0;min-height:0}.index-php .screen-layout,.index-php .columns-prefs{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}}@media only screen and (max-width:850px){#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-right:0;width:100%}#poststuff #postbox-container-1 .empty-container,#poststuff #postbox-container-1 #side-sortables:empty{border:0 none;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0}.screen-layout,.columns-prefs{display:none}}.postbox .hndle{cursor:move;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.postbox.closed .hndle{-webkit-border-radius:3px;border-radius:3px}.hndle a{font-size:11px;font-weight:normal}.postbox .handlediv{float:right;width:27px;height:30px;cursor:pointer}.sortable-placeholder{border-width:1px;border-style:dashed;margin-bottom:20px}.widget,.postbox,.stuffbox{margin-bottom:20px;padding:0;border-width:1px;border-style:solid;line-height:1}.widget .widget-top,.postbox h3,.stuffbox h3{margin-top:1px;border-bottom-width:1px;border-bottom-style:solid;cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.stuffbox h3{cursor:auto}.postbox .inside,.stuffbox .inside{padding:0 10px;line-height:1.4em}.postbox .inside{margin:10px 0;position:relative}.postbox.closed h3{border:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 5px}#dashboard-widgets-wrap{margin:0 -8px}#wpbody-content .metabox-holder{padding-top:10px}#dashboard-widgets .meta-box-sortables{margin:0 8px}#dashboard_recent_comments div.undo{border-top-style:solid;border-top-width:1px;margin:0 -10px;padding:3px 8px;font-size:11px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-left:0}#the-comment-list p.comment-author img{float:left;margin-right:8px}#the-comment-list p.comment-author strong a{border:0}#the-comment-list td{vertical-align:top}#the-comment-list td.comment{word-wrap:break-word}.welcome-panel{margin:20px 8px;padding:30px 10px 20px;border-width:1px 0;border-style:solid;position:relative;line-height:1.6em;overflow:auto}.welcome-panel h3{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-size:32px;font-weight:normal;line-height:1.2;margin:.1em 0 .8em}.welcome-panel h4{font-size:14px}.welcome-panel .welcome-panel-close{position:absolute;top:0;right:10px;padding:8px 3px;font-size:13px;text-decoration:none}.welcome-panel .welcome-panel-close:before{background:url('../images/xit.gif') 0 17% no-repeat;content:' ';height:100%;width:10px;left:-12px;position:absolute}.welcome-panel .welcome-panel-close:hover:before{background-position:100% 17%}.welcome-panel .wp-badge{float:left;margin-bottom:20px}.welcome-panel-content{max-width:1500px}.welcome-panel-content .about-description,.welcome-panel h3{margin-left:190px}.welcome-panel p.welcome-panel-dismiss{clear:both;padding:1em 0 0 0}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative;padding-left:26px}.welcome-panel .welcome-panel-column{margin:0 5% 0 -25px;padding-left:25px;width:30%;min-width:200px;float:left}.welcome-panel .welcome-panel-column.welcome-panel-last{margin-right:0}.welcome-panel h4 .icon16{margin-left:-32px}.welcome-panel .welcome-panel-column ul{margin:1.6em 1em 1em 1.3em}.welcome-panel .welcome-panel-column li{list-style-type:disc;padding-left:2px}table.fixed{table-layout:fixed}.fixed .column-rating,.fixed .column-visible{width:8%}.fixed .column-date,.fixed .column-parent,.fixed .column-links{width:10%}.fixed .column-response,.fixed .column-author,.fixed .column-categories,.fixed .column-tags,.fixed .column-rel,.fixed .column-role{width:15%}.fixed .column-comments{width:4em;padding:8px 0;text-align:left}.fixed .column-comments .vers{padding-left:3px}.fixed .column-comments a{float:left}.fixed .column-slug{width:25%}.fixed .column-posts{width:10%}.fixed .column-icon{width:80px}#comments-form .fixed .column-author{width:20%}#commentsdiv.postbox .inside{margin:0;padding:0}#commentsdiv .inside .row-actions{line-height:18px}#commentsdiv .inside .column-author{width:25%}#commentsdiv .column-comment p{margin:.6em 0;padding:0}#commentsdiv #replyrow td{padding:0}#commentsdiv p{padding:8px 10px;margin:0}#commentsdiv #add-new-comment{border-width:0 0 1px;border-style:none none solid}#commentsdiv .comments-box{border:0 none}#commentsdiv .comments-box thead th{background:transparent;padding:0 7px 4px;font-style:italic}#commentsdiv .comments-box tr:last-child td{border-bottom:0 none}#commentsdiv img.waiting{padding-left:5px}.sorting-indicator{display:none;width:7px;height:4px;margin-top:8px;margin-left:7px;background-image:url(../images/sort.gif);background-repeat:no-repeat}.fixed .column-comments .sorting-indicator{margin-top:3px}.widefat th.sortable,.widefat th.sorted{padding:0}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 7px 8px}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0}th.sortable a span,th.sorted a span{float:left;cursor:pointer}th.sorted.asc .sorting-indicator,th.desc:hover span.sorting-indicator{display:block;background-position:0 0}th.sorted.desc .sorting-indicator,th.asc:hover span.sorting-indicator{display:block;background-position:-7px 0}.tablenav-pages a{border-bottom-style:solid;border-bottom-width:2px;font-weight:bold;margin-right:1px;padding:0 2px}.tablenav-pages .current-page{text-align:center}.tablenav-pages .next-page{margin-left:2px}.tablenav a.button-secondary{display:block;margin:3px 8px 0 0}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:right;display:block;cursor:default;height:30px;line-height:30px;font-size:12px}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none}.tablenav .tablenav-pages a,.tablenav-pages span.current{text-decoration:none;padding:3px 6px}.tablenav .tablenav-pages a.disabled:hover,.tablenav .tablenav-pages a.disabled:active{cursor:default}.tablenav .displaying-num{margin-right:10px;font-size:12px;font-style:italic}.tablenav .actions{padding:2px 8px 0 0}.tablenav .delete{margin-right:20px}.view-switch{float:right;margin:6px 8px 0}.view-switch a{text-decoration:none}.filter{float:left;margin:-5px 0 0 10px}.filter .subsubsub{margin-left:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter fieldset{float:left;margin:0 1.5ex 1em 0;padding:0}#posts-filter fieldset legend{padding:0 0 .2em 1px}span.post-state-format{font-weight:normal}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:left;margin:0;padding:0;width:100%}tr.inline-edit-row td,#wpbody-content .inline-edit-row fieldset .inline-edit-col{padding:0 .5em}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 0 0 1px;border-style:none none none solid}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:40%}#wpbody-content .quick-edit-row-post .inline-edit-col-right{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:20%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:50%}#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:30%}#wpbody-content .bulk-edit-row-page .inline-edit-col-right{width:69%}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:right;width:69%}#wpbody-content .inline-edit-row-page .inline-edit-col-right{margin-top:27px}.inline-edit-row fieldset .inline-edit-group{clear:both}.inline-edit-row fieldset .inline-edit-group:after{content:".";display:block;height:0;clear:both;visibility:hidden}.inline-edit-row p.submit{clear:both;padding:.5em;margin:.5em 0 0}.inline-edit-row span.error{line-height:22px;margin:0 15px;padding:3px 5px}.inline-edit-row h4{margin:.2em 0;padding:0;line-height:23px}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{margin:0;padding:0;line-height:27px}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0}.inline-edit-row fieldset label.inline-edit-tags{margin-top:0}.inline-edit-row fieldset label.inline-edit-tags span.title{margin:.2em 0}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em}.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-left:5em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-right:.5em}.inline-edit-row .input-text-wrap input[type=text]{width:100%}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:text-bottom}.inline-edit-row fieldset label textarea{width:100%;height:4em}#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:50%}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-right:.5em}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em}.inline-edit-row h4{text-transform:uppercase}.inline-edit-row fieldset span.title,.inline-edit-row fieldset span.checkbox-title{font-style:italic;line-height:1.8em}.inline-edit-row fieldset input[type="text"],.inline-edit-row fieldset textarea{border-style:solid;border-width:1px}.inline-edit-row fieldset .inline-edit-date{float:left}.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=mn]{font-size:12px;width:2.1em}.inline-edit-row fieldset input[name=aa]{font-size:12px;width:3.5em}.inline-edit-row fieldset label input.inline-edit-password-input{width:8em}.inline-edit-row .catshow,.inline-edit-row .cathide{cursor:pointer}ul.cat-checklist{height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0}#bulk-titles{display:block;height:12em;border-style:solid;border-width:1px;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist li,.inline-edit-row fieldset ul.cat-checklist input{margin:0}.inline-edit-row fieldset ul.cat-checklist label,.inline-edit-row .catshow,.inline-edit-row .cathide,.inline-edit-row #bulk-titles div{font-family:sans-serif;font-style:normal;font-size:11px}table .inline-edit-row fieldset ul.cat-hover{height:auto;max-height:30em;overflow-y:auto;position:absolute}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%}.quick-edit-row-post fieldset label.inline-edit-status{float:left}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:left;height:10px;margin:3px 3px 0 -2px;overflow:hidden;position:relative;text-indent:-9999px;width:10px}#titlediv{position:relative;margin-bottom:20px}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#poststuff #titlewrap{border:0;padding:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;width:100%;outline:0}#titlediv #title-prompt-text,#wp-fullscreen-title-prompt-text{color:#bbb;position:absolute;font-size:1.7em;padding:8px 10px}#wp-fullscreen-title-prompt-text{left:0;padding:11px}#poststuff .inside-submitbox,#side-sortables .inside-submitbox{margin:0 3px;font-size:11px}input#link_description,input#link_url{width:98%}#pending{background:0 none;border:0 none;padding:0;font-size:11px;margin-top:-1px}#edit-slug-box{height:1em;margin-top:8px;padding:0 10px}#editable-post-name-full{display:none}#editable-post-name input{width:16em}.postarea h3 label{float:left}#submitpost #ajax-loading,#submitpost .ajax-loading{vertical-align:middle}#wpcontent .ajax-loading{visibility:hidden}.submitbox .submit{text-align:left;padding:12px 10px 10px;font-size:11px}.submitbox .submitdelete{text-decoration:none;padding:1px 2px}.submitbox .submitdelete,.submitbox .submit a:hover{border-bottom-width:1px;border-bottom-style:solid}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px}.inside-submitbox #post_status{margin:2px 0 2px -2px}#post-status-select,#post-format{line-height:2.5em;margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{position:relative;min-width:255px}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:transparent none;border:0 none;float:right;padding:0 12px;margin:0}.category-add input[type="text"],.category-add select{width:100%;max-width:260px}.press-this #side-sortables .category-tabs li,ul.category-tabs li,#side-sortables .add-menu-item-tabs li,.wp-tab-bar li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}.category-tabs a,#side-sortables .add-menu-item-tabs a,.wp-tab-bar a{text-decoration:none}.category-tabs{margin:8px 0 3px}#category-adder h4{margin:10px 0}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:0 7px 5px}#side-sortables .submitbox .submit input,#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover{border:0 none}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0}ul.category-tabs,ul.add-menu-item-tabs,ul.wp-tab-bar{margin-top:12px}ul.category-tabs li,ul.add-menu-item-tabs li.tabs,.wp-tab-active{border-style:solid solid none;border-width:1px 1px 0}#post-body .add-menu-item-tabs li.tabs{border-style:solid none solid solid;border-width:1px 0 1px 1px;margin-right:-1px}ul.category-tabs li,ul.add-menu-item-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}form#tags-filter{position:relative}td.post-title strong,td.plugin-title strong{display:block;margin-bottom:.2em}td.post-title p,td.plugin-title p{margin:6px 0}.wp-hidden-children .wp-hidden-child,.ui-tabs-hide{display:none}.commentlist .avatar{vertical-align:text-top}#post-body .tagsdiv #newtag{margin-right:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{border-width:0 1px 1px;border-style:none solid solid;width:100%;-webkit-border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}#post-status-info td{font-size:12px}.autosave-info{padding:2px 15px;text-align:right}#editorcontent #post-status-info{border:0}#post-body .wp_themeSkin .mceStatusbar a.mceResize{display:block;background:transparent url(../images/resize.gif) no-repeat scroll right bottom;width:12px;cursor:se-resize;margin:0 2px;position:relative;top:-2px}#post-body .postarea .wp_themeSkin .mceStatusbar a.mceResize{top:20px}#wp-word-count{display:block;padding:2px 10px}#timestampdiv select{height:20px;line-height:14px;padding:0;vertical-align:top}#aa,#jj,#hh,#mn{padding:1px;font-size:12px}#jj,#hh,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{background-repeat:no-repeat;background-position:left top;padding-left:18px}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}#postcustomstuff .updatemeta,#postcustomstuff .deletemeta{margin:auto}#postcustomstuff thead th{padding:5px 8px 8px}#postcustom #postcustomstuff .submit{border:0 none;float:none;padding:5px 8px}#side-sortables #postcustom #postcustomstuff .submit{padding:0 5px}#side-sortables #postcustom #postcustomstuff td.left input{margin:3px 3px 0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px;margin:3px}#postcustomstuff table{margin:0;width:100%;border-width:1px;border-style:solid;border-spacing:0}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:95%;margin:8px 0 8px 8px}#postcustomstuff th.left,#postcustomstuff td.left{width:38%}#postcustomstuff #newmeta .submit{padding:0 8px}#postcustomstuff .submit input,#postcustomstuff table #addmetasub{width:auto}#postcustomstuff #newmetaleft{vertical-align:top}#postcustomstuff #newmetaleft a{padding:0 10px;text-decoration:none}table.diff{width:100%}table.diff col.content{width:50%}table.diff tr{background-color:transparent}table.diff td,table.diff th{padding:.5em;font-family:Consolas,Monaco,monospace;border:0}table.diff .diff-deletedline del,table.diff .diff-addedline ins{text-decoration:none}.category-adder{margin-left:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}#post-body ul.add-menu-item-tabs{float:left;width:120px;text-align:right;margin:0 -120px 0 5px;padding:0}#post-body ul.add-menu-item-tabs li{padding:8px}#post-body ul.add-menu-item-tabs li.tabs{-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px}.wp-tab-panel,.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel{height:200px;overflow:auto;padding:.5em .9em;border-style:solid;border-width:1px}.nav-menus-php .customlinkdiv div.tabs-panel,.nav-menus-php .posttypediv div.tabs-panel,.nav-menus-php .taxonomydiv div.tabs-panel{height:auto;max-height:205px}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}.colunms-1 .categorydiv div.tabs-panel,.taxonomy div.tabs-panel{margin:0 5px 0 125px}.customlinkdiv ul,.posttypediv ul,.taxonomydiv ul{list-style:none;padding:0;margin:0}#front-page-warning,#front-static-pages ul,ul.export-filters,.inline-editor ul.cat-checklist ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul{margin-left:18px}ul.categorychecklist li{margin:0;padding:0;line-height:19px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap p,.form-wrap label{font-size:11px}.form-wrap label{display:block;padding:2px;font-size:12px}.form-field input,.form-field textarea{border-style:solid;border-width:1px;width:95%}p.description,.form-wrap p{margin:2px 0 5px}p.help,p.description,span.description,.form-wrap p{font-size:12px;font-style:italic;font-family:sans-serif}.form-wrap .form-field{margin:0 0 10px;padding:8px}.col-wrap h3{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}#poststuff .taghint{color:#aaa;margin:15px 0 -24px 12px}#poststuff .tagsdiv .howto{margin:0 0 6px 8px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}p.popular-tags{-webkit-border-radius:8px;border-radius:8px;border-width:1px;border-style:solid;line-height:2em;max-width:1000px;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h3{margin:2px 0 12px}.ac_results{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;display:none;border-width:1px;border-style:solid}.ac_results li{padding:2px 5px;white-space:nowrap;text-align:left}.ac_over{cursor:pointer}.ac_match{text-decoration:underline}table.links-table{width:100%}.links-table th{font-weight:normal;text-align:left;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table th,.links-table td{padding:5px 0}.links-table td label{margin-right:8px}.links-table td input[type="text"],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}.media-item .describe{border-collapse:collapse;width:100%;border-top-style:solid;border-top-width:1px;clear:both;cursor:default}.media-item.media-blank .describe{border:0}.media-item .describe th{vertical-align:top;text-align:left;padding:5px 10px 10px;width:140px}.media-item .describe .align th{padding-top:0}.media-item .media-item-info tr{background-color:transparent}.media-item .describe td{padding:0 8px 8px 0;vertical-align:top}.media-item thead.media-item-info td{padding:4px 10px 0}.media-item .media-item-info .A1B1{padding:0 0 0 10px}.media-item td.savesend{padding-bottom:15px}.media-item .thumbnail{max-height:128px;max-width:128px}#wpbody-content #async-upload-wrap a{display:none}.media-upload-form{margin-top:20px}.media-upload-form td label{margin-right:6px;margin-left:2px}.media-upload-form .align .field label{display:inline;padding:0 0 0 23px;margin:0 1em 0 3px;font-weight:bold}.media-upload-form tr.image-size label{margin:0 0 0 5px;font-weight:bold}.media-upload-form th.label label{font-weight:bold;margin:.5em;font-size:13px}.media-upload-form th.label label span{padding:0 5px}abbr.required{border:medium none;text-decoration:none}.media-item .describe input[type="text"],.media-item .describe textarea{width:460px}.media-item .describe p.help{margin:0;padding:0 0 0 5px}.describe-toggle-on,.describe-toggle-off{display:block;line-height:36px;float:right;margin-right:15px}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on,.media-item.open img.pinkynail{display:none}.media-item.open .describe-toggle-off{display:block}#media-items .media-item{border-style:solid;border-width:1px;min-height:36px;position:relative;margin-top:-1px;width:100%}#media-items{width:623px}#media-items:empty{border:0 none}.media-item .filename{line-height:36px;overflow:hidden;padding:0 10px}.media-item .error-div{padding-left:10px}.media-item .pinkynail{float:left;margin:2px 2px 0;max-width:40px;max-height:32px}.media-item .startopen,.media-item .startclosed{display:none}.media-item .original{position:relative;height:34px}.media-item .progress{float:right;height:22px;margin:6px 10px 0 0;width:200px;line-height:2em;padding:0;overflow:hidden;margin-bottom:2px;border:1px solid #d1d1d1;background:#fff;background-image:linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-o-linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-moz-linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-webkit-linear-gradient(bottom,#fff 0,#f7f7f7 100%);background-image:-ms-linear-gradient(bottom,#fff 0,#f7f7f7 100%);-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,0.1);box-shadow:inset 0 0 3px rgba(0,0,0,0.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-24px;background-color:#83b4d8;background-image:linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-o-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-moz-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-webkit-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);background-image:-ms-linear-gradient(bottom,#72a7cf 0,#90c5ee 100%);-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.3);box-shadow:0 0 3px rgba(0,0,0,0.3)}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0 8px;text-shadow:0 1px 0 rgba(255,255,255,0.4);color:rgba(0,0,0,0.6)}.upload-php .fixed .column-parent{width:25%}.js .html-uploader #plupload-upload-ui{display:none}.js .html-uploader #html-upload-ui{display:block}.media-upload-form .media-item.error{margin:0;padding:0}.media-upload-form .media-item.error p,.media-item .error-div{line-height:16px;margin:5px 10px;padding:0}.media-item .error-div a.dismiss{display:block;float:right;margin:5px 4px 0 15px}.find-box{width:500px;height:300px;overflow:hidden;padding:33px 5px 40px;position:absolute;z-index:1000}.find-box-head{cursor:move;font-weight:bold;height:2em;line-height:2em;padding:1px 12px;position:absolute;top:5px;width:100%}.find-box-inside{overflow:auto;width:100%;height:100%}.find-box-search{padding:12px;border-width:1px;border-style:none none solid}#find-posts-response{margin:8px 0;padding:0 1px}#find-posts-response table{width:100%}#find-posts-response .found-radio{padding:5px 0 0 8px;width:15px}.find-box-buttons{width:480px;margin:8px}.find-box-search label{padding-right:6px}.find-box #resize-se{position:absolute;right:1px;bottom:1px}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-0.5em 0 2em 0}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border-width:1px;border-style:solid;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px}.drag-drop #drag-drop-area{border:4px dashed #ddd;height:200px}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px}.drag-drop-inside p{color:#aaa;font-size:14px;margin:5px 0;display:none}.drag-drop .drag-drop-inside p{text-align:center}.drag-drop-inside p.drag-drop-info{font-size:20px}.drag-drop .drag-drop-inside p,.drag-drop-inside p.drag-drop-buttons{display:block}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8}#plupload-upload-ui{position:relative}.describe .image-editor{vertical-align:top}.imgedit-wrap{position:relative}.imgedit-settings p{margin:8px 0}.describe .imgedit-wrap table td{vertical-align:top;padding-top:0}.imgedit-wrap p,.describe .imgedit-wrap table td{font-size:11px;line-height:18px}.describe .imgedit-wrap table td.imgedit-settings{padding:0 5px}td.imgedit-settings input{vertical-align:middle}.imgedit-wait{position:absolute;top:0;background:#fff url(../images/wpspin_light.gif) no-repeat scroll 22px 10px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none}.media-disabled,.imgedit-settings .disabled{color:grey}.imgedit-wait-spin{padding:0 4px 4px;vertical-align:bottom;visibility:hidden}.imgedit-menu{margin:0 0 12px;min-width:300px}.imgedit-menu div{float:left;width:32px;height:32px}.imgedit-crop-wrap{position:relative}.imgedit-crop{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -9px -31px;margin:0 8px 0 0}.imgedit-crop.disabled:hover{background-position:-9px -31px}.imgedit-crop:hover{background-position:-9px -1px}.imgedit-rleft{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -46px -31px;margin:0 3px}.imgedit-rleft.disabled:hover{background-position:-46px -31px}.imgedit-rleft:hover{background-position:-46px -1px}.imgedit-rright{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -77px -31px;margin:0 8px 0 3px}.imgedit-rright.disabled:hover{background-position:-77px -31px}.imgedit-rright:hover{background-position:-77px -1px}.imgedit-flipv{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -115px -31px;margin:0 3px}.imgedit-flipv.disabled:hover{background-position:-115px -31px}.imgedit-flipv:hover{background-position:-115px -1px}.imgedit-fliph{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -147px -31px;margin:0 8px 0 3px}.imgedit-fliph.disabled:hover{background-position:-147px -31px}.imgedit-fliph:hover{background-position:-147px -1px}.imgedit-undo{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -184px -31px;margin:0 3px}.imgedit-undo.disabled:hover{background-position:-184px -31px}.imgedit-undo:hover{background-position:-184px -1px}.imgedit-redo{background:transparent url(../images/imgedit-icons.png) no-repeat scroll -215px -31px;margin:0 8px 0 3px}.imgedit-redo.disabled:hover{background-position:-215px -31px}.imgedit-redo:hover{background-position:-215px -1px}.imgedit-applyto img{margin:0 8px 0 0}.imgedit-group-top{margin:5px 0}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block}.imgedit-help{display:none;font-style:italic;margin-bottom:8px}.imgedit-help ul li{font-size:11px}a.imgedit-help-toggle{text-decoration:none}#wpbody-content .imgedit-response div{width:600px;margin:8px}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0}.imgedit-submit-btn{margin-left:20px}.imgedit-wrap .nowrap{white-space:nowrap}span.imgedit-scale-warn{color:red;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle}.imgedit-group{border-width:1px;border-style:solid;-webkit-border-radius:8px;border-radius:8px;margin-bottom:8px;padding:2px 10px}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;margin-bottom:-8px;clear:both}.form-table td{margin-bottom:9px;padding:8px 10px;line-height:20px;font-size:12px}.form-table th,.form-wrap label{font-weight:normal;text-shadow:#fff 0 1px 0}.form-table th{vertical-align:top;text-align:left;padding:10px;width:200px}.form-table th.th-full{width:auto}.form-table div.color-option{display:block;clear:both;margin-top:12px}.form-table input.tog{margin-top:2px;margin-right:2px;float:left}.form-table td p{margin-top:4px}.form-table table.color-palette{vertical-align:bottom;float:left;margin:-12px 3px 11px}.form-table .color-palette td{border-width:1px 1px 0;border-style:solid solid none;height:10px;line-height:20px;width:10px}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom-width:1px;border-bottom-style:solid}.commentlist li li{border-bottom:0;padding:0}.commentlist p{padding:0;margin:0 0 .8em}#replyrow input{border-width:1px;border-style:solid}#replyrow td{padding:2px}#replysubmit{margin:0;padding:0 7px 3px;text-align:center}#replysubmit img.waiting,.inline-edit-save img.waiting{padding:4px 10px 0;vertical-align:top;float:right}#replysubmit .button{margin-right:5px}#replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center}#replyrow h5{margin:.2em 0 0;padding:0 5px;line-height:1.4em;font-size:1em}#edithead .inside{float:left;padding:3px 0 2px 5px;margin:0;text-align:center}#edithead .inside input{width:180px}#edithead label{padding:2px 0}#replycontainer{padding:5px}#replycontent{height:120px}.comment-ays{margin-bottom:0;border-style:solid;border-width:1px}.comment-ays th{border-right-style:solid;border-right-width:1px}.trash-undo-inside,.spam-undo-inside{margin:1px 8px 1px 0;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-right:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 3px 5px 0;vertical-align:middle}#comment-status-radio label{padding:5px 0}.commentlist .avatar{vertical-align:text-top}.theme-install-php .tablenav{height:auto}h3.available-themes{margin:0 0 1em;float:left}.available-theme{display:inline-block;margin-right:10px;overflow:hidden;padding:20px 20px 20px 0;vertical-align:top;width:300px}.available-theme .screenshot{width:300px;height:225px;display:block;border-width:1px;border-style:solid;margin-bottom:10px;overflow:hidden}.available-theme img{width:300px}.available-theme h3{margin:15px 0 0}.available-theme .theme-author{line-height:18px}.available-theme .action-links{margin-top:10px;overflow:hidden}#current-theme .theme-info li,.theme-options li,.available-theme .action-links li{float:left;padding-right:10px;margin-right:10px;border-right:1px solid #dfdfdf}.available-theme .action-links li{padding-right:8px;margin-right:8px}#current-theme .theme-info li:last-child,.theme-options li:last-child,.available-theme .action-links li:last-child{padding-right:0;margin-right:0;border-right:0}.available-theme .action-links .delete-theme{float:right;margin-left:8px;margin-right:0}.available-theme .action-links .delete-theme a{color:red;padding:2px}.available-theme .action-links .delete-theme a:hover{background:red;color:#fff;text-decoration:none}.available-theme .action-links p{float:left}#current-theme{margin:20px 0 10px;padding:0 0 20px;border-bottom:1px solid #dfdfdf;overflow:hidden}#current-theme.has-screenshot{padding-left:330px}#current-theme h3{margin:0;font-size:12px;font-weight:normal;color:#999}#current-theme h4{margin:3px 0 16px;font-size:20px}#current-theme h4 span{margin-left:20px;font-size:12px;font-weight:normal}#current-theme a{border-bottom:0}#current-theme .theme-info{margin:1em 0;overflow:hidden}#current-theme .theme-description{margin-top:5px;max-width:600px;line-height:1.6em}#current-theme img{float:left;width:300px;margin-left:-330px;border-width:1px;border-style:solid}.theme-options{overflow:hidden;font-size:14px;padding-bottom:10px}.theme-options .load-customize{margin-right:30px;float:left}.theme-options span{float:left;margin-right:10px;text-transform:uppercase;font-size:11px;line-height:18px;color:#999}.theme-options ul{float:left;margin:0}@media only screen and (max-width:1200px){.available-theme,.available-theme .screenshot,#current-theme img{width:240px}.available-theme .screenshot{height:180px}.available-theme img{width:100%}#current-theme.has-screenshot{padding-left:270px}#current-theme img{margin-left:-270px}}#post-body ul.add-menu-item-tabs li.tabs a,#TB_window #TB_title a.tb-theme-preview-link,#TB_window #TB_title a.tb-theme-preview-link:visited{font-weight:bold;text-decoration:none}#TB_window #TB_title{background-color:#222;color:#cfcfcf}#broken-themes{text-align:left;width:50%;border-spacing:3px;padding:3px}.theme-install-php h4{margin:2.5em 0 8px}.appearance_page_custom-header #headimg{border:1px solid #dfdfdf;width:100%}.appearance_page_custom-header #upload-form p label{font-size:12px}.appearance_page_custom-header .available-headers .default-header{float:left;margin:0 20px 20px 0}.appearance_page_custom-header .random-header{clear:both;margin:0 20px 20px 0;vertical-align:middle}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-right:10px}.appearance_page_custom-header .available-headers label img{vertical-align:middle}div#custom-background-image{min-height:100px;border:1px solid #dfdfdf}div#custom-background-image img{max-width:400px;max-height:300px}.nav-tab{border-style:solid;border-color:#dfdfdf #dfdfdf #fff;border-width:1px 1px 0;color:#aaa;text-shadow:#fff 0 1px 0;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:0 6px -1px 0;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.nav-tab-active{border-width:1px;color:#464646}.nav-tab:hover,.nav-tab-active{border-color:#ccc #ccc #fff}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom:1px solid #ccc;padding-bottom:0}h2 .nav-tab{padding:4px 10px 6px;font-weight:200;font-size:20px;line-height:24px}#dashboard_right_now .versions .b,#post-status-display,#post-visibility-display,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,.media-item .percent,.plugins .name,#pass-strength-result.strong,#pass-strength-result.short,.button-highlighted,input.button-highlighted,#quicktags #ed_strong,#ed_reply_toolbar #ed_reply_strong,.item-controls .item-order a,.feature-filter .feature-name{font-weight:bold}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ul,.plugins .desc ol{margin:0 0 0 2em}.plugins .desc ul{list-style-type:disc}.plugins .row-actions-visible{padding:0}.plugins tbody th.check-column{padding:7px 0}.plugins .inactive td,.plugins .inactive th,.plugins .active td,.plugins .active th{border-top-style:solid;border-top-width:1px;padding:5px 7px 0}.plugins .update th,.plugins .update td{border-bottom:0}.plugin-update-tr td{border-top:0}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-right:12px;white-space:nowrap}.plugins .second,.plugins .row-actions-visible{padding:0 0 5px}.plugins .update .second,.plugins .update .row-actions-visible{padding-bottom:0}.plugins-php .widefat tfoot th,.plugins-php .widefat tfoot td{border-top-style:solid;border-top-width:1px}.plugin-update-tr .update-message{margin:5px;padding:3px 5px}.plugin-install-php h4{margin:2.5em 0 8px}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#your-profile #rich_editing{border:0}#display_name{width:15em}#createuser .form-field input{width:25em}.pressthis{margin:20px 0}.pressthis a{display:inline-block;position:relative;cursor:move;color:#333;background:#dfdfdf;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0.07,#e6e6e6),color-stop(0.77,#d8d8d8));background-image:-webkit-linear-gradient(bottom,#e6e6e6 7%,#d8d8d8 77%);background-image:-moz-linear-gradient(bottom,#e6e6e6 7%,#d8d8d8 77%);background-image:-ms-linear-gradient(bottom,#e6e6e6 7%,#d8d8d8 77%);background-image:-o-linear-gradient(bottom,#e6e6e6 7%,#d8d8d8 77%);background-image:linear-gradient(bottom,#e6e6e6 7%,#d8d8d8 77%);-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none;text-shadow:0 1px 0 #fff}.pressthis a:hover,.pressthis a:active{color:#333}.pressthis a:hover:after{transform:skew(20deg) rotate(9deg);-webkit-transform:skew(20deg) rotate(9deg);-moz-transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,0.7);-webkit-box-shadow:0 10px 8px rgba(0,0,0,0.7);-moz-box-shadow:0 10px 8px rgba(0,0,0,0.7)}.pressthis a span{background:url(../images/press-this.png?v=20120502) no-repeat 0 5px;padding:8px 11px 8px 27px;margin:0 5px;display:inline-block}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:transparent;transform:skew(20deg) rotate(6deg);-webkit-transform:skew(20deg) rotate(6deg);-moz-transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,0.6);-webkit-box-shadow:0 10px 8px rgba(0,0,0,0.6);-moz-box-shadow:0 10px 8px rgba(0,0,0,0.6)}#utc-time,#local-time{padding-left:25px;font-style:italic;font-family:sans-serif}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}#footer{position:absolute;bottom:0;left:0;right:0;padding:10px 0;margin-right:20px;border-top-width:1px;border-top-style:solid}#footer p{margin:0;line-height:20px}#footer a{text-decoration:none}#footer a:hover{text-decoration:underline}.about-wrap{position:relative;margin:25px 40px 0 20px;max-width:1050px;font-size:15px}.about-wrap div.updated,.about-wrap div.error{display:none!important}.about-wrap p{line-height:1.6em}.about-wrap h1{margin:.2em 200px 0 0;line-height:1.2em;font-size:2.8em;font-weight:200}.about-text,.about-description,.about-wrap li.wp-person a.web{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-weight:normal;line-height:1.6em;font-size:20px}.about-description{margin-top:1.4em}.about-text{margin:1em 200px 1.4em 0;min-height:60px;font-size:24px}.about-wrap h3{font-size:24px;margin-bottom:1em;padding-top:20px}.about-wrap .changelog{overflow:hidden}.about-wrap .changelog li{list-style-type:disc;margin-left:3em}.about-wrap .feature-section{padding-bottom:20px}.about-wrap .feature-section h4{margin-bottom:.6em}.about-wrap .feature-section p{margin-top:.6em}.about-wrap code{font-size:14px}.about-wrap .point-releases{margin-top:5px}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.wp-badge{padding-top:142px;height:50px;width:173px;font-weight:bold;font-size:14px;text-align:center;margin:0 -5px;background:url('../images/wp-badge.png?ver=20111120') no-repeat}.about-wrap .wp-badge{position:absolute;top:0;right:0}.about-wrap h2.nav-tab-wrapper{padding-left:6px}.about-wrap h2 .nav-tab{padding:4px 10px 6px;margin:0 3px -1px 0;font-size:18px;vertical-align:top}.about-wrap h2 .nav-tab-active{font-weight:bold;padding-top:3px}.about-wrap .feature-section img{border:0;margin:0 1.94% 10px 0;-webkit-border-radius:3px;border-radius:3px}.about-wrap .feature-section img.image-50{max-width:50%}.about-wrap .feature-section img.image-30{max-width:31.2381%}.ie8 .about-wrap .feature-section img{border-width:1px;border-style:solid}.about-wrap .feature-section.three-col{padding-top:15px;margin-bottom:0}.about-wrap .feature-section.three-col div{width:30%;margin-right:4.999999999%;float:left}.about-wrap .feature-section.three-col h4{margin:0 0 .6em 0}.about-wrap .feature-section.three-col img{margin:.5em 0 .5em 5px;max-width:100%;float:none}.ie8 .about-wrap .feature-section.three-col img{margin-left:0}.about-wrap .feature-section.three-col .last-feature{margin-right:0}.about-wrap .three-col-images{text-align:center}.about-wrap .three-col-images img{margin:0 0 10px}.about-wrap .three-col-images .last-feature{float:right}.about-wrap .three-col-images .first-feature{float:left}.about-wrap .feature-section.images-stagger-right img{float:right;margin:0 5px 12px 12px}.about-wrap .feature-section.images-stagger-left img{float:left;margin:0 12px 12px 5px}@media only screen and (max-width:900px){.about-wrap .feature-section.images-stagger-left img,.about-wrap .feature-section.images-stagger-right img{clear:both}}.about-wrap .return-to-dashboard{margin:30px 0 0 -5px;font-size:14px;font-weight:bold}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap h4.wp-people-group{margin-top:2.6em;font-size:16px}.about-wrap ul.wp-people-group{overflow:hidden;padding:5px;margin:0 -15px 0 -5px}.about-wrap ul.compact{margin-bottom:0}.about-wrap li.wp-person{float:left;margin-right:10px}.about-wrap li.wp-person img.gravatar{float:left;margin:0 10px 10px 0;padding:2px;width:60px;height:60px}.about-wrap ul.compact li.wp-person img.gravatar{width:30px;height:30px}.about-wrap li.wp-person{height:70px;width:280px;padding-bottom:15px}.about-wrap ul.compact li.wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap li.wp-person a.web{display:block;margin:6px 0 2px;font-size:16px;text-decoration:none}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:bold}.freedoms-php .about-wrap ol p{font-weight:normal;margin:.6em 0}body.full-overlay-active{overflow:hidden}.wp-full-overlay{background:#fff;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%;min-width:0}.wp-full-overlay-sidebar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:fixed;width:300px;height:100%;top:0;bottom:0;left:0;padding:0;margin:0;z-index:10;overflow:auto;background:#f5f5f5;border-right:1px solid rgba(0,0,0,0.2)}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{overflow:visible}.wp-full-overlay.collapsed,.wp-full-overlay.expanded .wp-full-overlay-sidebar{margin-left:0!important}.wp-full-overlay.expanded{margin-left:300px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-left:-300px}.wp-full-overlay-sidebar:after{content:'';display:block;position:absolute;top:0;bottom:0;right:0;width:3px;box-shadow:-5px 0 4px -4px rgba(0,0,0,0.1) inset;z-index:1000}.wp-full-overlay-main{position:absolute;left:0;right:0;top:0;bottom:0;height:100%}.wp-full-overlay-sidebar .wp-full-overlay-header,.wp-full-overlay-sidebar .wp-full-overlay-footer{position:absolute;left:0;right:0;height:45px;padding:0 20px;line-height:45px;z-index:10;margin:0}.wp-full-overlay-sidebar .wp-full-overlay-header{top:0;border-top:0;border-bottom:1px solid #fff;box-shadow:inset 0 -1px 0 0 #dfdfdf}.wp-full-overlay-sidebar .wp-full-overlay-footer{bottom:0;border-bottom:0;border-top:1px solid #dfdfdf;box-shadow:inset 0 1px 0 0 #fff}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;left:0;right:0;overflow:auto}.wp-full-overlay .close-full-overlay{text-decoration:none}.wp-full-overlay .collapse-sidebar{position:absolute;bottom:12px;left:0;z-index:50;display:block;width:19px;height:19px;margin-left:15px;padding:0;border-radius:50%;text-decoration:none}.wp-full-overlay.collapsed .collapse-sidebar{position:absolute;left:100%}.wp-full-overlay .collapse-sidebar-arrow{position:absolute;margin-top:2px;margin-left:2px;display:block;width:15px;height:15px;background:transparent url('../images/arrows.png') no-repeat 0 -72px}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:0 -108px}.wp-full-overlay .collapse-sidebar-label{position:absolute;left:100%;color:#808080;line-height:20px;margin-left:10px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay .collapse-sidebar:hover .collapse-sidebar-label{color:#666}.wp-full-overlay,.wp-full-overlay-sidebar,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main{-webkit-transition-property:left,right,top,bottom,width,margin;-moz-transition-property:left,right,top,bottom,width,margin;-ms-transition-property:left,right,top,bottom,width,margin;-o-transition-property:left,right,top,bottom,width,margin;transition-property:left,right,top,bottom,width,margin;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-ms-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s}.no-customize-support .hide-if-no-customize,.customize-support .hide-if-customize{display:none}#customize-container{display:none;background:#fff;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%}.customize-active #customize-container{display:block}.customize-loading #customize-container iframe{opacity:0}.customize-loading #customize-container{background:#fff url("../images/wpspin_light.gif") no-repeat fixed center center}#customize-container iframe,#theme-installer iframe{height:100%;width:100%;z-index:20;-webkit-transition:opacity .3s;-moz-transition:opacity .3s;-ms-transition:opacity .3s;-o-transition:opacity .3s;transition:opacity .3s}#customize-container .collapse-sidebar{bottom:16px}#theme-installer{display:none}#theme-installer.single-theme{display:block}.install-theme-info{display:none;padding:10px 20px 20px}.single-theme .install-theme-info{padding-top:15px}#theme-installer .install-theme-info{display:block}.install-theme-info .theme-install{float:right;margin-top:18px}.install-theme-info .theme-name{font-size:16px;line-height:24px;margin-bottom:0}.install-theme-info .theme-screenshot{margin-top:15px;width:258px;border:1px solid #ccc}.install-theme-info .theme-details{overflow:hidden}.theme-details .theme-version{margin:15px 0;float:left}.theme-details .star-holder{margin:14px 0;float:right}.theme-details .theme-description{float:left;color:#777;line-height:20px}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%}#template div{margin-right:190px}p.pagenav{margin:0;display:inline}.pagenav span{font-weight:bold;margin:0 6px}.row-title{font-size:13px!important;font-weight:bold}.column-author img,.column-username img{float:left;margin-right:10px;margin-top:1px}.row-actions{visibility:hidden;padding:2px 0 0}.mobile .row-actions{visibility:visible}tr:hover .row-actions,div.comment-item:hover .row-actions{visibility:visible}.row-actions-visible{padding:2px 0 0}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto}.tagchecklist strong{margin-left:-8px;position:absolute}.tagchecklist span{margin-right:25px;display:block;float:left;font-size:11px;line-height:1.8em;white-space:nowrap;cursor:default}.tagchecklist span a{margin:6px 0 0 -9px;cursor:pointer;width:10px;height:10px;display:block;float:left;text-indent:-9999px;overflow:hidden;position:absolute}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:left}#poststuff h3,.metabox-holder h3{font-size:15px;font-weight:normal;padding:7px 10px;margin:0;line-height:1}#poststuff .inside{margin:6px 0 8px}#poststuff .inside #parent_id,.inline-edit-row #post_parent{max-width:100%}#post-visibility-select,#post-formats-select{line-height:1.5em;margin-top:3px}#poststuff #submitdiv .inside{margin:0;padding:0}#titlediv,#poststuff .postarea{margin-bottom:20px}#templateside ul li a{text-decoration:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:normal;line-height:24px}#sidemenu{margin:-30px 15px 0 315px;list-style:none;position:relative;float:right;padding-left:10px;font-size:12px}#sidemenu a{padding:0 7px;display:block;float:left;line-height:28px;border-top-width:1px;border-top-style:solid;border-bottom-width:1px;border-bottom-style:solid}#sidemenu li{display:inline;line-height:200%;list-style:none;text-align:center;white-space:nowrap;margin:0;padding:0}#sidemenu a.current{font-weight:normal;padding-left:6px;padding-right:6px;-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px;border-width:1px;border-style:solid}#sidemenu li a .count-0{display:none}.plugin-install #description,.plugin-install-network #description{width:60%}table .vers,table .column-visible,table .column-rating{text-align:left}.error-message{color:red;font-weight:bold}body.iframe{height:98%}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px}td.media-icon img{max-width:80px;max-height:60px}.list-ajax-loading{float:right;margin-right:9px;margin-top:-1px}.tablenav .list-ajax-loading{margin-top:7px}#howto{font-size:11px;margin:0 5px;display:block}.importers td{padding-right:14px}.importers{font-size:16px;width:auto}#namediv table{width:100%}#namediv td.first{width:10px;white-space:nowrap}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:0;margin:0;padding:0}fieldset{border:0;padding:0;margin:0}.post-categories{display:inline;margin:0;padding:0}.post-categories li{display:inline}.edit-box{display:none}h3:hover .edit-box{display:inline}.index-php form .input-text-wrap{background:#fff;border-style:solid;border-width:1px;padding:2px 3px;border-color:#ccc}#dashboard-widgets form .input-text-wrap input{border:0 none;outline:0;margin:0;padding:0;width:99%;color:#333}form .textarea-wrap{background:#fff;border-style:solid;border-width:1px;padding:2px;border-color:#ccc}#dashboard-widgets form .textarea-wrap textarea{border:0 none;padding:0;outline:0;width:99%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:0}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit input{margin:0}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets a{text-decoration:none}#dashboard-widgets h3 a{text-decoration:underline}#dashboard-widgets h3 .postbox-title-action{position:absolute;right:30px;padding:0;top:5px}#dashboard-widgets h4{font-weight:normal;font-size:13px;margin:0 0 .2em;padding:0}#dashboard_right_now p.sub,#dashboard_right_now .table,#dashboard_right_now .versions{margin:-12px}#dashboard_right_now .inside{font-size:12px;padding-top:20px}#dashboard_right_now p.sub{padding:5px 0 15px;color:#8f8f8f;font-size:14px;position:absolute;top:-17px;left:15px}#dashboard_right_now .table{margin:0;padding:0;position:relative}#dashboard_right_now .table_content{float:left;border-top:#ececec 1px solid;width:45%}#dashboard_right_now .table_discussion{float:right;border-top:#ececec 1px solid;width:45%}#dashboard_right_now table td{padding:3px 0;white-space:nowrap}#dashboard_right_now table tr.first td{border-top:0}#dashboard_right_now td.b{padding-right:6px;text-align:right;font-size:14px;width:1%}#dashboard_right_now td.b a{font-size:18px}#dashboard_right_now td.b a:hover{color:#d54e21}#dashboard_right_now .t{font-size:12px;padding-right:12px;padding-top:6px;color:#777}#dashboard_right_now .t a{white-space:nowrap}#dashboard_right_now .spam{color:red}#dashboard_right_now .waiting{color:#e66f00}#dashboard_right_now .approved{color:green}#dashboard_right_now .versions{padding:6px 10px 12px;clear:both}#dashboard_right_now a.button{float:right;clear:right;position:relative;top:-5px}#dashboard_recent_comments h3{margin-bottom:0}#dashboard_recent_comments .inside{margin-top:0}#dashboard_recent_comments .comment-meta .approve{font-style:italic;font-family:sans-serif;font-size:10px}#dashboard_recent_comments .subsubsub{float:none;white-space:normal}#the-comment-list{position:relative}#the-comment-list .comment-item{padding:1em 10px;border-top:1px solid}#the-comment-list .pingback{padding-left:9px!important}#the-comment-list .comment-item,#the-comment-list #replyrow{margin:0 -10px}#the-comment-list .comment-item:first-child{border-top:0}#the-comment-list .comment-item .avatar{float:left;margin:0 10px 5px 0}#the-comment-list .comment-item h4{line-height:1.7em;margin-top:-0.4em;color:#777}#the-comment-list .comment-item h4 cite{font-style:normal;font-weight:normal}#the-comment-list .comment-item blockquote,#the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#dashboard_recent_comments #the-comment-list .trackback blockquote,#dashboard_recent_comments #the-comment-list .pingback blockquote{display:block}#the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:12px}#dashboard_quick_press h4{font-family:sans-serif;float:left;width:5em;clear:both;font-weight:normal;text-align:right;font-size:12px}#dashboard_quick_press h4 label{margin-right:10px}#dashboard_quick_press .input-text-wrap,#dashboard_quick_press .textarea-wrap{margin:0 0 1em 5em}#dashboard_quick_press .wp-media-buttons{margin:0 0 .5em 5em;padding:0}#dashboard_quick_press .wp-media-buttons a{color:#777}#dashboard-widgets #dashboard_quick_press form p.submit{margin-left:4.6em}#dashboard-widgets #dashboard_quick_press form p.submit input{float:left}#dashboard-widgets #dashboard_quick_press form p.submit #save-post{margin:0 1em 0 10px}#dashboard-widgets #dashboard_quick_press form p.submit #publish{float:right}#dashboard-widgets #dashboard_quick_press form p.submit img.waiting{vertical-align:middle;visibility:hidden;margin:4px 6px 0 0}#dashboard_recent_drafts ul,#dashboard_recent_drafts p{margin:0;padding:0;word-wrap:break-word}#dashboard_recent_drafts ul{list-style:none}#dashboard_recent_drafts ul li{margin-bottom:1em}#dashboard_recent_drafts h4{line-height:1.7em;word-wrap:break-word}#dashboard_recent_drafts h4 abbr{font-weight:normal;font-family:sans-serif;font-size:12px;color:#999;margin-left:3px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:13px;line-height:1.7em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#999;font-size:12px;margin-left:3px}.rss-widget cite{display:block;text-align:right;margin:0 0 1em;padding:0}.rss-widget cite:before{content:'\2014'}#dashboard_plugins h4{line-height:1.7em}#dashboard_plugins h5{font-weight:normal;font-size:13px;margin:0;display:inline;line-height:1.4em}#dashboard_plugins h5 a{line-height:1.4em}#dashboard_plugins .inside span{font-size:12px;padding-left:5px}#dashboard_plugins p{margin:.3em 0 1.4em;line-height:1.4em}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:bold}#dashboard_browser_nag a{text-decoration:underline}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;color:#fff}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;text-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;background:transparent none;color:#fff}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag.browser-insecure a.browse-happy-link,#dashboard_browser_nag.browser-insecure a.update-browser-link{text-shadow:#871b15 0 1px 0}#dashboard_browser_nag a.browse-happy-link,#dashboard_browser_nag a.update-browser-link{text-shadow:#d29a04 0 1px 0}.login *{margin:0;padding:0}.login form{margin-left:8px;padding:26px 24px 46px;font-weight:normal;background:#fff;border:1px solid #e5e5e5;-moz-box-shadow:rgba(200,200,200,0.7) 0 4px 10px -1px;-webkit-box-shadow:rgba(200,200,200,0.7) 0 4px 10px -1px;box-shadow:rgba(200,200,200,0.7) 0 4px 10px -1px}.login form .forgetmenot{font-weight:normal;float:left;margin-bottom:0}.login .button-primary{font-size:13px!important;line-height:16px;padding:3px 10px;float:right}#login form p{margin-bottom:0}#login form p.submit{padding:0}.login label{color:#777;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login form p{margin-bottom:24px}.login h1 a{background-image:url('../images/wordpress-logo.png?ver=20120216');background-size:274px 63px;background-position:top center;background-repeat:no-repeat;width:326px;height:67px;text-indent:-9999px;overflow:hidden;padding-bottom:15px;display:block}@media only screen and (-webkit-min-device-pixel-ratio:1.5){.login h1 a{background-image:url('../images/wordpress-logo-2x.png?ver=20120412');background-size:274px 63px}.wp-badge{background-image:url('../images/wp-badge-2x.png?ver=20120516');background-size:173px 194px}}#login{width:320px;padding:114px 0 0;margin:auto}#login_error,.login .message{margin:0 0 16px 8px;padding:12px}.login #nav,.login #backtoblog{text-shadow:#fff 0 1px 0;margin:0 0 0 16px;padding:16px 16px 0}#backtoblog{padding:12px 16px 0}.login form .input,.login input[type="text"]{color:#555;font-weight:200;font-size:24px;line-height:1;width:100%;padding:3px;margin-top:2px;margin-right:6px;margin-bottom:16px;border:1px solid #e5e5e5;background:#fbfbfb;outline:0;-moz-box-shadow:inset 1px 1px 2px rgba(200,200,200,0.2);-webkit-box-shadow:inset 1px 1px 2px rgba(200,200,200,0.2);box-shadow:inset 1px 1px 2px rgba(200,200,200,0.2)}.login #pass-strength-result{width:250px;font-weight:bold;border-style:solid;border-width:1px;margin:12px 0 6px;padding:6px 5px;text-align:center}.mobile #login{padding:20px 0}.mobile #login form,.mobile #login .message,.mobile #login_error{margin-left:0}.mobile #login #nav,.mobile #login #backtoblog{margin-left:8px}.mobile #login h1 a{width:auto}#dashboard_right_now p.musub{margin-top:12px;border-top:1px solid #ececec;padding-left:16px;position:static}.rtl #dashboard_right_now p.musub{padding-left:0;padding-right:16px}#dashboard_right_now td.b a.musublink{font-size:16px}#dashboard_right_now div.musubtable{border-top:0}#dashboard_right_now div.musubtable .t{white-space:normal}.wp-list-table .site-deleted{background:#ff8573}.wp-list-table .site-spammed{background:#faafaa}.wp-list-table .site-archived{background:#ffebe8}.wp-list-table .site-mature{background:#fecac2}#nav-menus-frame{margin-left:300px}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-left:-300px;clear:both;float:left;padding-top:24px}.no-js #wpbody-content #menu-settings-column{padding-top:31px}#menu-settings-column .inside{clear:both}.metabox-holder-disabled .postbox{opacity:.5;filter:alpha(opacity=50)}.metabox-holder-disabled .button-controls .select-all{display:none}#wpbody{position:relative}#menu-management-liquid{float:left;min-width:100%}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:10px;border-width:1px 0;border-style:solid}#nav-menu-header,#nav-menu-footer{padding:0 10px}#nav-menu-header{border-bottom:1px solid}#nav-menu-footer{border-top:1px solid}.nav-menus-php #post-body div.updated,.nav-menus-php #post-body div.error{margin:0}.nav-menus-php #post-body-content{position:relative;float:none}#menu-management .menu-add-new abbr{font-weight:bold}#menu-management .nav-tabs-nav{margin:0 20px}#menu-management .nav-tabs-arrow{width:10px;padding:0 5px 4px;cursor:pointer;position:absolute;top:0;line-height:22px;font-size:18px;text-shadow:0 1px 0 #fff}#menu-management .nav-tabs-arrow-left{left:0}#menu-management .nav-tabs-arrow-right{right:0;text-align:right}#menu-management .nav-tabs-wrapper{width:100%;height:28px;margin-bottom:-1px;overflow:hidden}#menu-management .nav-tabs{padding-left:20px;padding-right:10px}.js #menu-management .nav-tabs{float:left;margin-left:0;margin-right:-400px}#menu-management .nav-tab{margin-bottom:0;font-size:14px}#select-nav-menu-container{text-align:right;padding:0 10px 3px 10px;margin-bottom:5px}#select-nav-menu{width:100px;display:inline}#menu-name-label{margin-top:-2px}#wpbody .open-label{display:block;float:left}#wpbody .open-label span{padding-right:10px}.js .input-with-default-title{font-style:italic}#menu-management .inside{padding:0 10px}.postbox .howto input{width:180px;float:right}.customlinkdiv .howto input{width:200px}#nav-menu-theme-locations .howto select{width:100%}#nav-menu-theme-locations .button-controls{text-align:right}.add-menu-item-view-all{height:400px}#menu-container .submit{margin:0 0 10px;padding:0}.nav-menus-php .meta-sep,.nav-menus-php .submitdelete,.nav-menus-php .submitcancel{display:block;float:left;margin:4px 0;line-height:15px}.meta-sep{padding:0 2px}#cancel-save{text-decoration:underline;font-size:12px;margin-left:20px;margin-top:5px}.list-controls{float:left;margin-top:5px}.add-to-menu{float:right}.postbox img.waiting{display:none;vertical-align:middle}.button-controls{clear:both;margin:10px 0}.show-all,.hide-all{cursor:pointer}.hide-all{display:none}#menu-name{width:270px}#manage-menu .inside{padding:0}#available-links dt{display:block}#add-custom-link .howto{font-size:12px}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px}.menu-item-textbox{width:180px}.nav-menus-php .howto span{margin-top:4px;display:block;float:left}.quick-search{width:190px}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px}.nav-menus-php .list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px}.nav-menus-php .postbox p.submit{margin-bottom:0}.nav-menus-php .list li{display:none;margin:0;margin-bottom:5px}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block}.nav-menus-php .list li .menu-item-title input{margin-right:3px;margin-top:-3px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{padding:1em 0}.menu ul{width:100%}.menu li{margin-bottom:0;position:relative}.menu-item-bar{clear:both;line-height:1.5em;position:relative;margin:13px 0 0 0}.menu-item-handle{border:1px solid #dfdfdf;position:relative;padding-left:10px;height:auto;width:400px;line-height:35px;text-shadow:0 1px 0 #fff;overflow:hidden;word-wrap:break-word}#menu-to-edit .menu-item-invalid .menu-item-handle{background-color:#f6c9cc;background-image:-ms-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:-moz-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:-o-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:-webkit-gradient(linear,left bottom,left top,from(#f6c9cc),to(#fdf8ff));background-image:-webkit-linear-gradient(bottom,#f6c9cc,#fdf8ff);background-image:linear-gradient(bottom,#f6c9cc,#fdf8ff)}.menu-item-edit-active .menu-item-handle{-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.no-js .menu-item-edit-active .item-edit{display:none}.js .menu-item-handle{cursor:move}.menu li.deleting .menu-item-handle{background-image:none;text-shadow:0}.menu-item-handle .item-title{font-size:12px;font-weight:bold;padding:7px 0;line-height:20px;display:block;margin-right:13em}li.menu-item.ui-sortable-helper dl{margin-top:0}li.menu-item.ui-sortable-helper .menu-item-transport dl{margin-top:13px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px}.menu-item-depth-0{margin-left:0}.menu-item-depth-1{margin-left:30px}.menu-item-depth-2{margin-left:60px}.menu-item-depth-3{margin-left:90px}.menu-item-depth-4{margin-left:120px}.menu-item-depth-5{margin-left:150px}.menu-item-depth-6{margin-left:180px}.menu-item-depth-7{margin-left:210px}.menu-item-depth-8{margin-left:240px}.menu-item-depth-9{margin-left:270px}.menu-item-depth-10{margin-left:300px}.menu-item-depth-11{margin-left:330px}.menu-item-depth-0 .menu-item-transport{margin-left:0}.menu-item-depth-1 .menu-item-transport{margin-left:-30px}.menu-item-depth-2 .menu-item-transport{margin-left:-60px}.menu-item-depth-3 .menu-item-transport{margin-left:-90px}.menu-item-depth-4 .menu-item-transport{margin-left:-120px}.menu-item-depth-5 .menu-item-transport{margin-left:-150px}.menu-item-depth-6 .menu-item-transport{margin-left:-180px}.menu-item-depth-7 .menu-item-transport{margin-left:-210px}.menu-item-depth-8 .menu-item-transport{margin-left:-240px}.menu-item-depth-9 .menu-item-transport{margin-left:-270px}.menu-item-depth-10 .menu-item-transport{margin-left:-300px}.menu-item-depth-11 .menu-item-transport{margin-left:-330px}body.menu-max-depth-0{min-width:950px!important}body.menu-max-depth-1{min-width:980px!important}body.menu-max-depth-2{min-width:1010px!important}body.menu-max-depth-3{min-width:1040px!important}body.menu-max-depth-4{min-width:1070px!important}body.menu-max-depth-5{min-width:1100px!important}body.menu-max-depth-6{min-width:1130px!important}body.menu-max-depth-7{min-width:1160px!important}body.menu-max-depth-8{min-width:1190px!important}body.menu-max-depth-9{min-width:1220px!important}body.menu-max-depth-10{min-width:1250px!important}body.menu-max-depth-11{min-width:1280px!important}.item-type{font-size:12px;padding-right:10px}.item-controls{font-size:12px;position:absolute;right:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls a:hover{cursor:pointer}.item-controls .item-order{padding-right:10px}.nav-menus-php .item-edit{position:absolute;right:-20px;top:0;display:block;width:30px;height:36px;overflow:hidden;text-indent:-999em;border-bottom:1px solid;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.menu-instructions-inactive{display:none}.menu-item-settings{display:block;width:400px;padding:10px 0 10px 10px;border:solid;border-width:0 1px 1px 1px;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.menu-item-edit-active .menu-item-settings{display:block}.menu-item-edit-inactive .menu-item-settings{display:none}.add-menu-item-pagelinks{margin:.5em auto;text-align:center}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;font-size:12px;font-style:italic}.link-to-original a{padding-left:4px;font-style:normal}.hidden-field{display:none}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-right:10px;float:left}.description-thin{width:190px;height:40px}.description-wide{width:390px}.menu-item-actions{padding-top:15px}#cancel-save{cursor:pointer}.nav-menus-php .major-publishing-actions{clear:both;padding:3px 0 5px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:right;float:right;line-height:23px;margin:5px 0 1px}.nav-menus-php .major-publishing-actions .delete-action{vertical-align:middle;text-align:left;float:left;padding-right:15px;margin-top:5px}.menu-name-label span,.auto-add-pages label{font-size:12px;font-style:normal}.menu-name-label{margin-right:15px}.auto-add-pages input{margin-top:0}.auto-add-pages{margin-top:4px;float:left}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid;padding:1px 2px;text-decoration:none}.nav-menus-php .major-publishing-actions .form-invalid{padding-left:4px;margin-left:-4px;border:0 none}#menu-item-name-wrap:after,#menu-item-url-wrap:after,#menu-name-label:after,#menu-settings-column .inside:after,#nav-menus-frame:after,.nav-menus-php #post-body-content:after,.nav-menus-php .button-controls:after,.nav-menus-php .major-publishing-actions:after,.nav-menus-php .menu-item-settings:after{clear:both;content:".";display:block;height:0;visibility:hidden}#nav-menus-frame,.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block}div.star-holder{position:relative;height:17px;width:100px;background:url('../images/stars.png?ver=20120307') repeat-x bottom left}div.star-holder .star-rating{background:url('../images/stars.png?ver=20120307') repeat-x top left;height:17px;float:left}div.action-links{font-weight:normal;margin:6px 0 0}#plugin-information-header{margin:0;padding:0 5px;font-weight:bold;position:relative;border-bottom-width:1px;border-bottom-style:solid;height:2.5em}#plugin-information ul#sidemenu{font-weight:normal;margin:0 5px;position:absolute;left:0;bottom:-1px}#plugin-information p.action-button{width:100%;padding-bottom:0;margin-bottom:0;margin-top:10px;-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px}#plugin-information .action-button a{text-align:center;font-weight:bold;text-decoration:none;display:block;line-height:2em}#plugin-information h2{clear:none!important;margin-right:200px}#plugin-information .fyi{margin:0 10px 50px;width:210px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-right:0}#plugin-information .fyi h2.mainheader{padding:5px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}#plugin-information .fyi ul{padding:10px 5px 10px 7px;margin:0;list-style:none;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}#plugin-information .fyi li{margin-right:0}#plugin-information #section-holder{padding:10px}#plugin-information .section ul,#plugin-information .section ol{margin-left:16px;list-style-type:square;list-style-image:none}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;max-width:100%;width:auto;height:auto}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px;padding-bottom:2em}#plugin-information #section-screenshots ol,#plugin-information .updated,#plugin-information pre{margin-right:215px}#plugin-information pre{padding:7px;overflow:auto}body.press-this{color:#333;margin:0;padding:0;min-width:675px;min-height:400px}img{border:0}.press-this #wphead{height:32px;margin-left:0;margin-right:0;margin-bottom:5px}.press-this #header-logo{float:left;margin:7px 7px 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.press-this #wphead h1{font-weight:normal;font-size:16px;line-height:32px;margin:0;float:left}.press-this #wphead h1 a{text-decoration:none}.press-this #wphead h1 a:hover{text-decoration:underline}.press-this #message{margin:10px 0}.press-this-sidebar{float:right;width:200px;padding-top:10px}.press-this #title{margin-left:0;margin-right:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.press-this .tagchecklist span a{background:transparent url(../images/xit.gif) no-repeat 0 0}.press-this #titlediv{margin:0}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 0}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block}.press-this #poststuff{margin:0 10px 10px}#poststuff #editor-toolbar{height:30px}div.zerosize{border:0 none;height:0;margin:0;overflow:hidden;padding:0;width:0}.posting{margin-right:212px;position:relative}.press-this .inner-sidebar{width:200px}.press-this .inner-sidebar .sleeve{padding-top:5px}.press-this #submitdiv p{margin:0;padding:6px}.press-this #submitdiv #publishing-actions{border-bottom:1px solid #dfdfdf}.press-this #publish{float:right}.press-this #poststuff h2,.press-this #poststuff h3{font-size:14px;line-height:1}.press-this #tagsdiv-post_tag h3,.press-this #categorydiv h3{cursor:pointer}.press-this #submitdiv h3{cursor:default}h3.tb{text-shadow:0 1px 0 #fff;font-weight:bold;font-size:12px;margin-left:5px}#TB_window{border:1px solid #333}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0}.postbox:hover .handlediv,.stuffbox:hover .handlediv{background:transparent url(../images/arrows.png) no-repeat 6px 7px}.press-this #submitdiv:hover .handlediv{background:0}.tbtitle{font-size:1.7em;outline:0;padding:3px 4px;border-color:#dfdfdf}.press-this .actions{float:right;margin:-19px 0 0}.press-this #extra-fields .actions{margin:-25px -7px 0 0}.press-this .actions li{float:left;list-style:none;margin-right:10px}#extra-fields .button{margin-right:5px}#photo_saving{margin:0 8px 8px;vertical-align:middle}#img_container_container{overflow:auto}#extra-fields{margin-top:10px;position:relative}#extra-fields h2{margin:12px}#waiting{margin-top:10px}#extra-fields .postbox{margin-bottom:5px}#extra-fields .titlewrap{padding:0;overflow:auto;height:100px}#img_container a{display:block;float:left;overflow:hidden;vertical-align:center}#img_container img,#img_container a{width:68px;height:68px}#img_container img{border:0;background-color:#f4f4f4;cursor:pointer}#img_container a,#img_container a:link,#img_container a:visited{border:1px solid #ccc;display:block;position:relative}#img_container a:hover,#img_container a:active{border-color:#000;z-index:1000;border-width:2px;margin:-1px}#embed-code{width:100%;height:98px}.press-this .categorydiv div.tabs-panel{height:100px}.press-this .tagsdiv .newtag{width:130px}.press-this #content{margin:5px 0;padding:0 5px;border:0 none;height:357px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:transparent}#saving{display:inline;vertical-align:middle}#TB_ajaxContent #options{position:absolute;top:20px;right:25px;padding:5px}#TB_ajaxContent h3{margin-bottom:.25em}.error a{text-decoration:underline}.updated a{text-decoration:none;padding-bottom:2px}.taghint{color:#aaa;margin:-17px 0 0 7px;visibility:hidden}input.newtag ~ div.taghint{visibility:visible}input.newtag:focus ~ div.taghint{visibility:hidden}#mce_fullscreen_container{background:#fff}#photo-add-url-div input[type="text"]{width:300px}.alignleft h3{margin:0}h3 span{font-weight:normal}#template textarea{font-family:Consolas,Monaco,monospace;font-size:12px;width:97%;background:#f9f9f9;outline:0}#template p{width:97%}#templateside{float:right;width:190px;word-wrap:break-word}#templateside h3,#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside ol,#templateside ul{margin:.5em;padding:0}#templateside li{margin:4px 0}#templateside ul li a span.highlight{display:block}.nonessential{font-size:11px;font-style:italic;padding-left:12px}.highlight{padding:3px 3px 3px 12px;margin-left:-12px;font-weight:bold;border:0 none}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:top;font-weight:bold}.fileedit-sub{padding:10px 0 8px;line-height:180%}#filter-box{clear:both}.feature-filter{padding:8px 12px 0}.feature-filter .feature-group{float:left;margin:5px 10px 10px}.feature-filter .feature-group li{display:inline;float:left;list-style-type:none;padding-right:25px;width:150px}.feature-container{width:100%;overflow:auto;margin-bottom:10px}div.widget-liquid-left{float:left;clear:left;width:100%;margin-right:-325px}div#widgets-left{margin-left:5px;margin-right:325px}div#widgets-right{width:285px;margin:0 auto}div.widget-liquid-right{float:right;clear:right;width:300px}.widget-liquid-right .widget,.inactive-sidebar .widget,.widget-liquid-right .sidebar-description{width:250px;margin:0 auto 20px;overflow:hidden}.widget-liquid-right .sidebar-description{margin-bottom:10px}.inactive-sidebar .widget{margin:0 10px 20px;float:left}div.sidebar-name h3{font-weight:normal;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap}div.sidebar-name{cursor:pointer;font-size:13px;border-width:1px;border-style:solid;-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px}.js .closed .sidebar-name{-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.widget-liquid-right .widgets-sortables,#widgets-left .widget-holder{border-width:0 1px 1px;border-style:none solid solid;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.js .closed .widgets-sortables,.js .closed .widget-holder{display:none}.widget-liquid-right .widgets-sortables{padding:15px 0 0}#available-widgets .widget-holder{padding:7px 5px 0}#available-widgets .widget{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.inactive-sidebar{padding:5px 5px 0}#widget-list .widget{width:250px;margin:0 10px 15px;border:0 none;background:transparent;float:left}#widget-list .widget-description{padding:5px 8px}.widget-placeholder{border-width:1px;border-style:dashed;margin:0 auto 20px;height:26px;width:250px}.inactive-sidebar .widget-placeholder{margin:0 10px 20px;float:left}div.widgets-holder-wrap{padding:0;margin:10px 0 20px}#widgets-left #available-widgets{background-color:transparent;border:0 none}ul#widget-list{list-style:none;margin:0;padding:0;min-height:100px}.widget .widget-top{margin-bottom:-1px;font-size:12px;font-weight:bold;height:26px;overflow:hidden}.widget-top .widget-title{padding:7px 9px}.widget-top .widget-title-action{float:right}a.widget-action{display:block;width:24px;height:26px}#available-widgets a.widget-action{display:none}.widget-top a.widget-action{background:transparent url(../images/arrows.png) no-repeat 4px 6px}.widget-top a.widget-action:hover{background:transparent url(../images/arrows-dark.png) no-repeat 4px 6px}.widget .widget-inside,.widget .widget-description{padding:12px 12px 10px;font-size:12px;line-height:16px}.widget-inside,.widget-description{display:none}#available-widgets .widget-description{display:block}.widget .widget-inside p{margin:0 0 1em;padding:0}.widget-title h4{margin:0;line-height:1;overflow:hidden;white-space:nowrap}.widgets-sortables{min-height:90px}.widget-control-actions{margin-top:8px}.widget-control-actions a{text-decoration:none}.widget-control-actions a:hover{text-decoration:underline}.widget-control-actions .ajax-feedback{padding-bottom:3px}.widget-control-actions div.alignleft{margin-top:6px}div#sidebar-info{padding:0 1em;margin-bottom:1em;font-size:12px}.widget-title a,.widget-title a:hover{text-decoration:none;border-bottom:0}.widget-control-edit{display:block;font-size:12px;font-weight:normal;line-height:26px;padding:0 8px 0 0}a.widget-control-edit{text-decoration:none}.widget-control-edit .add,.widget-control-edit .edit{display:none}#available-widgets .widget-control-edit .add,#widgets-right .widget-control-edit .edit,.inactive-sidebar .widget-control-edit .edit{display:inline}.editwidget{margin:0 auto 15px}.editwidget .widget-inside{display:block;padding:10px}.inactive p.description{margin:5px 15px 10px}#available-widgets p.description{margin:0 12px 12px}.widget-position{margin-top:8px}.inactive{padding-top:2px}.sidebar-name-arrow{float:right;height:29px;width:26px}.widget-title .in-widget-title{font-size:12px;white-space:nowrap}#removing-widget{display:none;font-weight:normal;padding-left:15px;font-size:12px;line-height:1}.widget-control-noform,#access-off,.widgets_access .widget-action,.widgets_access .sidebar-name-arrow,.widgets_access #access-on,.widgets_access .widget-holder .description{display:none}.widgets_access .widget-holder,.widgets_access #widget-list{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access #wpbody-content .widget-title-action,.widgets_access #wpbody-content .widget-control-edit,.widgets_access .closed .widgets-sortables,.widgets_access .closed .widget-holder{display:block}.widgets_access .closed .sidebar-name{-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}@media only screen and (max-width:768px){#col-left{width:100%}#col-right{width:100%}}@media only screen and (min-width:769px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:860px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (min-width:980px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:768px){#col-left{width:100%}#col-right{width:100%}.form-field input,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}.locale-zh-cn .howto,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn #utc-time,.locale-zh-cn #local-time,.locale-zh-cn p.install-help,.locale-zh-cn p.help,.locale-zh-cn p.description,.locale-zh-cn span.description,.locale-zh-cn .form-wrap p{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #wp-fullscreen-tagline{font-family:KaiTi,"楷体",sans-serif}.locale-zh-cn #wp-fullscreen-modes a{font-size:12px}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-ru-ru #dashboard_quick_press .input-text-wrap,.locale-ru-ru #dashboard_quick_press .textarea-wrap,.locale-ru-ru #dashboard_quick_press .wp-media-buttons{margin-left:5.7em}.locale-ru-ru #dashboard_quick_press h4{width:5.7em}.locale-ru-ru #dashboard-widgets #dashboard_quick_press form p.submit{margin-left:5.3em}.locale-ru-ru .inline-edit-row fieldset label span.title{width:auto;min-width:5em}.locale-ru-ru.press-this .posting{margin-right:257px}.locale-ru-ru.press-this #photo-add-url-div input[type="text"]{width:255px}.locale-ru-ru.press-this #side-sortables{width:245px}.locale-lt-lt #dashboard_quick_press .input-text-wrap,.locale-lt-lt #dashboard_quick_press .textarea-wrap,.locale-lt-lt #dashboard_quick_press .wp-media-buttons{margin-left:7em}.locale-lt-lt #dashboard_quick_press h4{width:7em}.locale-lt-lt .inline-edit-row fieldset label span.title{width:8em}.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em} \ No newline at end of file diff --git a/wp-admin/css/wp-admin.dev.css b/wp-admin/css/wp-admin.dev.css index 9051f8362..8371546d3 100644 --- a/wp-admin/css/wp-admin.dev.css +++ b/wp-admin/css/wp-admin.dev.css @@ -39,7 +39,9 @@ TABLE OF CONTENTS: 20.0 - Settings 21.0 - Admin Footer 22.0 - About Pages -23.0 - Misc +23.0 - Full Overlay w/ Sidebar +24.0 - Customize Loader +25.0 - Misc ------------------------------------------------------------------------*/ @@ -102,6 +104,7 @@ TABLE OF CONTENTS: } /* inner 2 column liquid layout */ + .inner-sidebar { float: right; clear: right; @@ -136,11 +139,8 @@ TABLE OF CONTENTS: .has-right-sidebar #post-body-content { margin-right: 300px; -} - -#post-body-content #side-sortables.empty-container { - border: 0 none; - height: 0; + float: none; + width: auto; } /* 2 columns main area */ @@ -208,6 +208,10 @@ TABLE OF CONTENTS: /* include margin and padding in the width calculation of input and textarea */ input[type="text"], input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], textarea { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; @@ -217,7 +221,17 @@ textarea { input[type="checkbox"], input[type="radio"] { - vertical-align: text-bottom; + vertical-align: text-top; + padding: 0; + margin: 1px 0 0; +} + +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration { + display: none; } /* general */ @@ -630,53 +644,6 @@ div.error p { } -/* =CSS 3 transitions --------------------------------------------------------------- */ - -.fade-1000, -.fade-600, -.fade-400, -.fade-300 { - opacity: 0; - -moz-transition-property: opacity; - -webkit-transition-property: opacity; - -o-transition-property: opacity; - transition-property: opacity; -} - -.fade-1000 { - -moz-transition-duration: 1s; - -webkit-transition-duration: 1s; - -o-transition-duration: 1s; - transition-duration: 1s; -} - -.fade-600 { - -moz-transition-duration: 0.6s; - -webkit-transition-duration: 0.6s; - -o-transition-duration: 0.6s; - transition-duration: 0.6s; -} - -.fade-400 { - -moz-transition-duration: 0.4s; - -webkit-transition-duration: 0.4s; - -o-transition-duration: 0.4s; - transition-duration: 0.4s; -} - -.fade-300 { - -moz-transition-duration: 0.3s; - -webkit-transition-duration: 0.3s; - -o-transition-duration: 0.3s; - transition-duration: 0.3s; -} - -.fade-trigger { - opacity: 1; -} - - /*------------------------------------------------------------------------------ 1.0 - Text Styles ------------------------------------------------------------------------------*/ @@ -837,6 +804,10 @@ input.small-text { width: 50px; } +input[type="number"].small-text { + width: 60px; +} + #doaction, #doaction2, #post-query-submit { @@ -892,6 +863,47 @@ p.search-box { margin: 0; } +input[type="text"].ui-autocomplete-loading { + background: transparent url('../images/loading.gif') no-repeat right center; + visibility: visible; +} + +ul#add-to-blog-users { + margin: 0 0 0 14px; +} + +.ui-autocomplete-input.open { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-width: 1px; + border-style: solid; +} + +.ui-autocomplete li { + margin-bottom: 0; + white-space: nowrap; + text-align: left; +} + +.ui-autocomplete li a { + display: block; + height: 100%; + padding: 4px 10px; +} + +.ui-autocomplete li a.ui-state-hover { + cursor: pointer; +} /*------------------------------------------------------------------------------ 3.0 - Actions @@ -900,7 +912,8 @@ p.search-box { #major-publishing-actions { padding: 10px 10px 8px; clear: both; - border-top: none; + border-top: 1px solid #f5f5f5; + margin-top: -2px; } #delete-action { @@ -916,28 +929,6 @@ p.search-box { line-height: 23px; } -#post-body #minor-publishing { - padding-bottom: 10px; -} - -#post-body #misc-publishing-actions { - padding: 0; -} - -#post-body .misc-pub-section { - border-right-width: 1px; - border-right-style: solid; - border-top: 0; - border-bottom: 0; - min-height: 30px; - float: left; - max-width: 32%; -} - -#post-body .misc-pub-section-last { - border-right: 0; -} - #misc-publishing-actions { padding: 6px 0 0; } @@ -951,6 +942,7 @@ p.search-box { .misc-pub-section:first-child { border-top-width: 0; } + .misc-pub-section-last { border-bottom-width: 0; } @@ -1087,261 +1079,6 @@ form.upgrade .hint { } -/* Distraction Free Writing mode - * =Overlay Styles --------------------------------------------------------------- */ -.fullscreen-overlay { - z-index: 149999; - display: none; - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - filter: inherit; -} - -.fullscreen-active .fullscreen-overlay, -.fullscreen-active #wp-fullscreen-body { - display: block; -} - -.fullscreen-fader { - z-index: 200000; -} - -.fullscreen-active .fullscreen-fader { - display: none; -} - -/* =Overlay Body --------------------------------------------------------------- */ -#wp-fullscreen-body { - width: 100%; - z-index: 150005; - display: none; - position: absolute; - top: 0; - left: 0; -} - -#wp-fullscreen-wrap { - margin: 0 auto 50px; - position: relative; - padding-top: 60px; -} - -#wp-fullscreen-title { - font-size: 1.7em; - line-height: 100%; - outline: medium none; - padding: 6px 7px; - width: 100%; - margin-bottom: 30px; -} - -#wp-fullscreen-container { - padding: 4px 10px 50px; -} - -#wp-fullscreen-title, -#wp-fullscreen-container { - -webkit-border-radius: 0; - border-radius: 0; - border: 1px dashed transparent; - background: transparent; - -moz-transition-property: border-color; - -moz-transition-duration: 0.6s; - -webkit-transition-property: border-color; - -webkit-transition-duration: 0.6s; - -o-transition-property: border-color; - -o-transition-duration: 0.6s; - transition-property: border-color; - transition-duration: 0.6s; -} - -#wp_mce_fullscreen { - width: 100%; - min-height: 300px; - border: 0; - background: transparent; - font-family: Consolas, Monaco, monospace; - line-height: 1.6em; - padding: 0; - overflow-y: hidden; - outline: none; - resize: none; -} - -#wp-fullscreen-tagline { - color: #BBBBBB; - font-size: 18px; - float: right; - padding-top: 5px; -} - -/* =Top bar --------------------------------------------------------------- */ -#fullscreen-topbar { - position: fixed; - top: 0; - left: 0; - z-index: 150050; - border-bottom-style: solid; - border-bottom-width: 1px; - min-width: 800px; - width: 100%; - height: 40px; -} - -#wp-fullscreen-toolbar { - padding: 6px 10px 0; - clear: both; - max-width: 1100px; - min-width: 820px; - margin: 0 auto; -} - -#wp-fullscreen-mode-bar, -#wp-fullscreen-button-bar, -#wp-fullscreen-close, -#wp-fullscreen-count { - float: left; -} - -#wp-fullscreen-save { - float: right; - padding: 2px 2px 0 5px; -} - -#wp-fullscreen-count, -#wp-fullscreen-close { - padding-top: 5px; -} - -#wp-fullscreen-central-toolbar { - margin: auto; - padding: 0; -} - -#wp-fullscreen-buttons > div { - float: left; -} - -#wp-fullscreen-mode-bar { - padding: 1px 14px 0 0; -} - -#wp-fullscreen-modes a { - display: block; - font-size: 11px; - text-decoration: none; - float: left; - margin: 1px 0 0 0; - padding: 2px 6px 2px; - border-width: 1px 1px 1px 0; - border-style: solid; - border-color: #bbb; - color: #777; - text-shadow: 0 1px 0 #fff; - background-color: #f4f4f4; - background-image: -moz-linear-gradient(bottom, #e4e4e4, #f9f9f9); - background-image: -webkit-gradient(linear, left bottom, left top, from(#e4e4e4), to(#f9f9f9)); -} - -#wp-fullscreen-modes a:hover, -.wp-html-mode #wp-fullscreen-modes a:last-child, -.wp-tmce-mode #wp-fullscreen-modes a:first-child { - color: #333; - border-color: #999; - background-color: #eee; - background-image: -moz-linear-gradient(bottom, #f9f9f9, #e0e0e0); - background-image: -webkit-gradient(linear, left bottom, left top, from(#f9f9f9), to(#e0e0e0)); -} - -#wp-fullscreen-modes a:first-child { - border-width: 1px; - -webkit-border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} - -#wp-fullscreen-modes a:last-child { - -webkit-border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} - -#wp-fullscreen-buttons .active a { - background: inherit; -} - -#wp-fullscreen-buttons .hidden { - display: none; -} - -#wp-fullscreen-buttons .disabled { - opacity: 0.5; -} - -.wp-html-mode #wp-fullscreen-buttons div { - display: none; -} - -.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both { - display: block; -} - -#fullscreen-topbar.fullscreen-make-sticky { - display: block !important; -} - -#wp-fullscreen-save img { - vertical-align: middle; -} - -#wp-fullscreen-save img, -#wp-fullscreen-save span { - padding-right: 4px; - display: none; -} - -#wp-fullscreen-buttons .mce_image .mce_image { - background-image: url('../images/menu.png?ver=20111128'); - background-position: -124px -38px; -} - -#wp-fullscreen-buttons .mce_image .mce_image:hover { - background-position: -124px -6px; -} - -/* =Thickbox Adjustments --------------------------------------------------------------- */ -.fullscreen-active #TB_overlay { - z-index: 150100; -} - -.fullscreen-active #TB_window { - z-index: 150102; -} - -/* =TinyMCE Adjustments --------------------------------------------------------------- */ -#wp_mce_fullscreen_ifr { - background: transparent; -} - -#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst { - display : none; -} - -#wp-fullscreen-container .wp_themeSkin table td { - vertical-align: top; -} - - /*------------------------------------------------------------------------------ 6.0 - Admin Header ------------------------------------------------------------------------------*/ @@ -1384,7 +1121,7 @@ form.upgrade .hint { #screen-options-link-wrap, #contextual-help-link-wrap { float: right; - height: 22px; + height: 23px; padding: 0; margin: 0 0 0 6px; font-family: sans-serif; @@ -1399,10 +1136,15 @@ form.upgrade .hint { border-bottom-right-radius: 3px; } +#screen-meta-links .screen-meta-toggle { + position: relative; + top: -1px; +} + #screen-meta-links a.show-settings { text-decoration: none; z-index: 1; - padding: 0 16px 0 6px; + padding: 1px 16px 0 6px; height: 22px; line-height: 22px; font-size: 12px; @@ -1445,6 +1187,10 @@ form.upgrade .hint { margin: 0 5px 0 2px; } +.metabox-prefs .columns-prefs label input { + margin: 0 2px; +} + .metabox-prefs label a { display: none; } @@ -1664,7 +1410,7 @@ body.no-js #adminmenu .wp-menu-toggle, } .folded #adminmenu div.wp-menu-image { - width: 32px; + width: 30px; } #adminmenu li { @@ -1762,6 +1508,10 @@ body.no-js #adminmenu .wp-menu-toggle, z-index: 1001; } +.ie8 #adminmenu li.menu-top:hover .wp-menu-arrow { + display: none; +} + #adminmenu .wp-menu-arrow div { position: absolute; top: 7px; @@ -1966,9 +1716,127 @@ body.no-js #adminmenu .wp-menu-toggle, border-radius: 10px; } +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + #wpcontent, + #footer { + margin-left: 52px; + } -/* List table styles */ -.post-com-count-wrapper { + #adminmenuback, + #adminmenuwrap, + #adminmenu, + #adminmenu li.menu-top { + width: 32px; + } + + #adminmenu .wp-has-current-submenu .wp-submenu { + display: none; + position: absolute; + width: 145px; + z-index: 999; + overflow: hidden; + } + + #adminmenu .wp-has-current-submenu .wp-submenu.sub-open { + display: block; + } + + #adminmenu li .wp-submenu, + #adminmenu .wp-has-current-submenu .wp-submenu { + top: -5px; + left: 26px; + } + + #adminmenu li.focused.wp-has-current-submenu .wp-submenu, + #adminmenu .wp-has-current-submenu .wp-submenu.sub-open { + padding: 0 8px 8px 0; + } + + #adminmenu div.wp-submenu-head { + display: block; + } + + #adminmenu a.menu-top, + #adminmenu div.wp-menu-toggle { + display: none; + } + + #adminmenu div.wp-menu-image { + width: 30px; + } + + #adminmenu .wp-not-current-submenu li a { + padding-left: 12px; + } + + #adminmenu li li { + margin-left: 0; + } + + #adminmenu li li a { + padding-left: 0; + } + + .wp-menu-arrow { + -moz-transform: translate( 33px ); + -webkit-transform: translate( 33px ); + -o-transform: translate( 33px ); + -ms-transform: translate( 33px ); + transform: translate( 33px ); + } + + #adminmenu li.menu-top:hover .wp-menu-arrow { + display: none; + } + + #adminmenu li.current:hover .wp-menu-arrow, + #adminmenu li.menu-top.wp-menu-open:hover .wp-menu-arrow { + display: block; + z-index: 125; + } + + #adminmenu li.menu-top { + border-width: 1px 0; + border-style: solid none; + } + + #adminmenu .wp-submenu .wp-submenu-wrap { + margin-top: 3px; + } + + #adminmenu .wp-has-current-submenu { + margin-bottom: 1px; + } + + #adminmenu .wp-has-current-submenu.menu-top-last { + margin-bottom: 0; + } + + #adminmenu .wp-has-current-submenu .wp-submenu-wrap { + margin-top: 4px; + } + + #adminmenu .wp-submenu ul { + border-width: 0 0 0 1px; + border-style: solid; + } + + #adminmenu .wp-submenu a { + padding-left: 10px; + } + + #adminmenu a.wp-has-submenu { + margin-left: 40px; + } + + #collapse-menu { + display: none; + } +} + +/* List table styles */ +.post-com-count-wrapper { min-width: 22px; font-family: sans-serif; } @@ -2023,9 +1891,11 @@ strong .post-com-count { 8.0 - Layout Blocks ------------------------------------------------------------------------------*/ -body.admin-bar #wpcontent, -body.admin-bar #adminmenu { +html.wp-toolbar { padding-top: 28px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } .narrow { @@ -2054,18 +1924,184 @@ body.admin-bar #adminmenu { margin: 0.6em 0; } +/* Screens with postboxes */ .postbox-container { float: left; } +#dashboard-widgets.columns-1 .postbox-container { + width: 100%; +} + +#dashboard-widgets.columns-2 .postbox-container { + width: 49.5%; +} + +#dashboard-widgets.columns-2 #postbox-container-2, +#dashboard-widgets.columns-2 #postbox-container-3, +#dashboard-widgets.columns-2 #postbox-container-4 { + float: right; + width: 50.5%; +} + +#dashboard-widgets.columns-3 .postbox-container { + width: 33.5%; +} + +#dashboard-widgets.columns-3 #postbox-container-1 { + width: 33%; +} + +#dashboard-widgets.columns-3 #postbox-container-3, +#dashboard-widgets.columns-3 #postbox-container-4 { + float: right; +} + +#dashboard-widgets.columns-4 .postbox-container { + width: 25%; +} + .postbox-container .meta-box-sortables { - min-height: 350px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.postbox-container .meta-box-sortables:empty { + min-height: 0; + height: 0; } -.postbox-container .meta-box-sortables.empty-container, -#side-sortables.empty-container { +.metabox-holder .postbox-container .empty-container, +#post-body.columns-2 #side-sortables:empty { border: 3px dashed #CCCCCC; - height: 350px; + height: 250px; +} + +.metabox-holder.columns-1 .postbox-container .empty-container, +.columns-2 #postbox-container-3 .empty-container, +.columns-2 #postbox-container-4 .empty-container, +.columns-3 #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +#poststuff { + padding-top: 10px; +} + +#poststuff #post-body { + padding: 0; +} + +#post-body-content { + width: 100%; + float: left; +} + +#poststuff .postbox-container { + width: 100%; +} + +#poststuff #post-body.columns-2 { + margin-right: 300px; +} + +#post-body.columns-2 #postbox-container-1 { + float: right; + margin-right: -300px; + width: 280px; +} + +#post-body.columns-2 #side-sortables { + min-height: 250px; +} + +/* one column on the dash */ +@media only screen and (max-width: 799px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 100%; + } + + #wpbody-content .metabox-holder .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +/* two columns on the dash, but keep the setting if one is selected */ +@media only screen and (min-width: 800px) and (max-width: 1200px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; + } + + #wpbody-content #dashboard-widgets #postbox-container-2, + #wpbody-content #dashboard-widgets #postbox-container-3, + #wpbody-content #dashboard-widgets #postbox-container-4 { + float: right; + width: 50.5%; + } + + #dashboard-widgets.metabox-holder .postbox-container .empty-container, + #dashboard-widgets #postbox-container-3 .empty-container, + #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } + + #wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container { + width: 100%; + } + + #wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } + + /* show the radio buttons for column prefs only for one or two columns */ + .index-php .screen-layout, + .index-php .columns-prefs { + display: block; + } + + .columns-prefs .columns-prefs-3, + .columns-prefs .columns-prefs-4 { + display: none; + } +} + +/* one column on the post write/edit screen */ +@media only screen and (max-width: 850px) { + #wpbody-content #poststuff #post-body { + margin: 0; + } + + #wpbody-content #post-body.columns-2 #postbox-container-1 { + margin-right: 0; + width: 100%; + } + + #poststuff #postbox-container-1 .empty-container, + #poststuff #postbox-container-1 #side-sortables:empty { + border: 0 none; + height: 0; + min-height: 0; + } + + #poststuff #post-body.columns-2 #side-sortables { + min-height: 0; + } + + /* hide the radio buttons for column prefs */ + .screen-layout, + .columns-prefs { + display: none; + } } .postbox .hndle { @@ -2121,6 +2157,10 @@ body.admin-bar #adminmenu { user-select: none; } +.stuffbox h3 { + cursor: auto; +} + .postbox .inside, .stuffbox .inside { padding: 0 10px; @@ -2156,6 +2196,10 @@ body.admin-bar #adminmenu { 9.0 - Dashboard ------------------------------------------------------------------------------*/ +#dashboard-widgets-wrap { + margin: 0 -8px; +} + #wpbody-content .metabox-holder { padding-top: 10px; } @@ -2226,16 +2270,16 @@ body.admin-bar #adminmenu { } .welcome-panel .welcome-panel-close:before { - background: url('../images/xit.gif') 0 17% no-repeat; - content: ' '; - height: 100%; - width: 10px; - left: -12px; - position: absolute; + background: url('../images/xit.gif') 0 17% no-repeat; + content: ' '; + height: 100%; + width: 10px; + left: -12px; + position: absolute; } .welcome-panel .welcome-panel-close:hover:before { - background-position: 100% 17%; + background-position: 100% 17%; } .welcome-panel .wp-badge { @@ -2261,7 +2305,7 @@ body.admin-bar #adminmenu { clear: both; overflow: hidden; position: relative; - padding-left: 25px; + padding-left: 26px; } .welcome-panel .welcome-panel-column { @@ -2344,7 +2388,6 @@ table.fixed { width: 80px; } -#commentsdiv .fixed .column-author, #comments-form .fixed .column-author { width: 20%; } @@ -2354,28 +2397,49 @@ table.fixed { padding: 0; } -#commentsdiv.postbox .inside .row-actions { +#commentsdiv .inside .row-actions { line-height:18px; } -#commentsdiv.postbox .inside td { - padding:1em 10px; +#commentsdiv .inside .column-author { + width: 25%; +} + +#commentsdiv .column-comment p { + margin: 0.6em 0; + padding: 0; +} + +#commentsdiv #replyrow td { + padding: 0; +} + +#commentsdiv p { + padding: 8px 10px; + margin: 0; +} + +#commentsdiv #add-new-comment { + border-width: 0 0 1px; + border-style: none none solid; } -#commentsdiv.postbox .inside .column-author { - width:33%; +#commentsdiv .comments-box { + border: 0 none; } -#commentsdiv.postbox .inside p { - margin:6px 10px 8px; +#commentsdiv .comments-box thead th { + background: transparent; + padding: 0 7px 4px; + font-style: italic; } -#commentsdiv.postbox .column-comment p { - margin:0.6em 0; +#commentsdiv .comments-box tr:last-child td { + border-bottom: 0 none; } -#commentsdiv.postbox #replyrow td { - padding:0; +#commentsdiv img.waiting { + padding-left: 5px; } .sorting-indicator { @@ -2516,7 +2580,7 @@ th.asc:hover span.sorting-indicator { margin-top: 13px; } .screen-per-page { - width: 3em; + width: 4em; } #posts-filter fieldset { @@ -2955,82 +3019,25 @@ input#link_url { max-width: 260px; } -#post-body ul.category-tabs, -#post-body ul.add-menu-item-tabs { - float: left; - width: 120px; - text-align: right; - /* Negative margin for the sake of those without JS: all tabs display */ - margin: 0 -120px 0 5px; - padding: 0; -} - -#post-body ul.category-tabs li, -#post-body ul.add-menu-item-tabs li { - padding: 8px; -} - -#post-body ul.category-tabs li.tabs, -#post-body ul.add-menu-item-tabs li.tabs { - -webkit-border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} - -.wp-tab-panel, -.categorydiv div.tabs-panel, -.customlinkdiv div.tabs-panel, -.posttypediv div.tabs-panel, -.taxonomydiv div.tabs-panel, -#linkcategorydiv div.tabs-panel { - height: 200px; - overflow: auto; - padding: 0.5em 0.9em; - border-style: solid; - border-width: 1px; -} - -.nav-menus-php .customlinkdiv div.tabs-panel, -.nav-menus-php .posttypediv div.tabs-panel, -.nav-menus-php .taxonomydiv div.tabs-panel { - height: auto; - max-height: 205px; -} - -div.tabs-panel-active { - display:block; -} - -div.tabs-panel-inactive { - display:none; -} - -#post-body .categorydiv div.tabs-panel, -.taxonomy div.tabs-panel, -#post-body #linkcategorydiv div.tabs-panel { - margin: 0 5px 0 125px; -} - .press-this #side-sortables .category-tabs li, -.has-right-sidebar #side-sortables .category-tabs li, +ul.category-tabs li, #side-sortables .add-menu-item-tabs li, .wp-tab-bar li { display: inline; line-height: 1.35em; } -.no-js #side-sortables .category-tabs li.hide-if-no-js { +.no-js .category-tabs li.hide-if-no-js { display: none; } -#side-sortables .category-tabs a, +.category-tabs a, #side-sortables .add-menu-item-tabs a, .wp-tab-bar a { text-decoration: none; } -#side-sortables .category-tabs { +.category-tabs { margin: 8px 0 3px; } @@ -3043,20 +3050,10 @@ div.tabs-panel-inactive { margin-bottom: 3px; } -.categorydiv ul, -.customlinkdiv ul, -.posttypediv ul, -.taxonomydiv ul, -#linkcategorydiv ul { - list-style: none; - padding: 0; - margin: 0; -} - #normal-sortables .postbox #replyrow .submit { float: none; margin: 0; - padding: 3px 7px; + padding: 0 7px 5px; } #side-sortables .submitbox .submit input, @@ -3070,36 +3067,19 @@ div.tabs-panel-inactive { margin: 11px 0; } -#side-sortables .comments-box, -#normal-sortables .comments-box { - border: 0 none; -} - ul.category-tabs, ul.add-menu-item-tabs, ul.wp-tab-bar { margin-top: 12px; } -#side-sortables .comments-box thead th, -#normal-sortables .comments-box thead th { - background: transparent; - padding: 0 7px 4px; - font-style: italic; -} - -ul.category-tabs li.tabs, +ul.category-tabs li, ul.add-menu-item-tabs li.tabs, .wp-tab-active { border-style: solid solid none; border-width: 1px 1px 0; } -#commentsdiv img.waiting { - padding-left: 5px; -} - -#post-body .category-tabs li.tabs, #post-body .add-menu-item-tabs li.tabs { border-style: solid none solid solid; border-width: 1px 0 1px 1px; @@ -3121,28 +3101,16 @@ form#tags-filter { position: relative; } -.screen-per-page { - width: 3em; +/* Edit posts */ +td.post-title strong, +td.plugin-title strong { + display: block; + margin-bottom: .2em; } -#posts-filter fieldset { - float: left; - margin: 0 1.5ex 1em 0; - padding: 0; -} - -#posts-filter fieldset legend { - padding: 0 0 .2em 1px; -} - -/* Edit posts */ -td.post-title strong, td.plugin-title strong { - display: block; - margin-bottom: .2em; -} - -td.post-title p, td.plugin-title p { - margin: 6px 0; +td.post-title p, +td.plugin-title p { + margin: 6px 0; } /* Global classes */ @@ -3366,7 +3334,6 @@ table.diff .diff-deletedline del, table.diff .diff-addedline ins { margin: 0; } -#post-body ul.category-tabs, #post-body ul.add-menu-item-tabs { float: left; width: 120px; @@ -3376,12 +3343,10 @@ table.diff .diff-deletedline del, table.diff .diff-addedline ins { padding: 0; } -#post-body ul.category-tabs li, #post-body ul.add-menu-item-tabs li { padding: 8px; } -#post-body ul.category-tabs li.tabs, #post-body ul.add-menu-item-tabs li.tabs { -webkit-border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; @@ -3389,11 +3354,11 @@ table.diff .diff-deletedline del, table.diff .diff-addedline ins { border-bottom-left-radius: 3px; } +.wp-tab-panel, .categorydiv div.tabs-panel, .customlinkdiv div.tabs-panel, .posttypediv div.tabs-panel, -.taxonomydiv div.tabs-panel, -#linkcategorydiv div.tabs-panel { +.taxonomydiv div.tabs-panel { height: 200px; overflow: auto; padding: 0.5em 0.9em; @@ -3416,17 +3381,14 @@ div.tabs-panel-inactive { display:none; } -#post-body .categorydiv div.tabs-panel, -.taxonomy div.tabs-panel, -#post-body #linkcategorydiv div.tabs-panel { +.colunms-1 .categorydiv div.tabs-panel, +.taxonomy div.tabs-panel { margin: 0 5px 0 125px; } -.categorydiv ul, .customlinkdiv ul, .posttypediv ul, -.taxonomydiv ul, -#linkcategorydiv ul { +.taxonomydiv ul { list-style: none; padding: 0; margin: 0; @@ -3439,8 +3401,7 @@ ul.export-filters, .categorydiv ul.categorychecklist ul, .customlinkdiv ul.categorychecklist ul, .posttypediv ul.categorychecklist ul, -.taxonomydiv ul.categorychecklist ul, -#linkcategorydiv ul.categorychecklist ul { +.taxonomydiv ul.categorychecklist ul { margin-left: 18px; } @@ -3589,6 +3550,37 @@ p.popular-tags a { text-decoration: underline; } +/* links tables */ +table.links-table { + width: 100%; +} + +.links-table th { + font-weight: normal; + text-align: left; + vertical-align: top; + min-width: 80px; + width: 20%; + word-wrap: break-word; +} + +.links-table th, +.links-table td { + padding: 5px 0; +} + +.links-table td label { + margin-right: 8px; +} + +.links-table td input[type="text"], +.links-table td textarea { + width: 100%; +} + +.links-table #link_rel { + max-width: 280px; +} /*------------------------------------------------------------------------------ 14.0 - Media Screen @@ -3758,9 +3750,9 @@ abbr.required { .media-item .progress { float: right; - height: 22px; - margin: 6px 10px 0 0; - width: 200px; + height: 22px; + margin: 6px 10px 0 0; + width: 200px; line-height: 2em; padding: 0; overflow: hidden; @@ -3824,14 +3816,14 @@ abbr.required { .media-upload-form .media-item.error p, .media-item .error-div { line-height: 16px; - font-size: 12px; - margin: 10px; + margin: 5px 10px; padding: 0; } .media-item .error-div a.dismiss { + display: block; float: right; - padding-left: 15px; + margin: 5px 4px 0 15px; } /*------------------------------------------------------------------------------ @@ -4396,22 +4388,26 @@ span.imgedit-scale-warn { ------------------------------------------------------------------------------*/ .theme-install-php .tablenav { - height:auto; + height: auto; +} + +h3.available-themes { + margin: 0 0 1em; + float: left; } .available-theme { display: inline-block; - margin-bottom: 10px; - margin-right: 25px; + margin-right: 10px; overflow: hidden; - padding: 20px; + padding: 20px 20px 20px 0; vertical-align: top; - width: 240px; + width: 300px; } -.available-theme a.screenshot { - width: 240px; - height: 180px; +.available-theme .screenshot { + width: 300px; + height: 225px; display: block; border-width: 1px; border-style: solid; @@ -4420,50 +4416,168 @@ span.imgedit-scale-warn { } .available-theme img { - width: 240px; + width: 300px; } .available-theme h3 { - margin: 15px 0 5px; + margin: 15px 0 0; +} + +.available-theme .theme-author { + line-height: 18px; +} + +.available-theme .action-links { + margin-top: 10px; + overflow: hidden; +} + +#current-theme .theme-info li, +.theme-options li, +.available-theme .action-links li { + float: left; + padding-right: 10px; + margin-right: 10px; + border-right: 1px solid #dfdfdf; +} + +.available-theme .action-links li { + padding-right: 8px; + margin-right: 8px; +} + +#current-theme .theme-info li:last-child, +.theme-options li:last-child, +.available-theme .action-links li:last-child { + padding-right: 0; + margin-right: 0; + border-right: 0; +} + +.available-theme .action-links .delete-theme { + float: right; + margin-left: 8px; + margin-right: 0; +} + +.available-theme .action-links .delete-theme a { + color: red; + padding: 2px; +} + +.available-theme .action-links .delete-theme a:hover { + background: red; + color: #fff; + text-decoration: none; +} + +.available-theme .action-links p { + float: left; } #current-theme { - margin: 1em 0 1.5em; + margin: 20px 0 10px; + padding: 0 0 20px; + border-bottom: 1px solid #dfdfdf; + overflow: hidden; } -#current-theme a { - border-bottom: none; +#current-theme.has-screenshot { + padding-left: 330px; } #current-theme h3 { - font-size: 17px; - font-weight: normal; margin: 0; + font-size: 12px; + font-weight: normal; + color: #999; +} + +#current-theme h4 { + margin: 3px 0 16px; + font-size: 20px; +} + +#current-theme h4 span { + margin-left: 20px; + font-size: 12px; + font-weight: normal; +} + +#current-theme a { + border-bottom: none; +} + +#current-theme .theme-info { + margin: 1em 0; + overflow: hidden; } #current-theme .theme-description { margin-top: 5px; + max-width: 600px; + line-height: 1.6em; } #current-theme img { float: left; + width: 300px; + margin-left: -330px; + border-width: 1px; border-style: solid; - margin-right: 1em; - margin-bottom: 1.5em; - width: 150px; +} + +.theme-options { + overflow: hidden; + font-size: 14px; + padding-bottom: 10px; +} + +.theme-options .load-customize { + margin-right: 30px; + float: left; } .theme-options span { + float: left; + margin-right: 10px; text-transform: uppercase; - font-size: 13px; + font-size: 11px; + line-height: 18px; + color: #999; } -.theme-options a { - font-size: 15px; +.theme-options ul { + float: left; + margin: 0; +} + +/* Allow for three-up on 1024px wide screens, e.g. tablets */ +@media only screen and (max-width: 1200px) { + .available-theme, + .available-theme .screenshot, + #current-theme img { + width: 240px; + } + + .available-theme .screenshot { + height: 180px; + } + + .available-theme img { + width: 100%; + } + + #current-theme.has-screenshot { + padding-left: 270px; + } + + #current-theme img { + margin-left: -270px; + } } -#post-body ul.category-tabs li.tabs a, #post-body ul.add-menu-item-tabs li.tabs a, #TB_window #TB_title a.tb-theme-preview-link, #TB_window #TB_title a.tb-theme-preview-link:visited { @@ -4494,7 +4608,6 @@ span.imgedit-scale-warn { .appearance_page_custom-header #headimg { border: 1px solid #DFDFDF; - min-height: 100px; width: 100%; } @@ -4646,15 +4759,30 @@ input.button-highlighted, padding: 5px 7px 0; } -#wpbody-content .plugins .plugin-title, #wpbody-content .plugins .theme-title { +.plugins .update th, +.plugins .update td { + border-bottom: 0; +} +.plugin-update-tr td { + border-top: 0; +} + +#wpbody-content .plugins .plugin-title, +#wpbody-content .plugins .theme-title { padding-right: 12px; white-space:nowrap; } -.plugins .second, .plugins .row-actions-visible { +.plugins .second, +.plugins .row-actions-visible { padding: 0 0 5px; } +.plugins .update .second, +.plugins .update .row-actions-visible { + padding-bottom: 0; +} + .plugins-php .widefat tfoot th, .plugins-php .widefat tfoot td { border-top-style: solid; @@ -4710,33 +4838,24 @@ input.button-highlighted, .pressthis a { display: inline-block; - width: 113px; position: relative; cursor: move; color: #333; background: #dfdfdf; - background-image: -webkit-gradient( - linear, - left bottom, - left top, - color-stop(0.07, rgb(230,230,230)), - color-stop(0.77, rgb(216,216,216)) - ); - background-image: -moz-linear-gradient( - center bottom, - rgb(230,230,230) 7%, - rgb(216,216,216) 77% - ); - background-repeat: no-repeat; - background-image-position: 10px 8px; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.07, #e6e6e6), color-stop(0.77, #d8d8d8)); + background-image: -webkit-linear-gradient(bottom, #e6e6e6 7%, #d8d8d8 77%); + background-image: -moz-linear-gradient(bottom, #e6e6e6 7%, #d8d8d8 77%); + background-image: -ms-linear-gradient(bottom, #e6e6e6 7%, #d8d8d8 77%); + background-image: -o-linear-gradient(bottom, #e6e6e6 7%, #d8d8d8 77%); + background-image: linear-gradient(bottom, #e6e6e6 7%, #d8d8d8 77%); -webkit-border-radius: 5px; border-radius: 5px; - border: 1px #b4b4b4 solid; + border: 1px solid #b4b4b4; font-style: normal; line-height: 16px; font-size: 14px; text-decoration: none; - text-shadow: #fff 0 1px 0px; + text-shadow: 0 1px 0px #fff; } .pressthis a:hover, @@ -4754,8 +4873,9 @@ input.button-highlighted, } .pressthis a span { - background: url(../images/press-this.png) no-repeat -45px 5px ; - padding: 8px 0 8px 32px; + background: url(../images/press-this.png?v=20120502) no-repeat 0px 5px; + padding: 8px 11px 8px 27px; + margin: 0 5px; display: inline-block; } @@ -4828,14 +4948,14 @@ input.button-highlighted, .about-wrap { position: relative; margin: 25px 40px 0 20px; - min-width: 770px; max-width: 1050px; /* readability */ font-size: 15px; } + .about-wrap div.updated, .about-wrap div.error { - display: none !important; + display: none !important; } /* Typography */ @@ -4843,12 +4963,14 @@ input.button-highlighted, .about-wrap p { line-height: 1.6em; } + .about-wrap h1 { margin: 0.2em 200px 0 0; line-height: 1.2em; font-size: 2.8em; font-weight: 200; } + .about-text, .about-description, .about-wrap li.wp-person a.web { @@ -4857,14 +4979,17 @@ input.button-highlighted, line-height: 1.6em; font-size: 20px; } + .about-description { margin-top: 1.4em; } + .about-text { margin: 1em 200px 1.4em 0; min-height: 60px; font-size: 24px; } + .about-wrap h3 { font-size: 24px; margin-bottom: 1em; @@ -4872,34 +4997,40 @@ input.button-highlighted, } .about-wrap .changelog { - padding-bottom: 10px; overflow: hidden; } + .about-wrap .changelog li { list-style-type: disc; margin-left: 3em; } + +.about-wrap .feature-section { + padding-bottom: 20px; +} + .about-wrap .feature-section h4 { margin-bottom: 0.6em; } + .about-wrap .feature-section p { margin-top: 0.6em; } + .about-wrap code { font-size: 14px; } -html.ie8 .about-wrap img.element-screenshot { - padding: 2px; -} /* Point Releases */ .about-wrap .point-releases { margin-top: 5px; } + .about-wrap .changelog.point-releases h3 { padding-top: 35px; } + .about-wrap .changelog.point-releases h3:first-child { padding-top: 7px; } @@ -4910,15 +5041,13 @@ html.ie8 .about-wrap img.element-screenshot { padding-top: 142px; height: 50px; width: 173px; - font-weight: bold; font-size: 14px; text-align: center; - margin: 0 -5px; - background: url('../images/wp-badge.png?ver=20111120') no-repeat; } + .about-wrap .wp-badge { position: absolute; top: 0; @@ -4930,12 +5059,14 @@ html.ie8 .about-wrap img.element-screenshot { .about-wrap h2.nav-tab-wrapper { padding-left: 6px; } + .about-wrap h2 .nav-tab { padding: 4px 10px 6px; margin: 0 3px -1px 0; font-size: 18px; vertical-align: top; } + .about-wrap h2 .nav-tab-active { font-weight: bold; padding-top: 3px; @@ -4943,128 +5074,86 @@ html.ie8 .about-wrap img.element-screenshot { /* Changelog / Update screen */ -.about-wrap .feature-section .left-feature, -.about-wrap .feature-section img, -.about-wrap .feature-section .right-feature { - float: left; -} - -.about-wrap .feature-section { - min-height: 100px; - overflow: hidden; - clear: both; -} .about-wrap .feature-section img { - margin: 5px auto; - border: none; - + margin: 0 1.94% 10px 0; -webkit-border-radius: 3px; border-radius: 3px; } -html.ie8 .about-wrap .feature-section img, -html.ie8 .about-wrap .feature-section .image-mask { - border-width: 1px; - border-style: solid; -} - -.about-wrap .feature-section.text-features { - width: 31%; - - float: left; - overflow: visible; -} -.about-wrap .feature-section.text-features div { - width: 112%; -} -.about-wrap .feature-section.screenshot-features { - width: 67%; - margin-top: 1.33em; - float: right; - clear: none; - overflow: visible; +.about-wrap .feature-section img.image-50 { + max-width: 50%; } -.about-wrap .feature-section.screenshot-features .angled-right { - margin-top: -1em; - margin-left: 2.5em; -} -.about-wrap .feature-section.screenshot-features .angled-right p { - margin-left: 290px; +.about-wrap .feature-section img.image-30 { + max-width: 31.2381%; } -.about-wrap .feature-section .angled-right h4, -.about-wrap .feature-section .angled-left h4 { - margin-top: 0; -} -.about-wrap .feature-section .angled-right img, -.about-wrap .feature-section .angled-left img { - margin-top: .1em; - margin-right: 30px; +.ie8 .about-wrap .feature-section img { + border-width: 1px; + border-style: solid; } .about-wrap .feature-section.three-col { padding-top: 15px; margin-bottom: 0; } + .about-wrap .feature-section.three-col div { width: 30%; margin-right: 4.999999999%; - float: left; } + .about-wrap .feature-section.three-col h4 { margin: 0 0 0.6em 0; } + .about-wrap .feature-section.three-col img { margin: 0.5em 0 0.5em 5px; max-width: 100%; - float: none; } -html.ie8 .about-wrap .feature-section.three-col img { + +.ie8 .about-wrap .feature-section.three-col img { margin-left: 0; } + .about-wrap .feature-section.three-col .last-feature { margin-right: 0; } -.about-wrap .feature-section .feature-images { - width: 300px; - position: absolute; - margin-top: 1.1em; -} -.about-wrap .feature-section .feature-images img { - width: 250px; - height: 150px; - margin-right: 5px; -} -.about-wrap .feature-section.images-stagger-left, -.about-wrap .feature-section.images-stagger-right { - min-height: 265px; -} -.about-wrap .feature-section.images-stagger-right .angled-right, -.about-wrap .feature-section.images-stagger-left .angled-left { - margin-bottom: -30px; +.about-wrap .three-col-images { + text-align: center; } -.about-wrap .feature-section.images-stagger-left .angled-left { - margin-left: 5px; + +.about-wrap .three-col-images img { + margin: 0 0 10px; } -.about-wrap .feature-section .angled-right { + +.about-wrap .three-col-images .last-feature { float: right; } -.about-wrap .feature-section.images-stagger-right .feature-images { - right: 0; + +.about-wrap .three-col-images .first-feature { + float: left; } -.about-wrap .feature-section.images-stagger-left .feature-images { - left: 0; + +.about-wrap .feature-section.images-stagger-right img { + float: right; + margin: 0 5px 12px 12px; } -.about-wrap .feature-section.images-stagger-right .left-feature { - margin-right: 350px; + +.about-wrap .feature-section.images-stagger-left img { + float: left; + margin: 0 12px 12px 5px; } -.about-wrap .feature-section.images-stagger-left .right-feature { - margin-left: 350px; + +@media only screen and (max-width: 900px) { + .about-wrap .feature-section.images-stagger-left img, + .about-wrap .feature-section.images-stagger-right img { + clear: both; + } } /* Return to Dashboard Home link */ @@ -5074,80 +5163,388 @@ html.ie8 .about-wrap .feature-section.three-col img { font-size: 14px; font-weight: bold; } + .about-wrap .return-to-dashboard a { text-decoration: none; padding: 0 5px; } -/* Credits */ - -.about-wrap h4.wp-people-group { - margin-top: 2.6em; - font-size: 16px; +/* Credits */ + +.about-wrap h4.wp-people-group { + margin-top: 2.6em; + font-size: 16px; +} + +.about-wrap ul.wp-people-group { + overflow: hidden; + padding: 5px; + margin: 0 -15px 0 -5px; +} + +.about-wrap ul.compact { + margin-bottom: 0 +} + +.about-wrap li.wp-person { + float: left; + margin-right: 10px; +} + +.about-wrap li.wp-person img.gravatar { + float: left; + margin: 0 10px 10px 0; + padding: 2px; + width: 60px; + height: 60px; +} + +.about-wrap ul.compact li.wp-person img.gravatar { + width: 30px; + height: 30px; +} + +.about-wrap li.wp-person { + height: 70px; + width: 280px; + padding-bottom: 15px; +} + +.about-wrap ul.compact li.wp-person { + height: auto; + width: 180px; + padding-bottom: 0; + margin-bottom: 0; +} + +.about-wrap #wp-people-group-validators + p.wp-credits-list { + margin-top: 0; +} + +.about-wrap li.wp-person a.web { + display: block; + margin: 6px 0 2px; + font-size: 16px; + text-decoration: none; +} + +.about-wrap p.wp-credits-list a { + white-space: nowrap; +} + +/* Freedoms */ + +.freedoms-php .about-wrap ol { + margin: 40px 60px; +} + +.freedoms-php .about-wrap ol li { + list-style-type: decimal; + font-weight: bold; +} + +.freedoms-php .about-wrap ol p { + font-weight: normal; + margin: 0.6em 0; +} + +/*------------------------------------------------------------------------------ + 23.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ + +body.full-overlay-active { + overflow: hidden; +} + +.wp-full-overlay { + background: #fff; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + left: 0; + right: 0; + height: 100%; + min-width: 0; +} + +.wp-full-overlay-sidebar { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + + position: fixed; + width: 300px; + height: 100%; + top: 0; + bottom: 0; + left: 0; + padding: 0; + margin: 0; + z-index: 10; + overflow: auto; + background: #f5f5f5; + border-right: 1px solid rgba( 0, 0, 0, 0.2 ); +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + overflow: visible; +} + +.wp-full-overlay.collapsed, +.wp-full-overlay.expanded .wp-full-overlay-sidebar { + margin-left: 0 !important; +} + +.wp-full-overlay.expanded { + margin-left: 300px; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-left: -300px; +} + +.wp-full-overlay-sidebar:after { + content: ''; + display: block; + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 3px; + box-shadow: -5px 0 4px -4px rgba(0, 0, 0, 0.1) inset; + z-index: 1000; +} + +.wp-full-overlay-main { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + height: 100%; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header, +.wp-full-overlay-sidebar .wp-full-overlay-footer { + position: absolute; + left: 0; + right: 0; + height: 45px; + padding: 0 20px; + line-height: 45px; + z-index: 10; + margin: 0; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header { + top: 0; + border-top: 0; + border-bottom: 1px solid #fff; + box-shadow: inset 0 -1px 0 0px #dfdfdf; +} + +.wp-full-overlay-sidebar .wp-full-overlay-footer { + bottom: 0; + border-bottom: 0; + border-top: 1px solid #dfdfdf; + box-shadow: inset 0 1px 0 0px #fff; +} + +.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content { + position: absolute; + top: 45px; + bottom: 45px; + left: 0; + right: 0; + overflow: auto; +} + +/* Close Link */ +.wp-full-overlay .close-full-overlay { + text-decoration: none; +} + +/* Collapse Button */ +.wp-full-overlay .collapse-sidebar { + position: absolute; + bottom: 12px; + left: 0; + z-index: 50; + display: block; + width: 19px; + height: 19px; + margin-left: 15px; + padding: 0; + border-radius: 50%; + text-decoration: none; +} + +.wp-full-overlay.collapsed .collapse-sidebar { + position: absolute; + left: 100%; +} + +.wp-full-overlay .collapse-sidebar-arrow { + position: absolute; + margin-top: 2px; + margin-left: 2px; + display: block; + width: 15px; + height: 15px; + background: transparent url('../images/arrows.png') no-repeat 0 -72px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow { + background-position: 0 -108px; +} + +.wp-full-overlay .collapse-sidebar-label { + position: absolute; + left: 100%; + color: #808080; + line-height: 20px; + margin-left: 10px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-label { + display: none; +} + +.wp-full-overlay .collapse-sidebar:hover .collapse-sidebar-label { + color: #666; +} + +/* Animations */ +.wp-full-overlay, +.wp-full-overlay-sidebar, +.wp-full-overlay .collapse-sidebar, +.wp-full-overlay-main { + -webkit-transition-property: left, right, top, bottom, width, margin; + -moz-transition-property: left, right, top, bottom, width, margin; + -ms-transition-property: left, right, top, bottom, width, margin; + -o-transition-property: left, right, top, bottom, width, margin; + transition-property: left, right, top, bottom, width, margin; + + -webkit-transition-duration: 0.2s; + -moz-transition-duration: 0.2s; + -ms-transition-duration: 0.2s; + -o-transition-duration: 0.2s; + transition-duration: 0.2s; +} + +/*------------------------------------------------------------------------------ + 24.0 - Customize Loader +------------------------------------------------------------------------------*/ + +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize { + display: none; +} + +#customize-container { + display: none; + background: #fff; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + left: 0; + right: 0; + height: 100%; +} + +.customize-active #customize-container { + display: block; +} + +.customize-loading #customize-container iframe { + opacity: 0; +} + +.customize-loading #customize-container { + background: #fff url("../images/wpspin_light.gif") no-repeat fixed center center; } -.about-wrap ul.wp-people-group { - overflow: hidden; - padding: 5px; - margin: 0 -15px 0 -5px; + +#customize-container iframe, +#theme-installer iframe { + height: 100%; + width: 100%; + z-index: 20; + + -webkit-transition: opacity 0.3s; + -moz-transition: opacity 0.3s; + -ms-transition: opacity 0.3s; + -o-transition: opacity 0.3s; + transition: opacity 0.3s; } -.about-wrap ul.compact { - margin-bottom: 0 + +#customize-container .collapse-sidebar { + bottom: 16px; } -.about-wrap li.wp-person { - float: left; - margin-right: 10px; + +#theme-installer { + display: none; } -.about-wrap li.wp-person img.gravatar { - float: left; - margin: 0 10px 10px 0; - padding: 2px; - width: 60px; - height: 60px; + +#theme-installer.single-theme { + display: block; } -.about-wrap ul.compact li.wp-person img.gravatar { - width: 30px; - height: 30px; + +.install-theme-info { + display: none; + padding: 10px 20px 20px; } -.about-wrap li.wp-person { - height: 70px; - width: 280px; - padding-bottom: 15px; + +.single-theme .install-theme-info { + padding-top: 15px; } -.about-wrap ul.compact li.wp-person { - height: auto; - width: 180px; - padding-bottom: 0; - margin-bottom: 0; + +#theme-installer .install-theme-info { + display: block; } -.about-wrap #wp-people-group-validators + p.wp-credits-list { - margin-top: 0; + +.install-theme-info .theme-install { + float: right; + margin-top: 18px; } -.about-wrap li.wp-person a.web { - display: block; - margin: 6px 0 2px; + +.install-theme-info .theme-name { font-size: 16px; - text-decoration: none; + line-height: 24px; + margin-bottom: 0; } -.about-wrap p.wp-credits-list a { - white-space: nowrap; + +.install-theme-info .theme-screenshot { + margin-top: 15px; + width: 258px; + border: 1px solid #ccc; } -/* Freedoms */ +.install-theme-info .theme-details { + overflow: hidden; +} -.freedoms-php .about-wrap ol { - margin: 40px 60px; +.theme-details .theme-version { + margin: 15px 0; + float: left; } -.freedoms-php .about-wrap ol li { - list-style-type: decimal; - font-weight: bold; + +.theme-details .star-holder { + margin: 14px 0; + float: right; } -.freedoms-php .about-wrap ol p { - font-weight: normal; - margin: 0.6em 0; + +.theme-details .theme-description { + float: left; + color: #777; + line-height: 20px; } /*------------------------------------------------------------------------------ - 23.0 - Misc + 25.0 - Misc ------------------------------------------------------------------------------*/ #excerpt, @@ -5157,10 +5554,6 @@ html.ie8 .about-wrap .feature-section.three-col img { width: 98%; } -.wp-editor-container textarea.wp-editor-area { - width: 99.9%; -} - #template div { margin-right: 190px; } @@ -5191,6 +5584,10 @@ p.pagenav { padding: 2px 0 0; } +.mobile .row-actions { + visibility: visible; +} + tr:hover .row-actions, div.comment-item:hover .row-actions { visibility: visible; @@ -5260,6 +5657,11 @@ table.form-table td .updated { margin: 6px 0 8px; } +#poststuff .inside #parent_id, +.inline-edit-row #post_parent { + max-width: 100%; +} + #post-visibility-select, #post-formats-select { line-height: 1.5em; @@ -5276,17 +5678,6 @@ table.form-table td .updated { margin-bottom: 20px; } -td.post-title strong, -td.plugin-title strong { - display: block; - margin-bottom: .2em; -} - -td.post-title p, -td.plugin-title p { - margin: 6px 0; -} - #templateside ul li a { text-decoration: none; } @@ -5380,10 +5771,6 @@ td.media-icon img { max-height: 60px; } -.screen-per-page { - width: 3em; -} - .list-ajax-loading { float: right; margin-right: 9px; @@ -5470,9 +5857,6 @@ fieldset { } - - - /*----------------------------------------------------------------------------- MERGED -------------------------------------------------------------------------------*/ @@ -5787,6 +6171,7 @@ form .textarea-wrap { #dashboard_recent_drafts p { margin: 0; padding: 0; + word-wrap: break-word; } #dashboard_recent_drafts ul { @@ -5799,6 +6184,7 @@ form .textarea-wrap { #dashboard_recent_drafts h4 { line-height: 1.7em; + word-wrap: break-word; } #dashboard_recent_drafts h4 abbr { @@ -5992,7 +6378,10 @@ a.rsswidget { } .login h1 a { - background: url(../images/logo-login.png) no-repeat top center; + background-image: url('../images/wordpress-logo.png?ver=20120216'); + background-size: 274px 63px; + background-position: top center; + background-repeat: no-repeat; width: 326px; height: 67px; text-indent: -9999px; @@ -6001,6 +6390,18 @@ a.rsswidget { display: block; } +@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { + .login h1 a { + background-image: url('../images/wordpress-logo-2x.png?ver=20120412'); + background-size: 274px 63px; + } + + .wp-badge { + background-image: url('../images/wp-badge-2x.png?ver=20120516'); + background-size: 173px 194px; + } +} + #login { width: 320px; padding: 114px 0 0; @@ -6024,7 +6425,9 @@ a.rsswidget { padding: 12px 16px 0; } -.login form .input { +.login form .input, +.login input[type="text"] { + color: #555; font-weight: 200; font-size: 24px; line-height: 1; @@ -6041,10 +6444,6 @@ a.rsswidget { box-shadow: inset 1px 1px 2px rgba(200, 200, 200, 0.2); } -.login input { - color: #555; -} - .login #pass-strength-result { width: 250px; font-weight: bold; @@ -6055,6 +6454,25 @@ a.rsswidget { text-align: center; } +.mobile #login { + padding: 20px 0; +} + +.mobile #login form, +.mobile #login .message, +.mobile #login_error { + margin-left: 0; +} + +.mobile #login #nav, +.mobile #login #backtoblog { + margin-left: 8px; +} + +.mobile #login h1 a { + width: auto; +} + /* ms */ /* Dashboard: MS Specific Data */ @@ -6096,7 +6514,6 @@ a.rsswidget { background: #fecac2; } - /* nav-menu */ #nav-menus-frame { @@ -6176,6 +6593,7 @@ a.rsswidget { .nav-menus-php #post-body-content { position: relative; + float: none; } #menu-management .menu-add-new abbr { @@ -6733,14 +7151,18 @@ body.menu-max-depth-11 { min-width: 1280px !important; } display: block; } - -/* plugin-install */ -/* NOTE: the following CSS rules(.star*) are taken more or less straight from the bbPress rating plugin. */ +/* Star ratings */ div.star-holder { position: relative; - height: 19px; + height: 17px; width: 100px; - font-size: 19px; + background: url('../images/stars.png?ver=20120307') repeat-x bottom left; +} + +div.star-holder .star-rating { + background: url('../images/stars.png?ver=20120307') repeat-x top left; + height: 17px; + float: left; } div.action-links { @@ -6748,38 +7170,6 @@ div.action-links { margin: 6px 0 0; } -div.star { - height: 100%; - position: absolute; - top: 0; - left: 0; - background-color: transparent; - letter-spacing: 1ex; - border: none; -} - -.star1 { width: 20%; } -.star2 { width: 40%; } -.star3 { width: 60%; } -.star4 { width: 80%; } -.star5 { width: 100%; } - -.star img, -div.star a, -div.star a:hover, -div.star a:visited { - display: block; - position: absolute; - right: 0; - border: none; - text-decoration: none; -} - -div.star img { - width: 19px; - height: 19px; -} - /* Header on thickbox */ #plugin-information-header { margin: 0; @@ -6863,8 +7253,16 @@ div.star img { list-style-image: none; } +#plugin-information #section-screenshots ol { + list-style: none; + margin: 0; +} + #plugin-information #section-screenshots li img { vertical-align: text-top; + max-width: 100%; + width: auto; + height: auto; } #plugin-information #section-screenshots li p { @@ -6873,6 +7271,7 @@ div.star img { padding-bottom: 2em; } +#plugin-information #section-screenshots ol, #plugin-information .updated, #plugin-information pre { margin-right: 215px; @@ -6899,7 +7298,8 @@ img { /* Header */ .press-this #wphead { height: 32px; - margin-right: 5px; + margin-left: 0; + margin-right: 0; margin-bottom: 5px; } @@ -6927,6 +7327,10 @@ img { text-decoration: underline; } +.press-this #message { + margin: 10px 0; +} + .press-this-sidebar { float: right; width: 200px; @@ -6934,6 +7338,8 @@ img { } .press-this #title { + margin-left: 0; + margin-right: 0; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -ms-box-sizing: border-box; @@ -7294,90 +7700,8 @@ h3 span { line-height: 180%; } - -/* theme-install */ -.theme-listing .theme-item { - display: inline-block; - width: 200px; - border: thin solid #ccc; - vertical-align: top; -} - -.theme-listing .theme-item h3 { - text-align: center; - font-size: 14px; - font-style: italic; - margin: 0; - padding: 0; -} - -.theme-listing .theme-item img { - max-width: 150px; - max-height: 150px; -} - -.theme-listing .theme-item-info span, -.theme-listing .theme-item:hover .theme-item-info span.dots { - display: none; -} - -.theme-listing .theme-item:hover .theme-item-info span { - display: inline; -} - -.theme-listing .theme-item-info span.action-links { - font-weight: bold; - text-align: center; -} - -.theme-listing br.line { - border-bottom-width: 1px; - border-bottom-style: solid; - margin-bottom: 3px; -} - - -#theme-information .available-theme, -.available-theme { - padding: 20px 15px; -} - -#theme-information .available-theme { - overflow: visible; - width: 440px; -} - -#theme-information .theme-preview-img { - float: left; - margin: 5px 25px 10px 15px; - width: 300px; -} - -#theme-information .action-button { - border-top-width: 1px; - border-top-style: solid; - margin: 10px 5px 0; -} - -#theme-information .action-button #cancel, -#theme-information .action-button #install { - margin: 10px 5px; -} - -#theme-information .action-button #cancel { - float: left; -} - -#theme-information .action-button #install { - float: right; -} - -#theme-information .available-theme h3 { - margin: 1em 0; -} - -body#theme-information { - height: auto; +#filter-box { + clear: both; } .feature-filter { @@ -7394,7 +7718,7 @@ body#theme-information { float: left; list-style-type: none; padding-right: 25px; - min-width: 150px; + width: 150px; } .feature-container { @@ -7403,7 +7727,6 @@ overflow: auto; margin-bottom: 10px; } - /* widgets */ /* 2 column liquid layout */ @@ -7825,3 +8148,81 @@ a.widget-control-edit { width: auto; } } + +/* =Localized CSS +-------------------------------------------------------------- */ + +/* zh_CN: Remove italic properties. */ +.locale-zh-cn .howto, +.locale-zh-cn .tablenav .displaying-num, +.locale-zh-cn .js .input-with-default-title, +.locale-zh-cn .link-to-original, +.locale-zh-cn .inline-edit-row fieldset span.title, +.locale-zh-cn .inline-edit-row fieldset span.checkbox-title, +.locale-zh-cn #utc-time, +.locale-zh-cn #local-time, +.locale-zh-cn p.install-help, +.locale-zh-cn p.help, +.locale-zh-cn p.description, +.locale-zh-cn span.description, +.locale-zh-cn .form-wrap p { + font-style: normal; +} + +/* zh_CN: Enlarge dashboard widget 'Configure' link */ +.locale-zh-cn .hdnle a { font-size: 12px; } + +/* zn_CH: Enlarge font size, set font-size: normal */ +.locale-zh-cn form.upgrade .hint { font-style: normal; font-size: 100%; } + +/* Zn_CH: Distraction free writing. + * More beautiful font for "Just write." + * Larger text for HTML/Visual mode. + */ +.locale-zh-cn #wp-fullscreen-tagline { font-family: KaiTi, "楷体", sans-serif; } +.locale-zh-cn #wp-fullscreen-modes a { font-size: 12px; } + +/* zh_CN: Enlarge font-size. */ +.locale-zh-cn #sort-buttons { font-size: 1em !important; } + +/* ru_RU: Text needs more room to breathe. */ +.locale-ru-ru #dashboard_quick_press .input-text-wrap, +.locale-ru-ru #dashboard_quick_press .textarea-wrap, +.locale-ru-ru #dashboard_quick_press .wp-media-buttons { + margin-left: 5.7em; /* default 5em + 0.7em */ +} +.locale-ru-ru #dashboard_quick_press h4 { + width: 5.7em; /* default 5.5em + 0.2em */ +} +.locale-ru-ru #dashboard-widgets #dashboard_quick_press form p.submit { + margin-left: 5.3em; /* default 4.6em + 0.7em */ +} +.locale-ru-ru .inline-edit-row fieldset label span.title { + width: auto; /* default 5em */ + min-width: 5em; +} +.locale-ru-ru.press-this .posting { + margin-right: 257px; /* default 212px + 45px */ +} +.locale-ru-ru.press-this #photo-add-url-div input[type="text"] { + width: 255px; /* default 300px - 45px */ +} +.locale-ru-ru.press-this #side-sortables { + width: 245px; /* default 200px + 45px */ +} + +/* lt_LT: QuickPress + QuickEdit */ +.locale-lt-lt #dashboard_quick_press .input-text-wrap, +.locale-lt-lt #dashboard_quick_press .textarea-wrap, +.locale-lt-lt #dashboard_quick_press .wp-media-buttons { + margin-left: 7em; +} +.locale-lt-lt #dashboard_quick_press h4 { + width: 7em; +} +.locale-lt-lt .inline-edit-row fieldset label span.title { + width: 8em; +} +.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 8em; +} diff --git a/wp-admin/custom-background.php b/wp-admin/custom-background.php index 168c65e33..8fb1399b3 100644 --- a/wp-admin/custom-background.php +++ b/wp-admin/custom-background.php @@ -53,6 +53,9 @@ class Custom_Background { function __construct($admin_header_callback = '', $admin_image_div_callback = '') { $this->admin_header_callback = $admin_header_callback; $this->admin_image_div_callback = $admin_image_div_callback; + + add_action( 'admin_menu', array( $this, 'init' ) ); + add_action( 'wp_ajax_set-background-image', array( $this, 'wp_set_background_image' ) ); } /** @@ -70,6 +73,12 @@ class Custom_Background { add_action("load-$page", array(&$this, 'take_action'), 49); add_action("load-$page", array(&$this, 'handle_upload'), 49); + if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-background' ) { + add_filter( 'attachment_fields_to_edit', array( $this, 'attachment_fields_to_edit' ), 10, 2 ); + add_filter( 'media_upload_tabs', array( $this, 'filter_upload_tabs' ) ); + add_filter( 'media_upload_mime_type_links', '__return_empty_array' ); + } + if ( $this->admin_header_callback ) add_action("admin_head-$page", $this->admin_header_callback, 51); } @@ -96,6 +105,8 @@ class Custom_Background { '<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>' ); + add_thickbox(); + wp_enqueue_script('media-upload'); wp_enqueue_script('custom-background'); wp_enqueue_style('farbtastic'); } @@ -124,6 +135,7 @@ class Custom_Background { set_theme_mod('background_image', ''); set_theme_mod('background_image_thumb', ''); $this->updated = true; + wp_safe_redirect( $_POST['_wp_http_referer'] ); return; } @@ -199,15 +211,15 @@ if ( $bgcolor = get_background_color() ) if ( get_background_image() ) { // background-image URL must be single quote, see below - $background_styles .= ' background-image: url(\'' . get_theme_mod('background_image_thumb', '') . '\');' + $background_styles .= ' background-image: url(\'' . set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ) . '\');' . ' background-repeat: ' . get_theme_mod('background_repeat', 'repeat') . ';' . ' background-position: top ' . get_theme_mod('background_position_x', 'left'); } ?> <div id="custom-background-image" style="<?php echo $background_styles; ?>"><?php // must be double quote, see above ?> <?php if ( get_background_image() ) { ?> -<img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /><br /> -<img class="custom-background-image" src="<?php echo get_theme_mod('background_image_thumb', ''); ?>" style="visibility:hidden;" alt="" /> +<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" /><br /> +<img class="custom-background-image" src="<?php echo set_url_scheme( get_theme_mod( 'background_image_thumb', get_background_image() ) ); ?>" style="visibility:hidden;" alt="" /> <?php } ?> </div> <?php } ?> @@ -226,7 +238,8 @@ if ( get_background_image() ) { </tr> <?php endif; ?> -<?php if ( defined( 'BACKGROUND_IMAGE' ) ) : // Show only if a default background image exists ?> +<?php $default_image = get_theme_support( 'custom-background', 'default-image' ); ?> +<?php if ( $default_image && get_background_image() != $default_image ) : ?> <tr valign="top"> <th scope="row"><?php _e('Restore Original Image'); ?></th> <td> @@ -240,13 +253,25 @@ if ( get_background_image() ) { <?php endif; ?> <tr valign="top"> -<th scope="row"><?php _e('Upload Image'); ?></th> +<th scope="row"><?php _e('Select Image'); ?></th> <td><form enctype="multipart/form-data" id="upload-form" method="post" action=""> -<label for="upload"><?php _e('Choose an image from your computer:'); ?></label><br /><input type="file" id="upload" name="import" /> -<input type="hidden" name="action" value="save" /> -<?php wp_nonce_field('custom-background-upload', '_wpnonce-custom-background-upload') ?> -<?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?> -</form> + <p> + <label for="upload"><?php _e( 'Choose an image from your computer:' ); ?></label><br /> + <input type="file" id="upload" name="import" /> + <input type="hidden" name="action" value="save" /> + <?php wp_nonce_field( 'custom-background-upload', '_wpnonce-custom-background-upload' ); ?> + <?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?> + </p> + <?php + $image_library_url = get_upload_iframe_src( 'image', null, 'library' ); + $image_library_url = remove_query_arg( 'TB_iframe', $image_library_url ); + $image_library_url = add_query_arg( array( 'context' => 'custom-background', 'TB_iframe' => 1 ), $image_library_url ); + ?> + <p> + <label for="choose-from-library-link"><?php _e( 'Or choose an image from your media library:' ); ?></label><br /> + <a id="choose-from-library-link" class="button thickbox" href="<?php echo esc_url( $image_library_url ); ?>"><?php _e( 'Choose Image' ); ?></a> + </p> + </form> </td> </tr> </tbody> @@ -302,9 +327,10 @@ if ( get_background_image() ) { <tr valign="top"> <th scope="row"><?php _e( 'Background Color' ); ?></th> <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'Background Color' ); ?></span></legend> -<?php $show_clear = get_background_color() ? '' : ' style="display:none"'; ?> +<?php $show_clear = get_theme_mod('background_color') ? '' : ' style="display:none"'; ?> <input type="text" name="background-color" id="background-color" value="#<?php echo esc_attr(get_background_color()) ?>" /> -<a class="hide-if-no-js" href="#" id="pickcolor"><?php _e('Select a Color'); ?></a> <span<?php echo $show_clear; ?> class="hide-if-no-js" id="clearcolor"> (<a href="#"><?php _e( 'Clear' ); ?></a>)</span> +<a class="hide-if-no-js" href="#" id="pickcolor"><?php _e('Select a Color'); ?></a> <span<?php echo $show_clear; ?> class="hide-if-no-js" id="clearcolor"> (<a href="#"><?php current_theme_supports( 'custom-background', 'default-color' ) ? _e( 'Default' ) : _e( 'Clear' ); ?></a>)</span> +<input type="hidden" id="defaultcolor" value="<?php if ( current_theme_supports( 'custom-background', 'default-color' ) ) echo '#' . esc_attr( get_theme_support( 'custom-background', 'default-color' ) ); ?>" /> <div id="colorPickerDiv" style="z-index: 100; background:#eee; border:1px solid #ccc; position:absolute; display:none;"></div> </fieldset></td> </tr> @@ -357,14 +383,50 @@ if ( get_background_image() ) { wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); update_post_meta( $id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) ); - set_theme_mod('background_image', esc_url($url)); + set_theme_mod('background_image', esc_url_raw($url)); $thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' ); - set_theme_mod('background_image_thumb', esc_url( $thumbnail[0] ) ); + set_theme_mod('background_image_thumb', esc_url_raw( $thumbnail[0] ) ); do_action('wp_create_file_in_uploads', $file, $id); // For replication $this->updated = true; } + /** + * Replace default attachment actions with "Set as background" link. + * + * @since 3.4.0 + */ + function attachment_fields_to_edit( $form_fields, $post ) { + $form_fields = array( 'image-size' => $form_fields['image-size'] ); + $form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td><a data-attachment-id="' . $post->ID . '" class="wp-set-background">' . __( 'Set as background' ) . '</a></td></tr>' ); + $form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-background' ); + + return $form_fields; + } + + /** + * Leave only "Media Library" tab in the uploader window. + * + * @since 3.4.0 + */ + function filter_upload_tabs() { + return array( 'library' => __('Media Library') ); + } + + public function wp_set_background_image() { + if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit; + $attachment_id = absint($_POST['attachment_id']); + $sizes = array_keys(apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) )); + $size = 'thumbnail'; + if ( in_array( $_POST['size'], $sizes ) ) + $size = esc_attr( $_POST['size'] ); + + update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) ); + $url = wp_get_attachment_image_src( $attachment_id, $size ); + $thumbnail = wp_get_attachment_image_src( $attachment_id, 'thumbnail' ); + set_theme_mod( 'background_image', esc_url_raw( $url[0] ) ); + set_theme_mod( 'background_image_thumb', esc_url_raw( $thumbnail[0] ) ); + exit; + } } -?> diff --git a/wp-admin/custom-header.php b/wp-admin/custom-header.php index ebeb2a5ad..fc9d4f126 100644 --- a/wp-admin/custom-header.php +++ b/wp-admin/custom-header.php @@ -42,7 +42,6 @@ class Custom_Image_Header { */ var $default_headers = array(); - /** * Holds custom headers uploaded by the user * @@ -72,6 +71,8 @@ class Custom_Image_Header { function __construct($admin_header_callback, $admin_image_div_callback = '') { $this->admin_header_callback = $admin_header_callback; $this->admin_image_div_callback = $admin_image_div_callback; + + add_action( 'admin_menu', array( $this, 'init' ) ); } /** @@ -90,7 +91,14 @@ class Custom_Image_Header { add_action("admin_head-$page", array(&$this, 'help') ); add_action("admin_head-$page", array(&$this, 'take_action'), 50); add_action("admin_head-$page", array(&$this, 'js'), 50); - add_action("admin_head-$page", $this->admin_header_callback, 51); + if ( $this->admin_header_callback ) + add_action("admin_head-$page", $this->admin_header_callback, 51); + + if ( isset( $_REQUEST['context'] ) && $_REQUEST['context'] == 'custom-header' ) { + add_filter( 'attachment_fields_to_edit', array( $this, 'attachment_fields_to_edit' ), 10, 2 ); + add_filter( 'media_upload_tabs', array( $this, 'filter_upload_tabs' ) ); + add_filter( 'media_upload_mime_type_links', '__return_empty_array' ); + } } /** @@ -103,9 +111,27 @@ class Custom_Image_Header { 'id' => 'overview', 'title' => __('Overview'), 'content' => - '<p>' . __( 'You can set a custom image header for your site. Simply upload the image and crop it, and the new header will go live immediately.' ) . '</p>' . - '<p>' . __( 'If you want to discard your custom header and go back to the default included in your theme, click on the buttons to remove the custom image and restore the original header image.' ) . '</p>' . - '<p>' . __( 'Some themes come with additional header images bundled. If you see multiple images displayed, select the one you’d like and click the Save Changes button.' ) . '</p>' + '<p>' . __( 'This screen is used to customize the header section of your theme.') . '</p>' . + '<p>' . __( 'You can choose from the theme’s default header images, or use one of your own. You can also customize how your Site Title and Tagline are displayed.') . '<p>' + ) ); + + get_current_screen()->add_help_tab( array( + 'id' => 'set-header-image', + 'title' => __('Header Image'), + 'content' => + '<p>' . __( 'You can set a custom image header for your site. Simply upload the image and crop it, and the new header will go live immediately. Alternatively, you can use an image that has already been uploaded to your Media Library by clicking the “Choose Image” button.' ) . '</p>' . + '<p>' . __( 'Some themes come with additional header images bundled. If you see multiple images displayed, select the one you’d like and click the “Save Changes” button.' ) . '</p>' . + '<p>' . __( 'If your theme has more than one default header image, or you have uploaded more than one custom header image, you have the option of having WordPress display a randomly different image on each page of your site. Click the “Random” radio button next to the Uploaded Images or Default Images section to enable this feature.') . '</p>' . + '<p>' . __( 'If you don’t want a header image to be displayed on your site at all, click the “Remove Header Image” button at the bottom of the Header Image section of this page. If you want to re-enable the header image later, you just have to select one of the other image options and click “Save Changes”.') . '</p>' + ) ); + + get_current_screen()->add_help_tab( array( + 'id' => 'set-header-text', + 'title' => __('Header Text'), + 'content' => + '<p>' . sprintf( __( 'For most themes, the header text is your Site Title and Tagline, as defined in the <a href="%1$s">General Settings</a> section.' ), admin_url( 'options-general.php' ) ) . '<p>' . + '<p>' . __( 'In the Header Text section of this page, you can choose whether to display this text or hide it. You can also choose a color for the text by typing in a legitimate HTML hex value (eg: “#ff0000” for red) or by clicking “Select a Color” and dialing in a color using the color picker.') . '</p>' . + '<p>' . __( 'Don’t forget to Save Changes when you’re done!') . '</p>' ) ); get_current_screen()->set_help_sidebar( @@ -127,8 +153,11 @@ class Custom_Image_Header { return 1; $step = (int) $_GET['step']; - if ( $step < 1 || 3 < $step ) - $step = 1; + if ( $step < 1 || 3 < $step || + ( 2 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce-custom-header-upload'], 'custom-header-upload' ) ) || + ( 3 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'custom-header-crop-image' ) ) + ) + return 1; return $step; } @@ -141,10 +170,15 @@ class Custom_Image_Header { function js_includes() { $step = $this->step(); - if ( ( 1 == $step || 3 == $step ) && $this->header_text() ) - wp_enqueue_script('farbtastic'); - elseif ( 2 == $step ) + if ( ( 1 == $step || 3 == $step ) ) { + add_thickbox(); + wp_enqueue_script( 'media-upload' ); + wp_enqueue_script( 'custom-header' ); + if ( current_theme_supports( 'custom-header', 'header-text' ) ) + wp_enqueue_script('farbtastic'); + } elseif ( 2 == $step ) { wp_enqueue_script('imgareaselect'); + } } /** @@ -155,24 +189,12 @@ class Custom_Image_Header { function css_includes() { $step = $this->step(); - if ( ( 1 == $step || 3 == $step ) && $this->header_text() ) + if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) wp_enqueue_style('farbtastic'); elseif ( 2 == $step ) wp_enqueue_style('imgareaselect'); } - /** - * Check if header text is allowed - * - * @since 3.0.0 - */ - function header_text() { - if ( defined( 'NO_HEADER_TEXT' ) && NO_HEADER_TEXT ) - return false; - - return true; - } - /** * Execute custom header modification. * @@ -189,7 +211,7 @@ class Custom_Image_Header { if ( isset( $_POST['resetheader'] ) ) { check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); - remove_theme_mod( 'header_image' ); + $this->reset_header_image(); return; } @@ -201,36 +223,27 @@ class Custom_Image_Header { if ( isset( $_POST['removeheader'] ) ) { check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); - set_theme_mod( 'header_image', 'remove-header' ); + $this->remove_header_image(); return; } - if ( isset( $_POST['text-color'] ) ) { + if ( isset( $_POST['text-color'] ) && ! isset( $_POST['display-header-text'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + set_theme_mod( 'header_textcolor', 'blank' ); + } elseif ( isset( $_POST['text-color'] ) ) { check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); $_POST['text-color'] = str_replace( '#', '', $_POST['text-color'] ); - if ( 'blank' == $_POST['text-color'] ) { + $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['text-color']); + if ( strlen($color) == 6 || strlen($color) == 3 ) + set_theme_mod('header_textcolor', $color); + elseif ( ! $color ) set_theme_mod( 'header_textcolor', 'blank' ); - } else { - $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['text-color']); - if ( strlen($color) == 6 || strlen($color) == 3 ) - set_theme_mod('header_textcolor', $color); - } } if ( isset( $_POST['default-header'] ) ) { check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); - if ( 'random-default-image' == $_POST['default-header'] ) { - set_theme_mod( 'header_image', 'random-default-image' ); - } elseif ( 'random-uploaded-image' == $_POST['default-header'] ) { - set_theme_mod( 'header_image', 'random-uploaded-image' ); - } else { - $this->process_default_headers(); - $uploaded = get_uploaded_header_images(); - if ( isset( $uploaded[$_POST['default-header']] ) ) - set_theme_mod( 'header_image', esc_url( $uploaded[$_POST['default-header']]['url'] ) ); - elseif ( isset( $this->default_headers[$_POST['default-header']] ) ) - set_theme_mod( 'header_image', esc_url( $this->default_headers[$_POST['default-header']]['url'] ) ); - } + $this->set_header_image( $_POST['default-header'] ); + return; } } @@ -290,9 +303,9 @@ class Custom_Image_Header { echo '<div class="default-header">'; echo '<label><input name="default-header" type="radio" value="' . esc_attr( $header_key ) . '" ' . checked( $header_url, get_theme_mod( 'header_image' ), false ) . ' />'; $width = ''; - if ( !empty( $header['uploaded'] ) ) + if ( !empty( $header['attachment_id'] ) ) $width = ' width="230"'; - echo '<img src="' . $header_thumbnail . '" alt="' . esc_attr( $header_desc ) .'" title="' . esc_attr( $header_desc ) . '"' . $width . ' /></label>'; + echo '<img src="' . set_url_scheme( $header_thumbnail ) . '" alt="' . esc_attr( $header_desc ) .'" title="' . esc_attr( $header_desc ) . '"' . $width . ' /></label>'; echo '</div>'; } echo '<div class="clear"></div></div>'; @@ -305,7 +318,7 @@ class Custom_Image_Header { */ function js() { $step = $this->step(); - if ( ( 1 == $step || 3 == $step ) && $this->header_text() ) + if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) $this->js_1(); elseif ( 2 == $step ) $this->js_2(); @@ -319,86 +332,75 @@ class Custom_Image_Header { function js_1() { ?> <script type="text/javascript"> /* <![CDATA[ */ - var text_objects = ['#name', '#desc', '#text-color-row']; - var farbtastic; - var default_color = '#<?php echo HEADER_TEXTCOLOR; ?>'; - var old_color = null; +var farbtastic; +(function($){ + var default_color = '#<?php echo get_theme_support( 'custom-header', 'default-text-color' ); ?>', + header_text_fields; function pickColor(color) { - jQuery('#name').css('color', color); - jQuery('#desc').css('color', color); - jQuery('#text-color').val(color); + $('#name').css('color', color); + $('#desc').css('color', color); + $('#text-color').val(color); farbtastic.setColor(color); } - function toggle_text(s) { - if (jQuery(s).attr('id') == 'showtext' && jQuery('#text-color').val() != 'blank') - return; - - if (jQuery(s).attr('id') == 'hidetext' && jQuery('#text-color').val() == 'blank') + function toggle_text() { + var checked = $('#display-header-text').prop('checked'), + text_color; + header_text_fields.toggle( checked ); + if ( ! checked ) return; - - if (jQuery('#text-color').val() == 'blank') { - //Show text - if (old_color == '#blank') - old_color = default_color; - - jQuery( text_objects.toString() ).show(); - jQuery('#text-color').val(old_color); - jQuery('#name').css('color', old_color); - jQuery('#desc').css('color', old_color); - pickColor(old_color); + text_color = $('#text-color'); + if ( '' == text_color.val().replace('#', '') ) { + text_color.val( default_color ); + pickColor( default_color ); } else { - //Hide text - jQuery( text_objects.toString() ).hide(); - old_color = jQuery('#text-color').val(); - jQuery('#text-color').val('blank'); + pickColor( text_color.val() ); } } - jQuery(document).ready(function() { - jQuery('#pickcolor').click(function() { - jQuery('#color-picker').show(); + $(document).ready(function() { + header_text_fields = $('.displaying-header-text'); + $('#pickcolor').click(function(e) { + e.preventDefault(); + $('#color-picker').show(); }); - jQuery('input[name="hidetext"]').click(function() { - toggle_text(this); - }); + $('#display-header-text').click( toggle_text ); - jQuery('#defaultcolor').click(function() { + $('#defaultcolor').click(function() { pickColor(default_color); - jQuery('#text-color').val(default_color) + $('#text-color').val(default_color); }); - jQuery('#text-color').keyup(function() { - var _hex = jQuery('#text-color').val(); + $('#text-color').keyup(function() { + var _hex = $('#text-color').val(); var hex = _hex; if ( hex[0] != '#' ) hex = '#' + hex; hex = hex.replace(/[^#a-fA-F0-9]+/, ''); if ( hex != _hex ) - jQuery('#text-color').val(hex); + $('#text-color').val(hex); if ( hex.length == 4 || hex.length == 7 ) pickColor( hex ); }); - jQuery(document).mousedown(function(){ - jQuery('#color-picker').each( function() { - var display = jQuery(this).css('display'); + $(document).mousedown(function(){ + $('#color-picker').each( function() { + var display = $(this).css('display'); if (display == 'block') - jQuery(this).fadeOut(2); + $(this).fadeOut(2); }); }); - farbtastic = jQuery.farbtastic('#color-picker', function(color) { pickColor(color); }); - <?php if ( $color = get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) ) { ?> - pickColor('#<?php echo $color; ?>'); - <?php } ?> - - <?php if ( 'blank' == get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) || '' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || ! $this->header_text() ) { ?> + farbtastic = $.farbtastic('#color-picker', function(color) { pickColor(color); }); + <?php if ( display_header_text() ) { ?> + pickColor('#<?php echo get_header_textcolor(); ?>'); + <?php } else { ?> toggle_text(); <?php } ?> }); +})(jQuery); /* ]]> */ </script> <?php @@ -420,8 +422,8 @@ class Custom_Image_Header { } jQuery(document).ready(function() { - var xinit = <?php echo HEADER_IMAGE_WIDTH; ?>; - var yinit = <?php echo HEADER_IMAGE_HEIGHT; ?>; + var xinit = <?php echo absint( get_theme_support( 'custom-header', 'width' ) ); ?>; + var yinit = <?php echo absint( get_theme_support( 'custom-header', 'height' ) ); ?>; var ratio = xinit / yinit; var ximg = jQuery('img#upload').width(); var yimg = jQuery('img#upload').height(); @@ -439,14 +441,28 @@ class Custom_Image_Header { jQuery('img#upload').imgAreaSelect({ handles: true, keys: true, - aspectRatio: xinit + ':' + yinit, show: true, x1: 0, y1: 0, x2: xinit, y2: yinit, - maxHeight: <?php echo HEADER_IMAGE_HEIGHT; ?>, - maxWidth: <?php echo HEADER_IMAGE_WIDTH; ?>, + <?php + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) { + ?> + aspectRatio: xinit + ':' + yinit, + <?php + } + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) ) { + ?> + maxHeight: <?php echo get_theme_support( 'custom-header', 'height' ); ?>, + <?php + } + if ( ! current_theme_supports( 'custom-header', 'flex-width' ) ) { + ?> + maxWidth: <?php echo get_theme_support( 'custom-header', 'width' ); ?>, + <?php + } + ?> onInit: function () { jQuery('#width').val(xinit); jQuery('#height').val(yinit); @@ -483,44 +499,70 @@ class Custom_Image_Header { </div> <?php } ?> +<h3><?php _e( 'Header Image' ); ?></h3> + <table class="form-table"> <tbody> - <tr valign="top"> <th scope="row"><?php _e( 'Preview' ); ?></th> -<td > +<td> <?php if ( $this->admin_image_div_callback ) { call_user_func( $this->admin_image_div_callback ); } else { ?> - <div id="headimg" style="max-width:<?php echo HEADER_IMAGE_WIDTH; ?>px;height:<?php echo HEADER_IMAGE_HEIGHT; ?>px;background-image:url(<?php esc_url ( header_image() ) ?>);"> + <div id="headimg" style="background-image:url(<?php esc_url ( header_image() ) ?>);max-width:<?php echo get_custom_header()->width; ?>px;height:<?php echo get_custom_header()->height; ?>px;"> <?php - if ( 'blank' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || '' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || ! $this->header_text() ) - $style = ' style="display:none;"'; + if ( display_header_text() ) + $style = ' style="color:#' . get_header_textcolor() . ';"'; else - $style = ' style="color:#' . get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) . ';"'; + $style = ' style="display:none;"'; ?> - <h1><a id="name"<?php echo $style; ?> onclick="return false;" href="<?php bloginfo('url'); ?>"><?php bloginfo( 'name' ); ?></a></h1> - <div id="desc"<?php echo $style; ?>><?php bloginfo( 'description' ); ?></div> + <h1><a id="name" class="displaying-header-text" <?php echo $style; ?> onclick="return false;" href="<?php bloginfo('url'); ?>"><?php bloginfo( 'name' ); ?></a></h1> + <div id="desc" class="displaying-header-text" <?php echo $style; ?>><?php bloginfo( 'description' ); ?></div> </div> <?php } ?> </td> </tr> -<?php if ( current_theme_supports( 'custom-header-uploads' ) ) : ?> +<?php if ( current_theme_supports( 'custom-header', 'uploads' ) ) : ?> <tr valign="top"> -<th scope="row"><?php _e( 'Upload Image' ); ?></th> +<th scope="row"><?php _e( 'Select Image' ); ?></th> <td> <p><?php _e( 'You can upload a custom header image to be shown at the top of your site instead of the default one. On the next screen you will be able to crop the image.' ); ?><br /> - <?php printf( __( 'Images of exactly <strong>%1$d × %2$d pixels</strong> will be used as-is.' ), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT ); ?></p> + <?php + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) { + printf( __( 'Images of exactly <strong>%1$d × %2$d pixels</strong> will be used as-is.' ) . '<br />', get_theme_support( 'custom-header', 'width' ), get_theme_support( 'custom-header', 'height' ) ); + } elseif ( current_theme_supports( 'custom-header', 'flex-height' ) ) { + if ( ! current_theme_supports( 'custom-header', 'flex-width' ) ) + printf( __( 'Images should be at least <strong>%1$d pixels</strong> wide.' ) . ' ', get_theme_support( 'custom-header', 'width' ) ); + } elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) { + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) ) + printf( __( 'Images should be at least <strong>%1$d pixels</strong> tall.' ) . ' ', get_theme_support( 'custom-header', 'height' ) ); + } + if ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) { + if ( current_theme_supports( 'custom-header', 'width' ) ) + printf( __( 'Suggested width is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'width' ) ); + if ( current_theme_supports( 'custom-header', 'height' ) ) + printf( __( 'Suggested height is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'height' ) ); + } + ?></p> <form enctype="multipart/form-data" id="upload-form" method="post" action="<?php echo esc_attr( add_query_arg( 'step', 2 ) ) ?>"> <p> <label for="upload"><?php _e( 'Choose an image from your computer:' ); ?></label><br /> <input type="file" id="upload" name="import" /> <input type="hidden" name="action" value="save" /> - <?php wp_nonce_field( 'custom-header-upload', '_wpnonce-custom-header-upload' ) ?> + <?php wp_nonce_field( 'custom-header-upload', '_wpnonce-custom-header-upload' ); ?> <?php submit_button( __( 'Upload' ), 'button', 'submit', false ); ?> </p> + <?php + $image_library_url = get_upload_iframe_src( 'image', null, 'library' ); + $image_library_url = remove_query_arg( 'TB_iframe', $image_library_url ); + $image_library_url = add_query_arg( array( 'context' => 'custom-header', 'TB_iframe' => 1 ), $image_library_url ); + ?> + <p> + <label for="choose-from-library-link"><?php _e( 'Or choose an image from your media library:' ); ?></label><br /> + <a id="choose-from-library-link" class="button thickbox" href="<?php echo esc_url( $image_library_url ); ?>"><?php _e( 'Choose Image' ); ?></a> + </p> </form> </td> </tr> @@ -546,7 +588,7 @@ class Custom_Image_Header { <tr valign="top"> <th scope="row"><?php _e( 'Default Images' ); ?></th> <td> -<?php if ( current_theme_supports( 'custom-header-uploads' ) ) : ?> +<?php if ( current_theme_supports( 'custom-header', 'uploads' ) ) : ?> <p><?php _e( 'If you don‘t want to upload your own image, you can use one of these cool headers, or show a random one.' ) ?></p> <?php else: ?> <p><?php _e( 'You can use one of these cool headers or show a random one on each page.' ) ?></p> @@ -567,7 +609,8 @@ class Custom_Image_Header { </tr> <?php endif; - if ( defined( 'HEADER_IMAGE' ) && '' != HEADER_IMAGE ) : ?> + $default_image = get_theme_support( 'custom-header', 'default-image' ); + if ( $default_image && get_header_image() != $default_image ) : ?> <tr valign="top"> <th scope="row"><?php _e( 'Reset Image' ); ?></th> <td> @@ -579,33 +622,37 @@ class Custom_Image_Header { </tbody> </table> - <?php if ( $this->header_text() ) : ?> +<?php if ( current_theme_supports( 'custom-header', 'header-text' ) ) : ?> + +<h3><?php _e( 'Header Text' ); ?></h3> + <table class="form-table"> <tbody> -<tr valign="top" class="hide-if-no-js"> -<th scope="row"><?php _e( 'Display Text' ); ?></th> +<tr valign="top"> +<th scope="row"><?php _e( 'Header Text' ); ?></th> <td> <p> - <?php $hidetext = get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ); ?> - <label><input type="radio" value="1" name="hidetext" id="hidetext"<?php checked( ( 'blank' == $hidetext || empty( $hidetext ) ) ? true : false ); ?> /> <?php _e( 'No' ); ?></label> - <label><input type="radio" value="0" name="hidetext" id="showtext"<?php checked( ( 'blank' == $hidetext || empty( $hidetext ) ) ? false : true ); ?> /> <?php _e( 'Yes' ); ?></label> + <label><input type="checkbox" name="display-header-text" id="display-header-text"<?php checked( display_header_text() ); ?> /> <?php _e( 'Show header text with your image.' ); ?></label> </p> </td> </tr> -<tr valign="top" id="text-color-row"> +<tr valign="top" class="displaying-header-text"> <th scope="row"><?php _e( 'Text Color' ); ?></th> <td> <p> - <input type="text" name="text-color" id="text-color" value="#<?php echo esc_attr( get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) ); ?>" /> - <span class="description hide-if-js"><?php _e( 'If you want to hide header text, add <strong>#blank</strong> as text color.' );?></span> - <input type="button" class="button hide-if-no-js" value="<?php esc_attr_e( 'Select a Color' ); ?>" id="pickcolor" /> +<?php if ( display_header_text() ) : ?> + <input type="text" name="text-color" id="text-color" value="#<?php echo esc_attr( get_header_textcolor() ); ?>" /> +<?php else : ?> + <input type="text" name="text-color" id="text-color" value="#<?php echo esc_attr( get_theme_support( 'custom-header', 'default-text-color' ) ); ?>" /> +<?php endif; ?> + <a href="#" class="hide-if-no-js" id="pickcolor"><?php _e( 'Select a Color' ); ?></a> </p> <div id="color-picker" style="z-index: 100; background:#eee; border:1px solid #ccc; position:absolute; display:none;"></div> </td> </tr> - <?php if ( defined('HEADER_TEXTCOLOR') && get_theme_mod('header_textcolor') ) { ?> + <?php if ( current_theme_supports( 'custom-header', 'default-text-color' ) && get_theme_mod( 'header_textcolor' ) ) { ?> <tr valign="top"> <th scope="row"><?php _e('Reset Text Color'); ?></th> <td> @@ -617,7 +664,7 @@ class Custom_Image_Header { </tbody> </table> - <?php endif; +<?php endif; do_action( 'custom_header_options' ); @@ -636,49 +683,55 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> */ function step_2() { check_admin_referer('custom-header-upload', '_wpnonce-custom-header-upload'); - if ( ! current_theme_supports( 'custom-header-uploads' ) ) + if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) wp_die( __( 'Cheatin’ uh?' ) ); - $overrides = array('test_form' => false); - $file = wp_handle_upload($_FILES['import'], $overrides); - - if ( isset($file['error']) ) - wp_die( $file['error'], __( 'Image Upload Error' ) ); - - $url = $file['url']; - $type = $file['type']; - $file = $file['file']; - $filename = basename($file); + if ( empty( $_POST ) && isset( $_GET['file'] ) ) { + $attachment_id = absint( $_GET['file'] ); + $file = get_attached_file( $attachment_id, true ); + $url = wp_get_attachment_image_src( $attachment_id, 'full'); + $url = $url[0]; + } elseif ( isset( $_POST ) ) { + extract($this->step_2_manage_upload()); + } - // Construct the object array - $object = array( - 'post_title' => $filename, - 'post_content' => $url, - 'post_mime_type' => $type, - 'guid' => $url, - 'context' => 'custom-header' - ); + if ( file_exists( $file ) ) { + list( $width, $height, $type, $attr ) = getimagesize( $file ); + } else { + $data = wp_get_attachment_metadata( $attachment_id ); + $height = $data[ 'height' ]; + $width = $data[ 'width' ]; + unset( $data ); + } - // Save the data - $id = wp_insert_attachment($object, $file); + $max_width = 0; + // For flex, limit size of image displayed to 1500px unless theme says otherwise + if ( current_theme_supports( 'custom-header', 'flex-width' ) ) + $max_width = 1500; - list($width, $height, $type, $attr) = getimagesize( $file ); + if ( current_theme_supports( 'custom-header', 'max-width' ) ) + $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) ); + $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) ); - if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) { + // If flexible height isn't supported and the image is the exact right size + if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) + && $width == get_theme_support( 'custom-header', 'width' ) && $height == get_theme_support( 'custom-header', 'height' ) ) + { // Add the meta-data - wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); - update_post_meta( $id, '_wp_attachment_is_custom_header', get_option('stylesheet' ) ); + if ( file_exists( $file ) ) + wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) ); - set_theme_mod('header_image', esc_url($url)); - do_action('wp_create_file_in_uploads', $file, $id); // For replication + $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) ); + + do_action('wp_create_file_in_uploads', $file, $attachment_id); // For replication return $this->finished(); - } elseif ( $width > HEADER_IMAGE_WIDTH ) { - $oitar = $width / HEADER_IMAGE_WIDTH; - $image = wp_crop_image($file, 0, 0, $width, $height, HEADER_IMAGE_WIDTH, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file)); - if ( is_wp_error( $image ) ) - wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); + } elseif ( $width > $max_width ) { + $oitar = $width / $max_width; + $image = wp_crop_image($attachment_id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file)); + if ( ! $image || is_wp_error( $image ) ) + wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); - $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication + $image = apply_filters('wp_create_file_in_uploads', $image, $attachment_id); // For replication $url = str_replace(basename($url), basename($image), $url); $width = $width / $oitar; @@ -704,25 +757,66 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> <input type="hidden" name="y1" id="y1" value="0"/> <input type="hidden" name="width" id="width" value="<?php echo esc_attr( $width ); ?>"/> <input type="hidden" name="height" id="height" value="<?php echo esc_attr( $height ); ?>"/> - <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $id ); ?>" /> + <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $attachment_id ); ?>" /> <input type="hidden" name="oitar" id="oitar" value="<?php echo esc_attr( $oitar ); ?>" /> + <?php if ( empty( $_POST ) && isset( $_GET['file'] ) ) { ?> + <input type="hidden" name="create-new-attachment" value="true" /> + <?php } ?> <?php wp_nonce_field( 'custom-header-crop-image' ) ?> - <?php submit_button( __( 'Crop and Publish' ) ); ?> + <p class="submit"> + <?php submit_button( __( 'Crop and Publish' ), 'primary', 'submit', false ); ?> + <?php + if ( isset( $oitar ) && 1 == $oitar ) + submit_button( __( 'Skip Cropping, Publish Image as Is' ), 'secondary', 'skip-cropping', false ); + ?> </p> </form> </div> <?php } + + /** + * Upload the file to be cropped in the second step. + * + * @since 3.4.0 + */ + function step_2_manage_upload() { + $overrides = array('test_form' => false); + $file = wp_handle_upload($_FILES['import'], $overrides); + + if ( isset($file['error']) ) + wp_die( $file['error'], __( 'Image Upload Error' ) ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $filename = basename($file); + + // Construct the object array + $object = array( + 'post_title' => $filename, + 'post_content' => $url, + 'post_mime_type' => $type, + 'guid' => $url, + 'context' => 'custom-header' + ); + + // Save the data + $attachment_id = wp_insert_attachment( $object, $file ); + return compact( 'attachment_id', 'file', 'filename', 'url', 'type' ); + } + /** * Display third step of custom header image page. * * @since 2.1.0 */ function step_3() { - check_admin_referer('custom-header-crop-image'); - if ( ! current_theme_supports( 'custom-header-uploads' ) ) + check_admin_referer( 'custom-header-crop-image' ); + + if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) wp_die( __( 'Cheatin’ uh?' ) ); if ( $_POST['oitar'] > 1 ) { @@ -735,37 +829,75 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> $attachment_id = absint( $_POST['attachment_id'] ); $original = get_attached_file($attachment_id); - $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT ); - if ( is_wp_error( $cropped ) ) - wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); + + $max_width = 0; + // For flex, limit size of image displayed to 1500px unless theme says otherwise + if ( current_theme_supports( 'custom-header', 'flex-width' ) ) + $max_width = 1500; + + if ( current_theme_supports( 'custom-header', 'max-width' ) ) + $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) ); + $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) ); + + if ( ( current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) || $_POST['width'] > $max_width ) + $dst_height = absint( $_POST['height'] * ( $max_width / $_POST['width'] ) ); + elseif ( current_theme_supports( 'custom-header', 'flex-height' ) && current_theme_supports( 'custom-header', 'flex-width' ) ) + $dst_height = absint( $_POST['height'] ); + else + $dst_height = get_theme_support( 'custom-header', 'height' ); + + if ( ( current_theme_supports( 'custom-header', 'flex-width' ) && ! current_theme_supports( 'custom-header', 'flex-height' ) ) || $_POST['width'] > $max_width ) + $dst_width = absint( $_POST['width'] * ( $max_width / $_POST['width'] ) ); + elseif ( current_theme_supports( 'custom-header', 'flex-width' ) && current_theme_supports( 'custom-header', 'flex-height' ) ) + $dst_width = absint( $_POST['width'] ); + else + $dst_width = get_theme_support( 'custom-header', 'width' ); + + if ( empty( $_POST['skip-cropping'] ) ) + $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $dst_width, $dst_height ); + elseif ( ! empty( $_POST['create-new-attachment'] ) ) + $cropped = _copy_image_file( $attachment_id ); + else + $cropped = get_attached_file( $attachment_id ); + + if ( ! $cropped || is_wp_error( $cropped ) ) + wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); $cropped = apply_filters('wp_create_file_in_uploads', $cropped, $attachment_id); // For replication $parent = get_post($attachment_id); $parent_url = $parent->guid; - $url = str_replace(basename($parent_url), basename($cropped), $parent_url); + $url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url ); + + $size = @getimagesize( $cropped ); + $image_type = ( $size ) ? $size['mime'] : 'image/jpeg'; // Construct the object array $object = array( 'ID' => $attachment_id, 'post_title' => basename($cropped), 'post_content' => $url, - 'post_mime_type' => 'image/jpeg', + 'post_mime_type' => $image_type, 'guid' => $url, 'context' => 'custom-header' ); + if ( ! empty( $_POST['create-new-attachment'] ) ) + unset( $object['ID'] ); // Update the attachment - wp_insert_attachment($object, $cropped); + $attachment_id = wp_insert_attachment( $object, $cropped ); wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $cropped ) ); - update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_option('stylesheet' ) ); - set_theme_mod('header_image', $url); + $width = $dst_width; + $height = $dst_height; + $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) ); // cleanup - $medium = str_replace(basename($original), 'midsize-'.basename($original), $original); - @unlink( apply_filters( 'wp_delete_file', $medium ) ); - @unlink( apply_filters( 'wp_delete_file', $original ) ); + $medium = str_replace( basename( $original ), 'midsize-' . basename( $original ), $original ); + if ( file_exists( $medium ) ) + @unlink( apply_filters( 'wp_delete_file', $medium ) ); + if ( empty( $_POST['create-new-attachment'] ) && empty( $_POST['skip-cropping'] ) ) + @unlink( apply_filters( 'wp_delete_file', $original ) ); return $this->finished(); } @@ -789,13 +921,132 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> if ( ! current_user_can('edit_theme_options') ) wp_die(__('You do not have permission to customize headers.')); $step = $this->step(); - if ( 1 == $step ) - $this->step_1(); - elseif ( 2 == $step ) + if ( 2 == $step ) $this->step_2(); elseif ( 3 == $step ) $this->step_3(); + else + $this->step_1(); + } + + /** + * Replace default attachment actions with "Set as header" link. + * + * @since 3.4.0 + */ + function attachment_fields_to_edit( $form_fields, $post ) { + $form_fields = array(); + $href = esc_url(add_query_arg(array( + 'page' => 'custom-header', + 'step' => 2, + '_wpnonce-custom-header-upload' => wp_create_nonce('custom-header-upload'), + 'file' => $post->ID + ), admin_url('themes.php'))); + + $form_fields['buttons'] = array( 'tr' => '<tr class="submit"><td></td><td><a data-location="' . $href . '" class="wp-set-header">' . __( 'Set as header' ) . '</a></td></tr>' ); + $form_fields['context'] = array( 'input' => 'hidden', 'value' => 'custom-header' ); + + return $form_fields; + } + + /** + * Leave only "Media Library" tab in the uploader window. + * + * @since 3.4.0 + */ + function filter_upload_tabs() { + return array( 'library' => __('Media Library') ); + } + + /** + * Choose a header image, selected from existing uploaded and default headers, + * or provide an array of uploaded header data (either new, or from media library). + * + * @param mixed $choice Which header image to select. Allows for values of 'random-default-image', + * for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling + * among the uploaded images; the key of a default image registered for that theme; and + * the key of an image uploaded for that theme (the basename of the URL). + * Or an array of arguments: attachment_id, url, width, height. All are required. + * + * @since 3.4.0 + */ + final public function set_header_image( $choice ) { + if ( is_array( $choice ) || is_object( $choice ) ) { + $choice = (array) $choice; + if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) ) + return; + + $choice['url'] = esc_url_raw( $choice['url'] ); + + $header_image_data = (object) array( + 'attachment_id' => $choice['attachment_id'], + 'url' => $choice['url'], + 'thumbnail_url' => $choice['url'], + 'height' => $choice['height'], + 'width' => $choice['width'], + ); + + update_post_meta( $choice['attachment_id'], '_wp_attachment_is_custom_header', get_stylesheet() ); + set_theme_mod( 'header_image', $choice['url'] ); + set_theme_mod( 'header_image_data', $header_image_data ); + return; + } + + if ( in_array( $choice, array( 'remove-header', 'random-default-image', 'random-uploaded-image' ) ) ) { + set_theme_mod( 'header_image', $choice ); + remove_theme_mod( 'header_image_data' ); + return; + } + + $uploaded = get_uploaded_header_images(); + if ( $uploaded && isset( $uploaded[ $choice ] ) ) { + $header_image_data = $uploaded[ $choice ]; + + } else { + $this->process_default_headers(); + if ( isset( $this->default_headers[ $choice ] ) ) + $header_image_data = $this->default_headers[ $choice ]; + else + return; + } + + set_theme_mod( 'header_image', esc_url_raw( $header_image_data['url'] ) ); + set_theme_mod( 'header_image_data', $header_image_data ); + } + + /** + * Remove a header image. + * + * @since 3.4.0 + */ + final public function remove_header_image() { + return $this->set_header_image( 'remove-header' ); } + /** + * Reset a header image to the default image for the theme. + * + * This method does not do anything if the theme does not have a default header image. + * + * @since 3.4.0 + */ + final public function reset_header_image() { + $this->process_default_headers(); + $default = get_theme_support( 'custom-header', 'default-image' ); + + if ( ! $default ) + return $this->remove_header_image(); + + $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() ); + + foreach ( $this->default_headers as $header => $details ) { + if ( $details['url'] == $default ) { + $default_data = $details; + break; + } + } + + set_theme_mod( 'header_image', $default ); + set_theme_mod( 'header_image_data', (object) $default_data ); + } } -?> diff --git a/wp-admin/customize.php b/wp-admin/customize.php new file mode 100644 index 000000000..3e6a67508 --- /dev/null +++ b/wp-admin/customize.php @@ -0,0 +1,198 @@ +<?php +/** + * Customize Controls + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ + +require_once( './admin.php' ); +if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +wp_reset_vars( array( 'url', 'return' ) ); +$url = urldecode( $url ); +$url = wp_validate_redirect( $url, home_url( '/' ) ); +if ( $return ) + $return = wp_validate_redirect( urldecode( $return ) ); +if ( ! $return ) + $return = $url; + +global $wp_scripts, $wp_customize; + +$registered = $wp_scripts->registered; +$wp_scripts = new WP_Scripts; +$wp_scripts->registered = $registered; + +add_action( 'customize_controls_print_scripts', 'print_head_scripts', 20 ); +add_action( 'customize_controls_print_footer_scripts', '_wp_footer_scripts' ); +add_action( 'customize_controls_print_styles', 'print_admin_styles', 20 ); + +do_action( 'customize_controls_init' ); + +wp_enqueue_script( 'customize-controls' ); +wp_enqueue_style( 'customize-controls' ); + +do_action( 'customize_controls_enqueue_scripts' ); + +// Let's roll. +@header('Content-Type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); + +wp_user_settings(); +_wp_admin_html_begin(); + +$body_class = ''; + +if ( wp_is_mobile() ) : + $body_class .= ' mobile'; + + ?><meta name="viewport" id="viewport-meta" content="width=device-width, initial-scale=0.8, minimum-scale=0.5, maximum-scale=1.2"><?php +endif; + +$is_ios = wp_is_mobile() && preg_match( '/iPad|iPod|iPhone/', $_SERVER['HTTP_USER_AGENT'] ); + +if ( $is_ios ) + $body_class .= ' ios'; + +$admin_title = sprintf( __( '%1$s — WordPress' ), strip_tags( sprintf( __( 'Customize %s' ), $wp_customize->theme()->display('Name') ) ) ); +?><title><?php echo $admin_title; ?></title><?php + +do_action( 'customize_controls_print_styles' ); +do_action( 'customize_controls_print_scripts' ); +?> +</head> +<body class="<?php echo esc_attr( $body_class ); ?>"> +<div class="wp-full-overlay expanded"> + <form id="customize-controls" class="wrap wp-full-overlay-sidebar"> + <?php wp_nonce_field( 'customize_controls-' . $wp_customize->get_stylesheet() ); ?> + <div id="customize-header-actions" class="wp-full-overlay-header"> + <?php + $save_text = $wp_customize->is_theme_active() ? __( 'Save & Publish' ) : __( 'Save & Activate' ); + submit_button( $save_text, 'primary', 'save', false ); + ?> + <img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" /> + <a class="back button" href="<?php echo esc_url( $return ? $return : admin_url( 'themes.php' ) ); ?>"> + <?php _e( 'Cancel' ); ?> + </a> + </div> + + <?php + $screenshot = $wp_customize->theme()->get_screenshot(); + $cannot_expand = ! ( $screenshot || $wp_customize->theme()->get('Description') ); + ?> + + <div class="wp-full-overlay-sidebar-content"> + <div id="customize-info" class="customize-section<?php if ( $cannot_expand ) echo ' cannot-expand'; ?>"> + <div class="customize-section-title"> + <span class="preview-notice"><?php + /* translators: %s is the theme name in the Customize/Live Preview pane */ + echo sprintf( __( 'You are previewing %s' ), '<strong class="theme-name">' . $wp_customize->theme()->display('Name') . '</strong>' ); + ?></span> + </div> + <?php if ( ! $cannot_expand ) : ?> + <div class="customize-section-content"> + <?php if ( $screenshot ) : ?> + <img class="theme-screenshot" src="<?php echo esc_url( $screenshot ); ?>" /> + <?php endif; ?> + + <?php if ( $wp_customize->theme()->get('Description') ): ?> + <div class="theme-description"><?php echo $wp_customize->theme()->display('Description'); ?></div> + <?php endif; ?> + </div> + <?php endif; ?> + </div> + + <div id="customize-theme-controls"><ul> + <?php + foreach ( $wp_customize->sections() as $section ) + $section->maybe_render(); + ?> + </ul></div> + </div> + + <div id="customize-footer-actions" class="wp-full-overlay-footer"> + <a href="#" class="collapse-sidebar button-secondary" title="<?php esc_attr_e('Collapse Sidebar'); ?>"> + <span class="collapse-sidebar-arrow"></span> + <span class="collapse-sidebar-label"><?php _e('Collapse'); ?></span> + </a> + </div> + </form> + <div id="customize-preview" class="wp-full-overlay-main"></div> + <?php + + do_action( 'customize_controls_print_footer_scripts' ); + + // If the frontend and the admin are served from the same domain, load the + // preview over ssl if the customizer is being loaded over ssl. This avoids + // insecure content warnings. This is not attempted if the admin and frontend + // are on different domains to avoid the case where the frontend doesn't have + // ssl certs. Domain mapping plugins can allow other urls in these conditions + // using the customize_allowed_urls filter. + + $allowed_urls = array( home_url('/') ); + $admin_origin = parse_url( admin_url() ); + $home_origin = parse_url( home_url() ); + $cross_domain = ( strtolower( $admin_origin[ 'host' ] ) != strtolower( $home_origin[ 'host' ] ) ); + + if ( is_ssl() && ! $cross_domain ) + $allowed_urls[] = home_url( '/', 'https' ); + + $allowed_urls = array_unique( apply_filters( 'customize_allowed_urls', $allowed_urls ) ); + + $fallback_url = add_query_arg( array( + 'preview' => 1, + 'template' => $wp_customize->get_template(), + 'stylesheet' => $wp_customize->get_stylesheet(), + 'preview_iframe' => true, + 'TB_iframe' => 'true' + ), home_url( '/' ) ); + + $login_url = add_query_arg( array( + 'interim-login' => 1, + 'customize-login' => 1 + ), wp_login_url() ); + + $settings = array( + 'theme' => array( + 'stylesheet' => $wp_customize->get_stylesheet(), + 'active' => $wp_customize->is_theme_active(), + ), + 'url' => array( + 'preview' => esc_url( $url ? $url : home_url( '/' ) ), + 'parent' => esc_url( admin_url() ), + 'activated' => admin_url( 'themes.php?activated=true&previewed' ), + 'ajax' => esc_url( admin_url( 'admin-ajax.php', 'relative' ) ), + 'allowed' => array_map( 'esc_url', $allowed_urls ), + 'isCrossDomain' => $cross_domain, + 'fallback' => $fallback_url, + 'home' => esc_url( home_url( '/' ) ), + 'login' => $login_url, + ), + 'browser' => array( + 'mobile' => wp_is_mobile(), + 'ios' => $is_ios, + ), + 'settings' => array(), + 'controls' => array(), + ); + + foreach ( $wp_customize->settings() as $id => $setting ) { + $settings['settings'][ $id ] = array( + 'value' => $setting->js_value(), + 'transport' => $setting->transport, + ); + } + + foreach ( $wp_customize->controls() as $id => $control ) { + $control->to_json(); + $settings['controls'][ $id ] = $control->json; + } + + ?> + <script type="text/javascript"> + var _wpCustomizeSettings = <?php echo json_encode( $settings ); ?>; + </script> +</div> +</body> +</html> diff --git a/wp-admin/edit-comments.php b/wp-admin/edit-comments.php index 224d36741..100d02302 100644 --- a/wp-admin/edit-comments.php +++ b/wp-admin/edit-comments.php @@ -121,13 +121,11 @@ get_current_screen()->add_help_tab( array( 'id' => 'moderating-comments', 'title' => __('Moderating Comments'), 'content' => - '<ul>' . - '<li>' . __( 'A yellow row means the comment is waiting for you to moderate it.' ) . '</li>' . - '<li>' . __( 'In the <strong>Author</strong> column, in addition to the author’s name, email address, and blog URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address.' ) . '</li>' . - '<li>' . __( 'In the <strong>Comment</strong> column, above each comment it says “Submitted on,” followed by the date and time the comment was left on your site. Clicking on the date/time link will take you to that comment on your live site. Hovering over any comment gives you options to approve, reply (and approve), quick edit, edit, spam mark, or trash that comment.' ) . '</li>' . - '<li>' . __( 'In the <strong>In Response To</strong> column, there are three elements. The text is the name of the post that inspired the comment, and links to the post editor for that entry. The View Post link leads to that post on your live site. The small bubble with the number in it shows how many comments that post has received. If the bubble is gray, you have moderated all comments for that post. If it is blue, there are pending comments. Clicking the bubble will filter the comments screen to show only comments on that post.' ) . '</li>' . - '<li>' . __( 'Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more.' ) . '</li>' . - '</ul>' + '<p>' . __( 'A yellow row means the comment is waiting for you to moderate it.' ) . '</p>' . + '<p>' . __( 'In the <strong>Author</strong> column, in addition to the author’s name, email address, and blog URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address.' ) . '</p>' . + '<p>' . __( 'In the <strong>Comment</strong> column, above each comment it says “Submitted on,” followed by the date and time the comment was left on your site. Clicking on the date/time link will take you to that comment on your live site. Hovering over any comment gives you options to approve, reply (and approve), quick edit, edit, spam mark, or trash that comment.' ) . '</p>' . + '<p>' . __( 'In the <strong>In Response To</strong> column, there are three elements. The text is the name of the post that inspired the comment, and links to the post editor for that entry. The View Post link leads to that post on your live site. The small bubble with the number in it shows how many comments that post has received. If the bubble is gray, you have moderated all comments for that post. If it is blue, there are pending comments. Clicking the bubble will filter the comments screen to show only comments on that post.' ) . '</p>' . + '<p>' . __( 'Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more.' ) . '</p>' ) ); get_current_screen()->set_help_sidebar( diff --git a/wp-admin/edit-form-advanced.php b/wp-admin/edit-form-advanced.php index ec6f4ca38..c22c68aaf 100644 --- a/wp-admin/edit-form-advanced.php +++ b/wp-admin/edit-form-advanced.php @@ -12,6 +12,9 @@ if ( !defined('ABSPATH') ) wp_enqueue_script('post'); +if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); + if ( post_type_supports($post_type, 'editor') || post_type_supports($post_type, 'thumbnail') ) { add_thickbox(); wp_enqueue_script('media-upload'); @@ -87,7 +90,7 @@ $form_extra .= "<input type='hidden' id='post_ID' name='post_ID' value='" . esc_ if ( $autosave && mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) { foreach ( _wp_post_revision_fields() as $autosave_field => $_autosave_field ) { if ( normalize_whitespace( $autosave->$autosave_field ) != normalize_whitespace( $post->$autosave_field ) ) { - $notice = sprintf( __( 'There is an autosave of this post that is more recent than the version below. <a href="%s">View the autosave</a>' ), get_edit_post_link( $autosave->ID ) ); + $notice = sprintf( __( 'There is an autosave of this post that is more recent than the version below. <a href="%s">View the autosave</a>' ), get_edit_post_link( $autosave->ID ) ); break; } } @@ -240,7 +243,7 @@ if ( 'post' == $post_type ) { require_once('./admin-header.php'); ?> -<div class="wrap columns-<?php echo (int) $screen_layout_columns ? (int) $screen_layout_columns : 'auto'; ?>"> +<div class="wrap"> <?php screen_icon(); ?> <h2><?php echo esc_html( $title ); ?><?php if ( isset( $post_new_file ) ) : ?> <a href="<?php echo esc_url( $post_new_file ) ?>" class="add-new-h2"><?php echo esc_html($post_type_object->labels->add_new); ?></a><?php endif; ?></h2> <?php if ( $notice ) : ?> @@ -272,17 +275,9 @@ wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> -<div id="poststuff" class="metabox-holder<?php echo 1 != $screen_layout_columns ? ' has-right-sidebar' : ''; ?>"> -<div id="side-info-column" class="inner-sidebar"> -<?php -if ( 1 != $screen_layout_columns ) { - ('page' == $post_type) ? do_action('submitpage_box') : do_action('submitpost_box'); - $side_meta_boxes = do_meta_boxes($post_type, 'side', $post); -} -?> -</div> +<div id="poststuff"> -<div id="post-body"> +<div id="post-body" class="metabox-holder columns-<?php echo 1 == get_current_screen()->get_columns() ? '1' : '2'; ?>"> <div id="post-body-content"> <?php if ( post_type_supports($post_type, 'title') ) { ?> <div id="titlediv"> @@ -338,25 +333,41 @@ wp_nonce_field( 'samplepermalink', 'samplepermalinknonce', false ); </tr></tbody></table> </div> +<?php } ?> +</div><!-- /post-body-content --> +<div id="postbox-container-1" class="postbox-container"> <?php -} -if ( 1 == $screen_layout_columns ) { - ('page' == $post_type) ? do_action('submitpage_box') : do_action('submitpost_box'); - $side_meta_boxes = do_meta_boxes($post_type, 'side', $post); -} +if ( 'page' == $post_type ) + do_action('submitpage_box'); +else + do_action('submitpost_box'); + +do_meta_boxes($post_type, 'side', $post); + +?> +</div> +<div id="postbox-container-2" class="postbox-container"> +<?php do_meta_boxes(null, 'normal', $post); -( 'page' == $post_type ) ? do_action('edit_page_form') : do_action('edit_form_advanced'); +if ( 'page' == $post_type ) + do_action('edit_page_form'); +else + do_action('edit_form_advanced'); do_meta_boxes(null, 'advanced', $post); -do_action('dbx_post_sidebar'); ?> - -</div> +?> </div> +<?php + +do_action('dbx_post_sidebar'); + +?> +</div><!-- /post-body --> <br class="clear" /> </div><!-- /poststuff --> </form> diff --git a/wp-admin/edit-form-comment.php b/wp-admin/edit-form-comment.php index 37772e3ca..2340baf4f 100644 --- a/wp-admin/edit-form-comment.php +++ b/wp-admin/edit-form-comment.php @@ -9,28 +9,67 @@ // don't load directly if ( !defined('ABSPATH') ) die('-1'); - -/** - * @var string - */ -$submitbutton_text = __('Edit Comment'); -$toprow_title = sprintf(__('Editing Comment # %s'), $comment->comment_ID); -$form_action = 'editedcomment'; -$form_extra = "' />\n<input type='hidden' name='comment_ID' value='" . esc_attr($comment->comment_ID) . "' />\n<input type='hidden' name='comment_post_ID' value='" . esc_attr($comment->comment_post_ID); -$comment->comment_author_email = esc_attr($comment->comment_author_email); ?> - <form name="post" action="comment.php" method="post" id="post"> <?php wp_nonce_field('update-comment_' . $comment->comment_ID) ?> <div class="wrap"> <?php screen_icon(); ?> <h2><?php _e('Edit Comment'); ?></h2> -<div id="poststuff" class="metabox-holder has-right-sidebar"> -<input type="hidden" name="user_ID" value="<?php echo (int) $user_ID ?>" /> -<input type="hidden" name="action" value='<?php echo $form_action . $form_extra ?>' /> +<div id="poststuff"> +<input type="hidden" name="user_ID" value="<?php echo (int) $user_ID; ?>" /> +<input type="hidden" name="action" value="editedcomment" /> +<input type="hidden" name="comment_ID" value="<?php echo esc_attr( $comment->comment_ID ); ?>" /> +<input type="hidden" name="comment_post_ID" value="<?php echo esc_attr( $comment->comment_post_ID ); ?>" /> + +<div id="post-body" class="metabox-holder columns-2"> +<div id="post-body-content"> +<div id="namediv" class="stuffbox"> +<h3><label for="name"><?php _e( 'Author' ) ?></label></h3> +<div class="inside"> +<table class="form-table editcomment"> +<tbody> +<tr valign="top"> + <td class="first"><?php _e( 'Name:' ); ?></td> + <td><input type="text" name="newcomment_author" size="30" value="<?php echo esc_attr( $comment->comment_author ); ?>" tabindex="1" id="name" /></td> +</tr> +<tr valign="top"> + <td class="first"> + <?php + if ( $comment->comment_author_email ) { + printf( __( 'E-mail (%s):' ), get_comment_author_email_link( __( 'send e-mail' ), '', '' ) ); + } else { + _e( 'E-mail:' ); + } +?></td> + <td><input type="text" name="newcomment_author_email" size="30" value="<?php echo $comment->comment_author_email; ?>" tabindex="2" id="email" /></td> +</tr> +<tr valign="top"> + <td class="first"> + <?php + if ( ! empty( $comment->comment_author_url ) && 'http://' != $comment->comment_author_url ) { + $link = '<a href="' . $comment->comment_author_url . '" rel="external nofollow" target="_blank">' . __('visit site') . '</a>'; + printf( __( 'URL (%s):' ), apply_filters('get_comment_author_link', $link ) ); + } else { + _e( 'URL:' ); + } ?></td> + <td><input type="text" id="newcomment_author_url" name="newcomment_author_url" size="30" class="code" value="<?php echo esc_attr($comment->comment_author_url); ?>" tabindex="3" /></td> +</tr> +</tbody> +</table> +<br /> +</div> +</div> + +<div id="postdiv" class="postarea"> +<?php + $quicktags_settings = array( 'buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,spell,close' ); + wp_editor( $comment->comment_content, 'content', array( 'media_buttons' => false, 'tinymce' => false, 'quicktags' => $quicktags_settings ) ); + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> +</div> +</div><!-- /post-body-content --> -<div id="side-info-column" class="inner-sidebar"> +<div id="postbox-container-1" class="postbox-container"> <div id="submitdiv" class="stuffbox" > <h3><span class='hndle'><?php _e('Status') ?></span></h3> <div class="inside"> @@ -52,7 +91,7 @@ $comment->comment_author_email = esc_attr($comment->comment_author_email); <label class="spam"><input type="radio"<?php checked( $comment->comment_approved, 'spam' ); ?> name="comment_status" value="spam" /><?php /* translators: comment type radio button */ _ex('Spam', 'adjective'); ?></label> </div> -<div class="misc-pub-section curtime misc-pub-section-last"> +<div class="misc-pub-section curtime"> <?php // translators: Publish box date format, see http://php.net/date $datef = __( 'M j, Y @ G:i' ); @@ -77,69 +116,27 @@ $date = date_i18n( $datef, strtotime( $comment->comment_date ) ); </div> </div> </div> -</div> +</div><!-- /submitdiv --> </div> -<div id="post-body"> -<div id="post-body-content"> -<div id="namediv" class="stuffbox"> -<h3><label for="name"><?php _e( 'Author' ) ?></label></h3> -<div class="inside"> -<table class="form-table editcomment"> -<tbody> -<tr valign="top"> - <td class="first"><?php _e( 'Name:' ); ?></td> - <td><input type="text" name="newcomment_author" size="30" value="<?php echo esc_attr( $comment->comment_author ); ?>" tabindex="1" id="name" /></td> -</tr> -<tr valign="top"> - <td class="first"> - <?php - if ( $comment->comment_author_email ) { - printf( __( 'E-mail (%s):' ), get_comment_author_email_link( __( 'send e-mail' ), '', '' ) ); - } else { - _e( 'E-mail:' ); - } -?></td> - <td><input type="text" name="newcomment_author_email" size="30" value="<?php echo $comment->comment_author_email; ?>" tabindex="2" id="email" /></td> -</tr> -<tr valign="top"> - <td class="first"> - <?php - if ( ! empty( $comment->comment_author_url ) && 'http://' != $comment->comment_author_url ) { - $link = '<a href="' . $comment->comment_author_url . '" rel="external nofollow" target="_blank">' . __('visit site') . '</a>'; - printf( __( 'URL (%s):' ), apply_filters('get_comment_author_link', $link ) ); - } else { - _e( 'URL:' ); - } ?></td> - <td><input type="text" id="newcomment_author_url" name="newcomment_author_url" size="30" class="code" value="<?php echo esc_attr($comment->comment_author_url); ?>" tabindex="3" /></td> -</tr> -</tbody> -</table> -<br /> -</div> -</div> - -<div id="postdiv" class="postarea"> +<div id="postbox-container-2" class="postbox-container"> <?php - $quicktags_settings = array( 'buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,spell,close' ); - wp_editor( $comment->comment_content, 'content', array( 'media_buttons' => false, 'tinymce' => false, 'quicktags' => $quicktags_settings ) ); - wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> -</div> -<?php do_action('add_meta_boxes', 'comment', $comment); do_action('add_meta_boxes_comment', $comment); do_meta_boxes(null, 'normal', $comment); + ?> +</div> + <input type="hidden" name="c" value="<?php echo esc_attr($comment->comment_ID) ?>" /> <input type="hidden" name="p" value="<?php echo esc_attr($comment->comment_post_ID) ?>" /> <input name="referredby" type="hidden" id="referredby" value="<?php echo esc_url(stripslashes(wp_get_referer())); ?>" /> <?php wp_original_referer_field(true, 'previous'); ?> <input type="hidden" name="noredir" value="1" /> -</div> -</div> +</div><!-- /post-body --> </div> </div> </form> diff --git a/wp-admin/edit-link-form.php b/wp-admin/edit-link-form.php index a6051ce14..4ae317b89 100644 --- a/wp-admin/edit-link-form.php +++ b/wp-admin/edit-link-form.php @@ -57,7 +57,7 @@ get_current_screen()->set_help_sidebar( require_once ('admin-header.php'); ?> -<div class="wrap columns-<?php echo (int) $screen_layout_columns ? (int) $screen_layout_columns : 'auto'; ?>"> +<div class="wrap"> <?php screen_icon(); ?> <h2><?php echo esc_html( $title ); ?> <a href="link-add.php" class="add-new-h2"><?php echo esc_html_x('Add New', 'link'); ?></a></h2> @@ -75,17 +75,9 @@ wp_nonce_field( $nonce_action ); wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?> -<div id="poststuff" class="metabox-holder<?php echo 1 != $screen_layout_columns ? ' has-right-sidebar' : ''; ?>"> -<div id="side-info-column" class="inner-sidebar"> -<?php -if ( 1 != $screen_layout_columns ) { - do_action('submitlink_box'); - $side_meta_boxes = do_meta_boxes( 'link', 'side', $link ); -} -?> -</div> +<div id="poststuff"> -<div id="post-body"> +<div id="post-body" class="metabox-holder columns-<?php echo 1 == get_current_screen()->get_columns() ? '1' : '2'; ?>"> <div id="post-body-content"> <div id="namediv" class="stuffbox"> <h3><label for="link_name"><?php _ex('Name', 'link name') ?></label></h3> @@ -110,18 +102,27 @@ if ( 1 != $screen_layout_columns ) { <p><?php _e('This will be shown when someone hovers over the link in the blogroll, or optionally below the link.'); ?></p> </div> </div> +</div><!-- /post-body-content --> +<div id="postbox-container-1" class="postbox-container"> <?php -if ( 1 == $screen_layout_columns ) { - do_action('submitlink_box'); - $side_meta_boxes = do_meta_boxes( 'link', 'side', $link ); -} +do_action('submitlink_box'); +$side_meta_boxes = do_meta_boxes( 'link', 'side', $link ); + +?> +</div> +<div id="postbox-container-2" class="postbox-container"> +<?php do_meta_boxes(null, 'normal', $link); do_meta_boxes(null, 'advanced', $link); +?> +</div> +<?php + if ( $link_id ) : ?> <input type="hidden" name="action" value="save" /> <input type="hidden" name="link_id" value="<?php echo (int) $link_id; ?>" /> @@ -131,7 +132,6 @@ if ( $link_id ) : ?> <input type="hidden" name="action" value="add" /> <?php endif; ?> -</div> </div> </div> diff --git a/wp-admin/edit-tag-form.php b/wp-admin/edit-tag-form.php index 92f074a79..24efd82f8 100644 --- a/wp-admin/edit-tag-form.php +++ b/wp-admin/edit-tag-form.php @@ -24,7 +24,7 @@ elseif ( 'link_category' == $taxonomy ) else do_action('edit_tag_form_pre', $tag); -do_action($taxonomy . '_pre_edit_form', $tag, $taxonomy); ?> +do_action($taxonomy . '_pre_edit_form', $tag, $taxonomy); ?> <div class="wrap"> <?php screen_icon(); ?> @@ -52,16 +52,16 @@ do_action($taxonomy . '_pre_edit_form', $tag, $taxonomy); ?> <tr class="form-field"> <th scope="row" valign="top"><label for="parent"><?php _ex('Parent', 'Taxonomy Parent'); ?></label></th> <td> - <?php wp_dropdown_categories(array('hide_empty' => 0, 'hide_if_empty' => false, 'name' => 'parent', 'orderby' => 'name', 'taxonomy' => $taxonomy, 'selected' => $tag->parent, 'exclude_tree' => $tag->term_id, 'hierarchical' => true, 'show_option_none' => __('None'))); ?><br /> + <?php wp_dropdown_categories(array('hide_empty' => 0, 'hide_if_empty' => false, 'name' => 'parent', 'orderby' => 'name', 'taxonomy' => $taxonomy, 'selected' => $tag->parent, 'exclude_tree' => $tag->term_id, 'hierarchical' => true, 'show_option_none' => __('None'))); ?> <?php if ( 'category' == $taxonomy ) : ?> - <span class="description"><?php _e('Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have children categories for Bebop and Big Band. Totally optional.'); ?></span> + <p class="description"><?php _e('Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have children categories for Bebop and Big Band. Totally optional.'); ?></p> <?php endif; ?> </td> </tr> <?php endif; // is_taxonomy_hierarchical() ?> <tr class="form-field"> <th scope="row" valign="top"><label for="description"><?php _ex('Description', 'Taxonomy Description'); ?></label></th> - <td><textarea name="description" id="description" rows="5" cols="50" style="width: 97%;"><?php echo $tag->description; // textarea_escaped ?></textarea><br /> + <td><textarea name="description" id="description" rows="5" cols="50" class="large-text"><?php echo $tag->description; // textarea_escaped ?></textarea><br /> <span class="description"><?php _e('The description is not prominent by default, however some themes may show it.'); ?></span></td> </tr> <?php diff --git a/wp-admin/edit-tags.php b/wp-admin/edit-tags.php index fdb64c247..44b2aa57e 100644 --- a/wp-admin/edit-tags.php +++ b/wp-admin/edit-tags.php @@ -80,7 +80,7 @@ case 'delete': } $tag_ID = (int) $_REQUEST['tag_ID']; - check_admin_referer( 'delete-tag_' . $tag_ID ); + check_admin_referer( 'delete-tag_' . $tag_ID ); if ( !current_user_can( $tax->cap->delete_terms ) ) wp_die( __( 'Cheatin’ uh?' ) ); @@ -416,5 +416,3 @@ break; } include('./admin-footer.php'); - -?> diff --git a/wp-admin/edit.php b/wp-admin/edit.php index b3b6b2e85..ab16be088 100644 --- a/wp-admin/edit.php +++ b/wp-admin/edit.php @@ -133,7 +133,7 @@ if ( $doaction ) { break; } - $sendback = remove_query_arg( array('action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view'), $sendback ); + $sendback = remove_query_arg( array('action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view'), $sendback ); wp_redirect($sendback); exit(); @@ -222,49 +222,41 @@ require_once('./admin-header.php'); <div class="wrap"> <?php screen_icon(); ?> <h2><?php echo esc_html( $post_type_object->labels->name ); ?> <a href="<?php echo $post_new_file ?>" class="add-new-h2"><?php echo esc_html($post_type_object->labels->add_new); ?></a> <?php -if ( isset($_REQUEST['s']) && $_REQUEST['s'] ) +if ( ! empty( $_REQUEST['s'] ) ) printf( '<span class="subtitle">' . __('Search results for “%s”') . '</span>', get_search_query() ); ?> </h2> -<?php if ( isset($_REQUEST['locked']) || isset($_REQUEST['skipped']) || isset($_REQUEST['updated']) || isset($_REQUEST['deleted']) || isset($_REQUEST['trashed']) || isset($_REQUEST['untrashed']) ) { +<?php if ( isset( $_REQUEST['locked'] ) || isset( $_REQUEST['updated'] ) || isset( $_REQUEST['deleted'] ) || isset( $_REQUEST['trashed'] ) || isset( $_REQUEST['untrashed'] ) ) { $messages = array(); ?> <div id="message" class="updated"><p> -<?php if ( isset($_REQUEST['updated']) && (int) $_REQUEST['updated'] ) { - $messages[] = sprintf( _n( '%s post updated.', '%s posts updated.', $_REQUEST['updated'] ), number_format_i18n( $_REQUEST['updated'] ) ); - unset($_REQUEST['updated']); +<?php if ( isset( $_REQUEST['updated'] ) && $updated = absint( $_REQUEST['updated'] ) ) { + $messages[] = sprintf( _n( '%s post updated.', '%s posts updated.', $updated ), number_format_i18n( $updated ) ); } -if ( isset($_REQUEST['skipped']) && (int) $_REQUEST['skipped'] ) - unset($_REQUEST['skipped']); - -if ( isset($_REQUEST['locked']) && (int) $_REQUEST['locked'] ) { - $messages[] = sprintf( _n( '%s item not updated, somebody is editing it.', '%s items not updated, somebody is editing them.', $_REQUEST['locked'] ), number_format_i18n( $_REQUEST['locked'] ) ); - unset($_REQUEST['locked']); +if ( isset( $_REQUEST['locked'] ) && $locked = absint( $_REQUEST['locked'] ) ) { + $messages[] = sprintf( _n( '%s item not updated, somebody is editing it.', '%s items not updated, somebody is editing them.', $locked ), number_format_i18n( $locked ) ); } -if ( isset($_REQUEST['deleted']) && (int) $_REQUEST['deleted'] ) { - $messages[] = sprintf( _n( 'Item permanently deleted.', '%s items permanently deleted.', $_REQUEST['deleted'] ), number_format_i18n( $_REQUEST['deleted'] ) ); - unset($_REQUEST['deleted']); +if ( isset( $_REQUEST['deleted'] ) && $deleted = absint( $_REQUEST['deleted'] ) ) { + $messages[] = sprintf( _n( 'Item permanently deleted.', '%s items permanently deleted.', $deleted ), number_format_i18n( $deleted ) ); } -if ( isset($_REQUEST['trashed']) && (int) $_REQUEST['trashed'] ) { - $messages[] = sprintf( _n( 'Item moved to the Trash.', '%s items moved to the Trash.', $_REQUEST['trashed'] ), number_format_i18n( $_REQUEST['trashed'] ) ); +if ( isset( $_REQUEST['trashed'] ) && $trashed = absint( $_REQUEST['trashed'] ) ) { + $messages[] = sprintf( _n( 'Item moved to the Trash.', '%s items moved to the Trash.', $trashed ), number_format_i18n( $trashed ) ); $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0; $messages[] = '<a href="' . esc_url( wp_nonce_url( "edit.php?post_type=$post_type&doaction=undo&action=untrash&ids=$ids", "bulk-posts" ) ) . '">' . __('Undo') . '</a>'; - unset($_REQUEST['trashed']); } -if ( isset($_REQUEST['untrashed']) && (int) $_REQUEST['untrashed'] ) { - $messages[] = sprintf( _n( 'Item restored from the Trash.', '%s items restored from the Trash.', $_REQUEST['untrashed'] ), number_format_i18n( $_REQUEST['untrashed'] ) ); - unset($_REQUEST['undeleted']); +if ( isset( $_REQUEST['untrashed'] ) && $untrashed = absint( $_REQUEST['untrashed'] ) ) { + $messages[] = sprintf( _n( 'Item restored from the Trash.', '%s items restored from the Trash.', $untrashed ), number_format_i18n( $untrashed ) ); } if ( $messages ) echo join( ' ', $messages ); unset( $messages ); -$_SERVER['REQUEST_URI'] = remove_query_arg( array('locked', 'skipped', 'updated', 'deleted', 'trashed', 'untrashed'), $_SERVER['REQUEST_URI'] ); +$_SERVER['REQUEST_URI'] = remove_query_arg( array( 'locked', 'skipped', 'updated', 'deleted', 'trashed', 'untrashed' ), $_SERVER['REQUEST_URI'] ); ?> </p></div> <?php } ?> diff --git a/wp-admin/export.php b/wp-admin/export.php index 700655246..8257b5187 100644 --- a/wp-admin/export.php +++ b/wp-admin/export.php @@ -41,7 +41,7 @@ add_action( 'admin_head', 'add_js' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __('Overview'), - 'content' => '<p>' . __('You can export a file of your site’s content in order to import it into another installation or platform. The export file will be an XML file format called WXR. Posts, pages, comments, custom fields, categories, and tags can be included. You can choose for the WXR file to include only certain posts or pages by setting the dropdown filters to limit the export by category, author, date range by month, or publishing status.') . '</p>' . + 'content' => '<p>' . __('You can export a file of your site’s content in order to import it into another installation or platform. The export file will be an XML file format called WXR. Posts, pages, comments, custom fields, categories, and tags can be included. You can choose for the WXR file to include only certain posts or pages by setting the dropdown filters to limit the export by category, author, date range by month, or publishing status.') . '</p>' . '<p>' . __('Once generated, your WXR file can be imported by another WordPress site or by another blogging platform able to access this format.') . '</p>', ) ); @@ -95,15 +95,15 @@ if ( isset( $_GET['download'] ) ) { require_once ('admin-header.php'); -function export_date_options() { +function export_date_options( $post_type = 'post' ) { global $wpdb, $wp_locale; - $months = $wpdb->get_results( " + $months = $wpdb->get_results( $wpdb->prepare( " SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month FROM $wpdb->posts - WHERE post_type = 'post' AND post_status != 'auto-draft' + WHERE post_type = %s AND post_status != 'auto-draft' ORDER BY post_date DESC - " ); + ", $post_type ) ); $month_count = count( $months ); if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) @@ -130,8 +130,8 @@ function export_date_options() { <h3><?php _e( 'Choose what to export' ); ?></h3> <form action="" method="get" id="export-filters"> <input type="hidden" name="download" value="true" /> -<p><label><input type="radio" name="content" value="all" checked="checked" /> <?php _e( 'All content' ); ?></label> -<span class="description"><?php _e( 'This will contain all of your posts, pages, comments, custom fields, terms, navigation menus and custom posts.' ); ?></span></p> +<p><label><input type="radio" name="content" value="all" checked="checked" /> <?php _e( 'All content' ); ?></label></p> +<p class="description"><?php _e( 'This will contain all of your posts, pages, comments, custom fields, terms, navigation menus and custom posts.' ); ?></p> <p><label><input type="radio" name="content" value="posts" /> <?php _e( 'Posts' ); ?></label></p> <ul id="post-filters" class="export-filters"> @@ -182,11 +182,11 @@ function export_date_options() { <label><?php _e( 'Date range:' ); ?></label> <select name="page_start_date"> <option value="0"><?php _e( 'Start Date' ); ?></option> - <?php export_date_options(); ?> + <?php export_date_options( 'page' ); ?> </select> <select name="page_end_date"> <option value="0"><?php _e( 'End Date' ); ?></option> - <?php export_date_options(); ?> + <?php export_date_options( 'page' ); ?> </select> </li> <li> diff --git a/wp-admin/freedoms.php b/wp-admin/freedoms.php index fa7d4e508..99251dcfe 100644 --- a/wp-admin/freedoms.php +++ b/wp-admin/freedoms.php @@ -13,13 +13,13 @@ $title = __( 'Freedoms' ); list( $display_version ) = explode( '-', $wp_version ); -include( './admin-header.php' ); +include( ABSPATH . 'wp-admin/admin-header.php' ); ?> <div class="wrap about-wrap"> <h1><?php printf( __( 'Welcome to WordPress %s' ), $display_version ); ?></h1> -<div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! Using WordPress %s will improve your looks, personality, and web publishing experience. Okay, just the last one, but still. :)' ), $display_version ); ?></div> +<div class="about-text"><?php printf( __( 'Thank you for updating to the latest version! WordPress %s is already making your website better, faster, and more attractive, just like you!' ), $display_version ); ?></div> <div class="wp-badge"><?php printf( __( 'Version %s' ), $display_version ); ?></div> @@ -54,4 +54,4 @@ printf( __( 'Every plugin and theme in WordPress.org’s directory is 100%% <p><?php _e( 'Don’t you wish all software came with these freedoms? So do we! For more information, check out the <a href="http://www.fsf.org/">Free Software Foundation</a>.' ); ?></p> </div> -<?php include( './admin-footer.php' ); ?> +<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?> diff --git a/wp-admin/images/icons32-2x.png b/wp-admin/images/icons32-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3cccb7b46759ecda9cbcf3bf4171a1ebb2a13b03 GIT binary patch literal 37170 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/icons32-vs-2x.png b/wp-admin/images/icons32-vs-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8975737d5334ea1fbd47de67a5c15d27c3cf6d01 GIT binary patch literal 36513 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 XhcovFZ($k(0|SGntDnm{r-UW|Cq&fl literal 0 HcmV?d00001 diff --git a/wp-admin/images/menu-2x.png b/wp-admin/images/menu-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f5da9b829fc3c61b91d1c947e38ea316f3f53c GIT binary patch literal 32775 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 Vb@OaEI<i6LdAj<!taD0e0s!Yp?34fi literal 0 HcmV?d00001 diff --git a/wp-admin/images/menu.png b/wp-admin/images/menu.png index 8da666e84512a001496704d510a6e022507abd90..bbb1c50ed0a66a3291088beb722f652fa39f6285 100644 GIT binary patch literal 13585 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 SecThYNy*dI&t;ucLK6UJ4x-Ee literal 9680 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 diff --git a/wp-admin/images/press-this.png b/wp-admin/images/press-this.png index 26c96975bf6383df9de265f69e2472e21900ee53..124156206a0fc2c5c5e10ddb73b020a0e0e3908d 100644 GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZP8V_;yIzV&Z20|NtliKnkC`)wX>CJtG? zcDc_C3=EtF9+AZi3~~oSnDKCCNH7Bf153K2uOkD)#(wTUiL49^jK@4(978H@T@A6# zJ`^CbH)~1PHs=MqpTw8sEcbior*w^9z_gohQFnZIcXJaLm*3IQ>3XtOrB@uott~v7 z{X~8K<h;w(z2-G(RX6*g+DiTRbE@C%u4H)5cXuPpOrK|EHgfi}e3tRAzWPg``)His zw7KV>Cm(*eVaGo=tGRXe|F+%SZaDj_-RXyZoi%2&_wuzL&JGmOui7hjw%2X3cW7hU z=AG}#c0VYvIFMj)AZg=*^sP~iK5a)X<ZWMg`Q@E}-cqZDQETI7o=rQMwDH3%8HF4( z=_8K|C#Z0Ksj{`0>$l?iYXuIb0vUFl(@Do-R)$ms7oF13Wn*HTasK%X)tv>q?}}WE zTz&NrbC^oFsK)fuAyWOvnWuWS-ci_j`f1SPt7-yVts2QC4Ub=zc)jO2obmL(c0-D^ zNVlt1$eE}-&lOj*HpJ*1eEoIaF-N6|KfdaHw{+cUYs&qiT>Z)ar|EM}KTR;2>7X^W zDaFWBw&kOJfR13<#ETg%875x;8P@&$TQ|!(BH^~9-TdVzKHG?JvA$BWd5~aGvEu;S z-#U4vi6^eR8)@#kkzgPpqx<1XhRM6oZ+4l2H>zVF*Sd5Uo!#!ejd%Cmx-X&iaz9vJ Yi5~U*JK4R3fq{X+)78&qol`;+0G_@06#xJL literal 818 zcmeAS@N?(olHy`uVBq!ia0y~yU~pq#U=ZP8V_;w~$ndUUU|^6eag8Vm&QB{TPb^Ah za7@WhN>%X8O-xS>N=;0uEIgTN!@$6F#nZ(xq~g|_h`rrXjw1D|wKcN16hj?cgH--I zD5Or(o^<Gum$u+zc0v1DyI<vmd^zCOq$H;mAseQd6BP5Rp|@=3DTPTMPu6udRlS;7 z`FP!$``JM$?{=`Czd5sV*Sq|>_utc|&GuXVAz}5g$Lz-oZzp{@GN0qReMh-D>pk@e zKV=;hIL>#(bNqGYw1{^6b$^<NirG2S*=MI3F24BV)vsT_V%CP0ms;KZ{WR1q;NF8r z-2W2YT4s74TkbTcZl>Xy3LClQdg|96f0SrC_`sp&T!hZI?!%m(T8h^DIukk{U;20H z4)-Jb&i`)THcazsF^%{5Torxh?Af!|%Xa^r5o7oD_umqo`RBj?tlwjP@5_`Qj32eU zSB9<(d7*VP$1Ff=s)1bp%KP{39ZE28a99ww+Hr4Oy{1md@&FB+OBp84Yr~|Y*w{)R zPhhDP%G~BW!@pJH%7W)d^dm1zZNAB)uC8t%!{@j#py6&_d(cXjxqj?AV%!ouY&&-C z+LW^S=KI-4!nJm7%IUQ;%(R=&@3vSlHYKI^^2;T<Mx6%S9m{kY9(}EPe&7Y`UV+u; z-9ITaPBbmwEAza_a+Z_cbnbKK&S_K&h_oNxXm&5f=xn3ovKWsR(+%p;4Nou0a<FJP zPcW>w`~G|8{O3RSelslElA7l<XUG1;V@v+qPd*v2(RJE{OFT!D1l1;U?zsDI?tur+ zvI{!8d~O)$&barc_3*=1yNe>XCK>JhXwBs*71G-E#r%63pUBHYYLh)*e614bbyF1T zywKIM_Kvb+`Te5PSyH;og~C*)da)iqe!PUgxj3S-z-QgDHA|-O>`s|$xH6<`+rj{j zOD|2<dTH!=<QL9okmU82r9E|<$J&b-2QFT`_$HB4;)K-2sI}LQIjiq?)L(T;_Cu^_ zY|{MGPe0v`HQaRit6bG#9gVQnQ-$v_>B!VwKe9J^wqW!(okxO>`&p;39=o$#JoL`t h)n~tcb8lc|cp!E2L|3c-O$G)A22WQ%mvv4FO#riSfCT^m diff --git a/wp-admin/images/screenshots/captions-1.png b/wp-admin/images/screenshots/captions-1.png new file mode 100644 index 0000000000000000000000000000000000000000..73dbb48fef968e42ec95646cd1199e033443af60 GIT binary patch literal 96412 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ℑ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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/captions-2.png b/wp-admin/images/screenshots/captions-2.png new file mode 100644 index 0000000000000000000000000000000000000000..653ed540dc8db6c8b5bae39e3a5915e275445d64 GIT binary patch literal 43760 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 P1_lOCS3j3^P6<r_Vr}V_ literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/flex-header-1.png b/wp-admin/images/screenshots/flex-header-1.png new file mode 100644 index 0000000000000000000000000000000000000000..371a28438d3d0e9319629d5c7301d213e3feae8b GIT binary patch literal 72879 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 Jvd$@?2>?7^z|{Z% literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/flex-header-2.png b/wp-admin/images/screenshots/flex-header-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5cee055307244c75e3fc6e194071f28839bd6366 GIT binary patch literal 38544 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
Ld7?3kfE*>HQU*@8G_^9PqQ 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 I=akR{0GS8usQ>@~ literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/flex-header-3.png b/wp-admin/images/screenshots/flex-header-3.png new file mode 100644 index 0000000000000000000000000000000000000000..a45f1c9b60afe71fa11e68f2e389cc031ff6c62e GIT binary patch literal 48361 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/flex-header-media-library.png b/wp-admin/images/screenshots/flex-header-media-library.png new file mode 100644 index 0000000000000000000000000000000000000000..d63012daf4b574265ff2de65d28ac662ad8d6cc1 GIT binary patch literal 28192 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/theme-customizer.png b/wp-admin/images/screenshots/theme-customizer.png new file mode 100644 index 0000000000000000000000000000000000000000..fa62d88964d88f840b04c6feca0db5a24e608a1c GIT binary patch literal 106447 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�X?0{mW) z&vLj|J=S7*7I;dic=Jj22-Qi63#5)#eA&an#JAUi*<t2|mp49#&O9%^>dYL2bzdIG z{8r;Xyi;h6P0`zjZi~OZI{Vt3zi-)`HOHN!;^!ToE%>v%jj{aVp7$0a{o71<b+~60 z-+wVXRpsNhEeaF3OhZ>r@C`oaA)0@9-<7#F)3%nXI;&op@QS(fO2;zU6OIl`MVspP z<z1;<R{i(Zo*!j5U!UY)Km1B%LC9Ru^YyDt=E=U5J1m>}RNUmorRvA-$E&57CF<KF zrxgXOE}CrDymoHy?=zoI?c8>L&6~r|bYAQJ?z#EMSbz7g%~jXu-F~J$Z_d82tRDsT z-7PN?TRD~UkHm|-?o%`O%ALAgzNkFt_{EhiI`ScPkGFr#%j7ke)zB^3!RV%?`)PjH zcMH!I{wJbLD&EAjbj2-Y_G~&?EHZD+L9vdD(w5h5+S<MHk}lY0!0N|7+3=&2^K&sC zN5ea-;{yJyc(Uf$Ve7Zw^i&TeF3>B>`LlGcZce9Ff3E7sl<3fscHy)BGRjdWlq4B~ zMZDj9GxBMzZJTH?Q_^qFi$ymlY-(SZ?$o1X7dI`-i{&M6ij1v8a_D*whI#F$Vq*%+ zgMWJK7Vf^d<yzK0hnR4gCE7icMAr&@I_2^_@K=aNkffaquTM#rdtt$r`tL6~4CcyT zD-S9bd(_=Htv>0_fwmJ<r+ceQFHdPm%V|*$(^A)dmn~y{)!6&XjF7UIuf9Yo=QLiN zckNNS+TSIjYF<G+_cdn9D6bDV_bKAp4XL|3HCg9~t~*=2Z-%#vt3tf*bmluZ5@lld z)pSl~3Yy<jn$3`+^7PRPvpG(MTQp4!RrmNkIA<zxOy{EIi`H4pnW-#C0=`ZDt*a{g zvE7AL!=UZF{JF0OR?ii?bU)L2CiDMeK9YVuwtc0RQD58tc8h=8q_g>j<Mq?00wr49 z!h-WWIFsYo{$^5p;-E1*$wa}*W9NZ|uRd3Fgn1sGT6<)k_D6PJ*{O?rc5Jm#iC8dU zVz-T&){!NfEh}tyRL_xkYWe@R2V2#ggavGsXBnQkPt(k3K9yDe{9X3;cQN)Bnz1|e z!~C>5n(Yto5PGJ*<BFkyvR0=e@3aZ)xh=O@Y?D6BB;6f&V2jV1jl~CLyY?Pp{}R2v z^peq~)XYhXQWSf68>dWYWasyJ``PKCbnCS3{QL_QCm+7O;$Vk%0ORXRb5hnc&$r5d zyNb&!F1%&Q@{GQJn`B?O&%aP#Rdzlu`gfb{&i2L^<*5hP7TiAb(N=%=p7aIUi)+%3 ztmeNVd{d+Tvr=LB&uJAMcU5XuGXy_+edC<%mKjz>Q|=jh|5aFi{n^yZs#boRTCF$U zOFeI7FDEP!peMu{BsPQ3OYZUl#!oTk^1>!t4~Ff#DE+W)#U;&Lk3!Rku$ysqVY(}_ z>;!(!>bkUKdgJ`o{zu%i_3lnsdHpT#j1612$aQkMyft}L*|lZGqn2o~)1Q7k(*0DK zP+sVAq~iUQhzP6eGWsh$JXikFO9?qD9;L$`C-qpjGA`-oB_@djT8@jVP4?XI-pwMD zxj^aR%>~kiN(bDQ-?+2LAZn>jC!>;NjLS<O&q*FC&XyZHMJwi(SiR}V-WFmpJ8svX z7ptc59u(MIC7Go5iX|alrasI<vvi8mj8;RYxkd{=+ZFFqkuv+SX~pxi6E+@=b1|OR zcBsr!*;2ETi95qiPK5vMn<+CE<%z%FJ9qi-<68TUv@x|M=`j52o#S%Kfiv%44o9Q_ z`^K&9vuE7h$;$KSZQj<`TXz^sl(?IRdOT;b*y%o3==G&D${NOg@9tRLv6uMb9_%80 zW4Vo-|5@oilfvxYj2mwQJo~2VuVSmcem*)=AU#Fr*ArLq$yZBGZ1SDZ@UnaD?Vwjj z_8s}*$f2>2@x{Vx^OVbU=O2mAdi?PRyO*$(bim1FF@9SE+$55OSw-(RXi8cIEm?YV zO8Ma)@3$vCD)~$omIeC;rQ0n1eSh*R{dWCNeF24D4dH!n#dxPluRnWSIbvm&zv{d5 z3MTz?bPTK)6>D%jRkN3h2{Y{pzVqtK@;6#jf}{>lh|ui1qI2xrQr^9KN8I`zrbqKG zzQmCbqM5A|vQG0}fPzLGOQ1o5?~%T<Q+wYWD~#Egn)~#`=VdR}s(kQY^I)DB*AD6O z*D*WxRL1SA{bh9H^-`UOH;V!!d6Rn$C%yf|-SV9$>u2Lqw+)i1%;(Qc%1(H_eea4L zPMRgnj$fAR-j=?wc!I0lVTX5DKhKqVeX1<{+pa@9-tJ8QJ!Prg*CYR3|Gb{`^MKxr z=I7#vd-pz@v`6?vX{r0&&pkJ!8@GI#bHztPP(z00rCW<sj7n+8wO4(a>z-6Dvwl4N zN4V+a>yMABbe?$sx+vOuaeD62DRK)hDqcMlpd8}tzt&_`=K&wqSzn5Z0<NW9di3Cd z-@|3$cP{@8)L-tPbn?oY6^!XTK`kw-Oct1jH+F`KdRNVw#XirQ^@!lriPqXDHm;pA zD^YH$!imin9lltcRaoP`Waf^*ts3vo{${xTNblpbeaTB|9ysvb7uI)R-?jIvkBa-} zgNEz@g5imu?_7v>d&TAzEV{G9*QH?F;nalivnFa)*DE(}ORZxS;MDF2N%xJE-fKT= zMfNw9v|8PJ-l2D<UaK;n<?|$EW5}sx7rtnycF(C5nGvC}$Jj^O&3)06Z5?iLch62b zmtpa~q@eUxwC_HviAra8`8i$Ds&Uxms=4&e+$BfZAKM+XTK_z%b0)vre{RP&Zy!fL z{u!|HcS4ZF>(58#a;xat7L`|AGc@`Cc&oxDmyUkTDBYEh9(Qh<^|kE%hTGELRTfXX zsvo<{Wy%?*11GB{sYQ1mGwoW_w)({7h}r8y)LdFk>#Uyd3))pQulpkhf5_F~W6uS{ z9XnUOe#G%K@e11(KlUe<9p|;u<_Ed#z9cW*ndRH*uU}Xcym-osW_i~KiXK5nUTyJO z)v{}4M8;fkEg?5G^EkK6RZdmsvJJL4O=b;K@G0hNd_Q5H<?PSjdZG_#e9(WFXP9^C z#kbe)Yr-#W^DvrRE>^pU$?vD-Yo(KG7PYKN)Tn$G<g(9Jx#ZIo(WgJ9FDaQniD1gz z{cQ)wBDXJ+2Vz*X--X;}+%xkj*BZBj3+<WT>^tB8?EcRrySN(b-xsx&_Wfk`EuU)q zX7>9(VRfr`cu)53e6a77jJ467v^Cln8_pKjX+6KSVA89d_twsv{=MhxvJZ=^4)rUl zq^()K{Y&z{9Wt+arSlv&R?lkr5;18%L*3epTOCt+9rs$47UU{-b9`C;yRV?_#BS?o ziT8#Hb7L!hx13EpcY^Dpll_&JCxYsqOk7G$LW|@!t7`8)#JTV(_stnjEJ8Zrb7n4a z?d$XZ^_R0__9lx<^QWEP^sPZ)>B1G98s~X-N1vO%$*x!IT;#Leis4fx_Vu$d2Ca>` zEf^Wz;<im%FyF1P{D$!Cw1d)NJ?yP}jLi5}u$|K|4h-7$sq1;rZp)YK6?Yxg>VkAi zg|^PV?Y(d+!{H##nS9GtHP?jM#b1tmF7jFQc5u47tI4nMXR*)BUV8jW+OuQZG`2~5 zSkBGrPTHC-$5EwxtZ3Q+<-e1ecddJT?B2I)a)(wK>$I&kHJS1_IJk{T?8<u{L*Z32 z2a?w9P|IS}?TKnSzua@q^8=!i&LW|u*Zoz$oMMdjKR)-iIb(N*&{u;jE(I=+?e2%| z(sD|xTMTdJYA`yi-G1ee?ws;1f2Gb$znt{<^51PnJ`2x>aoEo2`(CZi!lSUkW$O-2 zPrZemr!zN8d|TG^#<6+F2CW@pFZ)C1ZIDaK`|<5?Gjq6VdbGqXZ}GC0CzJQf@L7D! z(&%>cta9?=Kd~=Mq0r_L@Ame|ZX2auU#*#PBuqp;YSzT>KjRZ;G8<Y)WjSt&yW!9C zpyY_$bA}_69_m-frGMn%nWHBCYllWFpZC+=t6z6<ZP~m3-V;BS6B<vKT-Aw6-<NSJ z<iL^VOS%lW1=b5*Nb1>LnaywD_TyMeib<WPrssUizngh_WRED`Ez&;!y?Sx&kCN#w z{QK508M<j1pUw#9PMu)*ptZsA(b9jvXNfgmy%Y3BE<RZ^%>9v5sJ-daMz%ZWmlsd< zJ9;BJwfQQ8jDoMa)0*N*z02o)tGxVh-`*PkJdN~A+UIBI+>HHs_w!Bh8&Th?ST!Hr z+7>W<=HGQWg$I+9r+<C7Ozp_L8}EZBR3&eHTe;EENlPKR{?ncd+TZTn6Lmbt#=kOd z{XY?&qVxOfR;Rk%w_<jToquZe^z`gSHdlha`n(sgzyEUk+`7j<FI630`ln;FkdNT2 z<fIn{={`JO)0)+7j$BjPcK*x*se|=z9DA8JBp5|aQ7U~A=yLXe;ENMX%Wl4#5GFP0 z`^pfFOCCv8L2o!uEn&ML^hhgn-LFESG_Uklok`sfQxrDd@DRS5<f*g9Ki0TWz2KwG zg$GA0{Wr~cv*Lx$l2l!33**-Oge!sdmhTQ7o%8rHf7q%j&ly(>r@7ucxnZ^EiFUD9 zo1W;nKk2vlchRIU#vrLpIL7Z^RT5L)l)q0o*IYPx?Mm;4NHxckVRovjhBh@vHA*ur z<@E0c3T{^5&q}@1wDx|y4DYFvJUj<nJ(ntM(@TA<I>CcoVNR>@nGH9BT=O+nbq81- zJ*`^S#cq64^n~nG?N>g2ZOs#(T$r)BS@2p5i_WnveVaKqb&4=J>`GWP;m`W8#6Mo5 z!Wkv(^9~5aNLNXRFEU_}^q96%|Hw_j>qQ)D@AR4cg&PXyYhU3|h?@3-SG?0YBTw(* zt}`?K6~34xc<9}48I@am-v2!IzT#_m{ih$-R;MT$Zu9YrcUDc<tuWzkSn9_04w<U+ zFJ3)7C3!}`u_D#_?l)_@4qTow-@wQ%M|p8^EGzpOp@N{$r3Yjtzp<+nRIR>i;Av4P zaia06o<p>UxCMJ6kJ-AVQXU&#DA?Rg^KVYo{AZI}y{9MXGFuX_#Idbys&gbAf>-WY z?GfK+bJ=l@`cZ>iE=7~pm}6%T1uxE==lZWq`L-NSUb$Lw8UM9M$xWP(Oe2N#%hHtY ze@ni&B5D37o!Pn)JO6B8-)iP?V0lVk(3-e2R}B-pZk8MjeUf{3u}jQ>XYrcL8aV#M zbbU1WS;EItS^fK>t-8<2nEU&k=KTDaQgVF3#Cy?i9ZyS~2|dGTd{9)V$X+XH!U;*6 zpj}tHm&<M0tEyaAe=|PxgZks@W0#)iCJ0w2#qFt$=vZ>**UX=BI`?+%54>LZ(BXIM zrHuujt6imMe>SN%GG6?x?@HYC{6ihJ-#FcLpPf#Y;GEAJc{Q?6g!e?+(ZT~MhZ*`m z3fq?3$jkCqIVg2?Og_WA#wEu_?a{{zx<OU!j~9#O&f#9bpdEB{uaW60heynw(_Azk z*B_l?m^uAW{~XN+uWL?~)h(JMIPbih;3Ai<Xw$}x8Qzb#-c70eS##;SPFPXqsp;Z1 zS!QxY2H6Ealpfnegq*zgFm_Rp>usiOEnn=<nQwh^<WbE3iy1E?nyt$U5+2n|TBUm- zT=e($rkm$DLN_gWd1;F5E%xc!-g#Fqiz(H_<%eCm`FP#pG!X;6kH@Ocy4^S>QY!!L zxqAEO$CI7yeJsvxHJudjUe_Y{LW*ZDYsd2ftq<nCdp~YCE?KbjNRoVqx=e`d>61sZ zVzR#cW<Iq+_50R4hc=ZQb7nswA>b+F=9-dby3nk!T>pvjwsV4M)59hwD7}#rU#s+G zhQ#G>M^}pnPdqDGUHz~~;C0a>(HQYycAxCb)oa#1kYFke%$`zEabMVt|BlJ*ck{p8 z3ZHlH?kW4#r6+k;i?}Du?d_3Hj(B=virg2`O@*zizXWA;8CC3DRL<G+WoyXJ1q+Yn z9esQ7{}BtXf14-tDP;>8-fQ}hZddC4GBIk0LI=yTunS+Wm07!WMo2zCV0w|Q^`*ms zW3{I|n%Rz|G>gsI=X*l6^l74kLiAsmMdCaX!dK#*uI=ENrCB4l$UpKiL$*At#Wp4J ziKqP9tenDMvzynd^PZ}zu+gp(o~p3+$#mVH_oiOu>s*_<EXdh=+Pbr^jE`)2r+wwh zqi0JpJ9sbT3WS6!vedNvZI_<K9&A;Vywg{&J%8gN&D&oscWM|vxcWL@SniNV#^wGP z!DVxdby_>Sg7>`MyYz6xv?hLC)#y9?(etIU=T6w0VK2)6N|WtS^m4V|JZu;JH-4Oc zHt2q~|N1PaH#>D^RG)vjZkD39^}4Ek`Zw;s&|UDM)a|J4|66Mp%<bK~Om1)H%f?S{ zzpgvKK<ByRtQp2!Im;eAe3<Q>-ZJx=_csgC`YXk!-_ByZd%?Tvo8aE`>cc`e)9&qk zt+07}<?T(ku6C`jnYi~+r26g1wrhP4b3Sm!+jsBDDXxuhPw>C<IWQsehWe@v;qxE= z-5j#Y?(D<7bGL=cZEma7mTK&&;_|!6w(aoQX8%14RMU$O`F+hg8oJ0aWATxV?XikK z+pdZlKeBxq@gt|y?^l`iwaa^F%CBLbemIr?y4><fE5CiH=qlHCOj<pC<p=HEdS!0g zMD;&!udjK2c>doNUv2MeuiJS0@G~7_{ryYkew>p0FTU>2@pmsT-!$F$_)6ocmuu9b z0&V>Qz3q}easSaa*fMwW?E3%j|MoLgUXxa<&fU6m!qv_*G1WP3{kCTM5|d7!+jCa4 z>T2}&$IE^-<fh-Woc-Y2iZ~nDuAJ1Fxsf8bKd)SQF>I=E)qmbqo2;brzin8%XY+Sa z!_(7teP6hhZQ1;LPtR`Mx_*V*{KQRWX*oQ%q`$vY+kbv@^$XdzPv(3wU4Q5PkDSd< z0`6D;mke~=B5t>Nde{A!+jAO~(-V%?%Gb~SC7qr7^ZLJ9v&DP9J7+!$yk7Y_%yI1` z?Hi5e->RHd&%Q6-S5}xd{b^*lyg_ws+M2J|vSP1BOg$v}_m%6-N5OVigS5Z0G4EWj zal7t|=jQ9(n`<8bpT9S|aosAb%m4SEf4pzf43<d>ioPlh{ft?mT})aFwrDAZUR>qc zZ8djW-{T({;nv$8zglCJy~cIApKN!(RacO!oKcjQgs8}(rcZtiLUNuhDibDL_kH(z z&gSp-hvS}4tS+8B`{}MVPothhM_T`$v-`c>^LN#s=Gx!?DWBQ6;K%|~wz&*F4ma+% zf1c&K;GhSa6hr%)!`gb2&wZZ7FtNeH+&8h}fA+-$L36o|U!sY}d(7+wYf5X=A8hA; zGvC?eWN`(v=H2Iq>#pjp{O_oFc+zQ3ww{Z=o7I)?NVnZRZXzk6Dfr%c`sCQlOMUa_ zt@}3Pj>k#Ihk^{doS*hhIqK|k+318yicf^n-K4IA;hh|l=2Z*x>^k=1tH7j(ev|fn zsh{P^W+SkxXI5ed`+1#$hdJM#{`t2)&2IaY%K`~eXPgc^c|CPf?1qcESJq5$kK>rZ zRmkLWev?||7MA8^$!Cl#j1&wn@F*p^nuOka>7ZbF#iwaPhlPXuHMiMkbDeKb-8OTL zP}Z!a$?ns7b+htcTLpbzYOrIKab`qB!@B>bo^0PYIqvjyZ75`l=6~2Ez<$}eYK10a zp{&X8O(l`D8<?LwkPtO7zWwv(g}lAl?Y~;j+~_^>Ajf;=dTW_el8T4IkA+wLPPl(2 zVYW;2nTDCyY6TS1?oIxAIN<;LmPyyme_nI()M?<kTyOnS?9gk00Hdh^Ro<;_C51vu z?604BJ)=+Nt=i|^#_?<&6J(dnZ_jw4J?);AlG2;x_N5WYk*nE{Sw49_S!_vxj3_II z?Ityb$&Sv(Qk(&`%yaCNE^5x5pyP7#kV}l8LX7b2fCZb|9Tb=t{U<p#ux$6}h^{yK zeJFDAYia&|Dbs!5k4zDtU!#8K?&1uN7ZHzM+_<R0B7A}&XS;oo^7Y1+%$Y7V1<SIR zGs`qI7u*n*EmPqWIAq9i)BRL=XYH?*ZN?L?GzsjRCUMN5%~5ERa&&=)_18|3G+nv5 z(FUJ#K0S3_BWdD#NsGzSY{St73z_}4JTlk1bbni*mIzz_gjN<leQPzdn=_Zn&X#IT zk8Boxq+$Me<Bjii6{$x>?)!_`Ub>pHalywA`C__N1@9i!*ZO)@#91;G)W1nGi940E zvQSv#kO{9+6JsOOny?#=41IOHH;$i3J>XQrr<fx9qI7S>)hR#Rs;69eAR$oGYuJ;> z^SLxDqvy>nx9QF|XB@5g62K?&H2AKeo8Od04mMYrB6z9}2b6PYAD^7*6y>q6k1I32 z`SA5VdG3jOjU%tSF+C{TD50RIbM^eP7~6N>|9?#Ra(d6EMUy;iK3&QG_vO^>^HX|t z?MfEJeb%0IZRg^y9bbGkIHeZ&FLn28ODwWWs9DUE6(N(qJj&@o?W6Du>!vA}oH%>@ zBa_YvyI<GmE+}!*<`8<6ofFTWEOA&s#bzCw()B-Hfv;2TvuoC_FesZ-QE%?7$vWY6 zhdOIt9^Y;L2d4KWk4%h|NNW)(;h1H^I7fz!eR(s}1zF|a2X;O<ct^(RvrDkMLV(QX zs*u>1xu#W0cMrzcCLRg6n6uu_vU&32tD5_@Tkez;ePx{4e9T;H!B$6KiP@r>J12iv z;a>WQiE+h=qd|-^e(W7VEWS)qPp-}76<08M6xi&nA!3pw$meD7Kz-2~t9>6Lbk04U zrM*h*!*9ln4WB)aG_KtAhJn|W$M?wNwv&NstsgR_1eZ#xR466>dgGiPCwy>ihK`=O z!2^De^SoZxQ+A}zxVCcUWOkn98~eVsoIN;yR+8B3#o7jmOq>g5EMfosbHSSk22NhP zTZiRdJlw}nFz=je<Bluq?-qaKu)4Wv+V6{L#oPNBPcW)S-A+n0{Cdjs^t`_XJ|`_@ zA71O?b{Cl!8dJX`uwmu{rh}W;yzNsc(fYP*N}#z<azXt*wp$5J3HN*_q_lg~JxSW( z(JsT+d3nlH&7;>D8G>5`Pie(VxBWb;{mfTu+4iutd*958?ppZv?keA)T~5B&J*p<( z6jAfIY&vD9#ze!|%LyC`iCPOM?H0c~MLuE0i?v@(^Y?E)H^p$TQ^T5-9IF-;oMSvO z$$hrX*P=IeyS_gN^bIyX>sQ#l?A)yKqeq`BUAV>@D!u(p+N@PCttOojSgSE>mDI+L zN!D4<zI4WigiD_=*vyl`<~HU2*Tt_tGwu8Eu}yUKwHDunhFhMfp0iB%2^6s@-FD}U zv}xWm*T-gS>hCLDG3jNLSawn*G+5N4*^ozQW&OgFOaE!y{<gIx^H58%OCIA^*9n>j z9F0sF)eRVuc($25ocGt_Z&26K1@;{-P3|4qlir_LoTlW|*k|7HN3i3Q`K{zPd|Zb; zbpEb4-5*i2e%Z>a()(tVr9M^OU$Y>~wKTbQvHl9~(@p|RoO`V%_%X(BS}ng|cFb%} z$$mYyPkZ_T%56gw8$8NBC@$AMxKhhtUg=wj%Np`eN+yNoC`>fn=O^)OOZK}T2P-G4 zdQXcpdVcL?<KFzW5%HFlMINU7@_A=8b<UmVHGHtK<pgJzyR@{>lK$BNlKk^?vMg8r zEIGjvS!J`W{QJAt&+E_UtXi9GW4LI^mF0$4ns?e|<XEj-cvY}(-qh*bCr)Xf;(x!| zGXGVmWqjS9#m_d(n)r#ue8<1FE2nRj`LSi;+Sd`quUC9Jb!pL^+O1n-PXBy%g!AoL zUiZGOz82*%CvR}CpIv?PoUe4U&-oLJr_I#RvEH8)^6%8t_qE@*RlmD(<n#J<Y^D?D z&t_iHCuM7O>)xH3P22Yr`ONb>eoI%0>uK*Ci?TBlnSWRN<UV@By(@b5tZ3^c@gF3+ z5(PLHiF~xW%Ev4|MRngc9f?>j(Zw$>)O|60z`)j^89j5Av`}Eh^I)@Nt@eKoA}T)G zP19a|GTJq5>tmUW?Holu^Og2I2;mOSJgt7a{&zsm!~W-Y>we4LmEBt(w<+)KtM8({ zGi?~}Oj|W~lWAO@ePvCh`h+#S3Ae8^f85IU&w0y7mABz{EF>A;Y(8W4!|kz2UDXkR zPrE!EYL!#x_%dvXKRd0?*X828b%M$IKOdjg_usXp=>PB8&;LC5cmLm?JeH65r1dqX zZqA=$cQ0XI#E#V~mi#!XUY9$?Z~yaWGbg;Ld-Je9YX91E^Ji|FsJ_cSB0e;zFfQl( zt*SX&p78g-yA|quXMuy9i;~^e*PZFp@Bi2Df5x?W?_%SUyK}-OZ<l17_@}4Yna_yV zFzHCgw|g&6d=#&*|2OB{x_hhBV&y(h718>5XU`n{Z)QH0`*qF~dw)(@B@pX3t1@i$ z^3|KS?)-V=<hhyG?^XT0H|y55IqdJ|PLGbbR<}egBIHswtG3g}U61!x?yL&u(VuUp zeMkCg`uU9Ghd$Yu&U;byZ|C#dhnB4}uuwMSu`cs$3i8?X<jpsSo0pwC4m@u^ttYbj zo56g(Wy+lu9}a#xfAf6Qj}uA;YyZg{5w`J~_UOoN!G+#8Q!bnA<d=&LQ=NVM;=Pk5 zzy54~dwbiv3(T{A{x=ZX6+hW(m$BU4Q>LC<uc|(-zQtiQ>8CTtB}axUU8!OP&sY^K zU#?#&5yT=c_NanSEk$<Sb9RH92OAe#X>?a{cpkM8e4V?(KE&*0&{6S-itD`cdeup# zvH#}F?XQmS{(1eWxANlUqB8ftq$XVI(N3EhXR<l(_p^!5{rCR4J$aSgYSq|g#RpS1 ztXVN_nW&h^+gp3yO<i?M{+>;+gTVxgTWL>qc75K~AgC!99k@CD`xME`MWKIhly$4L zB^)kbVu<X@dA4R|^mYB(hiB)WUS+Rk^Y7$V?z+0awflb_PPYGhT>5!UiOKVu$KMA_ zsu=lmshluavuWew{2hgLw-3JhzUvkfqwTy6pFVR}9X>8!|7GLn_dl+7_y7I-{$2cs zsM6c>!}l6Lm5xfkyzu|e)5}(;`SZTFy>VCif!OsKN-j+jha@`_ITk&+6o0S&%#4_= z3e`W?tFj!NI(<UEs0%BTvPUD6@7f(n!qpGTCZ4%orm!;cThpSORUNhGR$lRW@b#(x zB?hIN;VkT3$9P?wczyC36j&TzgvGJD_<v<%Nnvm}vPACnnKUW3LdL%fn$|~Nk!#$V z<+ZaYy;rxPxL}=p6PwG!F9-fM`TzgycAo1)`=>{_U;Y357C!aEQk->5|MoXg6`$?r z++Y0e?l#lFKe~~*p<ljzk(kxtw(Fbh3i<G;V~=Io`D!)aJowt9u(I|woAWV)X&rN` z53;seR@L%P>;JGe=KFT>d38S)&j0tBxBK1Zo*SLZ(oFXsS)c9HvG9ZG!b2BUME(7? zoV~9sBl+EqN4LuES6<n&{pyL`ufMTQR-c}CV?*k<t>$8-Pp0(q%o0;K6WJ&BFQMT7 zwzK=A_Z(r`QT6b!x$peYKjoH+t}l*0-LA9e?VE0GJ~Nrwrtg=Xc=33a#my^=qGk7P zj9BwDqWj%tX+GI`rvI0HY7+gr);4`jtu2p|S7-M`+m%1R{V#SuBNeaivm-&Kc6U(C zmi|WmOAZI0{|}G+Av<w0v)KFe_-MliVhyW(xo=0xw8|uHXJJ^^$Wx}>F1SEp_xp=h zOoGfiUrx(Zn7upq?d^w!B0;VKEe#&W7=D>HZJHd{=`daXZbabu4WcY|AHpBSFflIY z_hgwX<@;<G3+F`Bdb`-*>wEuw`B%gB^!eJ_w=2)?sdbO_cE7CKy6?xVtM8|U_$@2w zetCPTi@(a3UAb3E*Zlta^Yb&e+k9*9?s2|cs(9qWo9v~(4)6c)?pw#UpLdn7+?b|u zVZCee_jiwV-M`7yd^q@ce*WESBDIC@-mIKox8s|Gw~ueh3%gv6$-ig(JUHv=T*1`~ z7CiX8%Dma)f77PTV*g)>UkrHJTfF|(#=Od_&uokH|JE(M_4Udlt>B9Z9FrHV+Ip>a z<GRqZmfG@??|vmbopI-<V%DGY;k)1c{J7UO`PiGgJ07__FP%Q+S<gAsdB3*D7hP#$ zO+P=wsPOEkRNs#ec*Fgpe?Gb#f5rT@(S5Z!2PLjKb1+Ui(GuhvmF{xw$1Ii~O$DcU zJ_hzOIb@oI^YUGJEG@r@Jx?^uWM-|$jIb$@vmQ5c_+7Bv;btNv*p!`Nz2<3`w4Uba zM3sP7SC&UTyz!VP##`pC-4{W(Ut2tuWq$jwed)k;pWoS;E7>yT*&8?w#M1kcgmn!b zlqi_$v1JGd&sK>3wsp~lU30H)m2q0=@b+4-jOhMldp=$&W;*cxv-#W`3_h;EX6NvK z4&MJ@XZk#rWh_i}nnk=HHEvX7$ZJR~epkjg>rh<%)BXmI6MyX9KJJ~()aX!qHr@aI zjWsJ~9byQOTx36=X;0q!JXbYMwS(8!$8GbQ@b0s6som!*e#=(a#YX>p<;~LK!~3Jw z`Sjm~U*_5DT0gZUmYqpku<rH#_(yj>iB6fjH|=Qr{kqNCdTE;$&3&JHf79y(4Uq}k zLf%g6UmfBbK4IR<zcNpMDF_J8nJK~M`Q_sdKP|n-pOh_y%-oa&PY9Xt&We6;$$iV? zyLk_1h1hB9FZ8d=7ZY!kwif33wc0#y|Kr{KKbfr>pQJuhlh`sf_5Hi%L;rmE+?8)V zJ#<0#*<Qg5im9_rE+|%gkzp4+cr$aoOcTfVmg##oq#SHwy_j+3sXHsv>L2}CFH-L_ z#7V0ih>5Xs-Dx~A)Uc&EPohmBZu|cekLK%&PjhI~<eFZtK25(MFW3HC+>sY4EB?e+ zr!%RAmacu9|JL|QOss7=a}$r*0t>}OCsdk@r9?$Vk5|+un;0I8Is0J3lPsZLbMvfq z=7x_duD%wTGUG_2g+QQ)BTMSM+!t-jX3xvEI{d5qm6jjxUH(UJ*<PjXf0J(i`%UeN zSL^Cttq#pzzgLWp!EfEZdaFqrduA;YK4`+ju~3U^m$Q=L+aDJ$ZFD}}XPmqExx@c2 zyE_*y`fk9>Bh_$P{l@=)T}-TZ7bKnz+x1=bY5D!FKFo6x<By;9GvX~t+`Rb9ltf?V zEzgDKXrJAp{yO=V>ZGDex68b4ORyYw_2WtLwpprbml^+jhOLy1_S@~@AM34;m40)d z#5(0+hhWmKMvGrOuMAfUKG(UCWBu*xzi0DrWrT!^CZut={_N6koxJG%eE!O~wuciY z|ChRXTC0kmO-DL>exCiWZI`52McmzG?)>;GeX3IZR`Bs6i$`<Z`wN#F=(h0+Y|>3t zx}nL>Z@jejW?$3cLZ8jXCq3c>HyxE#STg7Iktushd@7zB7XMY`x>A-`d41n)Hy__r z&#lEVC)5g5V#OCck~s82TVwMzz3&kbK@17qx~G#49qe>bdZ|@8aoV$a!Q9qAe^yQ1 z(WspD<C5n$`8eSZWs_UQxYkJ2J~u4=7qD2RW5>)*>yuxIY-3fp{;bsGKIdFNUx5zE zDSQrMezzjjSM<u<wt1SYcuHscj9D$0)gM;4{mW+JeDVI)_jd=5TQMm}=crU?_vb}9 zaPnD4#oS7t_xjBBwoaFKFC`9e9z55{Z>cfSLuK39IsZ#-U+<kWl`+C~{UM&y$9kVf zoZqh>rPT0fjRo7j+2QM#%iAtI^KYIi3&V{Kk2tia`6{Sc@4qBk+G!-X^r>m(%+gf` zPmi4YG%et|Q(LzA&Nm`APM*8&{qjG@E3F-kDpoe#Z};myy=ldiS*W&wmE(ZVxec5> z%Vs-;+?#&P^ueF1m3s4grWmqskMmX$+IH}!66d>vS5KZ<vS@qfal=(@`4*@DJl(8S zQ?Q^XC```gV|nV2g?|onztyYnX#FNJo8jp-HJ^h!%a%;;vi<(gW;?(2MiG{_VC62O z_lYUo<yy<U+tZcT&pBQm94@DBR=)i%N5iCE-Xp&g?-V{-weL&J_YdyA-o<s>8Vk}b zg!&&TxG7DPXmjM8V-d@=<932U!_|EggbyF^eSZ7A{*&IVEVj|?bKT1Amh-JO(4WJT z#=U{3Bw_vox#!iamyH-r3jWStJKrs{oy$JKYBr+*BV&Yv&jDl4KWE$<Ee_p~H;{Sn zzsxP2uky~0LblQ-PIgtH&K8lf*58tCjF0}P`2Q5v`o(bAC6%?Vwzcx%dXw~Nn`R$t z>&*Wf$jO>C+0W|P;(ohBj>j%E9+pz}U4P^In?<5hO$`(MYBCznZZUQ_a<R~)wt9)h zSqGNd-p^|f6jnWXuVZ{;+s6mZ{BlN1E}7`c)Oe@}rG5K#XY>2|(s!Fb*Ve6HeA=(A zd(P#{0T<0(ly@W;#qYgQ^{G_!A5T6rqmpewa`=oiTb+5o^DbTyKBly_wu8CrF;iZT z>3)g-N6mCD1+vW0oIQ(Efun&nA|gZo7^ix-Jkzs(A4H5l$=JD6x@XRCRG5EWo`a=O zKzX7^$=RuqqBDb;-F-K`KK+H)>~PYbPg&Uqqc+xYADsO5ljzHh(!6g=J|3P?oBQR@ zMw#w|X)*;d1=oxJ%KWz9_BdJg;FbvC11lMY6E<#0XkXS@eQJeOo545bKCAC@l$R;^ zS$eB%I?|II@;$(H-X&wLUp+e-Uvb&|$}Rq78<j3|L1yE*EU7ZrjBCla{^ma84bD03 zcIQx|Q-jHlYqzrhAF9td_G(H*dLmPgO5wKSm)9;na>YXFMfIoEzn(web56p5i=orS z$u>P#xxx7UN2Xd&i>ArPZ+wr*ZD3?`;Xm8j(ffYSn!4YvOHFy!^BrPzXy#h+{`UWh zM){nh)2;qAu&t2v_5L2k^HD0s#5E>gaohdmXD43n)}8Bj@+y;q(!>HkjSk}zr#p2o z9Cuk<^4apw-_N=dEG6pKyf$5D<n7l9I9KIUoiAHi^5RsT>FU@5(}L68--`1eNp@R_ z{9q6bkePXIM~`w`>&MGSWvw*LbYvuUxT|w6-Y~&KB~p+ja`~m14!=Fu=SsJ=#>Xbc zS{-$fSrD_atV;Al!bLNy*Oq_#%%`^TRg|t+bUt2Lykzo6#`<4V{=V?ixw3$>!hy@# z)!f%OQ7rLEWl6c=RLKr`g{5i@RV!x2CCt*D=uza8<Ml1_=j6%3Ott-qPJtiWU$6aq zEV@HjW9>z+wyf2$#ysXqJ-@|PJ-1(PyUk_G@rS-z8ecno*WO%^y62&0-OJKCRiCqZ zKRBfpFhoUdnwsMMax3HE_JiUV^w~NN{yv*~w>i9f^ZJ={Rv&Uxnt1DMWpDz=8}UbM zHF7qE&7}`3v`?Q3yL47^vcL0*-d^2D=e}>zewO85x6s7pLD<8<1p+I?%S2kavv|HO z-}6(l?y+iJu6FJvkMIX<Q+k#?GhudPa8A3hpI1;hspCPz!GZ;Q=5-!uU2sdNv*iM- zpoTfWd)Aqko<cX`U3gjcR6M%<%rsbc2E(Q!R(CzZ9|#4Ae%t+^JUQ0*?(d1e{y)q7 zUc0L1hQnO77%m$wlV7WD&E59Qv%SF4@L=?gx4v<ICHC90zt1_OChFA89$@+PvIX;m zq~%AVjtKH6J~{g6x$_YZ_ci<`H>Z}#a`ZGgDore?ySU;{b05=hZl)x*J63W#Z|!<3 zt;VrobF31R)50YY&cO>f!dUiL{VcgBxJ>-IrhVj++W*2|7j8YZXYL}it`1(M3Kkm{ zb4Py@2X8akg2p?$XA3AW-{DENjQZcE>;GW$@)wKCKmPPHSshSP(GilysNs^yZU2<b z)A!Z_jh=rN4}%JiJ6JX32{cs4F$OO@`pHv8=-jU+pXx)uHLQ7hCTVMZ(=QZW)$}{< z#$oNV(a*JZE3x!H=D*1LnrW4S>jZ&0IVvnBqO;f>e{6EDkzBl8O7K&`()sKaJ5L>U zm0}P5*1056@4$w~4>aBwM9wvc63Bj1pk3;AAyaA5riBNJCc613q;2C=T6x9nu-c6i zSviLdINXzey)-d)xM#7*qT#~5b1SU{_{vm-Jj*6sEa3}f%Q)Y~yz<8T8Dcro_vfVa zuXr{)E^vB|Y6g$vDkr^G;k~OIJk1p&G(1ea;#O&8ONlf}1n08c))6XvAr+IiqvTTT znw1R(2Lq))x+M1rCUG4VHDf)&I`x2Lk&XjbL}A(qHtQ<c=PUdUX3ns4oTGDq?UBWW zg8ry8b9T;-;qXuqdY9(okaxEvO<?1J#sg_Bi!CxW_SelVe5~Rv$TB;ICDy@n*40z* z7+n@=3a|(*SQi(t=<Pi5HLDA>KXC03S-~JU;{@9b1|g;kjOLu;EnJEV1g4zX{K2Pb zfdGs1!z)W3=&`nEF&jpNntTe{^)kh9YU0cd1se{WXtk)G8kpdrV)R35=FK~wvX>gO z@X0*1aI*XJ&L;bv&gUb}Ift8AgQn^&eYQlSc~b4Fz*QID*)d+ytyG`X8+5gVmBqnt z@w&!CE>l*X({X50m=Sy~n=Q#eghl<L`8uKNyo;S5cgWg^X)j&<C)HwS$EN<p!HsXs zy;OvX*ro)>sQnLXWbR5-%zF4{;<xy8$^BMG*L*9!p}^Ln5EPW;>lHPz)02T|iVQPD z>c44o<}T_p{t}gvR+1`kX<ON?O<^4@#z$`&MMySY48LUVzc|?D<l-KS6A$h%8e8Pg z4Pfw45n}4t{Mh-^s&_&c8Mm#M-N<?TVfo`}oY&^e{FpDFFIFwMEy0k*l9y?TK<AXm z-YW+tE?XlwF?hO__Zru<*Ft$oiNZ-6d^#Lg?3|%DOLJc#N9Ym3%?a{7NoVJ57I#$8 zIx*L+)8){Kt;;O)kDOtcc;H}TrgBa~2Is%rO<&LKJoa_***ZoS$wFzLOkwM%e-i`* zXJ{<G6W%mu&PJC^SGQBk%4RVv-E%|D!cFYKs)HY9mYkcK^lPFC%Ld*V78(oRC^mP_ z;eX!bsx<L;?-l1uzPFMaxnz8f=(PCqXg`$i+bU<TTz5R8*vCFPTySH8fsVtHr88M3 zylGufaw5r3?f(;|3DeS!@7TsT+0t(tqn2BSOy54K^fQYz7rzi-Jd!BV@y)PN$YN@{ zaa@~|v(m&>XRp*=I-8=*u;kGL<vc~ckP5@i$Lz{i?A_Np&E(=Gu|V;~WooSp86RBv z>GsZVo`i~#*QVl4Hxt_CW>~F!`sUs7e-mS@CUiAlkjy#MCGHm_u{?dj17&9wA<p3Q zof|lh@Gz~mh%kJ6x3}T2vyIk~>9@*qr(_-8V&xOfo3(l6Tn)A*e7hL9JQ#1k<ltg5 zUcOCLR84-1z!oJwzP9CBH}?c|CLHQJ?84}LqVICakv#?zJXEH<Wquj9fzjdUL0)D< z?XT86pFRla`zJ;8qzU_qxy~rNd4sh?=qQT>OWULzEp59UT{(N_w9Gzve$kW=-X;b% zoehlKtnAH`{>v13-xuc6xjxxNDbaoDXWLunL{_qX;g&SxS;DbWBXp*bj_0#4wPKe< z1?Jd#%-&^k%WdJoIp3e3*7NpRaA%5t42NA#r^_Rm<qv$ayEpZ2uzh$#i%YmWF>(Ee z{|oKaKfQg?Bk9G<#og(0Xy()dGZ_4$Q>FxExgQ7>kq~nF<v-*7heiKe3%pf?4jcGf zPDx8qXt_{od-40nkLGL|!ACy_2F^HfdG(#*zsIIz)SIdZaT;&mwymtB<i<8%mlMi{ z>t9zHNPPKO^CI-cYECP`0|9|QJT?VYe$~3TZ7%n{{|hb)HF3lmNSpCXn|@o7c=d(t zt+H$9;x`yX#2UXml57|I;o7rfH#{f%uhjdtuz#Y5(!>+z=30xoeyp(R+^6nn&a-&q z#*IstE?u?i)Xufv-()}kd;4=O6KiWru<d*K^R?M;KS{6K_2E#r{!G)?pR(8Q{kBSb z{hlY2ywm2?KYVlD&S`zn@1ITC`g1FP=gV!?sr#|+eQd=|Q~5P(oaL1#wj6%AYuB!p zpx=M%6j{DAFvMQ(?&@N=a{c=4ZFkLo{+x4qPl#~qs_R0p7V7LWex+;k)OmmTasBuE z-`_iZZr&metCAlZ?f3o;|Ni%v`15%tN#{QwQGVEWPGeF@*_N$awjAYMt*$P!eEFJ+ zEjxFrrrq#Zq!DHC;@d70?+d#7XZ^h%9xqW}QU6>pXY<mXs(D5-Z;tqw<XQIb?DtTa zma3}rI>BJY>tAuIGbXE~%$+IRR<^#|w0!!?-r&z?7*>4v5*2lw$BAG5sNdCdDfhWq zwE6aae0DqU-#uSrJ*&NY*XEuObiebh`TgCp*SVMdR{Z?BcKW=cW1{snPxh<Lvv~Hd zU4DK1_E+(Gy9@rbbOtZ;nOE{j^Siy(@}+fuuU=O7-TR=clsAx}SZ?3<9m($YKd19E z)IHqDzRYi4#U;<jYIBO7J=Wj<^oq06!iM`brQh=9ew>$m`>d;c{w$NaL*M^@J;%L# zzE$0&Cz;FV|D4Wxn(@lo_@b9R#p-?%<)2oj->td5_VMxl`kZ%6Z<K{R52deN^(yX& z)%l6C94tx`I}#=KRz5h}xI0#bA*Q2Bck`^`WirLbOsr4c^)3)%n3&Pip>w%sarcjJ zy0h(LzZ{!u|9d;1YQUpS^&cNg&!74G+mV->^LGA}T3z{A|NYOOugtbCil~3SetrFh z3RZ#opXZCia&zSajsMIQuP?u=Yu_!-yX!&I=jM&KqVxBBJ3l|?OVwS?qiH!28*?5W z@0Py3XyUVFUsq4J`+L9t^;FY#ejdI5PvpPf`(I*mr|9`w^Ru<t4-W_?AMaZ;>-U?> z@oOTs?p-PRyU)eS`A**V>jil$R^7UJ^X6{D+9}iDYsxn^xuktgD#|i0a0}qDUViDf zgzt6T+2?nD`u+ZV{r73F*UkL-HhO;Dr_T5B^<M+q``2h_n?3s2=69X-xxfA;tNZ^S zOqQL!FJf2H;TfFEdsk{!eOdY3Q-5aV&(P~J#b<kpmmQ0i{{Q7uw&98?|8|<5eOk7= zRbk<ZoM_?m`=9Mpm;3p+`MazT&yic#^?v7kRF_{XS9xcO`uyrw3+-)6FRP|At$FwR zU%yMz?Qhq+FDWaX-c)7oVSZeG(nPsVE~|O|Q8(r+KfWiu^ZWImZrdWiv!%rrx_Tbq zK61NkP4%OG{r|7T?Tt^q$jJQu!gX0<@4S*K-~HA5fBZOWIW_wA?ViZ=xodAeoaT3U z@$CM4zaP6Z3SFtcz#tyAm`(U;_@&0wo9<U+xD+C;y}zL4KR4HGn~C|%Z!5YQpXxD4 z7-k9Fa8p#CIP+%}pP-^%!SAR;bKV5&>ff99JvcWYOtfgVS;H~i`S(9Po?pLj^1JFU zH~H_^zn_xK|F%bJnPB<U>pqh9WuLoT_t(Byneg?)%E|sM0(!m5X%}Pn*M2+9FSh5? zA>;CUh0oVWif4A*zEiu%@v;e{!EL9;qbs!5t}1&y`&#|Cle^rMx4nM<S$y)M#QPIH zI$peXtuiRimz}@xjF$0EZx;s3*D9at`OZH5rdF7#b>OG@idpZ<GSB?kdep6acc>%J zE!htm9KZW`w)%aoTwVM9>_wBaXWln-ZcLo9ELS~Tx4U(NYxLp1@cFf${`y~AF^eI` z!SZoWrbxfZ+gCDGM?M~x3uEG%Q-147#qnpy<$wR}*56z6U%$TU@Y(HaZ-{-&IAp?W z{PV}ORJDX>PbN!+y^=lJ`PIY1CgI4%bbs0K?P(WPpU<&L{B%-(&*npq%RoN3lUHsd zr@p9GH2bp2-@1DJTMjJCY(8t>G)ipDDT$5V`QdK+zsKhMc3(bR+PbxCRb}~OL6=p_ z)ZOgnmp@+R|Ga+FrRSeDonCkrmhX;<Dhdsrx=u3I`_8)6T^?U%E!%l_-jh`UA-W$q zPTSS|KYh$^?xXele;(^A+x%Kn=(~!QQi*NTGA$>K-QqTKp@A{)?oRHsY&)W<efjP; zCDj+D%D3Ns6PrFog!L~|>;(OYkRX{$p{x#({{`>weWes$b9(>1ANu?M&#zSGv)^>& zv6*rp!*PF`w?7WI|LAr~uYW9K&bT1b{NBII(ff8*ew5yRzwWm*_x0G)&;ILd^0yq# zTCru%juYw}{~mpsG-<-|rCNFAg`O+#KW1ZC_`}<2;e!5{#^`rDzdyI%mw9VR;pAnp z|K?_=NqjtUeZwS`NdX!ny>4@jd*c}uU6Pg?F07li?CYZ1vwa1@+v{@E8a!RamSnzC zf4^_<qDHr{sQ(}1|9{>cU-SIz^|+S`|1*P^mt0#n<NLis$;apKt35l(mG|h=s3V`k zwb#b$MQ%;~upv>E@%ygQY<}BE6-!G`zy3UZe(gVVmmPt+tBhv7_Pu&H<p0xaZ+qS6 zTP%$zsrm5m&{27P>+ic39zOMU|K5*QyS>A<<>&ThtHxy++b;LB%)HsOegBO;#)86O z54XluK72p#(I@48%Vmj&yY$Vr&n>*RrAz7VrpRCG5Be0S%$_r+=Z^TzWy|JOf9+an zY#JMWvGuh&|DF%bhrh8mF|^42xp((}>Bp~IC(eiri+p=^#oE1>-+naQy#IcO_`M2q zDdT2W$27JDmELs~-<z-3eLtT2HZk8IBs7lcfN@pSA&vl(=?c4E+sFT!nE0#NRifnU z^7xoF)in%L9w=^pu9Kj#F5)l$yI+~H7A2S0+FNC&oRl?>yC%5!)vBU5%0ivXGLIfT zdiLyDS6A2SsX1PkE?#6@uw==S{7+01iy2QvFn!%{|3uz)^*i_Oyy#?WTG|_Zeb4WI zi*}ven$x+}`~RtVuX2n3oBir|Flqa|-$j2vZvS)oOMCixIg64Tzq_aR*=#BKcWJHp zuf6N{{CfV-x$WP_h4+7ZPu-|~{>HwVIB8b<=v{v{)GbVvezj*~?xFBYH!iNq)^c!l zU06E5en-mDX9DKI8@6ORZ?+Hk@{?VDO~lT+%g??&yt;c@&Wk4>4yDG|>`Farb-E|# z*2d4zx5u8}xZ&)jBj;`|Sn$U5)!Ph#@{RA>m@8`>`8Tb2SI=>2%9LFbj=kots6DZ8 z&7xIn4($vHS*sB;XW#wzu0jv_M3>K-;=#${%y3}ctcA?+f8IWp-}7C3ySGcyx1Hhl z3a%YV{;+j|hj28<#0hT_3}&P+voI*u5$kqaylY)}SQwY$uU9s^k|!5_)4ft#w{J(L zY}uO`m)$e?ZH?;R-g@e)7;f?;^Y&E<!-A*g>tEj3mw5c!S8M54-RzrhcWruR|9=m6 zn*G<BJDbk!`>`re^z8bIQ|oqq`xL#uG+mu(<B7bSyT%z$W}H4J@$*1(@u9hE&HwF} z-}~zZ^Tr*V8q-pbKKhvKXO+tmW;(t19nZeKd&_zS^JNVd=t#Z1v9tE~kId<=+jahA zoGhAs=CND<!U^X$=qNV3%<;K#SK|5{sXy|qUuNg+|3Af8KVrj&%N@Ok`{k-nwLCU$ zT;J|8Dd5$%ZDyx8g@nGnb-(ZU<C)Q>v3$b5mrtEKRbv-_f2xkclPl-c8g{EW-o1JK zj0WG&`1$7PpEoT^_On)BvEAei*XnzV9=-DFxBW5QerN8PBc1Mi+B;ua+jHi}{JGfH zx413j|Fe6)twjD$a9mu|6<T+rQ1qAe{r?AJ7oW3OtR_<Za^}qqYbT#y>9{&q;#<Q) zW%eCP`}aP7&Ze3EtCUStm4nq&oGETP)9w{F9v8mPdMi@3bN`j%M;|ZGtA4n0mu&pJ zqIYXN?w<N8z1?r7U6`_21Xr0`-|{ID|BDT?zU**u&R3YYJdHu4OQ_RD$ZM{|n|qCy zzuNM>KGL&lRp-9-_b;-X`krZQQR=$0>g+_1H&;&YH+{Kib<RRD)<4@aul3l)mhUc& zy?o@y%FDBzmWpyoKaL2TdRh6cuYZ2T6Mhz(egBNp;$$z}2)ZJF_uu5XXWu>*ovIb7 z?qd;pHD=a2BWJ~5d1o_X7hXP>Sz7&f*D4pCT_2;b3ky25a4I}1Om0~<*Qj#SK@qMh zv9tAeAAc4R59gIPO*^G}x!k0D%Cu=SKK`(;t>GxH+u_0X<jfn^PM1qpuB1q?8SlRP zE<j_-i_Q#tb>^h>?1>D^)_kzLS3JMVMkMs>OGks~Wd|2bx+L_DX~l{aTXLnBXfZU~ z9NfgMHzzXsy2+0XvnIITFx#9v@tNO^N7Hg=_O!T9nk<mOY<0lF(^FG@LoQp1@A+TP z)@d-*G%7SYmR$Kb`R`HYF9}C4IRB1xsLbrljlQ()T=%-=@0{LARy!+AELmD`Y0KTl z0;dk<?SfB36i)J=QJs(+|NOui4_9|VM!zLfjLY)Yys=;L|A6AO%o)?>e!6TNeTKp4 zzrMB6<as`<a|`RHI;C-Y#>_hqxcIoi?Y2ZCmFlkDf|H)e+Ago{;-BcD;xdIp&@!T_ z#8_o^#|+D2PM)pHS?-;=<G$YSpE9>%jGp+Xgl&&!-s9)Al&`PcxmRQHvx0{T6Fp=$ zmZ{91Ssc7p=t^EOk5rqZOYM_e{47k7{PXTj;ALz6{Y6nRb@r~#SInyGC0dwVlqMd! zn|qbXEzZ_J$?HX$j+nPgvvINf+-vW-D$aa7U}9pTQX&)2%4t0D#Gl>I`XpN$U6fv0 zUKTFeXUCl7uh$*2%rR}YqDx+wh|;a^A)4ou%XhczRZ3Jyj$gFf-oW~{@LtB_QU87& zyRVzEWXG}jHcPL(cQWg}{rYP{;f2?3Y|+=(I-P7_T*_F|op{GSKikvw;@0G@{}$`b zUVXk(5@flnwesF4wfK$sG4^l2e}4V?@V6_APy5TgcpDYHW7o@@=cCTc1RL(0|Lykn zS67tYpPj5#db=jC@N?$zDJv(Q*uQ`G-bF?QcRQcjO)U^mo>*WW9dM=~K|s*u{H?BU z+qPxgVVa%0HkT)8N(hURpybAkYIh6E$xICbU8`2PFa#z&@zLU17(Vge>%9&yRC@}t ztJ^Koe|;$`uX(sUUMKR$x#IKtx4b+3Hu{=Q_0y^0_L2Mkd<~DU`~LXpR_XAwGmX<f zioZ5rANlLk{C_6z<=<~VF7e>%{MsLPivNE;`TVt1R`{MDkGPAU{adS=#PIERcA4$I z6(3K}eVA@{YhOilMQ-fx*!6k8zFL>+>)kX=PklY>*0!77vl!0&uQ@)qer@b!k^4JW zKfZZ>)?u}-7$#38*^SG^-&^fD_4!G4^!tjnX0HlOuWq&bd~@CMe;eO6{<J=1_<Cvo z_TA3+Qnky@+`Q1)EZW&}DOTv5^*W#Um2r*BF0FdnEv6fNHm&68CsDKDVCTPmb9ZY< z+TFW$<-^fcy|S{ox64gT%-`R-xIuWqw`t4PmVRyX-O%&4^tROOD2FQ-Z-s2HUCyhN zqIl`e=2TrphAq<@?3KQ-buHWa_SYx>_4{_Mbq-niFjsb+vH#p1MIYV0r>|FY6?U@D zc{0(I*~{+Vhr<bxHy>?(e(rb0*(;fsnew*tCT=ya*|+fHna$^NZf!`q_&l49&;H#7 zqteIAsx-Vxcdqx^SpWN8ng0RX1MaiSU9EKDHmu4_P5#pR)Yo7C-c6Bo2K62d`^O&? zjN6lKo^Dtm+xa)Olzq~Ryua<s`8&#vwSDF0X!f_>^<~Y&eZ0HZbRP@l)h|D)GtV;d zzzczyv$B1ba<iKY&HO*>)9Hq%*E3Q%zRa<|94}&IExrAUdDWeDZMm<n=iJznc=nWT zX>XU3f{4Ui@9BDR+snRAQk}mxa&uAe+iPc|x8=m`FT1<TclP!5w>D&YCzWR3oj!kk z%;v<qtFB6Cx2{UFtB8({c6WDQbbtF^Urt7!nSryXNNZo3{qXuUL4J|%_OIW(G(I=m zZiUT)6;TQgw(IV$I?>TJq5AKvvuxa<qD?2?ehi)3R^s~k_g}rxtvS-$mS*j`|Ne4l z#FKS8>v>w8Hs~7McA9H)<@c{s*G?XG4!iO%$GdvU$<+@|C?35U_U5hcMeaU6#)8*f z-3gI5ZsqW;_#hv>^14~u^t{ab*AfLkDu3SgC$;#^mWfB7%I(>^=;z$hxy+~UGOo{x z-X^dm<LkNI_iow!JaNe=cEN-RCzNh2i0PjFEh)ZPvdiw%hr?OsYhD|?d0V=hjo<!R z$HTv6CZ^3U;lCaytoU?dVteQ}X^V=4(Bf?A#+Y4FnYnjw=E&3^+Tj@L+WYl3Z*zCk zy#kdSLyf~b{9G2UiQcXkIH%%%(iPP=EjNPC-(Oe7eQ8fSkIa+O-5r5O9}N7rynAX{ z%r0wqDtYVG-1i#m*JyB8zLt(^>$h68u`K!HgFttF?fJh?&A+v9+K*VTz@rC}p8D(W zSMXw&DZSwktGs>v3XKP>M^0qDZ&|o7`*^6ITu?~x({(F9{SpnCUZowo>ilw<sJHTB z0TWX^mVTe0l<QJ|zKhrQz3Gknvhm+e+}<jm+wG?0c0^41^p)$=OnohvE!w<r@8Q=o z4G-}@yU6@E@1V3)?_;)KV(YX2l~nVvn+vVH+^3Pw7SpV;*ROgdyPJXUVd+&;A+h_D zvP-T^cyy~*`y|hFehZ#G(z9nS*pO?;nWioGu4i`J@wHoyzuDBVDedZ~xnI{Zx633& zoXuIhL}h`%Z4XD6zrVki?~Lhm5OEFM7pBw2^F6VwY{JP%_QvY72d@1Q6;=;rU~nw_ z>1X-b=JYmE#fDkReVcb}({N+j{d@7Tjweq8lXDhws95GbT6sL;<n3J=@_j1XeO_*_ zE-er^P$9x-@!o>rM&SK#H4@kTHI|qBd3i>7^~5LTn<xFB{x-N@OWypz+zDUV_2m0Z z)cJT7IXCZk+r!9^XHjgx#nHKCO|{h>50-n;f89<CIk#PT!S%<~z4ezXGh=^Te7ZLC zDy`E!6?;}}`6CfOF(4#XxOwjyE<L^1@-H)tb$Cj4M@hdf-&*EyQF}G}be8U0i_=_F zm*z$?q|QrQvtq>ql^>@(I9QUH3eQP~v8R1e>=N*pH2I&~68-NTTZ?apFI%MbVg7X1 zxrdotPBb3rF?{+$Qb|NlNU~sVa`xuUepfcfH8bwFKd|lW5>fHj(~kb-ljPYjRl?BZ z?$X_N7;f{#vNP)`JowJ+a-=Ewtzhwuj)igCS5>U`;+&RQcu(%e^%a~-57*Ueo_scs zTS|aSKxxv)xk8cE=IM8e_cqnorf$=Dw`x_p$;`5ia|18%dpa$>y7cMao7;4)4UeC2 zV~hV@HmkV6@5wS_4Gt9{&cM81>IG#}OO#gpTxrAbCqLON=XQ~v#q*lveUZ5mZ2P2y zPI)BG`}!+Q++AISL8!B(NWb%Q&uiPIhpybY^?a2S58LhAw`cCuKNF{vm6>_6=E*ws zSF7fKGp)TTbo_0oN0;tI4~t}na|V~Ezg?g-d)<<|a{cVJZu>NZFYe2+@mg^^+mCl= z!5>AT&K9F`@spCx6S})>zU?o0_xkclSx&a69Ola0PL2u_JuL1%xH9Er?QCQ9>nvPc zoKIhDPWH8)e`bMGNKU8Ap)0;FX76YI`ajE@<L{0ght4uEFfe$!`njxgN@xNAw1a30 literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/twitter-embed-1.png b/wp-admin/images/screenshots/twitter-embed-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d79ee1d7ecacccb3c5aeee8d285193fdcac68bbd GIT binary patch literal 15096 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 I=akR{0GBtVl>h($ literal 0 HcmV?d00001 diff --git a/wp-admin/images/screenshots/twitter-embed-2.png b/wp-admin/images/screenshots/twitter-embed-2.png new file mode 100644 index 0000000000000000000000000000000000000000..14da4b8236a60b63b92b982d04ccb637e8df22aa GIT binary patch literal 16697 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/stars-rtl.png b/wp-admin/images/stars-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..c6330b620b678e8b54507f6968a6360685c98397 GIT binary patch literal 2003 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/stars.png b/wp-admin/images/stars.png new file mode 100644 index 0000000000000000000000000000000000000000..98e32a5937afac3673ee669d874f7c8a22f4cdb5 GIT binary patch literal 2098 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 SW@8Vk#XVj9T-G@yGywn?tX*>e literal 0 HcmV?d00001 diff --git a/wp-admin/images/wordpress-logo-2x.png b/wp-admin/images/wordpress-logo-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6679e11d24730167d0305e972a220b67870541ee GIT binary patch literal 4867 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/wordpress-logo.png b/wp-admin/images/wordpress-logo.png index 7421f2194aedf01405058f6fae0a73e2192e1ff4..849a2d0b574d92e20d7f0b5a09316765b4e9bf06 100644 GIT binary patch literal 5048 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 b>IWG7?Umx4)YdnG#?m}p{an^LB{Ts5*^uLx delta 2321 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 diff --git a/wp-admin/images/wp-badge-2x.png b/wp-admin/images/wp-badge-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfb577e85edc4f199823469fe5a8286c3d849b8 GIT binary patch literal 28160 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 V?#rE985kHCJYD@<);T3K0RW>^-#7pO literal 0 HcmV?d00001 diff --git a/wp-admin/import.php b/wp-admin/import.php index f9d813709..a9de2654b 100644 --- a/wp-admin/import.php +++ b/wp-admin/import.php @@ -20,10 +20,9 @@ get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __('Overview'), 'content' => '<p>' . __('This screen lists links to plugins to import data from blogging/content management platforms. Choose the platform you want to import from, and click Install Now when you are prompted in the popup window. If your platform is not listed, click the link to search the plugin directory for other importer plugins to see if there is one for your platform.') . '</p>' . - '<p>' . __('In previous versions of WordPress, all importers were built-in. They have been turned into plugins since most people only use them once or infrequently.') . '</p>', + '<p>' . __('In previous versions of WordPress, all importers were built-in. They have been turned into plugins since most people only use them once or infrequently.') . '</p>', ) ); - get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . '<p>' . __('<a href="http://codex.wordpress.org/Tools_Import_Screen" target="_blank">Documentation on Import</a>') . '</p>' . @@ -138,4 +137,3 @@ if ( current_user_can('install_plugins') ) <?php include ('admin-footer.php'); -?> diff --git a/wp-admin/includes/admin.php b/wp-admin/includes/admin.php index 5f5190d8d..439fcdb81 100644 --- a/wp-admin/includes/admin.php +++ b/wp-admin/includes/admin.php @@ -6,6 +6,13 @@ * @subpackage Administration */ +if ( ! defined('WP_ADMIN') ) { + // This file is being included from a file other than wp-admin/admin.php, so + // some setup was skipped. Make sure the admin message catalog is loaded since + // load_default_textdomain() will not have done so in this context. + load_textdomain( 'default', WP_LANG_DIR . '/admin-' . get_locale() . '.mo' ); +} + /** WordPress Bookmark Administration API */ require_once(ABSPATH . 'wp-admin/includes/bookmark.php'); @@ -63,5 +70,3 @@ if ( is_multisite() ) { require_once(ABSPATH . 'wp-admin/includes/ms.php'); require_once(ABSPATH . 'wp-admin/includes/ms-deprecated.php'); } - -?> diff --git a/wp-admin/includes/ajax-actions.php b/wp-admin/includes/ajax-actions.php new file mode 100644 index 000000000..5ced90166 --- /dev/null +++ b/wp-admin/includes/ajax-actions.php @@ -0,0 +1,1787 @@ +<?php +/** + * WordPress Core Ajax Handlers. + * + * @package WordPress + * @subpackage Administration + */ + +/* + * No-privilege Ajax handlers. + */ + +function wp_ajax_nopriv_autosave() { + $id = isset( $_POST['post_ID'] ) ? (int) $_POST['post_ID'] : 0; + + if ( ! $id ) + wp_die( -1 ); + + $message = sprintf( __('<strong>ALERT: You are logged out!</strong> Could not save draft. <a href="%s" target="_blank">Please log in again.</a>'), wp_login_url() ); + $x = new WP_Ajax_Response( array( + 'what' => 'autosave', + 'id' => $id, + 'data' => $message + ) ); + $x->send(); +} + +/* + * GET-based Ajax handlers. + */ +function wp_ajax_fetch_list() { + global $current_screen, $wp_list_table; + + $list_class = $_GET['list_args']['class']; + check_ajax_referer( "fetch-list-$list_class", '_ajax_fetch_list_nonce' ); + + $current_screen = convert_to_screen( $_GET['list_args']['screen']['id'] ); + + define( 'WP_NETWORK_ADMIN', $current_screen->is_network ); + define( 'WP_USER_ADMIN', $current_screen->is_user ); + + $wp_list_table = _get_list_table( $list_class ); + if ( ! $wp_list_table ) + wp_die( 0 ); + + if ( ! $wp_list_table->ajax_user_can() ) + wp_die( -1 ); + + $wp_list_table->ajax_response(); + + wp_die( 0 ); +} +function wp_ajax_ajax_tag_search() { + global $wpdb; + + if ( isset( $_GET['tax'] ) ) { + $taxonomy = sanitize_key( $_GET['tax'] ); + $tax = get_taxonomy( $taxonomy ); + if ( ! $tax ) + wp_die( 0 ); + if ( ! current_user_can( $tax->cap->assign_terms ) ) + wp_die( -1 ); + } else { + wp_die( 0 ); + } + + $s = stripslashes( $_GET['q'] ); + + $comma = _x( ',', 'tag delimiter' ); + if ( ',' !== $comma ) + $s = str_replace( $comma, ',', $s ); + if ( false !== strpos( $s, ',' ) ) { + $s = explode( ',', $s ); + $s = $s[count( $s ) - 1]; + } + $s = trim( $s ); + if ( strlen( $s ) < 2 ) + wp_die(); // require 2 chars for matching + + $results = $wpdb->get_col( $wpdb->prepare( "SELECT t.name FROM $wpdb->term_taxonomy AS tt INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy = %s AND t.name LIKE (%s)", $taxonomy, '%' . like_escape( $s ) . '%' ) ); + + echo join( $results, "\n" ); + wp_die(); +} + +function wp_ajax_wp_compression_test() { + if ( !current_user_can( 'manage_options' ) ) + wp_die( -1 ); + + if ( ini_get('zlib.output_compression') || 'ob_gzhandler' == ini_get('output_handler') ) { + update_site_option('can_compress_scripts', 0); + wp_die( 0 ); + } + + if ( isset($_GET['test']) ) { + header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-cache, must-revalidate, max-age=0' ); + header( 'Pragma: no-cache' ); + header('Content-Type: application/x-javascript; charset=UTF-8'); + $force_gzip = ( defined('ENFORCE_GZIP') && ENFORCE_GZIP ); + $test_str = '"wpCompressionTest Lorem ipsum dolor sit amet consectetuer mollis sapien urna ut a. Eu nonummy condimentum fringilla tempor pretium platea vel nibh netus Maecenas. Hac molestie amet justo quis pellentesque est ultrices interdum nibh Morbi. Cras mattis pretium Phasellus ante ipsum ipsum ut sociis Suspendisse Lorem. Ante et non molestie. Porta urna Vestibulum egestas id congue nibh eu risus gravida sit. Ac augue auctor Ut et non a elit massa id sodales. Elit eu Nulla at nibh adipiscing mattis lacus mauris at tempus. Netus nibh quis suscipit nec feugiat eget sed lorem et urna. Pellentesque lacus at ut massa consectetuer ligula ut auctor semper Pellentesque. Ut metus massa nibh quam Curabitur molestie nec mauris congue. Volutpat molestie elit justo facilisis neque ac risus Ut nascetur tristique. Vitae sit lorem tellus et quis Phasellus lacus tincidunt nunc Fusce. Pharetra wisi Suspendisse mus sagittis libero lacinia Integer consequat ac Phasellus. Et urna ac cursus tortor aliquam Aliquam amet tellus volutpat Vestibulum. Justo interdum condimentum In augue congue tellus sollicitudin Quisque quis nibh."'; + + if ( 1 == $_GET['test'] ) { + echo $test_str; + wp_die(); + } elseif ( 2 == $_GET['test'] ) { + if ( !isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) + wp_die( -1 ); + if ( false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) { + header('Content-Encoding: deflate'); + $out = gzdeflate( $test_str, 1 ); + } elseif ( false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) { + header('Content-Encoding: gzip'); + $out = gzencode( $test_str, 1 ); + } else { + wp_die( -1 ); + } + echo $out; + wp_die(); + } elseif ( 'no' == $_GET['test'] ) { + update_site_option('can_compress_scripts', 0); + } elseif ( 'yes' == $_GET['test'] ) { + update_site_option('can_compress_scripts', 1); + } + } + + wp_die( 0 ); +} + +function wp_ajax_imgedit_preview() { + $post_id = intval($_GET['postid']); + if ( empty($post_id) || !current_user_can('edit_post', $post_id) ) + wp_die( -1 ); + + check_ajax_referer( "image_editor-$post_id" ); + + include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); + if ( ! stream_preview_image($post_id) ) + wp_die( -1 ); + + wp_die(); +} + +function wp_ajax_oembed_cache() { + global $wp_embed; + + $return = ( $wp_embed->cache_oembed( $_GET['post'] ) ) ? '1' : '0'; + wp_die( $return ); +} + +function wp_ajax_autocomplete_user() { + if ( ! is_multisite() || ! current_user_can( 'promote_users' ) || wp_is_large_network( 'users' ) ) + wp_die( -1 ); + + if ( ! is_super_admin() && ! apply_filters( 'autocomplete_users_for_site_admins', false ) ) + wp_die( -1 ); + + $return = array(); + + // Check the type of request + if ( isset( $_REQUEST['autocomplete_type'] ) ) + $type = $_REQUEST['autocomplete_type']; + else + $type = 'add'; + + // Exclude current users of this blog + if ( isset( $_REQUEST['site_id'] ) ) + $id = absint( $_REQUEST['site_id'] ); + else + $id = get_current_blog_id(); + + $include_blog_users = ( $type == 'search' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); + $exclude_blog_users = ( $type == 'add' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); + + $users = get_users( array( + 'blog_id' => false, + 'search' => '*' . $_REQUEST['term'] . '*', + 'include' => $include_blog_users, + 'exclude' => $exclude_blog_users, + 'search_columns' => array( 'user_login', 'user_nicename', 'user_email' ), + ) ); + + foreach ( $users as $user ) { + $return[] = array( + /* translators: 1: user_login, 2: user_email */ + 'label' => sprintf( __( '%1$s (%2$s)' ), $user->user_login, $user->user_email ), + 'value' => $user->user_login, + ); + } + + wp_die( json_encode( $return ) ); +} + +function wp_ajax_dashboard_widgets() { + require ABSPATH . 'wp-admin/includes/dashboard.php'; + + switch ( $_GET['widget'] ) { + case 'dashboard_incoming_links' : + wp_dashboard_incoming_links(); + break; + case 'dashboard_primary' : + wp_dashboard_primary(); + break; + case 'dashboard_secondary' : + wp_dashboard_secondary(); + break; + case 'dashboard_plugins' : + wp_dashboard_plugins(); + break; + } + wp_die(); +} + +function wp_ajax_logged_in() { + wp_die( 1 ); +} + +/* + * Ajax helper. + */ + +/** + * Sends back current comment total and new page links if they need to be updated. + * + * Contrary to normal success AJAX response ("1"), die with time() on success. + * + * @since 2.7 + * + * @param int $comment_id + * @return die + */ +function _wp_ajax_delete_comment_response( $comment_id, $delta = -1 ) { + $total = (int) @$_POST['_total']; + $per_page = (int) @$_POST['_per_page']; + $page = (int) @$_POST['_page']; + $url = esc_url_raw( @$_POST['_url'] ); + // JS didn't send us everything we need to know. Just die with success message + if ( !$total || !$per_page || !$page || !$url ) + wp_die( time() ); + + $total += $delta; + if ( $total < 0 ) + $total = 0; + + // Only do the expensive stuff on a page-break, and about 1 other time per page + if ( 0 == $total % $per_page || 1 == mt_rand( 1, $per_page ) ) { + $post_id = 0; + $status = 'total_comments'; // What type of comment count are we looking for? + $parsed = parse_url( $url ); + if ( isset( $parsed['query'] ) ) { + parse_str( $parsed['query'], $query_vars ); + if ( !empty( $query_vars['comment_status'] ) ) + $status = $query_vars['comment_status']; + if ( !empty( $query_vars['p'] ) ) + $post_id = (int) $query_vars['p']; + } + + $comment_count = wp_count_comments($post_id); + + if ( isset( $comment_count->$status ) ) // We're looking for a known type of comment count + $total = $comment_count->$status; + // else use the decremented value from above + } + + $time = time(); // The time since the last comment count + + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + 'id' => $comment_id, // here for completeness - not used + 'supplemental' => array( + 'total_items_i18n' => sprintf( _n( '1 item', '%s items', $total ), number_format_i18n( $total ) ), + 'total_pages' => ceil( $total / $per_page ), + 'total_pages_i18n' => number_format_i18n( ceil( $total / $per_page ) ), + 'total' => $total, + 'time' => $time + ) + ) ); + $x->send(); +} + +/* + * POST-based Ajax handlers. + */ + +function _wp_ajax_add_hierarchical_term() { + $action = $_POST['action']; + $taxonomy = get_taxonomy(substr($action, 4)); + check_ajax_referer( $action, '_ajax_nonce-add-' . $taxonomy->name ); + if ( !current_user_can( $taxonomy->cap->edit_terms ) ) + wp_die( -1 ); + $names = explode(',', $_POST['new'.$taxonomy->name]); + $parent = isset($_POST['new'.$taxonomy->name.'_parent']) ? (int) $_POST['new'.$taxonomy->name.'_parent'] : 0; + if ( 0 > $parent ) + $parent = 0; + if ( $taxonomy->name == 'category' ) + $post_category = isset($_POST['post_category']) ? (array) $_POST['post_category'] : array(); + else + $post_category = ( isset($_POST['tax_input']) && isset($_POST['tax_input'][$taxonomy->name]) ) ? (array) $_POST['tax_input'][$taxonomy->name] : array(); + $checked_categories = array_map( 'absint', (array) $post_category ); + $popular_ids = wp_popular_terms_checklist($taxonomy->name, 0, 10, false); + + foreach ( $names as $cat_name ) { + $cat_name = trim($cat_name); + $category_nicename = sanitize_title($cat_name); + if ( '' === $category_nicename ) + continue; + if ( !$cat_id = term_exists( $cat_name, $taxonomy->name, $parent ) ) + $cat_id = wp_insert_term( $cat_name, $taxonomy->name, array( 'parent' => $parent ) ); + if ( is_wp_error( $cat_id ) ) + continue; + else if ( is_array( $cat_id ) ) + $cat_id = $cat_id['term_id']; + $checked_categories[] = $cat_id; + if ( $parent ) // Do these all at once in a second + continue; + ob_start(); + wp_terms_checklist( 0, array( 'taxonomy' => $taxonomy->name, 'descendants_and_self' => $cat_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids )); + $data = ob_get_contents(); + ob_end_clean(); + $add = array( + 'what' => $taxonomy->name, + 'id' => $cat_id, + 'data' => str_replace( array("\n", "\t"), '', $data), + 'position' => -1 + ); + } + + if ( $parent ) { // Foncy - replace the parent and all its children + $parent = get_term( $parent, $taxonomy->name ); + $term_id = $parent->term_id; + + while ( $parent->parent ) { // get the top parent + $parent = &get_term( $parent->parent, $taxonomy->name ); + if ( is_wp_error( $parent ) ) + break; + $term_id = $parent->term_id; + } + + ob_start(); + wp_terms_checklist( 0, array('taxonomy' => $taxonomy->name, 'descendants_and_self' => $term_id, 'selected_cats' => $checked_categories, 'popular_cats' => $popular_ids)); + $data = ob_get_contents(); + ob_end_clean(); + $add = array( + 'what' => $taxonomy->name, + 'id' => $term_id, + 'data' => str_replace( array("\n", "\t"), '', $data), + 'position' => -1 + ); + } + + ob_start(); + wp_dropdown_categories( array( + 'taxonomy' => $taxonomy->name, 'hide_empty' => 0, 'name' => 'new'.$taxonomy->name.'_parent', 'orderby' => 'name', + 'hierarchical' => 1, 'show_option_none' => '— '.$taxonomy->labels->parent_item.' —' + ) ); + $sup = ob_get_contents(); + ob_end_clean(); + $add['supplemental'] = array( 'newcat_parent' => $sup ); + + $x = new WP_Ajax_Response( $add ); + $x->send(); +} + +function wp_ajax_delete_comment() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + if ( !$comment = get_comment( $id ) ) + wp_die( time() ); + if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) + wp_die( -1 ); + + check_ajax_referer( "delete-comment_$id" ); + $status = wp_get_comment_status( $comment->comment_ID ); + + $delta = -1; + if ( isset($_POST['trash']) && 1 == $_POST['trash'] ) { + if ( 'trash' == $status ) + wp_die( time() ); + $r = wp_trash_comment( $comment->comment_ID ); + } elseif ( isset($_POST['untrash']) && 1 == $_POST['untrash'] ) { + if ( 'trash' != $status ) + wp_die( time() ); + $r = wp_untrash_comment( $comment->comment_ID ); + if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'trash' ) // undo trash, not in trash + $delta = 1; + } elseif ( isset($_POST['spam']) && 1 == $_POST['spam'] ) { + if ( 'spam' == $status ) + wp_die( time() ); + $r = wp_spam_comment( $comment->comment_ID ); + } elseif ( isset($_POST['unspam']) && 1 == $_POST['unspam'] ) { + if ( 'spam' != $status ) + wp_die( time() ); + $r = wp_unspam_comment( $comment->comment_ID ); + if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'spam' ) // undo spam, not in spam + $delta = 1; + } elseif ( isset($_POST['delete']) && 1 == $_POST['delete'] ) { + $r = wp_delete_comment( $comment->comment_ID ); + } else { + wp_die( -1 ); + } + + if ( $r ) // Decide if we need to send back '1' or a more complicated response including page links and comment counts + _wp_ajax_delete_comment_response( $comment->comment_ID, $delta ); + wp_die( 0 ); +} + +function wp_ajax_delete_tag() { + $tag_id = (int) $_POST['tag_ID']; + check_ajax_referer( "delete-tag_$tag_id" ); + + $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag'; + $tax = get_taxonomy($taxonomy); + + if ( !current_user_can( $tax->cap->delete_terms ) ) + wp_die( -1 ); + + $tag = get_term( $tag_id, $taxonomy ); + if ( !$tag || is_wp_error( $tag ) ) + wp_die( 1 ); + + if ( wp_delete_term($tag_id, $taxonomy)) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_delete_link() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "delete-bookmark_$id" ); + if ( !current_user_can( 'manage_links' ) ) + wp_die( -1 ); + + $link = get_bookmark( $id ); + if ( !$link || is_wp_error( $link ) ) + wp_die( 1 ); + + if ( wp_delete_link( $id ) ) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_delete_meta() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "delete-meta_$id" ); + if ( !$meta = get_metadata_by_mid( 'post', $id ) ) + wp_die( 1 ); + + if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $meta->post_id, $meta->meta_key ) ) + wp_die( -1 ); + if ( delete_meta( $meta->meta_id ) ) + wp_die( 1 ); + wp_die( 0 ); +} + +function wp_ajax_delete_post( $action ) { + if ( empty( $action ) ) + $action = 'delete-post'; + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "{$action}_$id" ); + if ( !current_user_can( 'delete_post', $id ) ) + wp_die( -1 ); + + if ( !get_post( $id ) ) + wp_die( 1 ); + + if ( wp_delete_post( $id ) ) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_trash_post( $action ) { + if ( empty( $action ) ) + $action = 'trash-post'; + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "{$action}_$id" ); + if ( !current_user_can( 'delete_post', $id ) ) + wp_die( -1 ); + + if ( !get_post( $id ) ) + wp_die( 1 ); + + if ( 'trash-post' == $action ) + $done = wp_trash_post( $id ); + else + $done = wp_untrash_post( $id ); + + if ( $done ) + wp_die( 1 ); + + wp_die( 0 ); +} + +function wp_ajax_untrash_post( $action ) { + if ( empty( $action ) ) + $action = 'untrash-post'; + wp_ajax_trash_post( $action ); +} + +function wp_ajax_delete_page( $action ) { + if ( empty( $action ) ) + $action = 'delete-page'; + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + check_ajax_referer( "{$action}_$id" ); + if ( !current_user_can( 'delete_page', $id ) ) + wp_die( -1 ); + + if ( !get_page( $id ) ) + wp_die( 1 ); + + if ( wp_delete_post( $id ) ) + wp_die( 1 ); + else + wp_die( 0 ); +} + +function wp_ajax_dim_comment() { + $id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0; + + if ( !$comment = get_comment( $id ) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + 'id' => new WP_Error('invalid_comment', sprintf(__('Comment %d does not exist'), $id)) + ) ); + $x->send(); + } + + if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) && ! current_user_can( 'moderate_comments' ) ) + wp_die( -1 ); + + $current = wp_get_comment_status( $comment->comment_ID ); + if ( $_POST['new'] == $current ) + wp_die( time() ); + + check_ajax_referer( "approve-comment_$id" ); + if ( in_array( $current, array( 'unapproved', 'spam' ) ) ) + $result = wp_set_comment_status( $comment->comment_ID, 'approve', true ); + else + $result = wp_set_comment_status( $comment->comment_ID, 'hold', true ); + + if ( is_wp_error($result) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'comment', + 'id' => $result + ) ); + $x->send(); + } + + // Decide if we need to send back '1' or a more complicated response including page links and comment counts + _wp_ajax_delete_comment_response( $comment->comment_ID ); + wp_die( 0 ); +} + +function wp_ajax_add_link_category( $action ) { + if ( empty( $action ) ) + $action = 'add-link-category'; + check_ajax_referer( $action ); + if ( !current_user_can( 'manage_categories' ) ) + wp_die( -1 ); + $names = explode(',', $_POST['newcat']); + $x = new WP_Ajax_Response(); + foreach ( $names as $cat_name ) { + $cat_name = trim($cat_name); + $slug = sanitize_title($cat_name); + if ( '' === $slug ) + continue; + if ( !$cat_id = term_exists( $cat_name, 'link_category' ) ) + $cat_id = wp_insert_term( $cat_name, 'link_category' ); + if ( is_wp_error( $cat_id ) ) + continue; + else if ( is_array( $cat_id ) ) + $cat_id = $cat_id['term_id']; + $cat_name = esc_html(stripslashes($cat_name)); + $x->add( array( + 'what' => 'link-category', + 'id' => $cat_id, + 'data' => "<li id='link-category-$cat_id'><label for='in-link-category-$cat_id' class='selectit'><input value='" . esc_attr($cat_id) . "' type='checkbox' checked='checked' name='link_category[]' id='in-link-category-$cat_id'/> $cat_name</label></li>", + 'position' => -1 + ) ); + } + $x->send(); +} + +function wp_ajax_add_tag() { + global $wp_list_table; + + check_ajax_referer( 'add-tag', '_wpnonce_add-tag' ); + $post_type = !empty($_POST['post_type']) ? $_POST['post_type'] : 'post'; + $taxonomy = !empty($_POST['taxonomy']) ? $_POST['taxonomy'] : 'post_tag'; + $tax = get_taxonomy($taxonomy); + + if ( !current_user_can( $tax->cap->edit_terms ) ) + wp_die( -1 ); + + $x = new WP_Ajax_Response(); + + $tag = wp_insert_term($_POST['tag-name'], $taxonomy, $_POST ); + + if ( !$tag || is_wp_error($tag) || (!$tag = get_term( $tag['term_id'], $taxonomy )) ) { + $message = __('An error has occurred. Please reload the page and try again.'); + if ( is_wp_error($tag) && $tag->get_error_message() ) + $message = $tag->get_error_message(); + + $x->add( array( + 'what' => 'taxonomy', + 'data' => new WP_Error('error', $message ) + ) ); + $x->send(); + } + + set_current_screen( $_POST['screen'] ); + + $wp_list_table = _get_list_table('WP_Terms_List_Table'); + + $level = 0; + if ( is_taxonomy_hierarchical($taxonomy) ) { + $level = count( get_ancestors( $tag->term_id, $taxonomy ) ); + ob_start(); + $wp_list_table->single_row( $tag, $level ); + $noparents = ob_get_clean(); + } + + ob_start(); + $wp_list_table->single_row( $tag ); + $parents = ob_get_clean(); + + $x->add( array( + 'what' => 'taxonomy', + 'supplemental' => compact('parents', 'noparents') + ) ); + $x->add( array( + 'what' => 'term', + 'position' => $level, + 'supplemental' => (array) $tag + ) ); + $x->send(); +} + +function wp_ajax_get_tagcloud() { + if ( isset( $_POST['tax'] ) ) { + $taxonomy = sanitize_key( $_POST['tax'] ); + $tax = get_taxonomy( $taxonomy ); + if ( ! $tax ) + wp_die( 0 ); + if ( ! current_user_can( $tax->cap->assign_terms ) ) + wp_die( -1 ); + } else { + wp_die( 0 ); + } + + $tags = get_terms( $taxonomy, array( 'number' => 45, 'orderby' => 'count', 'order' => 'DESC' ) ); + + if ( empty( $tags ) ) + wp_die( isset( $tax->no_tagcloud ) ? $tax->no_tagcloud : __('No tags found!') ); + + if ( is_wp_error( $tags ) ) + wp_die( $tags->get_error_message() ); + + foreach ( $tags as $key => $tag ) { + $tags[ $key ]->link = '#'; + $tags[ $key ]->id = $tag->term_id; + } + + // We need raw tag names here, so don't filter the output + $return = wp_generate_tag_cloud( $tags, array('filter' => 0) ); + + if ( empty($return) ) + wp_die( 0 ); + + echo $return; + + wp_die(); +} + +function wp_ajax_get_comments( $action ) { + global $wp_list_table, $post_id; + if ( empty( $action ) ) + $action = 'get-comments'; + + check_ajax_referer( $action ); + + set_current_screen( 'edit-comments' ); + + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + + if ( !current_user_can( 'edit_post', $post_id ) ) + wp_die( -1 ); + + $wp_list_table->prepare_items(); + + if ( !$wp_list_table->has_items() ) + wp_die( 1 ); + + $x = new WP_Ajax_Response(); + ob_start(); + foreach ( $wp_list_table->items as $comment ) { + if ( ! current_user_can( 'edit_comment', $comment->comment_ID ) ) + continue; + get_comment( $comment ); + $wp_list_table->single_row( $comment ); + } + $comment_list_item = ob_get_contents(); + ob_end_clean(); + + $x->add( array( + 'what' => 'comments', + 'data' => $comment_list_item + ) ); + $x->send(); +} + +function wp_ajax_replyto_comment( $action ) { + global $wp_list_table, $wpdb; + if ( empty( $action ) ) + $action = 'replyto-comment'; + + check_ajax_referer( $action, '_ajax_nonce-replyto-comment' ); + + set_current_screen( 'edit-comments' ); + + $comment_post_ID = (int) $_POST['comment_post_ID']; + if ( !current_user_can( 'edit_post', $comment_post_ID ) ) + wp_die( -1 ); + + $status = $wpdb->get_var( $wpdb->prepare("SELECT post_status FROM $wpdb->posts WHERE ID = %d", $comment_post_ID) ); + + if ( empty($status) ) + wp_die( 1 ); + elseif ( in_array($status, array('draft', 'pending', 'trash') ) ) + wp_die( __('ERROR: you are replying to a comment on a draft post.') ); + + $user = wp_get_current_user(); + if ( $user->exists() ) { + $user_ID = $user->ID; + $comment_author = $wpdb->escape($user->display_name); + $comment_author_email = $wpdb->escape($user->user_email); + $comment_author_url = $wpdb->escape($user->user_url); + $comment_content = trim($_POST['content']); + if ( current_user_can( 'unfiltered_html' ) ) { + if ( wp_create_nonce( 'unfiltered-html-comment' ) != $_POST['_wp_unfiltered_html_comment'] ) { + kses_remove_filters(); // start with a clean slate + kses_init_filters(); // set up the filters + } + } + } else { + wp_die( __( 'Sorry, you must be logged in to reply to a comment.' ) ); + } + + if ( '' == $comment_content ) + wp_die( __( 'ERROR: please type a comment.' ) ); + + $comment_parent = absint($_POST['comment_ID']); + $comment_auto_approved = false; + $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID'); + + $comment_id = wp_new_comment( $commentdata ); + $comment = get_comment($comment_id); + if ( ! $comment ) wp_die( 1 ); + + $position = ( isset($_POST['position']) && (int) $_POST['position'] ) ? (int) $_POST['position'] : '-1'; + + // automatically approve parent comment + if ( !empty($_POST['approve_parent']) ) { + $parent = get_comment( $comment_parent ); + + if ( $parent && $parent->comment_approved === '0' && $parent->comment_post_ID == $comment_post_ID ) { + if ( wp_set_comment_status( $parent->comment_ID, 'approve' ) ) + $comment_auto_approved = true; + } + } + + ob_start(); + if ( 'dashboard' == $_REQUEST['mode'] ) { + require_once( ABSPATH . 'wp-admin/includes/dashboard.php' ); + _wp_dashboard_recent_comments_row( $comment ); + } else { + if ( 'single' == $_REQUEST['mode'] ) { + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + } else { + $wp_list_table = _get_list_table('WP_Comments_List_Table'); + } + $wp_list_table->single_row( $comment ); + } + $comment_list_item = ob_get_contents(); + ob_end_clean(); + + $response = array( + 'what' => 'comment', + 'id' => $comment->comment_ID, + 'data' => $comment_list_item, + 'position' => $position + ); + + if ( $comment_auto_approved ) + $response['supplemental'] = array( 'parent_approved' => $parent->comment_ID ); + + $x = new WP_Ajax_Response(); + $x->add( $response ); + $x->send(); +} + +function wp_ajax_edit_comment() { + global $wp_list_table; + + check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' ); + + set_current_screen( 'edit-comments' ); + + $comment_id = (int) $_POST['comment_ID']; + if ( ! current_user_can( 'edit_comment', $comment_id ) ) + wp_die( -1 ); + + if ( '' == $_POST['content'] ) + wp_die( __( 'ERROR: please type a comment.' ) ); + + $_POST['comment_status'] = $_POST['status']; + edit_comment(); + + $position = ( isset($_POST['position']) && (int) $_POST['position']) ? (int) $_POST['position'] : '-1'; + $comments_status = isset($_POST['comments_listing']) ? $_POST['comments_listing'] : ''; + + $checkbox = ( isset($_POST['checkbox']) && true == $_POST['checkbox'] ) ? 1 : 0; + $wp_list_table = _get_list_table( $checkbox ? 'WP_Comments_List_Table' : 'WP_Post_Comments_List_Table' ); + + $comment = get_comment( $comment_id ); + + ob_start(); + $wp_list_table->single_row( $comment ); + $comment_list_item = ob_get_contents(); + ob_end_clean(); + + $x = new WP_Ajax_Response(); + + $x->add( array( + 'what' => 'edit_comment', + 'id' => $comment->comment_ID, + 'data' => $comment_list_item, + 'position' => $position + )); + + $x->send(); +} + +function wp_ajax_add_menu_item() { + check_ajax_referer( 'add-menu_item', 'menu-settings-column-nonce' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + + // For performance reasons, we omit some object properties from the checklist. + // The following is a hacky way to restore them when adding non-custom items. + + $menu_items_data = array(); + foreach ( (array) $_POST['menu-item'] as $menu_item_data ) { + if ( + ! empty( $menu_item_data['menu-item-type'] ) && + 'custom' != $menu_item_data['menu-item-type'] && + ! empty( $menu_item_data['menu-item-object-id'] ) + ) { + switch( $menu_item_data['menu-item-type'] ) { + case 'post_type' : + $_object = get_post( $menu_item_data['menu-item-object-id'] ); + break; + + case 'taxonomy' : + $_object = get_term( $menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object'] ); + break; + } + + $_menu_items = array_map( 'wp_setup_nav_menu_item', array( $_object ) ); + $_menu_item = array_shift( $_menu_items ); + + // Restore the missing menu item properties + $menu_item_data['menu-item-description'] = $_menu_item->description; + } + + $menu_items_data[] = $menu_item_data; + } + + $item_ids = wp_save_nav_menu_items( 0, $menu_items_data ); + if ( is_wp_error( $item_ids ) ) + wp_die( 0 ); + + $menu_items = array(); + + foreach ( (array) $item_ids as $menu_item_id ) { + $menu_obj = get_post( $menu_item_id ); + if ( ! empty( $menu_obj->ID ) ) { + $menu_obj = wp_setup_nav_menu_item( $menu_obj ); + $menu_obj->label = $menu_obj->title; // don't show "(pending)" in ajax-added items + $menu_items[] = $menu_obj; + } + } + + $walker_class_name = apply_filters( 'wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $_POST['menu'] ); + + if ( ! class_exists( $walker_class_name ) ) + wp_die( 0 ); + + if ( ! empty( $menu_items ) ) { + $args = array( + 'after' => '', + 'before' => '', + 'link_after' => '', + 'link_before' => '', + 'walker' => new $walker_class_name, + ); + echo walk_nav_menu_tree( $menu_items, 0, (object) $args ); + } +} + +function wp_ajax_add_meta() { + check_ajax_referer( 'add-meta', '_ajax_nonce-add-meta' ); + $c = 0; + $pid = (int) $_POST['post_id']; + $post = get_post( $pid ); + + if ( isset($_POST['metakeyselect']) || isset($_POST['metakeyinput']) ) { + if ( !current_user_can( 'edit_post', $pid ) ) + wp_die( -1 ); + if ( isset($_POST['metakeyselect']) && '#NONE#' == $_POST['metakeyselect'] && empty($_POST['metakeyinput']) ) + wp_die( 1 ); + if ( $post->post_status == 'auto-draft' ) { + $save_POST = $_POST; // Backup $_POST + $_POST = array(); // Make it empty for edit_post() + $_POST['action'] = 'draft'; // Warning fix + $_POST['post_ID'] = $pid; + $_POST['post_type'] = $post->post_type; + $_POST['post_status'] = 'draft'; + $now = current_time('timestamp', 1); + $_POST['post_title'] = sprintf('Draft created on %s at %s', date(get_option('date_format'), $now), date(get_option('time_format'), $now)); + + if ( $pid = edit_post() ) { + if ( is_wp_error( $pid ) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'meta', + 'data' => $pid + ) ); + $x->send(); + } + $_POST = $save_POST; // Now we can restore original $_POST again + if ( !$mid = add_meta( $pid ) ) + wp_die( __( 'Please provide a custom field value.' ) ); + } else { + wp_die( 0 ); + } + } else if ( !$mid = add_meta( $pid ) ) { + wp_die( __( 'Please provide a custom field value.' ) ); + } + + $meta = get_metadata_by_mid( 'post', $mid ); + $pid = (int) $meta->post_id; + $meta = get_object_vars( $meta ); + $x = new WP_Ajax_Response( array( + 'what' => 'meta', + 'id' => $mid, + 'data' => _list_meta_row( $meta, $c ), + 'position' => 1, + 'supplemental' => array('postid' => $pid) + ) ); + } else { // Update? + $mid = (int) key( $_POST['meta'] ); + $key = stripslashes( $_POST['meta'][$mid]['key'] ); + $value = stripslashes( $_POST['meta'][$mid]['value'] ); + if ( '' == trim($key) ) + wp_die( __( 'Please provide a custom field name.' ) ); + if ( '' == trim($value) ) + wp_die( __( 'Please provide a custom field value.' ) ); + if ( ! $meta = get_metadata_by_mid( 'post', $mid ) ) + wp_die( 0 ); // if meta doesn't exist + if ( is_protected_meta( $meta->meta_key, 'post' ) || is_protected_meta( $key, 'post' ) || + ! current_user_can( 'edit_post_meta', $meta->post_id, $meta->meta_key ) || + ! current_user_can( 'edit_post_meta', $meta->post_id, $key ) ) + wp_die( -1 ); + if ( $meta->meta_value != $value || $meta->meta_key != $key ) { + if ( !$u = update_metadata_by_mid( 'post', $mid, $value, $key ) ) + wp_die( 0 ); // We know meta exists; we also know it's unchanged (or DB error, in which case there are bigger problems). + } + + $x = new WP_Ajax_Response( array( + 'what' => 'meta', + 'id' => $mid, 'old_id' => $mid, + 'data' => _list_meta_row( array( + 'meta_key' => $key, + 'meta_value' => $value, + 'meta_id' => $mid + ), $c ), + 'position' => 0, + 'supplemental' => array('postid' => $meta->post_id) + ) ); + } + $x->send(); +} + +function wp_ajax_add_user( $action ) { + global $wp_list_table; + if ( empty( $action ) ) + $action = 'add-user'; + + check_ajax_referer( $action ); + if ( ! current_user_can('create_users') ) + wp_die( -1 ); + if ( ! $user_id = edit_user() ) { + wp_die( 0 ); + } elseif ( is_wp_error( $user_id ) ) { + $x = new WP_Ajax_Response( array( + 'what' => 'user', + 'id' => $user_id + ) ); + $x->send(); + } + $user_object = new WP_User( $user_id ); + + $wp_list_table = _get_list_table('WP_Users_List_Table'); + + $x = new WP_Ajax_Response( array( + 'what' => 'user', + 'id' => $user_id, + 'data' => $wp_list_table->single_row( $user_object, '', $user_object->roles[0] ), + 'supplemental' => array( + 'show-link' => sprintf(__( 'User <a href="#%s">%s</a> added' ), "user-$user_id", $user_object->user_login), + 'role' => $user_object->roles[0] + ) + ) ); + $x->send(); +} + +function wp_ajax_autosave() { + global $login_grace_period; + + define( 'DOING_AUTOSAVE', true ); + + $nonce_age = check_ajax_referer( 'autosave', 'autosavenonce' ); + + $_POST['post_category'] = explode(",", $_POST['catslist']); + if ( $_POST['post_type'] == 'page' || empty($_POST['post_category']) ) + unset($_POST['post_category']); + + $do_autosave = (bool) $_POST['autosave']; + $do_lock = true; + + $data = $alert = ''; + /* translators: draft saved date format, see http://php.net/date */ + $draft_saved_date_format = __('g:i:s a'); + /* translators: %s: date and time */ + $message = sprintf( __('Draft saved at %s.'), date_i18n( $draft_saved_date_format ) ); + + $supplemental = array(); + if ( isset($login_grace_period) ) + $alert .= sprintf( __('Your login has expired. Please open a new browser window and <a href="%s" target="_blank">log in again</a>. '), add_query_arg( 'interim-login', 1, wp_login_url() ) ); + + $id = $revision_id = 0; + + $post_ID = (int) $_POST['post_ID']; + $_POST['ID'] = $post_ID; + $post = get_post($post_ID); + if ( 'auto-draft' == $post->post_status ) + $_POST['post_status'] = 'draft'; + + if ( $last = wp_check_post_lock( $post->ID ) ) { + $do_autosave = $do_lock = false; + + $last_user = get_userdata( $last ); + $last_user_name = $last_user ? $last_user->display_name : __( 'Someone' ); + $data = __( 'Autosave disabled.' ); + + $supplemental['disable_autosave'] = 'disable'; + $alert .= sprintf( __( '%s is currently editing this article. If you update it, you will overwrite the changes.' ), esc_html( $last_user_name ) ); + } + + if ( 'page' == $post->post_type ) { + if ( !current_user_can('edit_page', $post_ID) ) + wp_die( __( 'You are not allowed to edit this page.' ) ); + } else { + if ( !current_user_can('edit_post', $post_ID) ) + wp_die( __( 'You are not allowed to edit this post.' ) ); + } + + if ( $do_autosave ) { + // Drafts and auto-drafts are just overwritten by autosave + if ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status ) { + $id = edit_post(); + } else { // Non drafts are not overwritten. The autosave is stored in a special post revision. + $revision_id = wp_create_post_autosave( $post->ID ); + if ( is_wp_error($revision_id) ) + $id = $revision_id; + else + $id = $post->ID; + } + $data = $message; + } else { + if ( ! empty( $_POST['auto_draft'] ) ) + $id = 0; // This tells us it didn't actually save + else + $id = $post->ID; + } + + if ( $do_lock && empty( $_POST['auto_draft'] ) && $id && is_numeric( $id ) ) { + $lock_result = wp_set_post_lock( $id ); + $supplemental['active-post-lock'] = implode( ':', $lock_result ); + } + + if ( $nonce_age == 2 ) { + $supplemental['replace-autosavenonce'] = wp_create_nonce('autosave'); + $supplemental['replace-getpermalinknonce'] = wp_create_nonce('getpermalink'); + $supplemental['replace-samplepermalinknonce'] = wp_create_nonce('samplepermalink'); + $supplemental['replace-closedpostboxesnonce'] = wp_create_nonce('closedpostboxes'); + $supplemental['replace-_ajax_linking_nonce'] = wp_create_nonce( 'internal-linking' ); + if ( $id ) { + if ( $_POST['post_type'] == 'post' ) + $supplemental['replace-_wpnonce'] = wp_create_nonce('update-post_' . $id); + elseif ( $_POST['post_type'] == 'page' ) + $supplemental['replace-_wpnonce'] = wp_create_nonce('update-page_' . $id); + } + } + + if ( ! empty($alert) ) + $supplemental['alert'] = $alert; + + $x = new WP_Ajax_Response( array( + 'what' => 'autosave', + 'id' => $id, + 'data' => $id ? $data : '', + 'supplemental' => $supplemental + ) ); + $x->send(); +} + +function wp_ajax_closed_postboxes() { + check_ajax_referer( 'closedpostboxes', 'closedpostboxesnonce' ); + $closed = isset( $_POST['closed'] ) ? explode( ',', $_POST['closed']) : array(); + $closed = array_filter($closed); + + $hidden = isset( $_POST['hidden'] ) ? explode( ',', $_POST['hidden']) : array(); + $hidden = array_filter($hidden); + + $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; + + if ( $page != sanitize_key( $page ) ) + wp_die( 0 ); + + if ( ! $user = wp_get_current_user() ) + wp_die( -1 ); + + if ( is_array($closed) ) + update_user_option($user->ID, "closedpostboxes_$page", $closed, true); + + if ( is_array($hidden) ) { + $hidden = array_diff( $hidden, array('submitdiv', 'linksubmitdiv', 'manage-menu', 'create-menu') ); // postboxes that are always shown + update_user_option($user->ID, "metaboxhidden_$page", $hidden, true); + } + + wp_die( 1 ); +} + +function wp_ajax_hidden_columns() { + check_ajax_referer( 'screen-options-nonce', 'screenoptionnonce' ); + $hidden = isset( $_POST['hidden'] ) ? $_POST['hidden'] : ''; + $hidden = explode( ',', $_POST['hidden'] ); + $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; + + if ( $page != sanitize_key( $page ) ) + wp_die( 0 ); + + if ( ! $user = wp_get_current_user() ) + wp_die( -1 ); + + if ( is_array($hidden) ) + update_user_option($user->ID, "manage{$page}columnshidden", $hidden, true); + + wp_die( 1 ); +} + +function wp_ajax_update_welcome_panel() { + check_ajax_referer( 'welcome-panel-nonce', 'welcomepanelnonce' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + update_user_meta( get_current_user_id(), 'show_welcome_panel', empty( $_POST['visible'] ) ? 0 : 1 ); + + wp_die( 1 ); +} + +function wp_ajax_menu_get_metabox() { + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + + if ( isset( $_POST['item-type'] ) && 'post_type' == $_POST['item-type'] ) { + $type = 'posttype'; + $callback = 'wp_nav_menu_item_post_type_meta_box'; + $items = (array) get_post_types( array( 'show_in_nav_menus' => true ), 'object' ); + } elseif ( isset( $_POST['item-type'] ) && 'taxonomy' == $_POST['item-type'] ) { + $type = 'taxonomy'; + $callback = 'wp_nav_menu_item_taxonomy_meta_box'; + $items = (array) get_taxonomies( array( 'show_ui' => true ), 'object' ); + } + + if ( ! empty( $_POST['item-object'] ) && isset( $items[$_POST['item-object']] ) ) { + $item = apply_filters( 'nav_menu_meta_box_object', $items[ $_POST['item-object'] ] ); + ob_start(); + call_user_func_array($callback, array( + null, + array( + 'id' => 'add-' . $item->name, + 'title' => $item->labels->name, + 'callback' => $callback, + 'args' => $item, + ) + )); + + $markup = ob_get_clean(); + + echo json_encode(array( + 'replace-id' => $type . '-' . $item->name, + 'markup' => $markup, + )); + } + + wp_die(); +} + +function wp_ajax_wp_link_ajax() { + check_ajax_referer( 'internal-linking', '_ajax_linking_nonce' ); + + $args = array(); + + if ( isset( $_POST['search'] ) ) + $args['s'] = stripslashes( $_POST['search'] ); + $args['pagenum'] = ! empty( $_POST['page'] ) ? absint( $_POST['page'] ) : 1; + + require(ABSPATH . WPINC . '/class-wp-editor.php'); + $results = _WP_Editors::wp_link_query( $args ); + + if ( ! isset( $results ) ) + wp_die( 0 ); + + echo json_encode( $results ); + echo "\n"; + + wp_die(); +} + +function wp_ajax_menu_locations_save() { + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + check_ajax_referer( 'add-menu_item', 'menu-settings-column-nonce' ); + if ( ! isset( $_POST['menu-locations'] ) ) + wp_die( 0 ); + set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_POST['menu-locations'] ) ); + wp_die( 1 ); +} + +function wp_ajax_meta_box_order() { + check_ajax_referer( 'meta-box-order' ); + $order = isset( $_POST['order'] ) ? (array) $_POST['order'] : false; + $page_columns = isset( $_POST['page_columns'] ) ? $_POST['page_columns'] : 'auto'; + + if ( $page_columns != 'auto' ) + $page_columns = (int) $page_columns; + + $page = isset( $_POST['page'] ) ? $_POST['page'] : ''; + + if ( $page != sanitize_key( $page ) ) + wp_die( 0 ); + + if ( ! $user = wp_get_current_user() ) + wp_die( -1 ); + + if ( $order ) + update_user_option($user->ID, "meta-box-order_$page", $order, true); + + if ( $page_columns ) + update_user_option($user->ID, "screen_layout_$page", $page_columns, true); + + wp_die( 1 ); +} + +function wp_ajax_menu_quick_search() { + if ( ! current_user_can( 'edit_theme_options' ) ) + wp_die( -1 ); + + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + + _wp_ajax_menu_quick_search( $_POST ); + + wp_die(); +} + +function wp_ajax_get_permalink() { + check_ajax_referer( 'getpermalink', 'getpermalinknonce' ); + $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0; + wp_die( add_query_arg( array( 'preview' => 'true' ), get_permalink( $post_id ) ) ); +} + +function wp_ajax_sample_permalink() { + check_ajax_referer( 'samplepermalink', 'samplepermalinknonce' ); + $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0; + $title = isset($_POST['new_title'])? $_POST['new_title'] : ''; + $slug = isset($_POST['new_slug'])? $_POST['new_slug'] : null; + wp_die( get_sample_permalink_html( $post_id, $title, $slug ) ); +} + +function wp_ajax_inline_save() { + global $wp_list_table; + + check_ajax_referer( 'inlineeditnonce', '_inline_edit' ); + + if ( ! isset($_POST['post_ID']) || ! ( $post_ID = (int) $_POST['post_ID'] ) ) + wp_die(); + + if ( 'page' == $_POST['post_type'] ) { + if ( ! current_user_can( 'edit_page', $post_ID ) ) + wp_die( __( 'You are not allowed to edit this page.' ) ); + } else { + if ( ! current_user_can( 'edit_post', $post_ID ) ) + wp_die( __( 'You are not allowed to edit this post.' ) ); + } + + set_current_screen( $_POST['screen'] ); + + if ( $last = wp_check_post_lock( $post_ID ) ) { + $last_user = get_userdata( $last ); + $last_user_name = $last_user ? $last_user->display_name : __( 'Someone' ); + printf( $_POST['post_type'] == 'page' ? __( 'Saving is disabled: %s is currently editing this page.' ) : __( 'Saving is disabled: %s is currently editing this post.' ), esc_html( $last_user_name ) ); + wp_die(); + } + + $data = &$_POST; + + $post = get_post( $post_ID, ARRAY_A ); + $post = add_magic_quotes($post); //since it is from db + + $data['content'] = $post['post_content']; + $data['excerpt'] = $post['post_excerpt']; + + // rename + $data['user_ID'] = $GLOBALS['user_ID']; + + if ( isset($data['post_parent']) ) + $data['parent_id'] = $data['post_parent']; + + // status + if ( isset($data['keep_private']) && 'private' == $data['keep_private'] ) + $data['post_status'] = 'private'; + else + $data['post_status'] = $data['_status']; + + if ( empty($data['comment_status']) ) + $data['comment_status'] = 'closed'; + if ( empty($data['ping_status']) ) + $data['ping_status'] = 'closed'; + + // update the post + edit_post(); + + $wp_list_table = _get_list_table('WP_Posts_List_Table'); + + $mode = $_POST['post_view']; + $wp_list_table->display_rows( array( get_post( $_POST['post_ID'] ) ) ); + + wp_die(); +} + +function wp_ajax_inline_save_tax() { + global $wp_list_table; + + check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' ); + + $taxonomy = sanitize_key( $_POST['taxonomy'] ); + $tax = get_taxonomy( $taxonomy ); + if ( ! $tax ) + wp_die( 0 ); + + if ( ! current_user_can( $tax->cap->edit_terms ) ) + wp_die( -1 ); + + set_current_screen( 'edit-' . $taxonomy ); + + $wp_list_table = _get_list_table('WP_Terms_List_Table'); + + if ( ! isset($_POST['tax_ID']) || ! ( $id = (int) $_POST['tax_ID'] ) ) + wp_die( -1 ); + + $tag = get_term( $id, $taxonomy ); + $_POST['description'] = $tag->description; + + $updated = wp_update_term($id, $taxonomy, $_POST); + if ( $updated && !is_wp_error($updated) ) { + $tag = get_term( $updated['term_id'], $taxonomy ); + if ( !$tag || is_wp_error( $tag ) ) { + if ( is_wp_error($tag) && $tag->get_error_message() ) + wp_die( $tag->get_error_message() ); + wp_die( __( 'Item not updated.' ) ); + } + + echo $wp_list_table->single_row( $tag ); + } else { + if ( is_wp_error($updated) && $updated->get_error_message() ) + wp_die( $updated->get_error_message() ); + wp_die( __( 'Item not updated.' ) ); + } + + wp_die(); +} + +function wp_ajax_find_posts() { + global $wpdb; + + check_ajax_referer( 'find-posts' ); + + if ( empty($_POST['ps']) ) + wp_die(); + + if ( !empty($_POST['post_type']) && in_array( $_POST['post_type'], get_post_types() ) ) + $what = $_POST['post_type']; + else + $what = 'post'; + + $s = stripslashes($_POST['ps']); + preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $s, $matches); + $search_terms = array_map('_search_terms_tidy', $matches[0]); + + $searchand = $search = ''; + foreach ( (array) $search_terms as $term ) { + $term = esc_sql( like_escape( $term ) ); + $search .= "{$searchand}(($wpdb->posts.post_title LIKE '%{$term}%') OR ($wpdb->posts.post_content LIKE '%{$term}%'))"; + $searchand = ' AND '; + } + $term = esc_sql( like_escape( $s ) ); + if ( count($search_terms) > 1 && $search_terms[0] != $s ) + $search .= " OR ($wpdb->posts.post_title LIKE '%{$term}%') OR ($wpdb->posts.post_content LIKE '%{$term}%')"; + + $posts = $wpdb->get_results( "SELECT ID, post_title, post_status, post_date FROM $wpdb->posts WHERE post_type = '$what' AND post_status IN ('draft', 'publish') AND ($search) ORDER BY post_date_gmt DESC LIMIT 50" ); + + if ( ! $posts ) { + $posttype = get_post_type_object($what); + wp_die( $posttype->labels->not_found ); + } + + $html = '<table class="widefat" cellspacing="0"><thead><tr><th class="found-radio"><br /></th><th>'.__('Title').'</th><th>'.__('Date').'</th><th>'.__('Status').'</th></tr></thead><tbody>'; + foreach ( $posts as $post ) { + + switch ( $post->post_status ) { + case 'publish' : + case 'private' : + $stat = __('Published'); + break; + case 'future' : + $stat = __('Scheduled'); + break; + case 'pending' : + $stat = __('Pending Review'); + break; + case 'draft' : + $stat = __('Draft'); + break; + } + + if ( '0000-00-00 00:00:00' == $post->post_date ) { + $time = ''; + } else { + /* translators: date format in table columns, see http://php.net/date */ + $time = mysql2date(__('Y/m/d'), $post->post_date); + } + + $html .= '<tr class="found-posts"><td class="found-radio"><input type="radio" id="found-'.$post->ID.'" name="found_post_id" value="' . esc_attr($post->ID) . '"></td>'; + $html .= '<td><label for="found-'.$post->ID.'">'.esc_html( $post->post_title ).'</label></td><td>'.esc_html( $time ).'</td><td>'.esc_html( $stat ).'</td></tr>'."\n\n"; + } + $html .= '</tbody></table>'; + + $x = new WP_Ajax_Response(); + $x->add( array( + 'what' => $what, + 'data' => $html + )); + $x->send(); + +} + +function wp_ajax_widgets_order() { + check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' ); + + if ( !current_user_can('edit_theme_options') ) + wp_die( -1 ); + + unset( $_POST['savewidgets'], $_POST['action'] ); + + // save widgets order for all sidebars + if ( is_array($_POST['sidebars']) ) { + $sidebars = array(); + foreach ( $_POST['sidebars'] as $key => $val ) { + $sb = array(); + if ( !empty($val) ) { + $val = explode(',', $val); + foreach ( $val as $k => $v ) { + if ( strpos($v, 'widget-') === false ) + continue; + + $sb[$k] = substr($v, strpos($v, '_') + 1); + } + } + $sidebars[$key] = $sb; + } + wp_set_sidebars_widgets($sidebars); + wp_die( 1 ); + } + + wp_die( -1 ); +} + +function wp_ajax_save_widget() { + global $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates; + + check_ajax_referer( 'save-sidebar-widgets', 'savewidgets' ); + + if ( !current_user_can('edit_theme_options') || !isset($_POST['id_base']) ) + wp_die( -1 ); + + unset( $_POST['savewidgets'], $_POST['action'] ); + + do_action('load-widgets.php'); + do_action('widgets.php'); + do_action('sidebar_admin_setup'); + + $id_base = $_POST['id_base']; + $widget_id = $_POST['widget-id']; + $sidebar_id = $_POST['sidebar']; + $multi_number = !empty($_POST['multi_number']) ? (int) $_POST['multi_number'] : 0; + $settings = isset($_POST['widget-' . $id_base]) && is_array($_POST['widget-' . $id_base]) ? $_POST['widget-' . $id_base] : false; + $error = '<p>' . __('An error has occurred. Please reload the page and try again.') . '</p>'; + + $sidebars = wp_get_sidebars_widgets(); + $sidebar = isset($sidebars[$sidebar_id]) ? $sidebars[$sidebar_id] : array(); + + // delete + if ( isset($_POST['delete_widget']) && $_POST['delete_widget'] ) { + + if ( !isset($wp_registered_widgets[$widget_id]) ) + wp_die( $error ); + + $sidebar = array_diff( $sidebar, array($widget_id) ); + $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); + } elseif ( $settings && preg_match( '/__i__|%i%/', key($settings) ) ) { + if ( !$multi_number ) + wp_die( $error ); + + $_POST['widget-' . $id_base] = array( $multi_number => array_shift($settings) ); + $widget_id = $id_base . '-' . $multi_number; + $sidebar[] = $widget_id; + } + $_POST['widget-id'] = $sidebar; + + foreach ( (array) $wp_registered_widget_updates as $name => $control ) { + + if ( $name == $id_base ) { + if ( !is_callable( $control['callback'] ) ) + continue; + + ob_start(); + call_user_func_array( $control['callback'], $control['params'] ); + ob_end_clean(); + break; + } + } + + if ( isset($_POST['delete_widget']) && $_POST['delete_widget'] ) { + $sidebars[$sidebar_id] = $sidebar; + wp_set_sidebars_widgets($sidebars); + echo "deleted:$widget_id"; + wp_die(); + } + + if ( !empty($_POST['add_new']) ) + wp_die(); + + if ( $form = $wp_registered_widget_controls[$widget_id] ) + call_user_func_array( $form['callback'], $form['params'] ); + + wp_die(); +} + +function wp_ajax_upload_attachment() { + check_ajax_referer( 'media-form' ); + + if ( ! current_user_can( 'upload_files' ) ) + wp_die( -1 ); + + if ( isset( $_REQUEST['post_id'] ) ) { + $post_id = $_REQUEST['post_id']; + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_die( -1 ); + } else { + $post_id = null; + } + + $post_data = isset( $_REQUEST['post_data'] ) ? $_REQUEST['post_data'] : array(); + + $attachment_id = media_handle_upload( 'async-upload', $post_id, $post_data ); + + if ( is_wp_error( $attachment_id ) ) { + echo json_encode( array( + 'type' => 'error', + 'data' => array( + 'message' => $attachment_id->get_error_message(), + 'filename' => $_FILES['async-upload']['name'], + ), + ) ); + wp_die(); + } + + if ( isset( $post_data['context'] ) && isset( $post_data['theme'] ) ) { + if ( 'custom-background' === $post_data['context'] ) + update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', $post_data['theme'] ); + + if ( 'custom-header' === $post_data['context'] ) + update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', $post_data['theme'] ); + } + + $post = get_post( $attachment_id ); + + echo json_encode( array( + 'type' => 'success', + 'data' => array( + 'id' => $attachment_id, + 'title' => esc_attr( $post->post_title ), + 'filename' => esc_html( basename( $post->guid ) ), + 'url' => wp_get_attachment_url( $attachment_id ), + 'meta' => wp_get_attachment_metadata( $attachment_id ), + ), + ) ); + wp_die(); +} + +function wp_ajax_image_editor() { + $attachment_id = intval($_POST['postid']); + if ( empty($attachment_id) || !current_user_can('edit_post', $attachment_id) ) + wp_die( -1 ); + + check_ajax_referer( "image_editor-$attachment_id" ); + include_once( ABSPATH . 'wp-admin/includes/image-edit.php' ); + + $msg = false; + switch ( $_POST['do'] ) { + case 'save' : + $msg = wp_save_image($attachment_id); + $msg = json_encode($msg); + wp_die( $msg ); + break; + case 'scale' : + $msg = wp_save_image($attachment_id); + break; + case 'restore' : + $msg = wp_restore_image($attachment_id); + break; + } + + wp_image_editor($attachment_id, $msg); + wp_die(); +} + +function wp_ajax_set_post_thumbnail() { + $post_ID = intval( $_POST['post_id'] ); + if ( !current_user_can( 'edit_post', $post_ID ) ) + wp_die( -1 ); + $thumbnail_id = intval( $_POST['thumbnail_id'] ); + + check_ajax_referer( "set_post_thumbnail-$post_ID" ); + + if ( $thumbnail_id == '-1' ) { + if ( delete_post_thumbnail( $post_ID ) ) + wp_die( _wp_post_thumbnail_html( null, $post_ID ) ); + else + wp_die( 0 ); + } + + if ( set_post_thumbnail( $post_ID, $thumbnail_id ) ) + wp_die( _wp_post_thumbnail_html( $thumbnail_id, $post_ID ) ); + wp_die( 0 ); +} + +function wp_ajax_date_format() { + wp_die( date_i18n( sanitize_option( 'date_format', $_POST['date'] ) ) ); +} + +function wp_ajax_time_format() { + wp_die( date_i18n( sanitize_option( 'time_format', $_POST['date'] ) ) ); +} + +function wp_ajax_wp_fullscreen_save_post() { + $post_id = isset( $_POST['post_ID'] ) ? (int) $_POST['post_ID'] : 0; + + $post = $post_type = null; + + if ( $post_id ) + $post = get_post( $post_id ); + + if ( $post ) + $post_type = $post->post_type; + elseif ( isset( $_POST['post_type'] ) && post_type_exists( $_POST['post_type'] ) ) + $post_type = $_POST['post_type']; + + check_ajax_referer('update-' . $post_type . '_' . $post_id, '_wpnonce'); + + $post_id = edit_post(); + + if ( is_wp_error($post_id) ) { + if ( $post_id->get_error_message() ) + $message = $post_id->get_error_message(); + else + $message = __('Save failed'); + + echo json_encode( array( 'message' => $message, 'last_edited' => '' ) ); + wp_die(); + } else { + $message = __('Saved.'); + } + + if ( $post ) { + $last_date = mysql2date( get_option('date_format'), $post->post_modified ); + $last_time = mysql2date( get_option('time_format'), $post->post_modified ); + } else { + $last_date = date_i18n( get_option('date_format') ); + $last_time = date_i18n( get_option('time_format') ); + } + + if ( $last_id = get_post_meta($post_id, '_edit_last', true) ) { + $last_user = get_userdata($last_id); + $last_edited = sprintf( __('Last edited by %1$s on %2$s at %3$s'), esc_html( $last_user->display_name ), $last_date, $last_time ); + } else { + $last_edited = sprintf( __('Last edited on %1$s at %2$s'), $last_date, $last_time ); + } + + echo json_encode( array( 'message' => $message, 'last_edited' => $last_edited ) ); + wp_die(); +} + +function wp_ajax_wp_remove_post_lock() { + if ( empty( $_POST['post_ID'] ) || empty( $_POST['active_post_lock'] ) ) + wp_die( 0 ); + $post_id = (int) $_POST['post_ID']; + if ( ! $post = get_post( $post_id ) ) + wp_die( 0 ); + + check_ajax_referer( 'update-' . $post->post_type . '_' . $post_id ); + + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_die( -1 ); + + $active_lock = array_map( 'absint', explode( ':', $_POST['active_post_lock'] ) ); + if ( $active_lock[1] != get_current_user_id() ) + wp_die( 0 ); + + $new_lock = ( time() - apply_filters( 'wp_check_post_lock_window', AUTOSAVE_INTERVAL * 2 ) + 5 ) . ':' . $active_lock[1]; + update_post_meta( $post_id, '_edit_lock', $new_lock, implode( ':', $active_lock ) ); + wp_die( 1 ); +} + +function wp_ajax_dismiss_wp_pointer() { + $pointer = $_POST['pointer']; + if ( $pointer != sanitize_key( $pointer ) ) + wp_die( 0 ); + +// check_ajax_referer( 'dismiss-pointer_' . $pointer ); + + $dismissed = array_filter( explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ) ); + + if ( in_array( $pointer, $dismissed ) ) + wp_die( 0 ); + + $dismissed[] = $pointer; + $dismissed = implode( ',', $dismissed ); + + update_user_meta( get_current_user_id(), 'dismissed_wp_pointers', $dismissed ); + wp_die( 1 ); +} diff --git a/wp-admin/includes/bookmark.php b/wp-admin/includes/bookmark.php index 0ed560c19..17a8229aa 100644 --- a/wp-admin/includes/bookmark.php +++ b/wp-admin/includes/bookmark.php @@ -53,6 +53,7 @@ function edit_link( $link_id = 0 ) { * @return object Default link */ function get_default_link_to_edit() { + $link = new stdClass; if ( isset( $_GET['linkurl'] ) ) $link->link_url = esc_url( $_GET['linkurl'] ); else @@ -83,7 +84,7 @@ function wp_delete_link( $link_id ) { wp_delete_object_term_relationships( $link_id, 'link_category' ); - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->links WHERE link_id = %d", $link_id ) ); + $wpdb->delete( $wpdb->links, array( 'link_id' => $link_id ) ); do_action( 'deleted_link', $link_id ); @@ -265,5 +266,3 @@ function wp_update_link( $linkdata ) { return wp_insert_link( $linkdata ); } - -?> diff --git a/wp-admin/includes/class-ftp.php b/wp-admin/includes/class-ftp.php index 1e35e7453..1ae3e870e 100644 --- a/wp-admin/includes/class-ftp.php +++ b/wp-admin/includes/class-ftp.php @@ -896,11 +896,12 @@ class ftp_base { } } -$mod_sockets=TRUE; -if (!extension_loaded('sockets')) { - $prefix = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' : ''; - if(!@dl($prefix . 'sockets.' . PHP_SHLIB_SUFFIX)) $mod_sockets=FALSE; +$mod_sockets = extension_loaded( 'sockets' ); +if ( ! $mod_sockets && function_exists( 'dl' ) && is_callable( 'dl' ) ) { + $prefix = ( PHP_SHLIB_SUFFIX == 'dll' ) ? 'php_' : ''; + @dl( $prefix . 'sockets.' . PHP_SHLIB_SUFFIX ); + $mod_sockets = extension_loaded( 'sockets' ); } -require_once "class-ftp-".($mod_sockets?"sockets":"pure").".php"; +require_once "class-ftp-" . ( $mod_sockets ? "sockets" : "pure" ) . ".php"; ?> diff --git a/wp-admin/includes/class-wp-comments-list-table.php b/wp-admin/includes/class-wp-comments-list-table.php index e3dc4c48b..bb5a95e6a 100644 --- a/wp-admin/includes/class-wp-comments-list-table.php +++ b/wp-admin/includes/class-wp-comments-list-table.php @@ -130,13 +130,13 @@ class WP_Comments_List_Table extends WP_List_Table { global $comment_status; if ( 'moderated' == $comment_status ) - _e( 'No comments awaiting moderation… yet.' ); + _e( 'No comments awaiting moderation.' ); else _e( 'No comments found.' ); } function get_views() { - global $post_id, $comment_status; + global $post_id, $comment_status, $comment_type; $status_links = array(); $num_comments = ( $post_id ) ? wp_count_comments( $post_id ) : wp_count_comments(); @@ -186,7 +186,7 @@ class WP_Comments_List_Table extends WP_List_Table { $actions = array(); if ( in_array( $comment_status, array( 'all', 'approved' ) ) ) $actions['unapprove'] = __( 'Unapprove' ); - if ( in_array( $comment_status, array( 'all', 'moderated', 'spam' ) ) ) + if ( in_array( $comment_status, array( 'all', 'moderated' ) ) ) $actions['approve'] = __( 'Approve' ); if ( in_array( $comment_status, array( 'all', 'moderated', 'approved' ) ) ) $actions['spam'] = _x( 'Mark as Spam', 'comment' ); @@ -556,5 +556,3 @@ class WP_Post_Comments_List_Table extends WP_Comments_List_Table { return 10; } } - -?> diff --git a/wp-admin/includes/class-wp-filesystem-base.php b/wp-admin/includes/class-wp-filesystem-base.php index 3d3016acd..1f22f2418 100644 --- a/wp-admin/includes/class-wp-filesystem-base.php +++ b/wp-admin/includes/class-wp-filesystem-base.php @@ -328,5 +328,3 @@ class WP_Filesystem_Base { return (bool) preg_match('|[^\x20-\x7E]|', $text); //chr(32)..chr(127) } } - -?> diff --git a/wp-admin/includes/class-wp-filesystem-direct.php b/wp-admin/includes/class-wp-filesystem-direct.php index ebd64b3e8..457f199c3 100644 --- a/wp-admin/includes/class-wp-filesystem-direct.php +++ b/wp-admin/includes/class-wp-filesystem-direct.php @@ -207,7 +207,7 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { if ( ! $overwrite && $this->exists($destination) ) return false; - // try using rename first. if that fails (for example, source is read only) try copy + // try using rename first. if that fails (for example, source is read only) try copy if ( @rename($source, $destination) ) return true; @@ -361,4 +361,3 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { return $ret; } } -?> diff --git a/wp-admin/includes/class-wp-filesystem-ftpext.php b/wp-admin/includes/class-wp-filesystem-ftpext.php index 79bacfbaa..122803047 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpext.php +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -387,5 +387,3 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base { ftp_close($this->link); } } - -?> diff --git a/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/wp-admin/includes/class-wp-filesystem-ftpsockets.php index 7dae3b773..2e9fbd699 100644 --- a/wp-admin/includes/class-wp-filesystem-ftpsockets.php +++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -327,5 +327,3 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base { $this->ftp->quit(); } } - -?> diff --git a/wp-admin/includes/class-wp-links-list-table.php b/wp-admin/includes/class-wp-links-list-table.php index cbe3ed54a..4776a52f8 100644 --- a/wp-admin/includes/class-wp-links-list-table.php +++ b/wp-admin/includes/class-wp-links-list-table.php @@ -182,5 +182,3 @@ class WP_Links_List_Table extends WP_List_Table { } } } - -?> diff --git a/wp-admin/includes/class-wp-list-table.php b/wp-admin/includes/class-wp-list-table.php index 446174d4d..6de7abf53 100644 --- a/wp-admin/includes/class-wp-list-table.php +++ b/wp-admin/includes/class-wp-list-table.php @@ -212,7 +212,7 @@ class WP_List_Table { ?> <p class="search-box"> <label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label> - <input type="text" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" /> + <input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" /> <?php submit_button( $text, 'button', false, false, array('id' => 'search-submit') ); ?> </p> <?php @@ -386,7 +386,8 @@ class WP_List_Table { printf( "<option %s value='%s'>%s</option>\n", selected( $m, $year . $month, false ), esc_attr( $arc_row->year . $month ), - $wp_locale->get_month( $month ) . " $year" + /* translators: 1: month name, 2: 4-digit year */ + sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year ) ); } ?> @@ -483,7 +484,7 @@ class WP_List_Table { if ( empty( $this->_pagination_args ) ) return; - extract( $this->_pagination_args ); + extract( $this->_pagination_args, EXTR_SKIP ); $output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>'; @@ -518,9 +519,8 @@ class WP_List_Table { if ( 'bottom' == $which ) $html_current_page = $current; else - $html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='%s' value='%s' size='%d' />", + $html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='paged' value='%s' size='%d' />", esc_attr__( 'Current page' ), - esc_attr( 'paged' ), $current, strlen( $total_pages ) ); @@ -542,7 +542,10 @@ class WP_List_Table { '»' ); - $output .= "\n<span class='pagination-links'>" . join( "\n", $page_links ) . '</span>'; + $pagination_links_class = 'pagination-links'; + if ( ! empty( $infinite_scroll ) ) + $pagination_links_class = ' hide-if-js'; + $output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>'; if ( $total_pages ) $page_class = $total_pages < 2 ? ' one-page' : ''; @@ -871,7 +874,7 @@ class WP_List_Table { $this->prepare_items(); extract( $this->_args ); - extract( $this->_pagination_args ); + extract( $this->_pagination_args, EXTR_SKIP ); ob_start(); if ( ! empty( $_REQUEST['no_placeholder'] ) ) @@ -913,4 +916,3 @@ class WP_List_Table { printf( "<script type='text/javascript'>list_args = %s;</script>\n", json_encode( $args ) ); } } -?> diff --git a/wp-admin/includes/class-wp-media-list-table.php b/wp-admin/includes/class-wp-media-list-table.php index 9c63ca326..5f9c165e8 100644 --- a/wp-admin/includes/class-wp-media-list-table.php +++ b/wp-admin/includes/class-wp-media-list-table.php @@ -302,8 +302,8 @@ foreach ( $columns as $column_name => $column_display_name ) { <td <?php echo $attributes ?>><strong> <?php if( current_user_can( 'edit_post', $post->post_parent ) ) { ?> <a href="<?php echo get_edit_post_link( $post->post_parent ); ?>"> - <?php echo $title ?></a> - <?php } else { + <?php echo $title ?></a><?php + } else { echo $title; } ?></strong>, <?php echo get_the_time( __( 'Y/m/d' ) ); ?> @@ -392,5 +392,3 @@ foreach ( $columns as $column_name => $column_display_name ) { return $actions; } } - -?> diff --git a/wp-admin/includes/class-wp-ms-sites-list-table.php b/wp-admin/includes/class-wp-ms-sites-list-table.php index 73ce88989..3d72381c7 100644 --- a/wp-admin/includes/class-wp-ms-sites-list-table.php +++ b/wp-admin/includes/class-wp-ms-sites-list-table.php @@ -251,7 +251,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table { $actions['deactivate'] = '<span class="activate"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=deactivateblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to deactivate the site %s' ), $blogname ) ) ), 'confirm') ) . '">' . __( 'Deactivate' ) . '</a></span>'; if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' ) - $actions['unarchive'] = '<span class="archive"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=unarchiveblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to unarchive the site %s.' ), $blogname ) ) ), 'confirm') ) . '">' . __( 'Unarchive' ) . '</a></span>'; + $actions['unarchive'] = '<span class="archive"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=unarchiveblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to unarchive the site %s.' ), $blogname ) ) ), 'confirm') ) . '">' . __( 'Unarchive' ) . '</a></span>'; else $actions['archive'] = '<span class="archive"><a href="' . esc_url( wp_nonce_url( network_admin_url( 'sites.php?action=confirm&action2=archiveblog&id=' . $blog['blog_id'] . '&msg=' . urlencode( sprintf( __( 'You are about to archive the site %s.' ), $blogname ) ) ), 'confirm') ) . '">' . _x( 'Archive', 'verb; site' ) . '</a></span>'; @@ -337,5 +337,3 @@ class WP_MS_Sites_List_Table extends WP_List_Table { } } } - -?> diff --git a/wp-admin/includes/class-wp-ms-themes-list-table.php b/wp-admin/includes/class-wp-ms-themes-list-table.php index cd9841da0..9fc3251d7 100644 --- a/wp-admin/includes/class-wp-ms-themes-list-table.php +++ b/wp-admin/includes/class-wp-ms-themes-list-table.php @@ -15,14 +15,9 @@ class WP_MS_Themes_List_Table extends WP_List_Table { function __construct() { global $status, $page; - $default_status = get_user_option( 'themes_last_view' ); - if ( empty( $default_status ) ) - $default_status = 'all'; - $status = isset( $_REQUEST['theme_status'] ) ? $_REQUEST['theme_status'] : $default_status; - if ( !in_array( $status, array( 'all', 'enabled', 'disabled', 'upgrade', 'search' ) ) ) + $status = isset( $_REQUEST['theme_status'] ) ? $_REQUEST['theme_status'] : 'all'; + if ( !in_array( $status, array( 'all', 'enabled', 'disabled', 'upgrade', 'search', 'broken' ) ) ) $status = 'all'; - if ( $status != $default_status && 'search' != $status ) - update_user_meta( get_current_user_id(), 'themes_last_view', $status ); $page = $this->get_pagenum(); @@ -55,56 +50,47 @@ class WP_MS_Themes_List_Table extends WP_List_Table { } function prepare_items() { - global $status, $themes, $totals, $page, $orderby, $order, $s; + global $status, $totals, $page, $orderby, $order, $s; wp_reset_vars( array( 'orderby', 'order', 's' ) ); $themes = array( - 'all' => apply_filters( 'all_themes', get_themes() ), + 'all' => apply_filters( 'all_themes', wp_get_themes() ), 'search' => array(), 'enabled' => array(), 'disabled' => array(), - 'upgrade' => array() + 'upgrade' => array(), + 'broken' => $this->is_site_themes ? array() : wp_get_themes( array( 'errors' => true ) ), ); - $site_allowed_themes = get_site_allowed_themes(); - if ( !$this->is_site_themes ) { - $allowed_themes = $site_allowed_themes; - $themes_per_page = $this->get_items_per_page( 'themes_network_per_page' ); - } else { - $allowed_themes = wpmu_get_blog_allowedthemes( $this->site_id ); + if ( $this->is_site_themes ) { $themes_per_page = $this->get_items_per_page( 'site_themes_network_per_page' ); + $allowed_where = 'site'; + } else { + $themes_per_page = $this->get_items_per_page( 'themes_network_per_page' ); + $allowed_where = 'network'; } - $current = get_site_transient( 'update_themes' ); + $maybe_update = current_user_can( 'update_themes' ) && ! $this->is_site_themes && $current = get_site_transient( 'update_themes' ); foreach ( (array) $themes['all'] as $key => $theme ) { - $theme_key = $theme['Stylesheet']; - - if ( isset( $allowed_themes [ $theme_key ] ) ) { - $themes['all'][$key]['enabled'] = true; - $themes['enabled'][$key] = $themes['all'][$key]; - } - else { - $themes['all'][$key]['enabled'] = false; - $themes['disabled'][$key] = $themes['all'][$key]; + if ( $this->is_site_themes && $theme->is_allowed( 'network' ) ) { + unset( $themes['all'][ $key ] ); + continue; } - if ( isset( $current->response[ $theme['Template'] ] ) ) - $themes['upgrade'][$key] = $themes['all'][$key]; - if ( $this->is_site_themes && isset( $site_allowed_themes[$theme_key] ) ) { - unset( $themes['all'][$key] ); - unset( $themes['enabled'][$key] ); - unset( $themes['disabled'][$key] ); + if ( $maybe_update && isset( $current->response[ $key ] ) ) { + $themes['all'][ $key ]->update = true; + $themes['upgrade'][ $key ] = $themes['all'][ $key ]; } - } - if ( !current_user_can( 'update_themes' ) || $this->is_site_themes ) - $themes['upgrade'] = array(); + $filter = $theme->is_allowed( $allowed_where, $this->site_id ) ? 'enabled' : 'disabled'; + $themes[ $filter ][ $key ] = $themes['all'][ $key ]; + } if ( $s ) { $status = 'search'; - $themes['search'] = array_filter( $themes['all'], array( &$this, '_search_callback' ) ); + $themes['search'] = array_filter( array_merge( $themes['all'], $themes['broken'] ), array( &$this, '_search_callback' ) ); } $totals = array(); @@ -115,19 +101,27 @@ class WP_MS_Themes_List_Table extends WP_List_Table { $status = 'all'; $this->items = $themes[ $status ]; + WP_Theme::sort_by_name( $this->items ); + + $this->has_items = ! empty( $themes['all'] ); $total_this_page = $totals[ $status ]; if ( $orderby ) { $orderby = ucfirst( $orderby ); $order = strtoupper( $order ); - uasort( $this->items, array( &$this, '_order_callback' ) ); + if ( $orderby == 'Name' ) { + if ( 'ASC' == $order ) + $this->items = array_reverse( $this->items ); + } else { + uasort( $this->items, array( &$this, '_order_callback' ) ); + } } $start = ( $page - 1 ) * $themes_per_page; if ( $total_this_page > $themes_per_page ) - $this->items = array_slice( $this->items, $start, $themes_per_page ); + $this->items = array_slice( $this->items, $start, $themes_per_page, true ); $this->set_pagination_args( array( 'total_items' => $total_this_page, @@ -140,19 +134,27 @@ class WP_MS_Themes_List_Table extends WP_List_Table { if ( is_null( $term ) ) $term = stripslashes( $_REQUEST['s'] ); - $search_fields = array( 'Name', 'Title', 'Description', 'Author', 'Author Name', 'Author URI', 'Template', 'Stylesheet' ); - foreach ( $search_fields as $field ) - if ( stripos( $theme[ $field ], $term ) !== false ) + foreach ( array( 'Name', 'Description', 'Author', 'Author', 'AuthorURI' ) as $field ) { + // Don't mark up; Do translate. + if ( false !== stripos( $theme->display( $field, false, true ), $term ) ) return true; + } + + if ( false !== stripos( $theme->get_stylesheet(), $term ) ) + return true; + + if ( false !== stripos( $theme->get_template(), $term ) ) + return true; return false; } + // Not used by any core columns. function _order_callback( $theme_a, $theme_b ) { global $orderby, $order; - $a = $theme_a[$orderby]; - $b = $theme_b[$orderby]; + $a = $theme_a[ $orderby ]; + $b = $theme_b[ $orderby ]; if ( $a == $b ) return 0; @@ -164,9 +166,7 @@ class WP_MS_Themes_List_Table extends WP_List_Table { } function no_items() { - global $themes; - - if ( !empty( $themes['all'] ) ) + if ( ! $this->has_items ) _e( 'No themes found.' ); else _e( 'You do not appear to have any themes available at this time.' ); @@ -209,6 +209,9 @@ class WP_MS_Themes_List_Table extends WP_List_Table { case 'upgrade': $text = _n( 'Update Available <span class="count">(%s)</span>', 'Update Available <span class="count">(%s)</span>', $count ); break; + case 'broken' : + $text = _n( 'Broken <span class="count">(%s)</span>', 'Broken <span class="count">(%s)</span>', $count ); + break; } if ( $this->is_site_themes ) @@ -260,14 +263,17 @@ class WP_MS_Themes_List_Table extends WP_List_Table { } function single_row( $key, $theme ) { - global $status, $page, $s; + global $status, $page, $s, $totals; $context = $status; - if ( $this->is_site_themes ) + if ( $this->is_site_themes ) { $url = "site-themes.php?id={$this->site_id}&"; - else + $allowed = $theme->is_allowed( 'site', $this->site_id ); + } else { $url = 'themes.php?'; + $allowed = $theme->is_allowed( 'network' ); + } // preorder $actions = array( @@ -277,30 +283,32 @@ class WP_MS_Themes_List_Table extends WP_List_Table { 'delete' => '' ); - $theme_key = $theme['Stylesheet']; + $theme_key = $theme->get_stylesheet(); - if ( empty( $theme['enabled'] ) ) - $actions['enable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=enable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s, 'enable-theme_' . $theme_key) ) . '" title="' . esc_attr__('Enable this theme') . '" class="edit">' . ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) . '</a>'; - else + if ( ! $allowed ) { + if ( ! $theme->errors() ) + $actions['enable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=enable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s, 'enable-theme_' . $theme_key) ) . '" title="' . esc_attr__('Enable this theme') . '" class="edit">' . ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) . '</a>'; + } else { $actions['disable'] = '<a href="' . esc_url( wp_nonce_url($url . 'action=disable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s, 'disable-theme_' . $theme_key) ) . '" title="' . esc_attr__('Disable this theme') . '">' . ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) ) . '</a>'; + } if ( current_user_can('edit_themes') ) - $actions['edit'] = '<a href="' . esc_url('theme-editor.php?theme=' . urlencode( $theme['Name'] )) . '" title="' . esc_attr__('Open this theme in the Theme Editor') . '" class="edit">' . __('Edit') . '</a>'; + $actions['edit'] = '<a href="' . esc_url('theme-editor.php?theme=' . $theme_key ) . '" title="' . esc_attr__('Open this theme in the Theme Editor') . '" class="edit">' . __('Edit') . '</a>'; - if ( empty( $theme['enabled'] ) && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $theme_key != get_option( 'stylesheet' ) && $theme_key != get_option( 'template' ) ) + if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $theme_key != get_option( 'stylesheet' ) && $theme_key != get_option( 'template' ) ) $actions['delete'] = '<a href="' . esc_url( wp_nonce_url( 'themes.php?action=delete-selected&checked[]=' . $theme_key . '&theme_status=' . $context . '&paged=' . $page . '&s=' . $s, 'bulk-themes' ) ) . '" title="' . esc_attr__( 'Delete this theme' ) . '" class="delete">' . __( 'Delete' ) . '</a>'; $actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme_key, $theme, $context ); $actions = apply_filters( "theme_action_links_$theme_key", $actions, $theme_key, $theme, $context ); - $class = empty( $theme['enabled'] ) ? 'inactive' : 'active'; - $checkbox_id = "checkbox_" . md5($theme['Name']); - $checkbox = "<input type='checkbox' name='checked[]' value='" . esc_attr( $theme_key ) . "' id='" . $checkbox_id . "' /><label class='screen-reader-text' for='" . $checkbox_id . "' >" . __('Select') . " " . $theme['Name'] . "</label>"; + $class = ! $allowed ? 'inactive' : 'active'; + $checkbox_id = "checkbox_" . md5( $theme->get('Name') ); + $checkbox = "<input type='checkbox' name='checked[]' value='" . esc_attr( $theme_key ) . "' id='" . $checkbox_id . "' /><label class='screen-reader-text' for='" . $checkbox_id . "' >" . __('Select') . " " . $theme->display('Name') . "</label>"; - $description = '<p>' . $theme['Description'] . '</p>'; - $theme_name = $theme['Name']; + $id = sanitize_html_class( $theme->get_stylesheet() ); - $id = sanitize_title( $theme_name ); + if ( ! empty( $totals['upgrade'] ) && ! empty( $theme->update ) ) + $class .= ' update'; echo "<tr id='$id' class='$class'>"; @@ -316,25 +324,28 @@ class WP_MS_Themes_List_Table extends WP_List_Table { echo "<th scope='row' class='check-column'>$checkbox</th>"; break; case 'name': - echo "<td class='theme-title'$style><strong>$theme_name</strong>"; + echo "<td class='theme-title'$style><strong>" . $theme->display('Name') . "</strong>"; echo $this->row_actions( $actions, true ); echo "</td>"; break; case 'description': - echo "<td class='column-description desc'$style> - <div class='theme-description'>$description</div> + echo "<td class='column-description desc'$style>"; + if ( $theme->errors() ) { + $pre = $status == 'broken' ? '' : __( 'Broken Theme:' ) . ' '; + echo '<p><strong class="attention">' . $pre . $theme->errors()->get_error_message() . '</strong></p>'; + } + echo "<div class='theme-description'><p>" . $theme->display( 'Description' ) . "</p></div> <div class='$class second theme-version-author-uri'>"; $theme_meta = array(); - if ( !empty( $theme['Version'] ) ) - $theme_meta[] = sprintf( __( 'Version %s' ), $theme['Version'] ); + if ( $theme->get('Version') ) + $theme_meta[] = sprintf( __( 'Version %s' ), $theme->display('Version') ); - if ( !empty( $theme['Author'] ) ) - $theme_meta[] = sprintf( __( 'By %s' ), $theme['Author'] ); + $theme_meta[] = sprintf( __( 'By %s' ), $theme->display('Author') ); - if ( !empty( $theme['Theme URI'] ) ) - $theme_meta[] = '<a href="' . $theme['Theme URI'] . '" title="' . esc_attr__( 'Visit theme homepage' ) . '">' . __( 'Visit Theme Site' ) . '</a>'; + if ( $theme->get('ThemeURI') ) + $theme_meta[] = '<a href="' . $theme->display('ThemeURI') . '" title="' . esc_attr__( 'Visit theme homepage' ) . '">' . __( 'Visit Theme Site' ) . '</a>'; $theme_meta = apply_filters( 'theme_row_meta', $theme_meta, $theme_key, $theme, $status ); echo implode( ' | ', $theme_meta ); @@ -357,5 +368,3 @@ class WP_MS_Themes_List_Table extends WP_List_Table { do_action( "after_theme_row_$theme_key", $theme_key, $theme, $status ); } } - -?> diff --git a/wp-admin/includes/class-wp-ms-users-list-table.php b/wp-admin/includes/class-wp-ms-users-list-table.php index 4ebec5e74..67564fd65 100644 --- a/wp-admin/includes/class-wp-ms-users-list-table.php +++ b/wp-admin/includes/class-wp-ms-users-list-table.php @@ -162,7 +162,6 @@ class WP_MS_Users_List_Table extends WP_List_Table { $attributes = "$class$style"; - switch ( $column_name ) { case 'cb': ?> <th scope="row" class="check-column"> @@ -242,7 +241,7 @@ class WP_MS_Users_List_Table extends WP_List_Table { if ( get_blog_status( $val->userblog_id, 'archived' ) == 1 ) $class .= 'site-archived '; - $actions['view'] = '<a class="' . $class . '" href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . '</a>'; + $actions['view'] = '<a class="' . $class . '" href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . '</a>'; $actions = apply_filters('ms_user_list_site_actions', $actions, $val->userblog_id); @@ -274,5 +273,3 @@ class WP_MS_Users_List_Table extends WP_List_Table { } } } - -?> diff --git a/wp-admin/includes/class-wp-plugin-install-list-table.php b/wp-admin/includes/class-wp-plugin-install-list-table.php index 71337eb99..3de77c1d8 100644 --- a/wp-admin/includes/class-wp-plugin-install-list-table.php +++ b/wp-admin/includes/class-wp-plugin-install-list-table.php @@ -33,7 +33,6 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { $tabs['featured'] = _x( 'Featured','Plugin Installer' ); $tabs['popular'] = _x( 'Popular','Plugin Installer' ); $tabs['new'] = _x( 'Newest','Plugin Installer' ); - $tabs['updated'] = _x( 'Recently Updated','Plugin Installer' ); $nonmenu_tabs = array( 'plugin-information' ); //Valid actions to perform which do not have a Menu item. @@ -48,7 +47,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { switch ( $tab ) { case 'search': - $type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : ''; + $type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : 'term'; $term = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : ''; switch ( $type ) { @@ -63,13 +62,12 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { break; } - add_action( 'install_plugins_table_header', 'install_search_form' ); + add_action( 'install_plugins_table_header', 'install_search_form', 10, 0 ); break; case 'featured': case 'popular': case 'new': - case 'updated': $args['browse'] = $tab; break; @@ -205,7 +203,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { break; case 'latest_installed': case 'newer_installed': - $action_links[] = '<span title="' . esc_attr__( 'This plugin is already installed and is up to date' ) . ' ">' . __( 'Installed' ) . '</span>'; + $action_links[] = '<span title="' . esc_attr__( 'This plugin is already installed and is up to date' ) . ' ">' . _x( 'Installed', 'plugin' ) . '</span>'; break; } } @@ -219,19 +217,7 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { <td class="vers column-version"<?php echo $style['version']; ?>><?php echo $version; ?></td> <td class="vers column-rating"<?php echo $style['rating']; ?>> <div class="star-holder" title="<?php printf( _n( '(based on %s rating)', '(based on %s ratings)', $plugin['num_ratings'] ), number_format_i18n( $plugin['num_ratings'] ) ) ?>"> - <div class="star star-rating" style="width: <?php echo esc_attr( $plugin['rating'] ) ?>px"></div> - <?php - $color = get_user_option('admin_color'); - if ( empty($color) || 'fresh' == $color ) - $star_url = admin_url( 'images/gray-star.png?v=20110615' ); // 'Fresh' Gray star for list tables - else - $star_url = admin_url( 'images/star.png?v=20110615' ); // 'Classic' Blue star - ?> - <div class="star star5"><img src="<?php echo $star_url; ?>" alt="<?php esc_attr_e( '5 stars' ) ?>" /></div> - <div class="star star4"><img src="<?php echo $star_url; ?>" alt="<?php esc_attr_e( '4 stars' ) ?>" /></div> - <div class="star star3"><img src="<?php echo $star_url; ?>" alt="<?php esc_attr_e( '3 stars' ) ?>" /></div> - <div class="star star2"><img src="<?php echo $star_url; ?>" alt="<?php esc_attr_e( '2 stars' ) ?>" /></div> - <div class="star star1"><img src="<?php echo $star_url; ?>" alt="<?php esc_attr_e( '1 star' ) ?>" /></div> + <div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $plugin['rating'] ) ); ?>px"></div> </div> </td> <td class="desc column-description"<?php echo $style['description']; ?>><?php echo $description, $author; ?></td> @@ -240,5 +226,3 @@ class WP_Plugin_Install_List_Table extends WP_List_Table { } } } - -?> diff --git a/wp-admin/includes/class-wp-plugins-list-table.php b/wp-admin/includes/class-wp-plugins-list-table.php index 577750c98..a1ce53abb 100644 --- a/wp-admin/includes/class-wp-plugins-list-table.php +++ b/wp-admin/includes/class-wp-plugins-list-table.php @@ -13,7 +13,7 @@ class WP_Plugins_List_Table extends WP_List_Table { global $status, $page; $status = 'all'; - if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'active', 'inactive', 'recently_activated', 'upgrade', 'network', 'mustuse', 'dropins', 'search' ) ) ) + if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'active', 'inactive', 'recently_activated', 'upgrade', 'mustuse', 'dropins', 'search' ) ) ) $status = $_REQUEST['plugin_status']; if ( isset($_REQUEST['s']) ) @@ -65,32 +65,34 @@ class WP_Plugins_List_Table extends WP_List_Table { if ( apply_filters( 'show_advanced_plugins', true, 'dropins' ) ) $plugins['dropins'] = get_dropins(); - $current = get_site_transient( 'update_plugins' ); - foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) { - if ( isset( $current->response[ $plugin_file ] ) ) - $plugins['upgrade'][ $plugin_file ] = $plugin_data; + if ( current_user_can( 'update_plugins' ) ) { + $current = get_site_transient( 'update_plugins' ); + foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) { + if ( isset( $current->response[ $plugin_file ] ) ) { + $plugins['all'][ $plugin_file ]['update'] = true; + $plugins['upgrade'][ $plugin_file ] = $plugins['all'][ $plugin_file ]; + } + } } } set_transient( 'plugin_slugs', array_keys( $plugins['all'] ), 86400 ); - $recently_activated = get_option( 'recently_activated', array() ); + if ( ! $screen->is_network ) { + $recently_activated = get_option( 'recently_activated', array() ); - $one_week = 7*24*60*60; - foreach ( $recently_activated as $key => $time ) - if ( $time + $one_week < time() ) - unset( $recently_activated[$key] ); - update_option( 'recently_activated', $recently_activated ); + $one_week = 7*24*60*60; + foreach ( $recently_activated as $key => $time ) + if ( $time + $one_week < time() ) + unset( $recently_activated[$key] ); + update_option( 'recently_activated', $recently_activated ); + } foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) { // Filter into individual sections - if ( is_multisite() && is_network_only_plugin( $plugin_file ) && !$screen->is_network ) { - unset( $plugins['all'][ $plugin_file] ); - } elseif ( is_plugin_active_for_network($plugin_file) && !$screen->is_network ) { + if ( ! $screen->is_network && is_plugin_active_for_network( $plugin_file ) ) { unset( $plugins['all'][ $plugin_file ] ); - } elseif ( is_multisite() && is_network_only_plugin( $plugin_file ) && !current_user_can( 'manage_network_plugins' ) ) { - $plugins['network'][ $plugin_file ] = $plugin_data; - } elseif ( ( !$screen->is_network && is_plugin_active( $plugin_file ) ) + } elseif ( ( ! $screen->is_network && is_plugin_active( $plugin_file ) ) || ( $screen->is_network && is_plugin_active_for_network( $plugin_file ) ) ) { $plugins['active'][ $plugin_file ] = $plugin_data; } else { @@ -100,9 +102,6 @@ class WP_Plugins_List_Table extends WP_List_Table { } } - if ( !current_user_can( 'update_plugins' ) ) - $plugins['upgrade'] = array(); - if ( $s ) { $status = 'search'; $plugins['search'] = array_filter( $plugins['all'], array( &$this, '_search_callback' ) ); @@ -214,9 +213,6 @@ class WP_Plugins_List_Table extends WP_List_Table { case 'inactive': $text = _n( 'Inactive <span class="count">(%s)</span>', 'Inactive <span class="count">(%s)</span>', $count ); break; - case 'network': - $text = _n( 'Network <span class="count">(%s)</span>', 'Network <span class="count">(%s)</span>', $count ); - break; case 'mustuse': $text = _n( 'Must-Use <span class="count">(%s)</span>', 'Must-Use <span class="count">(%s)</span>', $count ); break; @@ -247,13 +243,11 @@ class WP_Plugins_List_Table extends WP_List_Table { $screen = get_current_screen(); - if ( 'active' != $status ) { - $action = $screen->is_network ? 'network-activate-selected' : 'activate-selected'; - $actions[ $action ] = __( 'Activate' ); - } + if ( 'active' != $status ) + $actions['activate-selected'] = $screen->is_network ? __( 'Network Activate' ) : __( 'Activate' ); if ( 'inactive' != $status && 'recent' != $status ) - $actions['deactivate-selected'] = __( 'Deactivate' ); + $actions['deactivate-selected'] = $screen->is_network ? __( 'Network Deactivate' ) : __( 'Deactivate' ); if ( !is_multisite() || $screen->is_network ) { if ( current_user_can( 'update_plugins' ) ) @@ -282,7 +276,9 @@ class WP_Plugins_List_Table extends WP_List_Table { echo '<div class="alignleft actions">'; - if ( 'recently_activated' == $status ) + $screen = get_current_screen(); + + if ( ! $screen->is_network && 'recently_activated' == $status ) submit_button( __( 'Clear List' ), 'secondary', 'clear-recent-list', false ); elseif ( 'top' == $which && 'mustuse' == $status ) echo '<p>' . sprintf( __( 'Files in the <code>%s</code> directory are executed automatically.' ), str_replace( ABSPATH, '/', WPMU_PLUGIN_DIR ) ) . '</p>'; @@ -312,7 +308,7 @@ class WP_Plugins_List_Table extends WP_List_Table { } function single_row( $plugin_file, $plugin_data ) { - global $status, $page, $s; + global $status, $page, $s, $totals; $context = $status; @@ -320,9 +316,8 @@ class WP_Plugins_List_Table extends WP_List_Table { // preorder $actions = array( - 'network_deactivate' => '', 'deactivate' => '', - 'network_only' => '', 'activate' => '', - 'network_activate' => '', + 'deactivate' => '', + 'activate' => '', 'edit' => '', 'delete' => '', ); @@ -347,22 +342,18 @@ class WP_Plugins_List_Table extends WP_List_Table { if ( $plugin_data['Description'] ) $description .= '<p>' . $plugin_data['Description'] . '</p>'; } else { - $is_active_for_network = is_plugin_active_for_network($plugin_file); if ( $screen->is_network ) - $is_active = $is_active_for_network; + $is_active = is_plugin_active_for_network( $plugin_file ); else $is_active = is_plugin_active( $plugin_file ); - if ( $is_active_for_network && !is_super_admin() && !$screen->is_network ) - return; - if ( $screen->is_network ) { - if ( $is_active_for_network ) { + if ( $is_active ) { if ( current_user_can( 'manage_network_plugins' ) ) - $actions['network_deactivate'] = '<a href="' . wp_nonce_url('plugins.php?action=deactivate&networkwide=1&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s, 'deactivate-plugin_' . $plugin_file) . '" title="' . esc_attr__('Deactivate this plugin') . '">' . __('Network Deactivate') . '</a>'; + $actions['deactivate'] = '<a href="' . wp_nonce_url('plugins.php?action=deactivate&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s, 'deactivate-plugin_' . $plugin_file) . '" title="' . esc_attr__('Deactivate this plugin') . '">' . __('Network Deactivate') . '</a>'; } else { if ( current_user_can( 'manage_network_plugins' ) ) - $actions['network_activate'] = '<a href="' . wp_nonce_url('plugins.php?action=activate&networkwide=1&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s, 'activate-plugin_' . $plugin_file) . '" title="' . esc_attr__('Activate this plugin for all sites in this network') . '" class="edit">' . __('Network Activate') . '</a>'; + $actions['activate'] = '<a href="' . wp_nonce_url('plugins.php?action=activate&plugin=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s, 'activate-plugin_' . $plugin_file) . '" title="' . esc_attr__('Activate this plugin for all sites in this network') . '" class="edit">' . __('Network Activate') . '</a>'; if ( current_user_can( 'delete_plugins' ) && ! is_plugin_active( $plugin_file ) ) $actions['delete'] = '<a href="' . wp_nonce_url('plugins.php?action=delete-selected&checked[]=' . $plugin_file . '&plugin_status=' . $context . '&paged=' . $page . '&s=' . $s, 'bulk-plugins') . '" title="' . esc_attr__('Delete this plugin') . '" class="delete">' . __('Delete') . '</a>'; } @@ -394,6 +385,8 @@ class WP_Plugins_List_Table extends WP_List_Table { } $id = sanitize_title( $plugin_name ); + if ( ! empty( $totals['upgrade'] ) && ! empty( $plugin_data['update'] ) ) + $class .= ' update'; echo "<tr id='$id' class='$class'>"; @@ -448,5 +441,3 @@ class WP_Plugins_List_Table extends WP_List_Table { do_action( "after_plugin_row_$plugin_file", $plugin_file, $plugin_data, $status ); } } - -?> diff --git a/wp-admin/includes/class-wp-posts-list-table.php b/wp-admin/includes/class-wp-posts-list-table.php index 290939c23..613cff823 100644 --- a/wp-admin/includes/class-wp-posts-list-table.php +++ b/wp-admin/includes/class-wp-posts-list-table.php @@ -360,7 +360,7 @@ class WP_Posts_List_Table extends WP_List_Table { if ( $page->post_parent == $page->ID ) { $page->post_parent = 0; $wpdb->update( $wpdb->posts, array( 'post_parent' => 0 ), array( 'ID' => $page->ID ) ); - clean_page_cache( $page->ID ); + clean_post_cache( $page ); } if ( 0 == $page->post_parent ) @@ -527,9 +527,8 @@ class WP_Posts_List_Table extends WP_List_Table { ?> <td <?php echo $attributes ?>><strong><?php if ( $can_edit_post && $post->post_status != 'trash' ) { ?><a class="row-title" href="<?php echo $edit_link; ?>" title="<?php echo esc_attr( sprintf( __( 'Edit “%s”' ), $title ) ); ?>"><?php echo $title ?></a><?php } else { echo $title; }; _post_states( $post ); ?></strong> <?php - if ( 'excerpt' == $mode ) { + if ( 'excerpt' == $mode && current_user_can( 'read_post', $post->ID ) ) the_excerpt(); - } } $actions = array(); @@ -609,7 +608,8 @@ class WP_Posts_List_Table extends WP_List_Table { esc_html( sanitize_term_field( 'name', $c->name, $c->term_id, 'category', 'display' ) ) ); } - echo join( ', ', $out ); + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $out ); } else { _e( 'Uncategorized' ); } @@ -629,7 +629,8 @@ class WP_Posts_List_Table extends WP_List_Table { esc_html( sanitize_term_field( 'name', $c->name, $c->term_id, 'tag', 'display' ) ) ); } - echo join( ', ', $out ); + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $out ); } else { _e( 'No Tags' ); } @@ -995,20 +996,23 @@ class WP_Posts_List_Table extends WP_List_Table { <?php if ( post_type_supports( $screen->post_type, 'post-formats' ) && current_theme_supports( 'post-formats' ) ) : $post_formats = get_theme_support( 'post-formats' ); if ( isset( $post_formats[0] ) && is_array( $post_formats[0] ) ) : - $all_post_formats = get_post_format_strings(); ?> + $all_post_formats = get_post_format_strings(); + unset( $all_post_formats['standard'] ); ?> <div class="inline-edit-group"> <label class="alignleft" for="post_format"> - <span class="title"><?php _e( 'Post Format' ); ?></span> + <span class="title"><?php _ex( 'Format', 'post format' ); ?></span> <select name="post_format"> <?php if ( $bulk ) : ?> <option value="-1"><?php _e( '— No Change —' ); ?></option> <?php endif; ?> <option value="0"><?php _ex( 'Standard', 'Post format' ); ?></option> - <?php foreach ( $all_post_formats as $slug => $format ): - if ( $slug != 'standard' ) : ?> - <option value="<?php echo esc_attr( $slug ); ?>"<?php if ( ! in_array( $slug, $post_formats[0] ) ) echo ' class="unsupported"'; ?>><?php echo esc_html( $format ); ?></option> - <?php endif; - endforeach; ?> + <?php foreach ( $all_post_formats as $slug => $format ) : + $unsupported = ! in_array( $slug, $post_formats[0] ); + if ( $bulk && $unsupported ) + continue; + ?> + <option value="<?php echo esc_attr( $slug ); ?>"<?php if ( $unsupported ) echo ' class="unsupported"'; ?>><?php echo esc_html( $format ); ?></option> + <?php endforeach; ?> </select></label> </div> <?php endif; ?> @@ -1050,5 +1054,3 @@ class WP_Posts_List_Table extends WP_List_Table { <?php } } - -?> diff --git a/wp-admin/includes/class-wp-terms-list-table.php b/wp-admin/includes/class-wp-terms-list-table.php index d7cb5261f..b398a55c0 100644 --- a/wp-admin/includes/class-wp-terms-list-table.php +++ b/wp-admin/includes/class-wp-terms-list-table.php @@ -42,7 +42,7 @@ class WP_Terms_List_Table extends WP_List_Table { function prepare_items() { global $taxonomy; - $tags_per_page = $this->get_items_per_page( 'edit_' . $taxonomy . '_per_page' ); + $tags_per_page = $this->get_items_per_page( 'edit_' . $taxonomy . '_per_page' ); if ( 'post_tag' == $taxonomy ) { $tags_per_page = apply_filters( 'edit_tags_per_page', $tags_per_page ); @@ -378,5 +378,3 @@ class WP_Terms_List_Table extends WP_List_Table { <?php } } - -?> diff --git a/wp-admin/includes/class-wp-theme-install-list-table.php b/wp-admin/includes/class-wp-theme-install-list-table.php index 66f7797ca..471752435 100644 --- a/wp-admin/includes/class-wp-theme-install-list-table.php +++ b/wp-admin/includes/class-wp-theme-install-list-table.php @@ -7,19 +7,30 @@ * @since 3.1.0 * @access private */ -class WP_Theme_Install_List_Table extends WP_List_Table { +class WP_Theme_Install_List_Table extends WP_Themes_List_Table { + + var $features = array(); function ajax_user_can() { - return current_user_can('install_themes'); + return current_user_can( 'install_themes' ); } function prepare_items() { include( ABSPATH . 'wp-admin/includes/theme-install.php' ); - global $tabs, $tab, $paged, $type, $term, $theme_field_defaults; - + global $tabs, $tab, $paged, $type, $theme_field_defaults; wp_reset_vars( array( 'tab' ) ); + $search_terms = array(); + $search_string = ''; + if ( ! empty( $_REQUEST['s'] ) ){ + $search_string = strtolower( stripslashes( $_REQUEST['s'] ) ); + $search_terms = array_unique( array_filter( array_map( 'trim', explode( ',', $search_string ) ) ) ); + } + + if ( ! empty( $_REQUEST['features'] ) ) + $this->features = $_REQUEST['features']; + $paged = $this->get_pagenum(); $per_page = 36; @@ -48,34 +59,26 @@ class WP_Theme_Install_List_Table extends WP_List_Table { switch ( $tab ) { case 'search': - $type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : ''; - $term = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : ''; - + $type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : 'term'; switch ( $type ) { case 'tag': - $terms = explode( ',', $term ); - $terms = array_map( 'trim', $terms ); - $terms = array_map( 'sanitize_title_with_dashes', $terms ); - $args['tag'] = $terms; + $args['tag'] = array_map( 'sanitize_key', $search_terms ); break; case 'term': - $args['search'] = $term; + $args['search'] = $search_string; break; case 'author': - $args['author'] = $term; + $args['author'] = $search_string; break; } - if ( !empty( $_POST['features'] ) ) { - $terms = $_POST['features']; - $terms = array_map( 'trim', $terms ); - $terms = array_map( 'sanitize_title_with_dashes', $terms ); - $args['tag'] = $terms; - $_REQUEST['s'] = implode( ',', $terms ); + if ( ! empty( $this->features ) ) { + $args['tag'] = $this->features; + $_REQUEST['s'] = implode( ',', $this->features ); $_REQUEST['type'] = 'tag'; } - add_action( 'install_themes_table_header', 'install_theme_search_form' ); + add_action( 'install_themes_table_header', 'install_theme_search_form', 10, 0 ); break; case 'featured': @@ -89,7 +92,7 @@ class WP_Theme_Install_List_Table extends WP_List_Table { $args = false; } - if ( !$args ) + if ( ! $args ) return; $api = themes_api( 'query_themes', $args ); @@ -102,6 +105,7 @@ class WP_Theme_Install_List_Table extends WP_List_Table { $this->set_pagination_args( array( 'total_items' => $api->info['results'], 'per_page' => $per_page, + 'infinite_scroll' => true, ) ); } @@ -122,13 +126,8 @@ class WP_Theme_Install_List_Table extends WP_List_Table { return $display_tabs; } - function get_columns() { - return array(); - } - function display() { - - // wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); ?> <div class="tablenav top themes"> <div class="alignleft actions"> @@ -143,27 +142,254 @@ class WP_Theme_Install_List_Table extends WP_List_Table { <?php $this->display_rows_or_placeholder(); ?> </div> - <div class="tablenav bottom themes"> - <?php $this->pagination( 'bottom' ); ?> - <img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading list-ajax-loading" alt="" /> - <br class="clear" /> - </div> -<?php + <?php + parent::tablenav( 'bottom' ); } function display_rows() { $themes = $this->items; - $theme_names = array_keys( $themes ); - - foreach ( $theme_names as $theme_name ) { - $class = array( 'available-theme' ); + foreach ( $themes as $theme ) { ?> - <div class="<?php echo join( ' ', $class ); ?>"><?php - if ( isset( $themes[$theme_name] ) ) - display_theme( $themes[$theme_name] ); + <div class="available-theme installable-theme"><?php + $this->single_row( $theme ); ?></div> <?php } // end foreach $theme_names + + $this->theme_installer(); } -} -?> + /* + * Prints a theme from the WordPress.org API. + * + * @param object $theme An object that contains theme data returned by the WordPress.org API. + * + * Example theme data: + * object(stdClass)[59] + * public 'name' => string 'Magazine Basic' (length=14) + * public 'slug' => string 'magazine-basic' (length=14) + * public 'version' => string '1.1' (length=3) + * public 'author' => string 'tinkerpriest' (length=12) + * public 'preview_url' => string 'http://wp-themes.com/?magazine-basic' (length=36) + * public 'screenshot_url' => string 'http://wp-themes.com/wp-content/themes/magazine-basic/screenshot.png' (length=68) + * public 'rating' => float 80 + * public 'num_ratings' => int 1 + * public 'homepage' => string 'http://wordpress.org/extend/themes/magazine-basic' (length=49) + * public 'description' => string 'A basic magazine style layout with a fully customizable layout through a backend interface. Designed by <a href="http://bavotasan.com">c.bavota</a> of <a href="http://tinkerpriestmedia.com">Tinker Priest Media</a>.' (length=214) + * public 'download_link' => string 'http://wordpress.org/extend/themes/download/magazine-basic.1.1.zip' (length=66) + */ + function single_row( $theme ) { + global $themes_allowedtags; + + if ( empty( $theme ) ) + return; + + $name = wp_kses( $theme->name, $themes_allowedtags ); + $author = wp_kses( $theme->author, $themes_allowedtags ); + + $preview_title = sprintf( __('Preview “%s”'), $name ); + $preview_url = add_query_arg( array( + 'tab' => 'theme-information', + 'theme' => $theme->slug, + ) ); + + $actions = array(); + + $install_url = add_query_arg( array( + 'action' => 'install-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $update_url = add_query_arg( array( + 'action' => 'upgrade-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $status = $this->_get_theme_status( $theme ); + + switch ( $status ) { + default: + case 'install': + $actions[] = '<a class="install-now" href="' . esc_url( wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ) ) . '" title="' . esc_attr( sprintf( __( 'Install %s' ), $name ) ) . '">' . __( 'Install Now' ) . '</a>'; + break; + case 'update_available': + $actions[] = '<a class="install-now" href="' . esc_url( wp_nonce_url( $update_url, 'upgrade-theme_' . $theme->slug ) ) . '" title="' . esc_attr( sprintf( __( 'Update to version %s' ), $theme->version ) ) . '">' . __( 'Update' ) . '</a>'; + break; + case 'newer_installed': + case 'latest_installed': + $actions[] = '<span class="install-now" title="' . esc_attr__( 'This theme is already installed and is up to date' ) . '">' . _x( 'Installed', 'theme' ) . '</span>'; + break; + } + + $actions[] = '<a class="install-theme-preview" href="' . esc_url( $preview_url ) . '" title="' . esc_attr( sprintf( __( 'Preview %s' ), $name ) ) . '">' . __( 'Preview' ) . '</a>'; + + $actions = apply_filters( 'theme_install_actions', $actions, $theme ); + + ?> + <a class="screenshot install-theme-preview" href="<?php echo esc_url( $preview_url ); ?>" title="<?php echo esc_attr( $preview_title ); ?>"> + <img src='<?php echo esc_url( $theme->screenshot_url ); ?>' width='150' /> + </a> + + <h3><?php echo $name; ?></h3> + <div class="theme-author"><?php printf( __( 'By %s' ), $author ); ?></div> + + <div class="action-links"> + <ul> + <?php foreach ( $actions as $action ): ?> + <li><?php echo $action; ?></li> + <?php endforeach; ?> + <li class="hide-if-no-js"><a href="#" class="theme-detail" tabindex='4'><?php _e('Details') ?></a></li> + </ul> + </div> + + <?php + $this->install_theme_info( $theme ); + } + + /* + * Prints the wrapper for the theme installer. + */ + function theme_installer() { + ?> + <div id="theme-installer" class="wp-full-overlay expanded"> + <div class="wp-full-overlay-sidebar"> + <div class="wp-full-overlay-header"> + <a href="#" class="close-full-overlay"><?php _e( '← Close' ); ?></a> + </div> + <div class="wp-full-overlay-sidebar-content"> + <div class="install-theme-info"></div> + </div> + <div class="wp-full-overlay-footer"> + <a href="#" class="collapse-sidebar button-secondary" title="<?php esc_attr_e('Collapse Sidebar'); ?>"> + <span class="collapse-sidebar-label"><?php _e('Collapse'); ?></span> + <span class="collapse-sidebar-arrow"></span> + </a> + </div> + </div> + <div class="wp-full-overlay-main"></div> + </div> + <?php + } + + /* + * Prints the wrapper for the theme installer with a provided theme's data. + * Used to make the theme installer work for no-js. + * + * @param object $theme - A WordPress.org Theme API object. + */ + function theme_installer_single( $theme ) { + ?> + <div id="theme-installer" class="wp-full-overlay single-theme"> + <div class="wp-full-overlay-sidebar"> + <?php $this->install_theme_info( $theme ); ?> + </div> + <div class="wp-full-overlay-main"> + <iframe src="<?php echo esc_url( $theme->preview_url ); ?>"></iframe> + </div> + </div> + <?php + } + + /* + * Prints the info for a theme (to be used in the theme installer modal). + * + * @param object $theme - A WordPress.org Theme API object. + */ + function install_theme_info( $theme ) { + global $themes_allowedtags; + + if ( empty( $theme ) ) + return; + + $name = wp_kses( $theme->name, $themes_allowedtags ); + $author = wp_kses( $theme->author, $themes_allowedtags ); + + $num_ratings = sprintf( _n( '(based on %s rating)', '(based on %s ratings)', $theme->num_ratings ), number_format_i18n( $theme->num_ratings ) ); + + $install_url = add_query_arg( array( + 'action' => 'install-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $update_url = add_query_arg( array( + 'action' => 'upgrade-theme', + 'theme' => $theme->slug, + ), self_admin_url( 'update.php' ) ); + + $status = $this->_get_theme_status( $theme ); + + ?> + <div class="install-theme-info"><?php + switch ( $status ) { + default: + case 'install': + echo '<a class="theme-install button-primary" href="' . esc_url( wp_nonce_url( $install_url, 'install-theme_' . $theme->slug ) ) . '">' . __( 'Install' ) . '</a>'; + break; + case 'update_available': + echo '<a class="theme-install button-primary" href="' . esc_url( wp_nonce_url( $update_url, 'upgrade-theme_' . $theme->slug ) ) . '" title="' . esc_attr( sprintf( __( 'Update to version %s' ), $theme->version ) ) . '">' . __( 'Update' ) . '</a>'; + break; + case 'newer_installed': + case 'latest_installed': + echo '<span class="theme-install" title="' . esc_attr__( 'This theme is already installed and is up to date' ) . '">' . _x( 'Installed', 'theme' ) . '</span>'; + break; + } ?> + <h3 class="theme-name"><?php echo $name; ?></h3> + <span class="theme-by"><?php printf( __( 'By %s' ), $author ); ?></span> + <?php if ( isset( $theme->screenshot_url ) ): ?> + <img class="theme-screenshot" src="<?php echo esc_url( $theme->screenshot_url ); ?>" /> + <?php endif; ?> + <div class="theme-details"> + <div class="star-holder" title="<?php echo esc_attr( $num_ratings ); ?>"> + <div class="star-rating" style="width:<?php echo esc_attr( intval( $theme->rating ) . 'px' ); ?>;"></div> + </div> + <div class="theme-version"> + <strong><?php _e('Version:') ?> </strong> + <?php echo wp_kses( $theme->version, $themes_allowedtags ); ?> + </div> + <div class="theme-description"> + <?php echo wp_kses( $theme->description, $themes_allowedtags ); ?> + </div> + </div> + <input class="theme-preview-url" type="hidden" value="<?php echo esc_url( $theme->preview_url ); ?>" /> + </div> + <?php + } + + /** + * Send required variables to JavaScript land + * + * @since 3.4 + * @access private + * + * @uses $tab Global; current tab within Themes->Install screen + * @uses $type Global; type of search. + */ + function _js_vars() { + global $tab, $type; + parent::_js_vars( compact( 'tab', 'type' ) ); + } + + /** + * Check to see if the theme is already installed. + * + * @since 3.4 + * @access private + * + * @param object $theme - A WordPress.org Theme API object. + * @return string Theme status. + */ + private function _get_theme_status( $theme ) { + $status = 'install'; + + $installed_theme = wp_get_theme( $theme->slug ); + if ( $installed_theme->exists() ) { + if ( version_compare( $installed_theme->get('Version'), $theme->version, '=' ) ) + $status = 'latest_installed'; + elseif ( version_compare( $installed_theme->get('Version'), $theme->version, '>' ) ) + $status = 'newer_installed'; + else + $status = 'update_available'; + } + + return $status; + } +} diff --git a/wp-admin/includes/class-wp-themes-list-table.php b/wp-admin/includes/class-wp-themes-list-table.php index 4839b504e..003d1ab03 100644 --- a/wp-admin/includes/class-wp-themes-list-table.php +++ b/wp-admin/includes/class-wp-themes-list-table.php @@ -9,59 +9,55 @@ */ class WP_Themes_List_Table extends WP_List_Table { - var $search = array(); + protected $search_terms = array(); var $features = array(); + function __construct() { + parent::__construct( array( + 'ajax' => true, + ) ); + } + function ajax_user_can() { // Do not check edit_theme_options here. AJAX calls for available themes require switch_themes. - return current_user_can('switch_themes'); + return current_user_can( 'switch_themes' ); } function prepare_items() { - global $ct; - - $ct = current_theme_info(); - - $themes = get_allowed_themes(); + $themes = wp_get_themes( array( 'allowed' => true ) ); - if ( ! empty( $_REQUEST['s'] ) ) { - $search = strtolower( stripslashes( $_REQUEST['s'] ) ); - $this->search = array_merge( $this->search, array_filter( array_map( 'trim', explode( ',', $search ) ) ) ); - $this->search = array_unique( $this->search ); - } + if ( ! empty( $_REQUEST['s'] ) ) + $this->search_terms = array_unique( array_filter( array_map( 'trim', explode( ',', strtolower( stripslashes( $_REQUEST['s'] ) ) ) ) ) ); - if ( !empty( $_REQUEST['features'] ) ) { + if ( ! empty( $_REQUEST['features'] ) ) $this->features = $_REQUEST['features']; - $this->features = array_map( 'trim', $this->features ); - $this->features = array_map( 'sanitize_title_with_dashes', $this->features ); - $this->features = array_unique( $this->features ); - } - if ( $this->search || $this->features ) { + if ( $this->search_terms || $this->features ) { foreach ( $themes as $key => $theme ) { - if ( !$this->search_theme( $theme ) ) + if ( ! $this->search_theme( $theme ) ) unset( $themes[ $key ] ); } } - unset( $themes[$ct->name] ); - uksort( $themes, "strnatcasecmp" ); + unset( $themes[ get_option( 'stylesheet' ) ] ); + WP_Theme::sort_by_name( $themes ); - $per_page = 24; + $per_page = 999; $page = $this->get_pagenum(); $start = ( $page - 1 ) * $per_page; - $this->items = array_slice( $themes, $start, $per_page ); + $this->items = array_slice( $themes, $start, $per_page, true ); $this->set_pagination_args( array( 'total_items' => count( $themes ), 'per_page' => $per_page, + 'infinite_scroll' => true, ) ); } function no_items() { - if ( $this->search || $this->features ) { + if ( $this->search_terms || $this->features ) { _e( 'No items found.' ); return; } @@ -101,7 +97,7 @@ class WP_Themes_List_Table extends WP_List_Table { } function display() { - // wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); ?> <?php $this->tablenav( 'top' ); ?> @@ -119,104 +115,142 @@ class WP_Themes_List_Table extends WP_List_Table { function display_rows() { $themes = $this->items; - $theme_names = array_keys( $themes ); - natcasesort( $theme_names ); - - foreach ( $theme_names as $theme_name ) { - $class = array( 'available-theme' ); - ?> - <div class="<?php echo join( ' ', $class ); ?>"> - <?php if ( !empty( $theme_name ) ) : - $template = $themes[$theme_name]['Template']; - $stylesheet = $themes[$theme_name]['Stylesheet']; - $title = $themes[$theme_name]['Title']; - $version = $themes[$theme_name]['Version']; - $description = $themes[$theme_name]['Description']; - $author = $themes[$theme_name]['Author']; - $screenshot = $themes[$theme_name]['Screenshot']; - $stylesheet_dir = $themes[$theme_name]['Stylesheet Dir']; - $template_dir = $themes[$theme_name]['Template Dir']; - $parent_theme = $themes[$theme_name]['Parent Theme']; - $theme_root = $themes[$theme_name]['Theme Root']; - $theme_root_uri = $themes[$theme_name]['Theme Root URI']; - $preview_link = esc_url( get_option( 'home' ) . '/' ); - if ( is_ssl() ) - $preview_link = str_replace( 'http://', 'https://', $preview_link ); - $preview_link = htmlspecialchars( add_query_arg( array( 'preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => true, 'TB_iframe' => 'true' ), $preview_link ) ); - $preview_text = esc_attr( sprintf( __( 'Preview of “%s”' ), $title ) ); - $tags = $themes[$theme_name]['Tags']; - $thickbox_class = 'thickbox thickbox-preview'; - $activate_link = wp_nonce_url( "themes.php?action=activate&template=".urlencode( $template )."&stylesheet=".urlencode( $stylesheet ), 'switch-theme_' . $template ); - $activate_text = esc_attr( sprintf( __( 'Activate “%s”' ), $title ) ); - $actions = array(); - $actions[] = '<a href="' . $activate_link . '" class="activatelink" title="' . $activate_text . '">' . __( 'Activate' ) . '</a>'; - $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="' . esc_attr( sprintf( __( 'Preview “%s”' ), $theme_name ) ) . '">' . __( 'Preview' ) . '</a>'; - if ( ! is_multisite() && current_user_can( 'delete_themes' ) ) - $actions[] = '<a class="submitdelete deletion" href="' . wp_nonce_url( "themes.php?action=delete&template=$stylesheet", 'delete-theme_' . $stylesheet ) . '" onclick="' . "return confirm( '" . esc_js( sprintf( __( "You are about to delete this theme '%s'\n 'Cancel' to stop, 'OK' to delete." ), $theme_name ) ) . "' );" . '">' . __( 'Delete' ) . '</a>'; - $actions = apply_filters( 'theme_action_links', $actions, $themes[$theme_name] ); - - $actions = implode ( ' | ', $actions ); -?> - <a href="<?php echo $preview_link; ?>" class="<?php echo $thickbox_class; ?> screenshot"> -<?php if ( $screenshot ) : ?> - <img src="<?php echo $theme_root_uri . '/' . $stylesheet . '/' . $screenshot; ?>" alt="" /> -<?php endif; ?> - </a> -<h3><?php - /* translators: 1: theme title, 2: theme version, 3: theme author */ - printf( __( '%1$s %2$s by %3$s' ), $title, $version, $author ) ; ?></h3> -<p class="description"><?php echo $description; ?></p> -<span class='action-links'><?php echo $actions ?></span> - <?php if ( current_user_can( 'edit_themes' ) && $parent_theme ) { - /* translators: 1: theme title, 2: template dir, 3: stylesheet_dir, 4: theme title, 5: parent_theme */ ?> - <p><?php printf( __( 'The template files are located in <code>%2$s</code>. The stylesheet files are located in <code>%3$s</code>. <strong>%4$s</strong> uses templates from <strong>%5$s</strong>. Changes made to the templates will affect both themes.' ), $title, str_replace( WP_CONTENT_DIR, '', $template_dir ), str_replace( WP_CONTENT_DIR, '', $stylesheet_dir ), $title, $parent_theme ); ?></p> -<?php } else { ?> - <p><?php printf( __( 'All of this theme’s files are located in <code>%2$s</code>.' ), $title, str_replace( WP_CONTENT_DIR, '', $template_dir ), str_replace( WP_CONTENT_DIR, '', $stylesheet_dir ) ); ?></p> -<?php } ?> -<?php if ( $tags ) : ?> -<p><?php _e( 'Tags:' ); ?> <?php echo join( ', ', $tags ); ?></p> -<?php endif; ?> - <?php theme_update_available( $themes[$theme_name] ); ?> -<?php endif; // end if not empty theme_name ?> - </div> -<?php } // end foreach $theme_names + + foreach ( $themes as $theme ): + ?><div class="available-theme"><?php + + $template = $theme->get_template(); + $stylesheet = $theme->get_stylesheet(); + $title = $theme->display('Name'); + $version = $theme->display('Version'); + $author = $theme->display('Author'); + + $activate_link = wp_nonce_url( "themes.php?action=activate&template=" . urlencode( $template ) . "&stylesheet=" . urlencode( $stylesheet ), 'switch-theme_' . $stylesheet ); + + $preview_link = esc_url( add_query_arg( + array( 'preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => true, 'TB_iframe' => 'true' ), + home_url( '/' ) ) ); + + $actions = array(); + $actions['activate'] = '<a href="' . $activate_link . '" class="activatelink" title="' + . esc_attr( sprintf( __( 'Activate “%s”' ), $title ) ) . '">' . __( 'Activate' ) . '</a>'; + + $actions['preview'] = '<a href="' . $preview_link . '" class="hide-if-customize" title="' + . esc_attr( sprintf( __( 'Preview “%s”' ), $title ) ) . '">' . __( 'Preview' ) . '</a>'; + + if ( current_user_can( 'edit_theme_options' ) ) + $actions['preview'] .= '<a href="' . wp_customize_url( $stylesheet ) . '" class="load-customize hide-if-no-customize">' + . __( 'Live Preview' ) . '</a>'; + + if ( ! is_multisite() && current_user_can( 'delete_themes' ) ) + $actions['delete'] = '<a class="submitdelete deletion" href="' . wp_nonce_url( "themes.php?action=delete&stylesheet=$stylesheet", 'delete-theme_' . $stylesheet ) + . '" onclick="' . "return confirm( '" . esc_js( sprintf( __( "You are about to delete this theme '%s'\n 'Cancel' to stop, 'OK' to delete." ), $title ) ) + . "' );" . '">' . __( 'Delete' ) . '</a>'; + + $actions = apply_filters( 'theme_action_links', $actions, $theme ); + $delete_action = isset( $actions['delete'] ) ? '<div class="delete-theme">' . $actions['delete'] . '</div>' : ''; + unset( $actions['delete'] ); + + ?> + + <a href="<?php echo $preview_link; ?>" class="screenshot hide-if-customize"> + <?php if ( $screenshot = $theme->get_screenshot() ) : ?> + <img src="<?php echo esc_url( $screenshot ); ?>" alt="" /> + <?php endif; ?> + </a> + <a href="<?php echo wp_customize_url( $stylesheet ); ?>" class="screenshot load-customize hide-if-no-customize"> + <?php if ( $screenshot = $theme->get_screenshot() ) : ?> + <img src="<?php echo esc_url( $screenshot ); ?>" alt="" /> + <?php endif; ?> + </a> + + <h3><?php echo $title; ?></h3> + <div class="theme-author"><?php printf( __( 'By %s' ), $author ); ?></div> + <div class="action-links"> + <ul> + <?php foreach ( $actions as $action ): ?> + <li><?php echo $action; ?></li> + <?php endforeach; ?> + <li class="hide-if-no-js"><a href="#" class="theme-detail" tabindex='4'><?php _e('Details') ?></a></li> + </ul> + <?php echo $delete_action; ?> + + <?php theme_update_available( $theme ); ?> + </div> + + <div class="themedetaildiv hide-if-js"> + <p><strong><?php _e('Version: '); ?></strong><?php echo $version; ?></p> + <p><?php echo $theme->display('Description'); ?></p> + <?php if ( current_user_can( 'edit_themes' ) && $theme->parent() ) : + /* translators: 1: theme title, 2: template dir, 3: stylesheet_dir, 4: theme title, 5: parent_theme */ ?> + <p><?php printf( __( 'The template files are located in <code>%2$s</code>. The stylesheet files are located in <code>%3$s</code>. <strong>%4$s</strong> uses templates from <strong>%5$s</strong>. Changes made to the templates will affect both themes.' ), + $title, str_replace( WP_CONTENT_DIR, '', $theme->get_template_directory() ), str_replace( WP_CONTENT_DIR, '', $theme->get_stylesheet_directory() ), $title, $theme->parent()->display('Name') ); ?></p> + <?php else : + /* translators: 1: theme title, 2: template dir, 3: stylesheet_dir */ ?> + <p><?php printf( __( 'All of this theme’s files are located in <code>%2$s</code>.' ), + $title, str_replace( WP_CONTENT_DIR, '', $theme->get_template_directory() ), str_replace( WP_CONTENT_DIR, '', $theme->get_stylesheet_directory() ) ); ?></p> + <?php endif; ?> + </div> + + </div> + <?php + endforeach; } function search_theme( $theme ) { - $matched = 0; + // Search the features + foreach ( $this->features as $word ) { + if ( ! in_array( $word, $theme->get('Tags') ) ) + return false; + } // Match all phrases - if ( count( $this->search ) > 0 ) { - foreach ( $this->search as $word ) { - $matched = 0; - - // In a tag? - if ( in_array( $word, array_map( 'sanitize_title_with_dashes', $theme['Tags'] ) ) ) - $matched = 1; - - // In one of the fields? - foreach ( array( 'Name', 'Title', 'Description', 'Author', 'Template', 'Stylesheet' ) AS $field ) { - if ( stripos( $theme[$field], $word ) !== false ) - $matched++; - } - - if ( $matched == 0 ) - return false; + foreach ( $this->search_terms as $word ) { + if ( in_array( $word, $theme->get('Tags') ) ) + continue; + + foreach ( array( 'Name', 'Description', 'Author', 'AuthorURI' ) as $header ) { + // Don't mark up; Do translate. + if ( false !== stripos( $theme->display( $header, false, true ), $word ) ) + continue 2; } - } - // Now search the features - if ( count( $this->features ) > 0 ) { - foreach ( $this->features as $word ) { - // In a tag? - if ( !in_array( $word, array_map( 'sanitize_title_with_dashes', $theme['Tags'] ) ) ) - return false; - } + if ( false !== stripos( $theme->get_stylesheet(), $word ) ) + continue; + + if ( false !== stripos( $theme->get_template(), $word ) ) + continue; + + return false; } - // Only get here if each word exists in the tags or one of the fields return true; } -} -?> + /** + * Send required variables to JavaScript land + * + * @since 3.4 + * @access private + * + * @uses $this->features Array of all feature search terms. + * @uses get_pagenum() + * @uses _pagination_args['total_pages'] + */ + function _js_vars( $extra_args = array() ) { + $search_string = isset( $_REQUEST['s'] ) ? esc_attr( stripslashes( $_REQUEST['s'] ) ) : ''; + + $args = array( + 'search' => $search_string, + 'features' => $this->features, + 'paged' => $this->get_pagenum(), + 'total_pages' => ! empty( $this->_pagination_args['total_pages'] ) ? $this->_pagination_args['total_pages'] : 1, + ); + + if ( is_array( $extra_args ) ) + $args = array_merge( $args, $extra_args ); + + printf( "<script type='text/javascript'>var theme_list_args = %s;</script>\n", json_encode( $args ) ); + parent::_js_vars(); + } +} diff --git a/wp-admin/includes/class-wp-upgrader.php b/wp-admin/includes/class-wp-upgrader.php index e61e0ef5e..c70ef66bb 100644 --- a/wp-admin/includes/class-wp-upgrader.php +++ b/wp-admin/includes/class-wp-upgrader.php @@ -374,7 +374,6 @@ class Plugin_Upgrader extends WP_Upgrader { $this->strings['no_package'] = __('Update package not available.'); $this->strings['downloading_package'] = __('Downloading update from <span class="code">%s</span>…'); $this->strings['unpack_package'] = __('Unpacking the update…'); - $this->strings['deactivate_plugin'] = __('Deactivating the plugin…'); $this->strings['remove_old'] = __('Removing the old version of the plugin…'); $this->strings['remove_old_failed'] = __('Could not remove the old plugin.'); $this->strings['process_failed'] = __('Plugin update failed.'); @@ -412,6 +411,7 @@ class Plugin_Upgrader extends WP_Upgrader { // Force refresh of plugin update information delete_site_transient('update_plugins'); + wp_cache_delete( 'plugins', 'plugins' ); return true; } @@ -456,6 +456,7 @@ class Plugin_Upgrader extends WP_Upgrader { // Force refresh of plugin update information delete_site_transient('update_plugins'); + wp_cache_delete( 'plugins', 'plugins' ); } function bulk_upgrade($plugins) { @@ -537,6 +538,7 @@ class Plugin_Upgrader extends WP_Upgrader { // Force refresh of plugin update information delete_site_transient('update_plugins'); + wp_cache_delete( 'plugins', 'plugins' ); return $results; } @@ -594,7 +596,6 @@ class Plugin_Upgrader extends WP_Upgrader { return new WP_Error('bad_request', $this->strings['bad_request']); if ( is_plugin_active($plugin) ) { - $this->skin->feedback('deactivate_plugin'); //Deactivate the plugin silently, Prevent deactivation hooks from running. deactivate_plugins($plugin, true); } @@ -662,6 +663,80 @@ class Theme_Upgrader extends WP_Upgrader { $this->strings['installing_package'] = __('Installing the theme…'); $this->strings['process_failed'] = __('Theme install failed.'); $this->strings['process_success'] = __('Theme installed successfully.'); + /* translators: 1: theme name, 2: version */ + $this->strings['process_success_specific'] = __('Successfully installed the theme <strong>%1$s %2$s</strong>.'); + $this->strings['parent_theme_search'] = __('This theme requires a parent theme. Checking if it is installed…'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_prepare_install'] = __('Preparing to install <strong>%1$s %2$s</strong>…'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_currently_installed'] = __('The parent theme, <strong>%1$s %2$s</strong>, is currently installed.'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_install_success'] = __('Successfully installed the parent theme, <strong>%1$s %2$s</strong>.'); + $this->strings['parent_theme_not_found'] = __('<strong>The parent theme could not be found.</strong> You will need to install the parent theme, <strong>%s</strong>, before you can use this child theme.'); + } + + function check_parent_theme_filter($install_result, $hook_extra, $child_result) { + // Check to see if we need to install a parent theme + $theme_info = $this->theme_info(); + + if ( ! $theme_info->parent() ) + return $install_result; + + $this->skin->feedback( 'parent_theme_search' ); + + if ( ! $theme_info->parent()->errors() ) { + $this->skin->feedback( 'parent_theme_currently_installed', $theme_info->parent()->display('Name'), $theme_info->parent()->display('Version') ); + // We already have the theme, fall through. + return $install_result; + } + + // We don't have the parent theme, lets install it + $api = themes_api('theme_information', array('slug' => $theme_info->get('Template'), 'fields' => array('sections' => false, 'tags' => false) ) ); //Save on a bit of bandwidth. + + if ( ! $api || is_wp_error($api) ) { + $this->skin->feedback( 'parent_theme_not_found', $theme_info->get('Template') ); + // Don't show activate or preview actions after install + add_filter('install_theme_complete_actions', array(&$this, 'hide_activate_preview_actions') ); + return $install_result; + } + + // Backup required data we're going to override: + $child_api = $this->skin->api; + $child_success_message = $this->strings['process_success']; + + // Override them + $this->skin->api = $api; + $this->strings['process_success_specific'] = $this->strings['parent_theme_install_success'];//, $api->name, $api->version); + + $this->skin->feedback('parent_theme_prepare_install', $api->name, $api->version); + + add_filter('install_theme_complete_actions', '__return_false', 999); // Don't show any actions after installing the theme. + + // Install the parent theme + $parent_result = $this->run( array( + 'package' => $api->download_link, + 'destination' => WP_CONTENT_DIR . '/themes', + 'clear_destination' => false, //Do not overwrite files. + 'clear_working' => true + ) ); + + if ( is_wp_error($parent_result) ) + add_filter('install_theme_complete_actions', array(&$this, 'hide_activate_preview_actions') ); + + // Start cleaning up after the parents installation + remove_filter('install_theme_complete_actions', '__return_false', 999); + + // Reset child's result and data + $this->result = $child_result; + $this->skin->api = $child_api; + $this->strings['process_success'] = $child_success_message; + + return $install_result; + } + + function hide_activate_preview_actions($actions) { + unset($actions['activate'], $actions['preview']); + return $actions; } function install($package) { @@ -670,6 +745,7 @@ class Theme_Upgrader extends WP_Upgrader { $this->install_strings(); add_filter('upgrader_source_selection', array(&$this, 'check_package') ); + add_filter('upgrader_post_install', array(&$this, 'check_parent_theme_filter'), 10, 3); $options = array( 'package' => $package, @@ -681,12 +757,16 @@ class Theme_Upgrader extends WP_Upgrader { $this->run($options); remove_filter('upgrader_source_selection', array(&$this, 'check_package') ); + remove_filter('upgrader_post_install', array(&$this, 'check_parent_theme_filter'), 10, 3); if ( ! $this->result || is_wp_error($this->result) ) return $this->result; // Force refresh of theme update information delete_site_transient('update_themes'); + search_theme_directories( true ); + foreach ( wp_get_themes() as $theme ) + $theme->cache_delete(); return true; } @@ -733,6 +813,9 @@ class Theme_Upgrader extends WP_Upgrader { // Force refresh of theme update information delete_site_transient('update_themes'); + search_theme_directories( true ); + foreach ( wp_get_themes() as $theme ) + $theme->cache_delete(); return true; } @@ -820,6 +903,9 @@ class Theme_Upgrader extends WP_Upgrader { // Force refresh of theme update information delete_site_transient('update_themes'); + search_theme_directories( true ); + foreach ( wp_get_themes() as $theme ) + $theme->cache_delete(); return $results; } @@ -835,14 +921,17 @@ class Theme_Upgrader extends WP_Upgrader { if ( ! is_dir($working_directory) ) // Sanity check, if the above fails, lets not prevent installation. return $source; - if ( ! file_exists( $working_directory . 'style.css' ) ) // A proper archive should have a style.css file in the single subdirectory + // A proper archive should have a style.css file in the single subdirectory + if ( ! file_exists( $working_directory . 'style.css' ) ) return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], __('The theme is missing the <code>style.css</code> stylesheet.') ); - $info = get_theme_data( $working_directory . 'style.css' ); - if ( empty($info['Name']) ) + $info = get_file_data( $working_directory . 'style.css', array( 'Name' => 'Theme Name', 'Template' => 'Template' ) ); + + if ( empty( $info['Name'] ) ) return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], __("The <code>style.css</code> stylesheet doesn't contain a valid theme header.") ); - if ( empty($info['Template']) && ! file_exists( $working_directory . 'index.php' ) ) // If no template is set, it must have at least an index.php to be legit. + // If it's not a child theme, it must have at least an index.php to be legit. + if ( empty( $info['Template'] ) && ! file_exists( $working_directory . 'index.php' ) ) return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], __('The theme is missing the <code>index.php</code> file.') ); return $source; @@ -870,15 +959,15 @@ class Theme_Upgrader extends WP_Upgrader { $theme = isset($theme['theme']) ? $theme['theme'] : ''; - if ( $theme != get_stylesheet() ) //If not current + if ( $theme != get_stylesheet() ) // If not current return $return; - //Ensure stylesheet name hasnt changed after the upgrade: + // Ensure stylesheet name hasnt changed after the upgrade: // @TODO: Note, This doesn't handle the Template changing, or the Template name changing. if ( $theme == get_stylesheet() && $theme != $this->result['destination_name'] ) { $theme_info = $this->theme_info(); $stylesheet = $this->result['destination_name']; - $template = !empty($theme_info['Template']) ? $theme_info['Template'] : $stylesheet; + $template = $theme_info->get_template(); switch_theme($template, $stylesheet, true); } @@ -911,7 +1000,7 @@ class Theme_Upgrader extends WP_Upgrader { else return false; } - return get_theme_data(WP_CONTENT_DIR . '/themes/' . $theme . '/style.css'); + return wp_get_theme( $theme, WP_CONTENT_DIR . '/themes/' ); } } @@ -933,6 +1022,7 @@ class Core_Upgrader extends WP_Upgrader { $this->strings['downloading_package'] = __('Downloading update from <span class="code">%s</span>…'); $this->strings['unpack_package'] = __('Unpacking the update…'); $this->strings['copy_failed'] = __('Could not copy files.'); + $this->strings['copy_failed_space'] = __('Could not copy files. You may have run out of disk space.' ); } function upgrade($current) { @@ -985,6 +1075,9 @@ class Core_Upgrader extends WP_Upgrader { require(ABSPATH . 'wp-admin/includes/update-core.php'); + if ( ! function_exists( 'update_core' ) ) + return new WP_Error( 'copy_failed_space', $this->strings['copy_failed_space'] ); + return update_core($working_dir, $wp_dir); } @@ -1106,7 +1199,6 @@ class Plugin_Upgrader_Skin extends WP_Upgrader_Skin { function after() { $this->plugin = $this->upgrader->plugin_info(); if ( !empty($this->plugin) && !is_wp_error($this->result) && $this->plugin_active ){ - show_message(__('Reactivating the plugin…')); echo '<iframe style="border:0;overflow:hidden" width="100%" height="170px" src="' . wp_nonce_url('update.php?action=activate-plugin&networkwide=' . $this->plugin_network_active . '&plugin=' . $this->plugin, 'activate-plugin_' . $this->plugin) .'"></iframe>'; } @@ -1290,12 +1382,13 @@ class Bulk_Theme_Upgrader_Skin extends Bulk_Upgrader_Skin { } function before() { - parent::before($this->theme_info['Name']); + parent::before( $this->theme_info->display('Name') ); } function after() { - parent::after($this->theme_info['Name']); + parent::after( $this->theme_info->display('Name') ); } + function bulk_footer() { parent::bulk_footer(); $update_actions = array( @@ -1303,7 +1396,7 @@ class Bulk_Theme_Upgrader_Skin extends Bulk_Upgrader_Skin { 'updates_page' => '<a href="' . self_admin_url('update-core.php') . '" title="' . esc_attr__('Go to WordPress Updates page') . '" target="_parent">' . __('Return to WordPress Updates') . '</a>' ); - $update_actions = apply_filters('update_bulk_theme_complete_actions', $update_actions, $this->theme_info); + $update_actions = apply_filters('update_bulk_theme_complete_actions', $update_actions, $this->theme_info ); if ( ! empty($update_actions) ) $this->feedback(implode(' | ', (array)$update_actions)); } @@ -1362,7 +1455,6 @@ class Plugin_Installer_Skin extends WP_Upgrader_Skin { else $install_actions['plugins_page'] = '<a href="' . self_admin_url('plugins.php') . '" title="' . esc_attr__('Return to Plugins page') . '" target="_parent">' . __('Return to Plugins page') . '</a>'; - if ( ! $this->result || is_wp_error($this->result) ) { unset( $install_actions['activate_plugin'] ); unset( $install_actions['network_activate'] ); @@ -1397,10 +1489,8 @@ class Theme_Installer_Skin extends WP_Upgrader_Skin { } function before() { - if ( !empty($this->api) ) { - /* translators: 1: theme name, 2: version */ - $this->upgrader->strings['process_success'] = sprintf( __('Successfully installed the theme <strong>%1$s %2$s</strong>.'), $this->api->name, $this->api->version); - } + if ( !empty($this->api) ) + $this->upgrader->strings['process_success'] = sprintf( $this->upgrader->strings['process_success_specific'], $this->api->name, $this->api->version); } function after() { @@ -1408,22 +1498,33 @@ class Theme_Installer_Skin extends WP_Upgrader_Skin { return; $theme_info = $this->upgrader->theme_info(); - if ( empty($theme_info) ) + if ( empty( $theme_info ) ) return; - $name = $theme_info['Name']; + + $name = $theme_info->display('Name'); $stylesheet = $this->upgrader->result['destination_name']; - $template = !empty($theme_info['Template']) ? $theme_info['Template'] : $stylesheet; + $template = $theme_info->get_template(); - $preview_link = htmlspecialchars( add_query_arg( array('preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => 1, 'TB_iframe' => 'true' ), trailingslashit(esc_url(get_option('home'))) ) ); - $activate_link = wp_nonce_url("themes.php?action=activate&template=" . urlencode($template) . "&stylesheet=" . urlencode($stylesheet), 'switch-theme_' . $template); + $preview_link = add_query_arg( array( + 'preview' => 1, + 'template' => $template, + 'stylesheet' => $stylesheet, + ), trailingslashit( get_home_url() ) ); - $install_actions = array( - 'preview' => '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="' . esc_attr(sprintf(__('Preview “%s”'), $name)) . '">' . __('Preview') . '</a>', - 'activate' => '<a href="' . $activate_link . '" class="activatelink" title="' . esc_attr( sprintf( __('Activate “%s”'), $name ) ) . '">' . __('Activate') . '</a>' - ); + $activate_link = add_query_arg( array( + 'action' => 'activate', + 'template' => $template, + 'stylesheet' => $stylesheet, + ), admin_url('themes.php') ); + $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $stylesheet ); + + $install_actions = array(); + $install_actions['preview'] = '<a href="' . esc_url( $preview_link ) . '" class="hide-if-customize" title="' . esc_attr( sprintf( __('Preview “%s”'), $name ) ) . '">' . __('Preview') . '</a>'; + $install_actions['preview'] .= '<a href="' . wp_customize_url( $stylesheet ) . '" class="hide-if-no-customize load-customize" title="' . esc_attr( sprintf( __('Preview “%s”'), $name ) ) . '">' . __('Live Preview') . '</a>'; + $install_actions['activate'] = '<a href="' . esc_url( $activate_link ) . '" class="activatelink" title="' . esc_attr( sprintf( __('Activate “%s”'), $name ) ) . '">' . __('Activate') . '</a>'; if ( is_network_admin() && current_user_can( 'manage_network_themes' ) ) - $install_actions['network_enable'] = '<a href="' . esc_url( wp_nonce_url( 'themes.php?action=enable&theme=' . $template, 'enable-theme_' . $template ) ) . '" title="' . esc_attr__( 'Enable this theme for all sites in this network' ) . '" target="_parent">' . __( 'Network Enable' ) . '</a>'; + $install_actions['network_enable'] = '<a href="' . esc_url( wp_nonce_url( 'themes.php?action=enable&theme=' . $stylesheet, 'enable-theme_' . $stylesheet ) ) . '" title="' . esc_attr__( 'Enable this theme for all sites in this network' ) . '" target="_parent">' . __( 'Network Enable' ) . '</a>'; if ( $this->type == 'web' ) $install_actions['themes_page'] = '<a href="' . self_admin_url('theme-install.php') . '" title="' . esc_attr__('Return to Theme Installer') . '" target="_parent">' . __('Return to Theme Installer') . '</a>'; @@ -1463,22 +1564,34 @@ class Theme_Upgrader_Skin extends WP_Upgrader_Skin { function after() { $update_actions = array(); - if ( !empty($this->upgrader->result['destination_name']) && - ($theme_info = $this->upgrader->theme_info()) && - !empty($theme_info) ) { - - $name = $theme_info['Name']; + if ( ! empty( $this->upgrader->result['destination_name'] ) && $theme_info = $this->upgrader->theme_info() ) { + $name = $theme_info->display('Name'); $stylesheet = $this->upgrader->result['destination_name']; - $template = !empty($theme_info['Template']) ? $theme_info['Template'] : $stylesheet; - - $preview_link = htmlspecialchars( add_query_arg( array('preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'TB_iframe' => 'true' ), trailingslashit(esc_url(get_option('home'))) ) ); - $activate_link = wp_nonce_url("themes.php?action=activate&template=" . urlencode($template) . "&stylesheet=" . urlencode($stylesheet), 'switch-theme_' . $template); - - $update_actions['preview'] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="' . esc_attr(sprintf(__('Preview “%s”'), $name)) . '">' . __('Preview') . '</a>'; - $update_actions['activate'] = '<a href="' . $activate_link . '" class="activatelink" title="' . esc_attr( sprintf( __('Activate “%s”'), $name ) ) . '">' . __('Activate') . '</a>'; + $template = $theme_info->get_template(); + + $preview_link = add_query_arg( array( + 'preview' => 1, + 'template' => $template, + 'stylesheet' => $stylesheet, + ), trailingslashit( get_home_url() ) ); + + $activate_link = add_query_arg( array( + 'action' => 'activate', + 'template' => $template, + 'stylesheet' => $stylesheet, + ), admin_url('themes.php') ); + $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $stylesheet ); + + if ( get_stylesheet() == $stylesheet ) { + $update_actions['preview'] = '<a href="' . wp_customize_url( $stylesheet ) . '" class="hide-if-no-customize load-customize" title="' . esc_attr( sprintf( __('Customize “%s”'), $name ) ) . '">' . __('Customize') . '</a>'; + } else { + $update_actions['preview'] = '<a href="' . esc_url( $preview_link ) . '" class="hide-if-customize" title="' . esc_attr( sprintf( __('Preview “%s”'), $name ) ) . '">' . __('Preview') . '</a>'; + $update_actions['preview'] .= '<a href="' . wp_customize_url( $stylesheet ) . '" class="hide-if-no-customize load-customize" title="' . esc_attr( sprintf( __('Preview “%s”'), $name ) ) . '">' . __('Live Preview') . '</a>'; + $update_actions['activate'] = '<a href="' . esc_url( $activate_link ) . '" class="activatelink" title="' . esc_attr( sprintf( __('Activate “%s”'), $name ) ) . '">' . __('Activate') . '</a>'; + } - if ( ( ! $this->result || is_wp_error($this->result) ) || $stylesheet == get_stylesheet() ) - unset($update_actions['preview'], $update_actions['activate']); + if ( ! $this->result || is_wp_error( $this->result ) || is_network_admin() ) + unset( $update_actions['preview'], $update_actions['activate'] ); } $update_actions['themes_page'] = '<a href="' . self_admin_url('themes.php') . '" title="' . esc_attr__('Return to Themes page') . '" target="_parent">' . __('Return to Themes page') . '</a>'; @@ -1563,4 +1676,4 @@ class File_Upload_Upgrader { return true; } -} +} \ No newline at end of file diff --git a/wp-admin/includes/class-wp-users-list-table.php b/wp-admin/includes/class-wp-users-list-table.php index 09cb2156c..adb832147 100644 --- a/wp-admin/includes/class-wp-users-list-table.php +++ b/wp-admin/includes/class-wp-users-list-table.php @@ -209,9 +209,9 @@ class WP_Users_List_Table extends WP_List_Table { * @since 2.1.0 * * @param object $user_object - * @param string $style Optional. Attributes added to the TR element. Must be sanitized. + * @param string $style Optional. Attributes added to the TR element. Must be sanitized. * @param string $role Key for the $wp_roles array. - * @param int $numposts Optional. Post count to display for this user. Defaults to zero, as in, a new user has made zero posts. + * @param int $numposts Optional. Post count to display for this user. Defaults to zero, as in, a new user has made zero posts. * @return string */ function single_row( $user_object, $style = '', $role = '', $numposts = 0 ) { @@ -316,5 +316,3 @@ class WP_Users_List_Table extends WP_List_Table { return $r; } } - -?> diff --git a/wp-admin/includes/comment.php b/wp-admin/includes/comment.php index d731130a5..845891157 100644 --- a/wp-admin/includes/comment.php +++ b/wp-admin/includes/comment.php @@ -156,4 +156,3 @@ function enqueue_comment_hotkeys_js() { if ( 'true' == get_user_option( 'comment_shortcuts' ) ) wp_enqueue_script( 'jquery-table-hotkeys' ); } -?> diff --git a/wp-admin/includes/dashboard.php b/wp-admin/includes/dashboard.php index 008a4fddb..6e7d5f0d0 100644 --- a/wp-admin/includes/dashboard.php +++ b/wp-admin/includes/dashboard.php @@ -86,8 +86,8 @@ function wp_dashboard_setup() { if ( !isset( $widget_options['dashboard_primary'] ) ) { $update = true; $widget_options['dashboard_primary'] = array( - 'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ), - 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ), + 'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ), + 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ), 'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Blog' ) ), 'items' => 2, 'show_summary' => 1, @@ -101,8 +101,8 @@ function wp_dashboard_setup() { if ( !isset( $widget_options['dashboard_secondary'] ) ) { $update = true; $widget_options['dashboard_secondary'] = array( - 'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ), - 'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ), + 'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ), + 'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ), 'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ), 'items' => 5, 'show_summary' => 0, @@ -193,54 +193,29 @@ function _wp_dashboard_control_callback( $dashboard, $meta_box ) { * @since 2.5.0 */ function wp_dashboard() { - global $screen_layout_columns; - $screen = get_current_screen(); + $class = 'columns-' . get_current_screen()->get_columns(); - $hide2 = $hide3 = $hide4 = ''; - switch ( $screen_layout_columns ) { - case 4: - $width = 'width:25%;'; - break; - case 3: - $width = 'width:33.333333%;'; - $hide4 = 'display:none;'; - break; - case 2: - $width = 'width:50%;'; - $hide3 = $hide4 = 'display:none;'; - break; - default: - $width = 'width:100%;'; - $hide2 = $hide3 = $hide4 = 'display:none;'; - } -?> -<div id="dashboard-widgets" class="metabox-holder"> -<?php - echo "\t<div id='postbox-container-1' class='postbox-container' style='$width'>\n"; - do_meta_boxes( $screen->id, 'normal', '' ); - - echo "\t</div><div id='postbox-container-2' class='postbox-container' style='{$hide2}$width'>\n"; - do_meta_boxes( $screen->id, 'side', '' ); - - echo "\t</div><div id='postbox-container-3' class='postbox-container' style='{$hide3}$width'>\n"; - do_meta_boxes( $screen->id, 'column3', '' ); - - echo "\t</div><div id='postbox-container-4' class='postbox-container' style='{$hide4}$width'>\n"; - do_meta_boxes( $screen->id, 'column4', '' ); ?> -</div></div> +<div id="dashboard-widgets" class="metabox-holder <?php echo $class; ?>"> + <div id='postbox-container-1' class='postbox-container'> + <?php do_meta_boxes( $screen->id, 'normal', '' ); ?> + </div> + <div id='postbox-container-2' class='postbox-container'> + <?php do_meta_boxes( $screen->id, 'side', '' ); ?> + </div> + <div id='postbox-container-3' class='postbox-container'> + <?php do_meta_boxes( $screen->id, 'column3', '' ); ?> + </div> + <div id='postbox-container-4' class='postbox-container'> + <?php do_meta_boxes( $screen->id, 'column4', '' ); ?> + </div> +</div> -<form style="display:none" method="get" action=""> - <p> <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); -?> - </p> -</form> -<?php } /* Dashboard Widgets */ @@ -273,7 +248,7 @@ function wp_dashboard_right_now() { echo '</tr><tr>'; /* TODO: Show status breakdown on hover - if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds. Don't show if !current_user_can + if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds. Don't show if !current_user_can $post_type_texts[] = '<a href="edit-pages.php">'.sprintf( _n( '%s page', '%s pages', $num_pages->publish ), number_format_i18n( $num_pages->publish ) ).'</a>'; } if ( $can_edit_posts && !empty($num_posts->draft) ) { @@ -327,7 +302,6 @@ function wp_dashboard_right_now() { do_action('right_now_content_table_end'); echo "\n\t</table>\n\t</div>"; - echo "\n\t".'<div class="table table_discussion">'; echo "\n\t".'<p class="sub">' . __('Discussion') . '</p>'."\n\t".'<table>'; echo "\n\t".'<tr class="first">'; @@ -384,11 +358,11 @@ function wp_dashboard_right_now() { echo "\n\t</table>\n\t</div>"; echo "\n\t".'<div class="versions">'; - $ct = current_theme_info(); + $theme = wp_get_theme(); echo "\n\t<p>"; - if ( empty( $ct->stylesheet_dir ) ) { + if ( $theme->errors() ) { if ( ! is_multisite() || is_super_admin() ) echo '<span class="error-message">' . __('ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.') . '</span>'; } elseif ( ! empty($wp_registered_sidebars) ) { @@ -402,7 +376,7 @@ function wp_dashboard_right_now() { } $num = number_format_i18n( $num_widgets ); - $switch_themes = $ct->title; + $switch_themes = $theme->display('Name'); if ( current_user_can( 'switch_themes') ) $switch_themes = '<a href="themes.php">' . $switch_themes . '</a>'; if ( current_user_can( 'edit_theme_options' ) ) { @@ -412,9 +386,9 @@ function wp_dashboard_right_now() { } } else { if ( current_user_can( 'switch_themes' ) ) - printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $ct->title ); + printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $theme->display('Name') ); else - printf( __('Theme <span class="b">%1$s</span>'), $ct->title ); + printf( __('Theme <span class="b">%1$s</span>'), $theme->display('Name') ); } echo '</p>'; @@ -462,16 +436,16 @@ function wp_network_dashboard_right_now() { <p class="youhave"><?php echo $sentence; ?></p> <?php do_action( 'wpmuadminresult', '' ); ?> - <form name="searchform" action="<?php echo network_admin_url('users.php'); ?>" method="get"> + <form action="<?php echo network_admin_url('users.php'); ?>" method="get"> <p> - <input type="text" name="s" value="" size="17" /> + <input type="search" name="s" value="" size="30" autocomplete="off" /> <?php submit_button( __( 'Search Users' ), 'button', 'submit', false, array( 'id' => 'submit_users' ) ); ?> </p> </form> - <form name="searchform" action="<?php echo network_admin_url('sites.php'); ?>" method="get"> + <form action="<?php echo network_admin_url('sites.php'); ?>" method="get"> <p> - <input type="text" name="s" value="" size="17" /> + <input type="search" name="s" value="" size="30" autocomplete="off" /> <?php submit_button( __( 'Search Sites' ), 'button', 'submit', false, array( 'id' => 'submit_sites' ) ); ?> </p> </form> @@ -615,11 +589,6 @@ function wp_dashboard_recent_drafts( $drafts = false ) { function wp_dashboard_recent_comments() { global $wpdb; - if ( current_user_can('edit_posts') ) - $allowed_states = array('0', '1'); - else - $allowed_states = array('1'); - // Select all comment types and filter out spam later for better query performance. $comments = array(); $start = 0; @@ -628,44 +597,36 @@ function wp_dashboard_recent_comments() { $total_items = isset( $widgets['dashboard_recent_comments'] ) && isset( $widgets['dashboard_recent_comments']['items'] ) ? absint( $widgets['dashboard_recent_comments']['items'] ) : 5; - while ( count( $comments ) < $total_items && $possible = $wpdb->get_results( "SELECT * FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' ORDER BY c.comment_date_gmt DESC LIMIT $start, 50" ) ) { + $comments_query = array( 'number' => $total_items * 5, 'offset' => 0 ); + if ( ! current_user_can( 'edit_posts' ) ) + $comments_query['status'] = 'approve'; + while ( count( $comments ) < $total_items && $possible = get_comments( $comments_query ) ) { foreach ( $possible as $comment ) { - if ( count( $comments ) >= $total_items ) - break; - if ( in_array( $comment->comment_approved, $allowed_states ) && current_user_can( 'read_post', $comment->comment_post_ID ) ) - $comments[] = $comment; + if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) ) + continue; + $comments[] = $comment; + if ( count( $comments ) == $total_items ) + break 2; } - - $start = $start + 50; + $comments_query['offset'] += $comments_query['number']; + $comments_query['number'] = $total_items * 10; } - if ( $comments ) : -?> - - <div id="the-comment-list" class="list:comment"> -<?php + if ( $comments ) { + echo '<div id="the-comment-list" class="list:comment">'; foreach ( $comments as $comment ) _wp_dashboard_recent_comments_row( $comment ); -?> + echo '</div>'; - </div> - -<?php - if ( current_user_can('edit_posts') ) { ?> - <?php _get_list_table('WP_Comments_List_Table')->views(); ?> -<?php } + if ( current_user_can('edit_posts') ) + _get_list_table('WP_Comments_List_Table')->views(); wp_comment_reply( -1, false, 'dashboard', false ); wp_comment_trashnotice(); - - else : -?> - - <p><?php _e( 'No comments yet.' ); ?></p> - -<?php - endif; // $comments; + } else { + echo '<p>' . __( 'No comments yet.' ) . '</p>'; + } } function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { @@ -700,7 +661,7 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { $actions['unapprove'] = "<a href='$unapprove_url' class='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved vim-u' title='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>'; $actions['edit'] = "<a href='comment.php?action=editcomment&c={$comment->comment_ID}' title='" . esc_attr__('Edit comment') . "'>". __('Edit') . '</a>'; $actions['reply'] = '<a onclick="commentReply.open(\''.$comment->comment_ID.'\',\''.$comment->comment_post_ID.'\');return false;" class="vim-r hide-if-no-js" title="'.esc_attr__('Reply to this comment').'" href="#">' . __('Reply') . '</a>'; - $actions['spam'] = "<a href='$spam_url' class='delete:the-comment-list:comment-$comment->comment_ID::spam=1 vim-s vim-destructive' title='" . esc_attr__( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>'; + $actions['spam'] = "<a href='$spam_url' class='delete:the-comment-list:comment-$comment->comment_ID::spam=1 vim-s vim-destructive' title='" . esc_attr__( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>'; if ( !EMPTY_TRASH_DAYS ) $actions['delete'] = "<a href='$delete_url' class='delete:the-comment-list:comment-$comment->comment_ID::trash=1 delete vim-d vim-destructive'>" . __('Delete Permanently') . '</a>'; else @@ -937,8 +898,7 @@ function wp_dashboard_secondary_output() { function wp_dashboard_plugins() { wp_dashboard_cached_rss_widget( 'dashboard_plugins', 'wp_dashboard_plugins_output', array( 'http://wordpress.org/extend/plugins/rss/browse/popular/', - 'http://wordpress.org/extend/plugins/rss/browse/new/', - 'http://wordpress.org/extend/plugins/rss/browse/updated/' + 'http://wordpress.org/extend/plugins/rss/browse/new/' ) ); } @@ -950,14 +910,13 @@ function wp_dashboard_plugins() { function wp_dashboard_plugins_output() { $popular = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/popular/' ); $new = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/new/' ); - $updated = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/updated/' ); if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) { $plugin_slugs = array_keys( get_plugins() ); set_transient( 'plugin_slugs', $plugin_slugs, 86400 ); } - foreach ( array( 'popular' => __('Most Popular'), 'new' => __('Newest Plugins'), 'updated' => __('Recently Updated') ) as $feed => $label ) { + foreach ( array( 'popular' => __('Most Popular'), 'new' => __('Newest Plugins') ) as $feed => $label ) { if ( is_wp_error($$feed) || !$$feed->get_item_quantity() ) continue; @@ -1115,7 +1074,7 @@ function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) { $_POST['widget-rss'][$number] = stripslashes_deep( $_POST['widget-rss'][$number] ); $widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] ); - // title is optional. If black, fill it if possible + // title is optional. If black, fill it if possible if ( !$widget_options[$widget_id]['title'] && isset($_POST['widget-rss'][$number]['title']) ) { $rss = fetch_feed($widget_options[$widget_id]['url']); if ( is_wp_error($rss) ) { @@ -1193,7 +1152,13 @@ function wp_dashboard_browser_nag() { $browser_nag_class = ' has-browser-icon'; } $notice .= "<p class='browser-update-nag{$browser_nag_class}'>{$msg}</p>"; - $notice .= '<p>' . sprintf( __( '<a href="%1$s" class="update-browser-link">Update %2$s</a> or learn how to <a href="%3$s" class="browse-happy-link">browse happy</a>' ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ), 'http://browsehappy.com/' ) . '</p>'; + + $browsehappy = 'http://browsehappy.com/'; + $locale = get_locale(); + if ( 'en_US' !== $locale ) + $browsehappy = add_query_arg( 'locale', $locale, $browsehappy ); + + $notice .= '<p>' . sprintf( __( '<a href="%1$s" class="update-browser-link">Update %2$s</a> or learn how to <a href="%3$s" class="browse-happy-link">browse happy</a>' ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ), esc_url( $browsehappy ) ) . '</p>'; $notice .= '<p class="hide-if-no-js"><a href="" class="dismiss">' . __( 'Dismiss' ) . '</a></p>'; $notice .= '<div class="clear"></div>'; } @@ -1228,7 +1193,7 @@ function wp_check_browser_version() { $options = array( 'body' => array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ), - 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) + 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() ); $response = wp_remote_post( 'http://api.wordpress.org/core/browse-happy/1.0/', $options ); @@ -1247,9 +1212,9 @@ function wp_check_browser_version() { * 'img_src' - string - An image representing the browser * 'img_src_ssl' - string - An image (over SSL) representing the browser */ - $response = unserialize( wp_remote_retrieve_body( $response ) ); + $response = maybe_unserialize( wp_remote_retrieve_body( $response ) ); - if ( ! $response ) + if ( ! is_array( $response ) ) return false; set_site_transient( 'browser_' . $key, $response, 604800 ); // cache for 1 week @@ -1266,7 +1231,7 @@ function wp_dashboard_empty() {} /** * Displays a welcome panel to introduce users to WordPress. * - * @since 3.3 + * @since 3.3.0 */ function wp_welcome_panel() { global $wp_version; @@ -1290,7 +1255,7 @@ function wp_welcome_panel() { <div class="wp-badge"><?php printf( __( 'Version %s' ), $display_version ); ?></div> <div class="welcome-panel-content"> - <h3><?php _e( 'Welcome to your new WordPress site! ' ); ?></h3> + <h3><?php _e( 'Welcome to your new WordPress site!' ); ?></h3> <p class="about-description"><?php _e( 'If you need help getting started, check out our documentation on <a href="http://codex.wordpress.org/First_Steps_With_WordPress">First Steps with WordPress</a>. If you’d rather dive right in, here are a few things most people do first when they set up a new WordPress site. If you need help, use the Help tabs in the upper right corner to get information on how to use your current screen and where to go for more assistance.' ); ?></p> <div class="welcome-panel-column-container"> <div class="welcome-panel-column"> @@ -1316,14 +1281,14 @@ function wp_welcome_panel() { <div class="welcome-panel-column welcome-panel-last"> <h4><span class="icon16 icon-appearance"></span> <?php _e( 'Customize Your Site' ); ?></h4> <?php - $ct = current_theme_info(); - if ( empty ( $ct->stylesheet_dir ) ) : + $theme = wp_get_theme(); + if ( $theme->errors() ) : echo '<p>'; printf( __( '<a href="%s">Install a theme</a> to get started customizing your site.' ), esc_url( admin_url( 'themes.php' ) ) ); echo '</p>'; else: $customize_links = array(); - if ( 'twentyeleven' == $ct->stylesheet ) + if ( 'twentyeleven' == $theme->get_stylesheet() ) $customize_links[] = sprintf( __( '<a href="%s">Choose light or dark</a>' ), esc_url( admin_url( 'themes.php?page=theme_options' ) ) ); if ( current_theme_supports( 'custom-background' ) ) @@ -1337,7 +1302,7 @@ function wp_welcome_panel() { if ( ! empty( $customize_links ) ) { echo '<p>'; - printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>. If you stick with %3$s, here are a few ways to make your site look unique.' ), $ct->title, esc_url( admin_url( 'themes.php' ) ), $ct->title ); + printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>. If you stick with %1$s, here are a few ways to make your site look unique.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) ); echo '</p>'; ?> <ul> @@ -1348,7 +1313,7 @@ function wp_welcome_panel() { <?php } else { echo '<p>'; - printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>.' ), $ct->title, esc_url( admin_url( 'themes.php' ) ) ); + printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) ); echo '</p>'; } endif; ?> @@ -1359,5 +1324,3 @@ function wp_welcome_panel() { </div> <?php } - -?> diff --git a/wp-admin/includes/deprecated.php b/wp-admin/includes/deprecated.php index f38bafc76..747b228d5 100644 --- a/wp-admin/includes/deprecated.php +++ b/wp-admin/includes/deprecated.php @@ -133,7 +133,7 @@ function wp_dropdown_cats( $currentcat = 0, $currentparent = 0, $parent = 0, $le * @deprecated Use register_setting() * @see register_setting() * - * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. + * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. * Default whitelisted option key names include "general," "discussion," and "reading," among others. * @param string $option_name The name of an option to sanitize and save. * @param unknown_type $sanitize_callback A callback function that sanitizes the option's value. @@ -197,7 +197,6 @@ function use_codepress() { return; } - /** * @deprecated 3.1.0 * @@ -870,7 +869,7 @@ function type_url_form_file() { * @deprecated Use get_current_screen()->add_help_tab() * @see WP_Screen * - * @param string $screen The handle for the screen to add help to. This is usually the hook name returned by the add_*_page() functions. + * @param string $screen The handle for the screen to add help to. This is usually the hook name returned by the add_*_page() functions. * @param string $help The content of an 'Overview' help tab. */ function add_contextual_help( $screen, $help ) { @@ -880,4 +879,63 @@ function add_contextual_help( $screen, $help ) { $screen = convert_to_screen( $screen ); WP_Screen::add_old_compat_help( $screen, $help ); +} + +/** + * Get the allowed themes for the current blog. + * + * @since 3.0.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_themes() + * @see wp_get_themes() + * + * @return array $themes Array of allowed themes. + */ +function get_allowed_themes() { + _deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'allowed' => true ) )" ); + + $themes = wp_get_themes( array( 'allowed' => true ) ); + + $wp_themes = array(); + foreach ( $themes as $theme ) { + $wp_themes[ $theme->get('Name') ] = $theme; + } + + return $wp_themes; +} + +/** + * {@internal Missing Short Description}} + * + * @since 1.5.0 + * + * @return unknown + */ +function get_broken_themes() { + _deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'errors' => true )" ); + + $themes = wp_get_themes( array( 'errors' => true ) ); + $broken = array(); + foreach ( $themes as $theme ) { + $name = $theme->get('Name'); + $broken[ $name ] = array( + 'Name' => $name, + 'Title' => $name, + 'Description' => $theme->errors()->get_error_message(), + ); + } + return $broken; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.0.0 + * + * @return unknown + */ +function current_theme_info() { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' ); + + return wp_get_theme(); } \ No newline at end of file diff --git a/wp-admin/includes/export.php b/wp-admin/includes/export.php index 6aa85a85a..e9c909d62 100644 --- a/wp-admin/includes/export.php +++ b/wp-admin/includes/export.php @@ -13,7 +13,7 @@ * * @since 2.5.0 */ -define( 'WXR_VERSION', '1.1' ); +define( 'WXR_VERSION', '1.2' ); /** * Generates the WXR export file for download @@ -117,13 +117,14 @@ function export_wp( $args = array() ) { * @since 2.1.0 * * @param string $str String to wrap in XML CDATA tag. + * @return string */ function wxr_cdata( $str ) { if ( seems_utf8( $str ) == false ) $str = utf8_encode( $str ); // $str = ent2ncr(esc_html($str)); - $str = "<![CDATA[$str" . ( ( substr( $str, -1 ) == ']' ) ? ' ' : '' ) . ']]>'; + $str = '<![CDATA[' . str_replace( ']]>', ']]]]><![CDATA[>', $str ) . ']]>'; return $str; } @@ -331,7 +332,7 @@ function export_wp( $args = array() ) { <link><?php bloginfo_rss( 'url' ); ?></link> <description><?php bloginfo_rss( 'description' ); ?></description> <pubDate><?php echo date( 'D, d M Y H:i:s +0000' ); ?></pubDate> - <language><?php echo get_option( 'rss_language' ); ?></language> + <language><?php bloginfo_rss( 'language' ); ?></language> <wp:wxr_version><?php echo WXR_VERSION; ?></wp:wxr_version> <wp:base_site_url><?php echo wxr_site_url(); ?></wp:base_site_url> <wp:base_blog_url><?php bloginfo_rss( 'url' ); ?></wp:base_blog_url> diff --git a/wp-admin/includes/file.php b/wp-admin/includes/file.php index bf4ac85dc..9ff24384c 100644 --- a/wp-admin/includes/file.php +++ b/wp-admin/includes/file.php @@ -65,7 +65,7 @@ function get_file_description( $file ) { return sprintf( __( '%s Page Template' ), _cleanup_header_comment($name[1]) ); } - return basename( $file ); + return trim( basename( $file ) ); } /** @@ -81,7 +81,7 @@ function get_home_path() { $siteurl = get_option( 'siteurl' ); if ( $home != '' && $home != $siteurl ) { $wp_path_rel_to_home = str_replace($home, '', $siteurl); /* $siteurl - $home */ - $pos = strpos($_SERVER["SCRIPT_FILENAME"], $wp_path_rel_to_home); + $pos = strrpos($_SERVER["SCRIPT_FILENAME"], $wp_path_rel_to_home); $home_path = substr($_SERVER["SCRIPT_FILENAME"], 0, $pos); $home_path = trailingslashit( $home_path ); } else { @@ -157,7 +157,7 @@ function list_files( $folder = '', $levels = 100 ) { * Please note that the calling function must unlink() this itself. * * The filename is based off the passed parameter or defaults to the current unix timestamp, - * while the directory can either be passed as well, or by leaving it blank, default to a writable temporary directory. + * while the directory can either be passed as well, or by leaving it blank, default to a writable temporary directory. * * @since 2.6.0 * @@ -240,7 +240,7 @@ function wp_handle_upload( &$file, $overrides = false, $time = null ) { // You may define your own function and pass the name in $overrides['upload_error_handler'] $upload_error_handler = 'wp_handle_upload_error'; - // You may have had one or more 'wp_handle_upload_prefilter' functions error out the file. Handle that gracefully. + // You may have had one or more 'wp_handle_upload_prefilter' functions error out the file. Handle that gracefully. if ( isset( $file['error'] ) && !is_numeric( $file['error'] ) && $file['error'] ) return $upload_error_handler( $file, $file['error'] ); @@ -323,30 +323,10 @@ function wp_handle_upload( &$file, $overrides = false, $time = null ) { $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); - $tmp_file = wp_tempnam($filename); - // Move the file to the uploads dir - if ( false === @ move_uploaded_file( $file['tmp_name'], $tmp_file ) ) - return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) ); - - // If a resize was requested, perform the resize. - $image_resize = isset( $_POST['image_resize'] ) && 'true' == $_POST['image_resize']; - $do_resize = apply_filters( 'wp_upload_resize', $image_resize ); - $size = @getimagesize( $tmp_file ); - if ( $do_resize && $size ) { - $old_temp = $tmp_file; - $tmp_file = image_resize( $tmp_file, (int) get_option('large_size_w'), (int) get_option('large_size_h'), 0, 'resized'); - if ( ! is_wp_error($tmp_file) ) { - unlink($old_temp); - } else { - $tmp_file = $old_temp; - } - } - - // Copy the temporary file into its destination $new_file = $uploads['path'] . "/$filename"; - copy( $tmp_file, $new_file ); - unlink($tmp_file); + if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) ) + return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) ); // Set correct file permissions $stat = stat( dirname( $new_file )); @@ -364,7 +344,7 @@ function wp_handle_upload( &$file, $overrides = false, $time = null ) { /** * Handle sideloads, which is the process of retrieving a media item from another server instead of - * a traditional media upload. This process involves sanitizing the filename, checking extensions + * a traditional media upload. This process involves sanitizing the filename, checking extensions * for mime type, and moving the file to the appropriate directory within the uploads directory. * * @since 2.6.0 @@ -486,7 +466,7 @@ function wp_handle_sideload( &$file, $overrides = false ) { /** * Downloads a url to a local temporary file using the WordPress HTTP Class. - * Please note, That the calling function must unlink() the file. + * Please note, That the calling function must unlink() the file. * * @since 2.5.0 * @@ -648,7 +628,7 @@ function _unzip_file_ziparchive($file, $to, $needed_dirs = array() ) { return new WP_Error('extract_failed', __('Could not extract file from archive.'), $info['name']); if ( ! $wp_filesystem->put_contents( $to . $info['name'], $contents, FS_CHMOD_FILE) ) - return new WP_Error('copy_failed', __('Could not copy file.'), $to . $info['filename']); + return new WP_Error('copy_failed', __('Could not copy file.'), $to . $info['name']); } $z->close(); @@ -884,7 +864,7 @@ function get_filesystem_method($args = array(), $context = false) { } /** - * Displays a form to the user to request for their FTP/SSH details in order to connect to the filesystem. + * Displays a form to the user to request for their FTP/SSH details in order to connect to the filesystem. * All chosen/entered details are saved, Excluding the Password. * * Hostnames may be in the form of hostname:portnumber (eg: wordpress.org:2467) to specify an alternate FTP/SSH port. @@ -896,7 +876,7 @@ function get_filesystem_method($args = array(), $context = false) { * @param string $form_post the URL to post the form to * @param string $type the chosen Filesystem method in use * @param boolean $error if the current request has failed to connect - * @param string $context The directory which is needed access to, The write-test will be performed on this directory by get_filesystem_method() + * @param string $context The directory which is needed access to, The write-test will be performed on this directory by get_filesystem_method() * @param string $extra_fields Extra POST fields which should be checked for to be included in the post. * @return boolean False on failure. True on success. */ @@ -1075,5 +1055,3 @@ submit_button( __( 'Proceed' ), 'button', 'upgrade' ); <?php return false; } - -?> diff --git a/wp-admin/includes/image-edit.php b/wp-admin/includes/image-edit.php index 0e2027a1e..d2d6dc2cf 100644 --- a/wp-admin/includes/image-edit.php +++ b/wp-admin/includes/image-edit.php @@ -67,7 +67,7 @@ function wp_image_editor($post_id, $msg = false) { <input type="hidden" id="imgedit-y-<?php echo $post_id; ?>" value="<?php echo $meta['height']; ?>" /> <div id="imgedit-crop-<?php echo $post_id; ?>" class="imgedit-crop-wrap"> - <img id="image-preview-<?php echo $post_id; ?>" onload="imageEdit.imgLoaded('<?php echo $post_id; ?>')" src="<?php echo admin_url('admin-ajax.php'); ?>?action=imgedit-preview&_ajax_nonce=<?php echo $nonce; ?>&postid=<?php echo $post_id; ?>&rand=<?php echo rand(1, 99999); ?>" /> + <img id="image-preview-<?php echo $post_id; ?>" onload="imageEdit.imgLoaded('<?php echo $post_id; ?>')" src="<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>?action=imgedit-preview&_ajax_nonce=<?php echo $nonce; ?>&postid=<?php echo $post_id; ?>&rand=<?php echo rand(1, 99999); ?>" /> </div> <div class="imgedit-submit"> @@ -192,50 +192,11 @@ function wp_image_editor($post_id, $msg = false) { </tbody></table> <div class="imgedit-wait" id="imgedit-wait-<?php echo $post_id; ?>"></div> <script type="text/javascript">imageEdit.init(<?php echo $post_id; ?>);</script> - <div class="hidden" id="imgedit-leaving-<?php echo $post_id; ?>"><?php _e("There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor."); ?></div> + <div class="hidden" id="imgedit-leaving-<?php echo $post_id; ?>"><?php _e("There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor."); ?></div> </div> <?php } -function load_image_to_edit($post_id, $mime_type, $size = 'full') { - $filepath = get_attached_file($post_id); - - if ( $filepath && file_exists($filepath) ) { - if ( 'full' != $size && ( $data = image_get_intermediate_size($post_id, $size) ) ) { - $filepath = apply_filters('load_image_to_edit_filesystempath', path_join( dirname($filepath), $data['file'] ), $post_id, $size); - } - } elseif ( function_exists('fopen') && function_exists('ini_get') && true == ini_get('allow_url_fopen') ) { - $filepath = apply_filters('load_image_to_edit_attachmenturl', wp_get_attachment_url($post_id) , $post_id, $size); - } - - $filepath = apply_filters('load_image_to_edit_path', $filepath, $post_id, $size); - if ( empty($filepath) ) - return false; - - switch ( $mime_type ) { - case 'image/jpeg': - $image = imagecreatefromjpeg($filepath); - break; - case 'image/png': - $image = imagecreatefrompng($filepath); - break; - case 'image/gif': - $image = imagecreatefromgif($filepath); - break; - default: - $image = false; - break; - } - if ( is_resource($image) ) { - $image = apply_filters('load_image_to_edit', $image, $post_id, $size); - if ( function_exists('imagealphablending') && function_exists('imagesavealpha') ) { - imagealphablending($image, false); - imagesavealpha($image, true); - } - } - return $image; -} - function wp_stream_image($image, $mime_type, $post_id) { $image = apply_filters('image_save_pre', $image, $post_id); @@ -288,7 +249,6 @@ function _rotate_image_resource($img, $angle) { return $img; } - function _flip_image_resource($img, $horz, $vert) { $w = imagesx($img); $h = imagesy($img); @@ -665,4 +625,3 @@ function wp_save_image($post_id) { $return->msg = esc_js( __('Image saved') ); return $return; } - diff --git a/wp-admin/includes/image.php b/wp-admin/includes/image.php index 98dd0ef5e..804838767 100644 --- a/wp-admin/includes/image.php +++ b/wp-admin/includes/image.php @@ -32,7 +32,7 @@ function wp_create_thumbnail( $file, $max_side, $deprecated = '' ) { * * @since 2.1.0 * - * @param string|int $src_file The source file or Attachment ID. + * @param string|int $src The source file or Attachment ID. * @param int $src_x The start x position to crop from. * @param int $src_y The start y position to crop from. * @param int $src_w The width to crop. @@ -43,13 +43,27 @@ function wp_create_thumbnail( $file, $max_side, $deprecated = '' ) { * @param string $dst_file Optional. The destination file to write to. * @return string|WP_Error|false New filepath on success, WP_Error or false on failure. */ -function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) { - if ( is_numeric( $src_file ) ) // Handle int as attachment ID - $src_file = get_attached_file( $src_file ); - - $src = wp_load_image( $src_file ); +function wp_crop_image( $src, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) { + if ( is_numeric( $src ) ) { // Handle int as attachment ID + $src_file = get_attached_file( $src ); + if ( ! file_exists( $src_file ) ) { + // If the file doesn't exist, attempt a url fopen on the src link. + // This can occur with certain file replication plugins. + $post = get_post( $src ); + $image_type = $post->post_mime_type; + $src = load_image_to_edit( $src, $post->post_mime_type, 'full' ); + } else { + $size = @getimagesize( $src_file ); + $image_type = ( $size ) ? $size['mime'] : ''; + $src = wp_load_image( $src_file ); + } + } else { + $size = @getimagesize( $src ); + $image_type = ( $size ) ? $size['mime'] : ''; + $src = wp_load_image( $src ); + } - if ( !is_resource( $src ) ) + if ( ! is_resource( $src ) ) return new WP_Error( 'error_loading_image', $src, $src_file ); $dst = wp_imagecreatetruecolor( $dst_w, $dst_h ); @@ -59,7 +73,7 @@ function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_ $src_h -= $src_y; } - if (function_exists('imageantialias')) + if ( function_exists( 'imageantialias' ) ) imageantialias( $dst, true ); imagecopyresampled( $dst, $src, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ); @@ -69,9 +83,18 @@ function wp_crop_image( $src_file, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_ if ( ! $dst_file ) $dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_file ); - $dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file ); + if ( 'image/png' != $image_type ) + $dst_file = preg_replace( '/\\.[^\\.]+$/', '.jpg', $dst_file ); + + // The directory containing the original file may no longer exist when + // using a replication plugin. + wp_mkdir_p( dirname( $dst_file ) ); + + $dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), basename( $dst_file ) ); - if ( imagejpeg( $dst, $dst_file, apply_filters( 'jpeg_quality', 90, 'wp_crop_image' ) ) ) + if ( 'image/png' == $image_type && imagepng( $dst, $dst_file ) ) + return $dst_file; + elseif ( imagejpeg( $dst, $dst_file, apply_filters( 'jpeg_quality', 90, 'wp_crop_image' ) ) ) return $dst_file; else return false; @@ -104,7 +127,7 @@ function wp_generate_attachment_metadata( $attachment_id, $file ) { global $_wp_additional_image_sizes; foreach ( get_intermediate_image_sizes() as $s ) { - $sizes[$s] = array( 'width' => '', 'height' => '', 'crop' => FALSE ); + $sizes[$s] = array( 'width' => '', 'height' => '', 'crop' => false ); if ( isset( $_wp_additional_image_sizes[$s]['width'] ) ) $sizes[$s]['width'] = intval( $_wp_additional_image_sizes[$s]['width'] ); // For theme-added sizes else @@ -205,7 +228,7 @@ function wp_read_image_metadata( $file ) { // exif contains a bunch of data we'll probably never need formatted in ways // that are difficult to use. We'll normalize it and just extract the fields - // that are likely to be useful. Fractions and numbers are converted to + // that are likely to be useful. Fractions and numbers are converted to // floats, dates to unix timestamps, and everything else to strings. $meta = array( 'aperture' => 0, @@ -296,8 +319,10 @@ function wp_read_image_metadata( $file ) { $meta['created_timestamp'] = wp_exif_date2ts($exif['DateTimeDigitized'] ); if ( ! empty($exif['FocalLength'] ) ) $meta['focal_length'] = wp_exif_frac2dec( $exif['FocalLength'] ); - if ( ! empty($exif['ISOSpeedRatings'] ) ) - $meta['iso'] = utf8_encode( trim( $exif['ISOSpeedRatings'] ) ); + if ( ! empty($exif['ISOSpeedRatings'] ) ) { + $meta['iso'] = is_array( $exif['ISOSpeedRatings'] ) ? reset( $exif['ISOSpeedRatings'] ) : $exif['ISOSpeedRatings']; + $meta['iso'] = utf8_encode( trim( $meta['iso'] ) ); + } if ( ! empty($exif['ExposureTime'] ) ) $meta['shutter_speed'] = wp_exif_frac2dec( $exif['ExposureTime'] ); } @@ -339,3 +364,100 @@ function file_is_displayable_image($path) { return apply_filters('file_is_displayable_image', $result, $path); } + +/** + * Load an image resource for editing. + * + * @since 2.9.0 + * + * @param string $attachment_id Attachment ID. + * @param string $mime_type Image mime type. + * @param string $size Optional. Image size, defaults to 'full'. + * @return resource|false The resulting image resource on success, false on failure. + */ +function load_image_to_edit( $attachment_id, $mime_type, $size = 'full' ) { + $filepath = _load_image_to_edit_path( $attachment_id, $size ); + if ( empty( $filepath ) ) + return false; + + switch ( $mime_type ) { + case 'image/jpeg': + $image = imagecreatefromjpeg($filepath); + break; + case 'image/png': + $image = imagecreatefrompng($filepath); + break; + case 'image/gif': + $image = imagecreatefromgif($filepath); + break; + default: + $image = false; + break; + } + if ( is_resource($image) ) { + $image = apply_filters('load_image_to_edit', $image, $attachment_id, $size); + if ( function_exists('imagealphablending') && function_exists('imagesavealpha') ) { + imagealphablending($image, false); + imagesavealpha($image, true); + } + } + return $image; +} + +/** + * Retrieve the path or url of an attachment's attached file. + * + * If the attached file is not present on the local filesystem (usually due to replication plugins), + * then the url of the file is returned if url fopen is supported. + * + * @since 3.4.0 + * @access private + * + * @param string $attachment_id Attachment ID. + * @param string $size Optional. Image size, defaults to 'full'. + * @return string|false File path or url on success, false on failure. + */ +function _load_image_to_edit_path( $attachment_id, $size = 'full' ) { + $filepath = get_attached_file( $attachment_id ); + + if ( $filepath && file_exists( $filepath ) ) { + if ( 'full' != $size && ( $data = image_get_intermediate_size( $attachment_id, $size ) ) ) { + $filepath = apply_filters( 'load_image_to_edit_filesystempath', path_join( dirname( $filepath ), $data['file'] ), $attachment_id, $size ); + } + } elseif ( function_exists( 'fopen' ) && function_exists( 'ini_get' ) && true == ini_get( 'allow_url_fopen' ) ) { + $filepath = apply_filters( 'load_image_to_edit_attachmenturl', wp_get_attachment_url( $attachment_id ), $attachment_id, $size ); + } + + return apply_filters( 'load_image_to_edit_path', $filepath, $attachment_id, $size ); +} + +/** + * Copy an existing image file. + * + * @since 3.4.0 + * @access private + * + * @param string $attachment_id Attachment ID. + * @return string|false New file path on success, false on failure. + */ +function _copy_image_file( $attachment_id ) { + $dst_file = $src_file = get_attached_file( $attachment_id ); + if ( ! file_exists( $src_file ) ) + $src_file = _load_image_to_edit_path( $attachment_id ); + + if ( $src_file ) { + $dst_file = str_replace( basename( $dst_file ), 'copy-' . basename( $dst_file ), $dst_file ); + $dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), basename( $dst_file ) ); + + // The directory containing the original file may no longer exist when + // using a replication plugin. + wp_mkdir_p( dirname( $dst_file ) ); + + if ( ! @copy( $src_file, $dst_file ) ) + $dst_file = false; + } else { + $dst_file = false; + } + + return $dst_file; +} diff --git a/wp-admin/includes/import.php b/wp-admin/includes/import.php index f57be766c..3713f18b4 100644 --- a/wp-admin/includes/import.php +++ b/wp-admin/includes/import.php @@ -93,5 +93,3 @@ function wp_import_handle_upload() { return array( 'file' => $file, 'id' => $id ); } - -?> diff --git a/wp-admin/includes/list-table.php b/wp-admin/includes/list-table.php index 716e80aca..2dff578e0 100644 --- a/wp-admin/includes/list-table.php +++ b/wp-admin/includes/list-table.php @@ -28,7 +28,7 @@ function _get_list_table( $class ) { 'WP_Links_List_Table' => 'links', 'WP_Plugin_Install_List_Table' => 'plugin-install', 'WP_Themes_List_Table' => 'themes', - 'WP_Theme_Install_List_Table' => 'theme-install', + 'WP_Theme_Install_List_Table' => array( 'themes', 'theme-install' ), 'WP_Plugins_List_Table' => 'plugins', // Network Admin 'WP_MS_Sites_List_Table' => 'ms-sites', @@ -37,7 +37,8 @@ function _get_list_table( $class ) { ); if ( isset( $core_classes[ $class ] ) ) { - require_once( ABSPATH . 'wp-admin/includes/class-wp-' . $core_classes[ $class ] . '-list-table.php' ); + foreach ( (array) $core_classes[ $class ] as $required ) + require_once( ABSPATH . 'wp-admin/includes/class-wp-' . $required . '-list-table.php' ); return new $class; } @@ -101,4 +102,3 @@ class _WP_List_Table_Compat extends WP_List_Table { return $this->_columns; } } -?> \ No newline at end of file diff --git a/wp-admin/includes/manifest.php b/wp-admin/includes/manifest.php index 6f050c601..99b477481 100644 --- a/wp-admin/includes/manifest.php +++ b/wp-admin/includes/manifest.php @@ -43,7 +43,6 @@ function &get_manifest() { array('images/wpspin_dark.gif'), array('images/logo.gif'), array('images/logo-ghost.png'), - array('images/logo-login.gif'), array('images/media-button-image.gif'), array('images/media-button-music.gif'), array('images/media-button-other.gif'), diff --git a/wp-admin/includes/media.php b/wp-admin/includes/media.php index ff77e6c0a..179bfb8fc 100644 --- a/wp-admin/includes/media.php +++ b/wp-admin/includes/media.php @@ -62,15 +62,9 @@ add_filter('media_upload_tabs', 'update_gallery_tab'); * @since 2.5.0 */ function the_media_upload_tabs() { - global $redir_tab, $is_iphone; + global $redir_tab; $tabs = media_upload_tabs(); - - if ( $is_iphone ) { - unset($tabs['type']); - $default = 'type_url'; - } else { - $default = 'type'; - } + $default = 'type'; if ( !empty($tabs) ) { echo "<ul id='sidemenu'>\n"; @@ -144,27 +138,37 @@ function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $ $id = ( 0 < (int) $id ) ? 'attachment_' . $id : ''; - if ( ! preg_match( '/width="([0-9]+)/', $html, $matches ) ) + if ( ! preg_match( '/width=["\']([0-9]+)/', $html, $matches ) ) return $html; $width = $matches[1]; - $caption = str_replace( array( '>', '<', '"', "'" ), - array( '>', '<', '"', ''' ), - $caption - ); + $caption = str_replace( array("\r\n", "\r"), "\n", $caption); + $caption = preg_replace_callback( '/<[a-zA-Z0-9]+(?: [^<>]+>)*/', '_cleanup_image_add_caption', $caption ); + // convert any remaining line breaks to <br> + $caption = preg_replace( '/[ \n\t]*\n[ \t]*/', '<br />', $caption ); $html = preg_replace( '/(class=["\'][^\'"]*)align(none|left|right|center)\s?/', '$1', $html ); if ( empty($align) ) $align = 'none'; - $shcode = '[caption id="' . $id . '" align="align' . $align - . '" width="' . $width . '" caption="' . addslashes($caption) . '"]' . $html . '[/caption]'; + $shcode = '[caption id="' . $id . '" align="align' . $align . '" width="' . $width . '"]' . $html . ' ' . $caption . '[/caption]'; return apply_filters( 'image_add_caption_shortcode', $shcode, $html ); } add_filter( 'image_send_to_editor', 'image_add_caption', 20, 8 ); +/** + * Private preg_replace callback used in image_add_caption() + * + * @access private + * @since 3.4.0 + */ +function _cleanup_image_add_caption( $matches ) { + // remove any line breaks from inside the tags + return preg_replace( '/[\r\n\t]+/', ' ', $matches[0] ); +} + /** * {@internal Missing Short Description}} * @@ -334,7 +338,7 @@ wp_enqueue_style( 'ie' ); //<![CDATA[ addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}}; var userSettings = {'url':'<?php echo SITECOOKIEPATH; ?>','uid':'<?php if ( ! isset($current_user) ) $current_user = wp_get_current_user(); echo $current_user->ID; ?>','time':'<?php echo time(); ?>'}; -var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>', pagenow = 'media-upload-popup', adminpage = 'media-upload-popup', +var ajaxurl = '<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>', pagenow = 'media-upload-popup', adminpage = 'media-upload-popup', isRtl = <?php echo (int) is_rtl(); ?>; //]]> </script> @@ -386,15 +390,20 @@ function _media_button($title, $icon, $type, $id) { return "<a href='" . esc_url( get_upload_iframe_src($type) ) . "' id='{$id}-add_{$type}' class='thickbox add_$type' title='" . esc_attr( $title ) . "'><img src='" . esc_url( admin_url( $icon ) ) . "' alt='$title' onclick='return false;' /></a>"; } -function get_upload_iframe_src( $type = null ) { +function get_upload_iframe_src( $type = null, $post_id = null, $tab = null ) { global $post_ID; - $uploading_iframe_ID = (int) $post_ID; - $upload_iframe_src = add_query_arg( 'post_id', $uploading_iframe_ID, admin_url('media-upload.php') ); + if ( empty( $post_id ) ) + $post_id = $post_ID; + + $upload_iframe_src = add_query_arg( 'post_id', (int) $post_id, admin_url('media-upload.php') ); if ( $type && 'media' != $type ) $upload_iframe_src = add_query_arg('type', $type, $upload_iframe_src); + if ( ! empty( $tab ) ) + $upload_iframe_src = add_query_arg('tab', $tab, $upload_iframe_src); + $upload_iframe_src = apply_filters($type . '_upload_iframe_src', $upload_iframe_src); return add_query_arg('TB_iframe', true, $upload_iframe_src); @@ -477,7 +486,7 @@ function media_upload_form_handler() { if ( isset($send_id) ) { $attachment = stripslashes_deep( $_POST['attachments'][$send_id] ); - $html = $attachment['post_title']; + $html = isset( $attachment['post_title'] ) ? $attachment['post_title'] : ''; if ( !empty($attachment['url']) ) { $rel = ''; if ( strpos($attachment['url'], 'attachment_id') || get_attachment_link($send_id) == $attachment['url'] ) @@ -500,8 +509,6 @@ function media_upload_form_handler() { * @return unknown */ function wp_media_upload_handler() { - global $is_iphone; - $errors = array(); $id = 0; @@ -572,10 +579,7 @@ function wp_media_upload_handler() { return wp_iframe( 'media_upload_type_url_form', $type, $errors, $id ); } - if ( $is_iphone ) - return wp_iframe( 'media_upload_type_url_form', 'image', $errors, $id ); - else - return wp_iframe( 'media_upload_type_form', 'image', $errors, $id ); + return wp_iframe( 'media_upload_type_form', 'image', $errors, $id ); } /** @@ -776,12 +780,19 @@ function image_link_input_fields($post, $url_type = '') { return " <input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='" . esc_attr($url) . "' /><br /> - <button type='button' class='button urlnone' title=''>" . __('None') . "</button> - <button type='button' class='button urlfile' title='" . esc_attr($file) . "'>" . __('File URL') . "</button> - <button type='button' class='button urlpost' title='" . esc_attr($link) . "'>" . __('Attachment Post URL') . "</button> + <button type='button' class='button urlnone' data-link-url=''>" . __('None') . "</button> + <button type='button' class='button urlfile' data-link-url='" . esc_attr($file) . "'>" . __('File URL') . "</button> + <button type='button' class='button urlpost' data-link-url='" . esc_attr($link) . "'>" . __('Attachment Post URL') . "</button> "; } +function wp_caption_input_textarea($edit_post) { + // post data is already escaped + $name = "attachments[{$edit_post->ID}][post_excerpt]"; + + return '<textarea name="' . $name . '" id="' . $name . '">' . $edit_post->post_excerpt . '</textarea>'; +} + /** * {@internal Missing Short Description}} * @@ -917,8 +928,6 @@ function get_attachment_fields_to_edit($post, $errors = null) { $edit_post = sanitize_post($post, 'edit'); - - $form_fields = array( 'post_title' => array( 'label' => __('Title'), @@ -927,7 +936,8 @@ function get_attachment_fields_to_edit($post, $errors = null) { 'image_alt' => array(), 'post_excerpt' => array( 'label' => __('Caption'), - 'value' => $edit_post->post_excerpt + 'input' => 'html', + 'html' => wp_caption_input_textarea($edit_post) ), 'post_content' => array( 'label' => __('Description'), @@ -1129,8 +1139,6 @@ function get_media_item( $attachment_id, $args = null ) { $item .= "</td></tr>\n"; - - $item .= " </thead> <tbody> @@ -1151,7 +1159,7 @@ function get_media_item( $attachment_id, $args = null ) { $delete = "<a href='" . wp_nonce_url( "post.php?action=delete&post=$attachment_id", 'delete-attachment_' . $attachment_id ) . "' id='del[$attachment_id]' class='delete'>" . __( 'Delete Permanently' ) . '</a>'; } elseif ( !MEDIA_TRASH ) { $delete = "<a href='#' class='del-link' onclick=\"document.getElementById('del_attachment_$attachment_id').style.display='block';return false;\">" . __( 'Delete' ) . "</a> - <div id='del_attachment_$attachment_id' class='del-attachment' style='display:none;'>" . sprintf( __( 'You are about to delete <strong>%s</strong>.' ), $filename ) . " + <div id='del_attachment_$attachment_id' class='del-attachment' style='display:none;'><p>" . sprintf( __( 'You are about to delete <strong>%s</strong>.' ), $filename ) . "</p> <a href='" . wp_nonce_url( "post.php?action=delete&post=$attachment_id", 'delete-attachment_' . $attachment_id ) . "' id='del[$attachment_id]' class='button'>" . __( 'Continue' ) . "</a> <a href='#' class='button' onclick=\"this.parentNode.style.display='none';return false;\">" . __( 'Cancel' ) . "</a> </div>"; @@ -1206,9 +1214,11 @@ function get_media_item( $attachment_id, $args = null ) { if ( !empty( $field[ $field['input'] ] ) ) $item .= $field[ $field['input'] ]; elseif ( $field['input'] == 'textarea' ) { - if ( user_can_richedit() ) { // textarea_escaped when user_can_richedit() = false - $field['value'] = esc_textarea( $field['value'] ); + if ( 'post_content' == $id && user_can_richedit() ) { + // sanitize_post() skips the post_content when user_can_richedit + $field['value'] = htmlspecialchars( $field['value'], ENT_QUOTES ); } + // post_excerpt is already escaped by sanitize_post() in get_attachment_fields_to_edit() $item .= "<textarea id='$name' name='$name' $aria_required>" . $field['value'] . '</textarea>'; } else { $item .= "<input type='text' class='text' id='$name' name='$name' value='" . esc_attr( $field['value'] ) . "' $aria_required />"; @@ -1272,10 +1282,12 @@ function media_upload_header() { * @param unknown_type $errors */ function media_upload_form( $errors = null ) { - global $type, $tab, $pagenow, $is_IE, $is_opera, $is_iphone; + global $type, $tab, $pagenow, $is_IE, $is_opera; - if ( $is_iphone ) + if ( ! _device_can_upload() ) { + echo '<p>' . __('The web browser on your device cannot be used to upload files. You may be able to use the <a href="http://wordpress.org/extend/mobile/">native app for your device</a> instead.') . '</p>'; return; + } $upload_action_url = admin_url('async-upload.php'); $post_id = isset($_REQUEST['post_id']) ? intval($_REQUEST['post_id']) : 0; @@ -1406,10 +1418,6 @@ if ( ($is_IE || $is_opera) && $max_upload_size > 100 * 1024 * 1024 ) { ?> * @param unknown_type $id */ function media_upload_type_form($type = 'file', $errors = null, $id = null) { - global $is_iphone; - - if ( $is_iphone ) - return; media_upload_header(); @@ -1517,8 +1525,14 @@ var addExtImage = { alt = f.alt.value.replace(/'/g, ''').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>'); <?php if ( ! apply_filters( 'disable_captions', '' ) ) { ?> - if ( f.caption.value ) - caption = f.caption.value.replace(/'/g, ''').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>'); + if ( f.caption.value ) { + caption = f.caption.value.replace(/\r\n|\r/g, '\n'); + caption = caption.replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(a){ + return a.replace(/[\r\n\t]+/, ' '); + }); + + caption = caption.replace(/\s*\n\s*/g, '<br />'); + } <?php } ?> cls = caption ? '' : ' class="'+t.align+'"'; @@ -1531,7 +1545,7 @@ var addExtImage = { } if ( caption ) - html = '[caption id="" align="'+t.align+'" width="'+t.width+'" caption="'+caption+'"]'+html+'[/caption]'; + html = '[caption id="" align="'+t.align+'" width="'+t.width+'"]'+html+caption+'[/caption]'; var win = window.dialogArguments || opener || parent || top; win.send_to_editor(html); @@ -1778,10 +1792,11 @@ function media_upload_library_form($errors) { <input type="hidden" name="tab" value="<?php echo esc_attr( $tab ); ?>" /> <input type="hidden" name="post_id" value="<?php echo (int) $post_id; ?>" /> <input type="hidden" name="post_mime_type" value="<?php echo isset( $_GET['post_mime_type'] ) ? esc_attr( $_GET['post_mime_type'] ) : ''; ?>" /> +<input type="hidden" name="context" value="<?php echo isset( $_GET['context'] ) ? esc_attr( $_GET['context'] ) : ''; ?>" /> <p id="media-search" class="search-box"> <label class="screen-reader-text" for="media-search-input"><?php _e('Search Media');?>:</label> - <input type="text" id="media-search-input" name="s" value="<?php the_search_query(); ?>" /> + <input type="search" id="media-search-input" name="s" value="<?php the_search_query(); ?>" /> <?php submit_button( __( 'Search Media' ), 'button', '', false ); ?> </p> @@ -1920,7 +1935,7 @@ function wp_media_insert_url_form( $default_view = 'image' ) { <th valign="top" scope="row" class="label"> <span class="alignleft"><label for="caption">' . __('Image Caption') . '</label></span> </th> - <td class="field"><input id="caption" name="caption" value="" type="text" /></td> + <td class="field"><textarea id="caption" name="caption"></textarea></td> </tr> '; } else { @@ -2054,7 +2069,7 @@ add_action('post-plupload-upload-ui', 'media_upload_flash_bypass'); function media_upload_html_bypass() { ?> <p class="upload-html-bypass hide-if-no-js"> - <?php _e('You are using the browser’s built-in file uploader. The new WordPress uploader includes multiple file selection and drag and drop capability. <a href="#">Switch to the new uploader</a>.'); ?> + <?php _e('You are using the browser’s built-in file uploader. The WordPress uploader includes multiple file selection and drag and drop capability. <a href="#">Switch to the multi-file uploader</a>.'); ?> </p> <?php } diff --git a/wp-admin/includes/menu.php b/wp-admin/includes/menu.php index 1eae8576c..14cadfa6f 100644 --- a/wp-admin/includes/menu.php +++ b/wp-admin/includes/menu.php @@ -227,5 +227,3 @@ if ( !user_can_access_admin_page() ) { } $menu = add_menu_classes($menu); - -?> \ No newline at end of file diff --git a/wp-admin/includes/meta-boxes.php b/wp-admin/includes/meta-boxes.php index ddb3e9d4f..7dc455286 100644 --- a/wp-admin/includes/meta-boxes.php +++ b/wp-admin/includes/meta-boxes.php @@ -27,14 +27,14 @@ function post_submit_meta_box($post) { <div id="minor-publishing-actions"> <div id="save-action"> -<?php if ( 'publish' != $post->post_status && 'future' != $post->post_status && 'pending' != $post->post_status ) { ?> +<?php if ( 'publish' != $post->post_status && 'future' != $post->post_status && 'pending' != $post->post_status ) { ?> <input <?php if ( 'private' == $post->post_status ) { ?>style="display:none"<?php } ?> type="submit" name="save" id="save-post" value="<?php esc_attr_e('Save Draft'); ?>" tabindex="4" class="button button-highlighted" /> <?php } elseif ( 'pending' == $post->post_status && $can_publish ) { ?> <input type="submit" name="save" id="save-post" value="<?php esc_attr_e('Save as Pending'); ?>" tabindex="4" class="button button-highlighted" /> <?php } ?> <img src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" class="ajax-loading" id="draft-ajax-loading" alt="" /> </div> - +<?php if ( $post_type_object->public ) : ?> <div id="preview-action"> <?php if ( 'publish' == $post->post_status ) { @@ -51,13 +51,13 @@ if ( 'publish' == $post->post_status ) { <a class="preview button" href="<?php echo $preview_link; ?>" target="wp-preview" id="post-preview" tabindex="4"><?php echo $preview_button; ?></a> <input type="hidden" name="wp-preview" id="wp-preview" value="" /> </div> - +<?php endif; // public post type ?> <div class="clear"></div> </div><?php // /minor-publishing-actions ?> <div id="misc-publishing-actions"> -<div class="misc-pub-section<?php if ( !$can_publish ) { echo ' misc-pub-section-last'; } ?>"><label for="post_status"><?php _e('Status:') ?></label> +<div class="misc-pub-section"><label for="post_status"><?php _e('Status:') ?></label> <span id="post-status-display"> <?php switch ( $post->post_status ) { @@ -107,7 +107,7 @@ switch ( $post->post_status ) { <?php } ?> </div><?php // /misc-pub-section ?> -<div class="misc-pub-section " id="visibility"> +<div class="misc-pub-section" id="visibility"> <?php _e('Visibility:'); ?> <span id="post-visibility-display"><?php if ( 'private' == $post->post_status ) { @@ -135,8 +135,6 @@ echo esc_html( $visibility_trans ); ?></span> <input type="checkbox" style="display:none" name="hidden_post_sticky" id="hidden-post-sticky" value="sticky" <?php checked(is_sticky($post->ID)); ?> /> <?php endif; ?> <input type="hidden" name="hidden_post_visibility" id="hidden-post-visibility" value="<?php echo esc_attr( $visibility ); ?>" /> - - <input type="radio" name="visibility" id="visibility-radio-public" value="public" <?php checked( $visibility, 'public' ); ?> /> <label for="visibility-radio-public" class="selectit"><?php _e('Public'); ?></label><br /> <?php if ( $post_type == 'post' && current_user_can( 'edit_others_posts' ) ) : ?> <span id="sticky-span"><input id="sticky" name="sticky" type="checkbox" value="sticky" <?php checked( is_sticky( $post->ID ) ); ?> tabindex="4" /> <label for="sticky" class="selectit"><?php _e( 'Stick this post to the front page' ); ?></label><br /></span> @@ -176,7 +174,7 @@ if ( 0 != $post->ID ) { } if ( $can_publish ) : // Contributors don't get to choose the date of publish ?> -<div class="misc-pub-section curtime misc-pub-section-last"> +<div class="misc-pub-section curtime"> <span id="timestamp"> <?php printf($stamp, $date); ?></span> <a href="#edit_timestamp" class="edit-timestamp hide-if-no-js" tabindex='4'><?php _e('Edit') ?></a> @@ -261,7 +259,6 @@ function post_format_meta_box( $post, $box ) { <?php endif; endif; } - /** * Display post tags form fields. * @@ -279,12 +276,13 @@ function post_tags_meta_box($post, $box) { $tax_name = esc_attr($taxonomy); $taxonomy = get_taxonomy($taxonomy); $disabled = !current_user_can($taxonomy->cap->assign_terms) ? 'disabled="disabled"' : ''; + $comma = _x( ',', 'tag delimiter' ); ?> <div class="tagsdiv" id="<?php echo $tax_name; ?>"> <div class="jaxtag"> <div class="nojs-tags hide-if-js"> <p><?php echo $taxonomy->labels->add_or_remove_items; ?></p> - <textarea name="<?php echo "tax_input[$tax_name]"; ?>" rows="3" cols="20" class="the-tags" id="tax-input-<?php echo $tax_name; ?>" <?php echo $disabled; ?>><?php echo get_terms_to_edit( $post->ID, $tax_name ); // textarea_escaped by esc_attr() ?></textarea></div> + <textarea name="<?php echo "tax_input[$tax_name]"; ?>" rows="3" cols="20" class="the-tags" id="tax-input-<?php echo $tax_name; ?>" <?php echo $disabled; ?>><?php echo str_replace( ',', $comma . ' ', get_terms_to_edit( $post->ID, $tax_name ) ); // textarea_escaped by esc_attr() ?></textarea></div> <?php if ( current_user_can($taxonomy->cap->assign_terms) ) : ?> <div class="ajaxtag hide-if-no-js"> <label class="screen-reader-text" for="new-tag-<?php echo $tax_name; ?>"><?php echo $box['title']; ?></label> @@ -303,7 +301,6 @@ function post_tags_meta_box($post, $box) { <?php } - /** * Display post categories form fields. * @@ -359,7 +356,7 @@ function post_categories_meta_box( $post, $box ) { <?php echo $tax->labels->parent_item_colon; ?> </label> <?php wp_dropdown_categories( array( 'taxonomy' => $taxonomy, 'hide_empty' => 0, 'name' => 'new'.$taxonomy.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $tax->labels->parent_item . ' —', 'tab_index' => 3 ) ); ?> - <input type="button" id="<?php echo $taxonomy; ?>-add-submit" class="add:<?php echo $taxonomy ?>checklist:<?php echo $taxonomy ?>-add button category-add-sumbit" value="<?php echo esc_attr( $tax->labels->add_new_item ); ?>" tabindex="3" /> + <input type="button" id="<?php echo $taxonomy; ?>-add-submit" class="add:<?php echo $taxonomy ?>checklist:<?php echo $taxonomy ?>-add button category-add-submit" value="<?php echo esc_attr( $tax->labels->add_new_item ); ?>" tabindex="3" /> <?php wp_nonce_field( 'add-'.$taxonomy, '_ajax_nonce-add-'.$taxonomy, false ); ?> <span id="<?php echo $taxonomy; ?>-ajax-response"></span> </p> @@ -369,7 +366,6 @@ function post_categories_meta_box( $post, $box ) { <?php } - /** * Display post excerpt form fields. * @@ -384,7 +380,6 @@ function post_excerpt_meta_box($post) { <?php } - /** * Display trackback links form fields. * @@ -411,7 +406,6 @@ if ( ! empty($pings) ) echo $pings; } - /** * Display custom fields form fields. * @@ -436,7 +430,6 @@ meta_form(); ?> <?php } - /** * Display comments status form fields. * @@ -478,29 +471,33 @@ function post_comment_meta_box_thead($result) { function post_comment_meta_box($post) { global $wpdb, $post_ID; + wp_nonce_field( 'get-comments', 'add_comment_nonce', false ); + ?> + <p class="hide-if-no-js" id="add-new-comment"><a href="#commentstatusdiv" onclick="commentReply.addcomment(<?php echo $post_ID; ?>);return false;"><?php _e('Add comment'); ?></a></p> + <?php + $total = $wpdb->get_var($wpdb->prepare("SELECT count(1) FROM $wpdb->comments WHERE comment_post_ID = '%d' AND ( comment_approved = '0' OR comment_approved = '1')", $post_ID)); + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + $wp_list_table->display( true ); if ( 1 > $total ) { - echo '<p>' . __('No comments yet.') . '</p>'; - return; + echo '<p id="no-comments">' . __('No comments yet.') . '</p>'; + } else { + $hidden = get_hidden_meta_boxes('post'); + if ( ! in_array('commentsdiv', $hidden) ) { + ?> + <script type="text/javascript">jQuery(document).ready(function(){commentsBox.get(<?php echo $total; ?>, 10);});</script> + <?php + } } - wp_nonce_field( 'get-comments', 'add_comment_nonce', false ); + ?> + <p class="hide-if-no-js hidden" id="show-comments"><a href="#commentstatusdiv" onclick="commentsBox.get(<?php echo $total; ?>);return false;"><?php _e('Show comments'); ?></a> <img class="waiting" style="display:none;" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /></p> + <?php - $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); - $wp_list_table->display( true ); -?> -<p class="hide-if-no-js"><a href="#commentstatusdiv" id="show-comments" onclick="commentsBox.get(<?php echo $total; ?>);return false;"><?php _e('Show comments'); ?></a> <img class="waiting" style="display:none;" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /></p> -<?php - $hidden = get_hidden_meta_boxes('post'); - if ( ! in_array('commentsdiv', $hidden) ) { ?> - <script type="text/javascript">jQuery(document).ready(function(){commentsBox.get(<?php echo $total; ?>, 10);});</script> -<?php - } wp_comment_trashnotice(); } - /** * Display slug form fields. * @@ -514,7 +511,6 @@ function post_slug_meta_box($post) { <?php } - /** * Display form field with list of authors. * @@ -535,7 +531,6 @@ function post_author_meta_box($post) { ) ); } - /** * Display list of revisions. * @@ -547,7 +542,6 @@ function post_revisions_meta_box($post) { wp_list_post_revisions(); } - // -- Page related Meta Boxes /** @@ -596,7 +590,6 @@ function page_attributes_meta_box($post) { <?php } - // -- Link related Meta Boxes /** @@ -627,7 +620,7 @@ function link_submit_meta_box($link) { </div> <div id="misc-publishing-actions"> -<div class="misc-pub-section misc-pub-section-last"> +<div class="misc-pub-section"> <label for="link_private" class="selectit"><input id="link_private" name="link_visible" type="checkbox" value="N" <?php checked($link->link_visible, 'N'); ?> /> <?php _e('Keep this link private') ?></label> </div> </div> @@ -639,7 +632,7 @@ function link_submit_meta_box($link) { <div id="delete-action"> <?php if ( !empty($_GET['action']) && 'edit' == $_GET['action'] && current_user_can('manage_links') ) { ?> - <a class="submitdelete deletion" href="<?php echo wp_nonce_url("link.php?action=delete&link_id=$link->link_id", 'delete-bookmark_' . $link->link_id); ?>" onclick="if ( confirm('<?php echo esc_js(sprintf(__("You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete."), $link->link_name )); ?>') ) {return true;}return false;"><?php _e('Delete'); ?></a> + <a class="submitdelete deletion" href="<?php echo wp_nonce_url("link.php?action=delete&link_id=$link->link_id", 'delete-bookmark_' . $link->link_id); ?>" onclick="if ( confirm('<?php echo esc_js(sprintf(__("You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete."), $link->link_name )); ?>') ) {return true;}return false;"><?php _e('Delete'); ?></a> <?php } ?> </div> @@ -658,7 +651,6 @@ if ( !empty($_GET['action']) && 'edit' == $_GET['action'] && current_user_can('m <?php } - /** * Display link categories form fields. * @@ -666,43 +658,45 @@ if ( !empty($_GET['action']) && 'edit' == $_GET['action'] && current_user_can('m * * @param object $link */ -function link_categories_meta_box($link) { ?> -<ul id="category-tabs" class="category-tabs"> - <li class="tabs"><a href="#categories-all"><?php _e( 'All Categories' ); ?></a></li> - <li class="hide-if-no-js"><a href="#categories-pop"><?php _e( 'Most Used' ); ?></a></li> -</ul> - -<div id="categories-all" class="tabs-panel"> - <ul id="categorychecklist" class="list:category categorychecklist form-no-clear"> - <?php - if ( isset($link->link_id) ) - wp_link_category_checklist($link->link_id); - else - wp_link_category_checklist(); - ?> +function link_categories_meta_box($link) { +?> +<div id="taxonomy-linkcategory" class="categorydiv"> + <ul id="category-tabs" class="category-tabs"> + <li class="tabs"><a href="#categories-all"><?php _e( 'All Categories' ); ?></a></li> + <li class="hide-if-no-js"><a href="#categories-pop"><?php _e( 'Most Used' ); ?></a></li> </ul> -</div> -<div id="categories-pop" class="tabs-panel" style="display: none;"> - <ul id="categorychecklist-pop" class="categorychecklist form-no-clear"> - <?php wp_popular_terms_checklist('link_category'); ?> - </ul> -</div> + <div id="categories-all" class="tabs-panel"> + <ul id="categorychecklist" class="list:category categorychecklist form-no-clear"> + <?php + if ( isset($link->link_id) ) + wp_link_category_checklist($link->link_id); + else + wp_link_category_checklist(); + ?> + </ul> + </div> -<div id="category-adder" class="wp-hidden-children"> - <h4><a id="category-add-toggle" href="#category-add"><?php _e( '+ Add New Category' ); ?></a></h4> - <p id="link-category-add" class="wp-hidden-child"> - <label class="screen-reader-text" for="newcat"><?php _e( '+ Add New Category' ); ?></label> - <input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php esc_attr_e( 'New category name' ); ?>" aria-required="true" /> - <input type="button" id="category-add-submit" class="add:categorychecklist:linkcategorydiv button" value="<?php esc_attr_e( 'Add' ); ?>" /> - <?php wp_nonce_field( 'add-link-category', '_ajax_nonce', false ); ?> - <span id="category-ajax-response"></span> - </p> + <div id="categories-pop" class="tabs-panel" style="display: none;"> + <ul id="categorychecklist-pop" class="categorychecklist form-no-clear"> + <?php wp_popular_terms_checklist('link_category'); ?> + </ul> + </div> + + <div id="category-adder" class="wp-hidden-children"> + <h4><a id="category-add-toggle" href="#category-add"><?php _e( '+ Add New Category' ); ?></a></h4> + <p id="link-category-add" class="wp-hidden-child"> + <label class="screen-reader-text" for="newcat"><?php _e( '+ Add New Category' ); ?></label> + <input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php esc_attr_e( 'New category name' ); ?>" aria-required="true" /> + <input type="button" id="category-add-submit" class="add:categorychecklist:linkcategorydiv button" value="<?php esc_attr_e( 'Add' ); ?>" /> + <?php wp_nonce_field( 'add-link-category', '_ajax_nonce', false ); ?> + <span id="category-ajax-response"></span> + </p> + </div> </div> <?php } - /** * Display form fields for changing link target. * @@ -726,7 +720,6 @@ function link_target_meta_box($link) { ?> <?php } - /** * Display checked checkboxes attribute for xfn microformat options. * @@ -757,7 +750,6 @@ function xfn_check( $class, $value = '', $deprecated = '' ) { } } - /** * Display xfn form fields. * @@ -767,117 +759,115 @@ function xfn_check( $class, $value = '', $deprecated = '' ) { */ function link_xfn_meta_box($link) { ?> -<table class="editform" style="width: 100%;" cellspacing="2" cellpadding="5"> +<table class="links-table" cellspacing="0"> <tr> - <th style="width: 20%;" scope="row"><label for="link_rel"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('rel:') ?></label></th> - <td style="width: 80%;"><input type="text" name="link_rel" id="link_rel" size="50" value="<?php echo ( isset( $link->link_rel ) ? esc_attr($link->link_rel) : ''); ?>" /></td> + <th scope="row"><label for="link_rel"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('rel:') ?></label></th> + <td><input type="text" name="link_rel" id="link_rel" value="<?php echo ( isset( $link->link_rel ) ? esc_attr($link->link_rel) : ''); ?>" /></td> </tr> <tr> - <td colspan="2"> - <table cellpadding="3" cellspacing="5" class="form-table"> - <tr> - <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('identity') ?> </th> - <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('identity') ?> </span></legend> - <label for="me"> - <input type="checkbox" name="identity" value="me" id="me" <?php xfn_check('identity', 'me'); ?> /> - <?php _e('another web address of mine') ?></label> - </fieldset></td> - </tr> - <tr> - <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friendship') ?> </th> - <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friendship') ?> </span></legend> - <label for="contact"> - <input class="valinp" type="radio" name="friendship" value="contact" id="contact" <?php xfn_check('friendship', 'contact'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('contact') ?></label> - <label for="acquaintance"> - <input class="valinp" type="radio" name="friendship" value="acquaintance" id="acquaintance" <?php xfn_check('friendship', 'acquaintance'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('acquaintance') ?></label> - <label for="friend"> - <input class="valinp" type="radio" name="friendship" value="friend" id="friend" <?php xfn_check('friendship', 'friend'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friend') ?></label> - <label for="friendship"> - <input name="friendship" type="radio" class="valinp" value="" id="friendship" <?php xfn_check('friendship'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?></label> - </fieldset></td> - </tr> - <tr> - <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('physical') ?> </th> - <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('physical') ?> </span></legend> - <label for="met"> - <input class="valinp" type="checkbox" name="physical" value="met" id="met" <?php xfn_check('physical', 'met'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('met') ?></label> - </fieldset></td> - </tr> - <tr> - <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('professional') ?> </th> - <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('professional') ?> </span></legend> - <label for="co-worker"> - <input class="valinp" type="checkbox" name="professional" value="co-worker" id="co-worker" <?php xfn_check('professional', 'co-worker'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('co-worker') ?></label> - <label for="colleague"> - <input class="valinp" type="checkbox" name="professional" value="colleague" id="colleague" <?php xfn_check('professional', 'colleague'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('colleague') ?></label> - </fieldset></td> - </tr> - <tr> - <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('geographical') ?> </th> - <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('geographical') ?> </span></legend> - <label for="co-resident"> - <input class="valinp" type="radio" name="geographical" value="co-resident" id="co-resident" <?php xfn_check('geographical', 'co-resident'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('co-resident') ?></label> - <label for="neighbor"> - <input class="valinp" type="radio" name="geographical" value="neighbor" id="neighbor" <?php xfn_check('geographical', 'neighbor'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('neighbor') ?></label> - <label for="geographical"> - <input class="valinp" type="radio" name="geographical" value="" id="geographical" <?php xfn_check('geographical'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?></label> - </fieldset></td> - </tr> - <tr> - <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('family') ?> </th> - <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('family') ?> </span></legend> - <label for="child"> - <input class="valinp" type="radio" name="family" value="child" id="child" <?php xfn_check('family', 'child'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('child') ?></label> - <label for="kin"> - <input class="valinp" type="radio" name="family" value="kin" id="kin" <?php xfn_check('family', 'kin'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('kin') ?></label> - <label for="parent"> - <input class="valinp" type="radio" name="family" value="parent" id="parent" <?php xfn_check('family', 'parent'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('parent') ?></label> - <label for="sibling"> - <input class="valinp" type="radio" name="family" value="sibling" id="sibling" <?php xfn_check('family', 'sibling'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('sibling') ?></label> - <label for="spouse"> - <input class="valinp" type="radio" name="family" value="spouse" id="spouse" <?php xfn_check('family', 'spouse'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('spouse') ?></label> - <label for="family"> - <input class="valinp" type="radio" name="family" value="" id="family" <?php xfn_check('family'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?></label> - </fieldset></td> - </tr> - <tr> - <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('romantic') ?> </th> - <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('romantic') ?> </span></legend> - <label for="muse"> - <input class="valinp" type="checkbox" name="romantic" value="muse" id="muse" <?php xfn_check('romantic', 'muse'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('muse') ?></label> - <label for="crush"> - <input class="valinp" type="checkbox" name="romantic" value="crush" id="crush" <?php xfn_check('romantic', 'crush'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('crush') ?></label> - <label for="date"> - <input class="valinp" type="checkbox" name="romantic" value="date" id="date" <?php xfn_check('romantic', 'date'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('date') ?></label> - <label for="romantic"> - <input class="valinp" type="checkbox" name="romantic" value="sweetheart" id="romantic" <?php xfn_check('romantic', 'sweetheart'); ?> /> - <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('sweetheart') ?></label> - </fieldset></td> - </tr> - </table> - </td> + <th scope="row"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('identity') ?></th> + <td><fieldset><legend class="screen-reader-text"><span><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('identity') ?></span></legend> + <label for="me"> + <input type="checkbox" name="identity" value="me" id="me" <?php xfn_check('identity', 'me'); ?> /> + <?php _e('another web address of mine') ?></label> + </fieldset></td> + </tr> + <tr> + <th scope="row"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friendship') ?></th> + <td><fieldset><legend class="screen-reader-text"><span><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friendship') ?></span></legend> + <label for="contact"> + <input class="valinp" type="radio" name="friendship" value="contact" id="contact" <?php xfn_check('friendship', 'contact'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('contact') ?> + </label> + <label for="acquaintance"> + <input class="valinp" type="radio" name="friendship" value="acquaintance" id="acquaintance" <?php xfn_check('friendship', 'acquaintance'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('acquaintance') ?> + </label> + <label for="friend"> + <input class="valinp" type="radio" name="friendship" value="friend" id="friend" <?php xfn_check('friendship', 'friend'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('friend') ?> + </label> + <label for="friendship"> + <input name="friendship" type="radio" class="valinp" value="" id="friendship" <?php xfn_check('friendship'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?> + </label> + </fieldset></td> + </tr> + <tr> + <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('physical') ?> </th> + <td><fieldset><legend class="screen-reader-text"><span><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('physical') ?></span></legend> + <label for="met"> + <input class="valinp" type="checkbox" name="physical" value="met" id="met" <?php xfn_check('physical', 'met'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('met') ?> + </label> + </fieldset></td> + </tr> + <tr> + <th scope="row"> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('professional') ?> </th> + <td><fieldset><legend class="screen-reader-text"><span><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('professional') ?></span></legend> + <label for="co-worker"> + <input class="valinp" type="checkbox" name="professional" value="co-worker" id="co-worker" <?php xfn_check('professional', 'co-worker'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('co-worker') ?> + </label> + <label for="colleague"> + <input class="valinp" type="checkbox" name="professional" value="colleague" id="colleague" <?php xfn_check('professional', 'colleague'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('colleague') ?> + </label> + </fieldset></td> + </tr> + <tr> + <th scope="row"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('geographical') ?></th> + <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('geographical') ?> </span></legend> + <label for="co-resident"> + <input class="valinp" type="radio" name="geographical" value="co-resident" id="co-resident" <?php xfn_check('geographical', 'co-resident'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('co-resident') ?> + </label> + <label for="neighbor"> + <input class="valinp" type="radio" name="geographical" value="neighbor" id="neighbor" <?php xfn_check('geographical', 'neighbor'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('neighbor') ?> + </label> + <label for="geographical"> + <input class="valinp" type="radio" name="geographical" value="" id="geographical" <?php xfn_check('geographical'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?> + </label> + </fieldset></td> + </tr> + <tr> + <th scope="row"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('family') ?></th> + <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('family') ?> </span></legend> + <label for="child"> + <input class="valinp" type="radio" name="family" value="child" id="child" <?php xfn_check('family', 'child'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('child') ?> + </label> + <label for="kin"> + <input class="valinp" type="radio" name="family" value="kin" id="kin" <?php xfn_check('family', 'kin'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('kin') ?> + </label> + <label for="parent"> + <input class="valinp" type="radio" name="family" value="parent" id="parent" <?php xfn_check('family', 'parent'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('parent') ?> + </label> + <label for="sibling"> + <input class="valinp" type="radio" name="family" value="sibling" id="sibling" <?php xfn_check('family', 'sibling'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('sibling') ?> + </label> + <label for="spouse"> + <input class="valinp" type="radio" name="family" value="spouse" id="spouse" <?php xfn_check('family', 'spouse'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('spouse') ?> + </label> + <label for="family"> + <input class="valinp" type="radio" name="family" value="" id="family" <?php xfn_check('family'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('none') ?> + </label> + </fieldset></td> </tr> + <tr> + <th scope="row"><?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('romantic') ?></th> + <td><fieldset><legend class="screen-reader-text"><span> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('romantic') ?> </span></legend> + <label for="muse"> + <input class="valinp" type="checkbox" name="romantic" value="muse" id="muse" <?php xfn_check('romantic', 'muse'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('muse') ?> + </label> + <label for="crush"> + <input class="valinp" type="checkbox" name="romantic" value="crush" id="crush" <?php xfn_check('romantic', 'crush'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('crush') ?> + </label> + <label for="date"> + <input class="valinp" type="checkbox" name="romantic" value="date" id="date" <?php xfn_check('romantic', 'date'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('date') ?> + </label> + <label for="romantic"> + <input class="valinp" type="checkbox" name="romantic" value="sweetheart" id="romantic" <?php xfn_check('romantic', 'sweetheart'); ?> /> <?php /* translators: xfn: http://gmpg.org/xfn/ */ _e('sweetheart') ?> + </label> + </fieldset></td> + </tr> + </table> <p><?php _e('If the link is to a person, you can specify your relationship with them using the above form. If you would like to learn more about the idea check out <a href="http://gmpg.org/xfn/">XFN</a>.'); ?></p> <?php } - /** * Display advanced link options form fields. * @@ -887,28 +877,28 @@ function link_xfn_meta_box($link) { */ function link_advanced_meta_box($link) { ?> -<table class="form-table" style="width: 100%;" cellspacing="2" cellpadding="5"> - <tr class="form-field"> - <th valign="top" scope="row"><label for="link_image"><?php _e('Image Address') ?></label></th> - <td><input type="text" name="link_image" class="code" id="link_image" size="50" value="<?php echo ( isset( $link->link_image ) ? esc_attr($link->link_image) : ''); ?>" style="width: 95%" /></td> +<table class="links-table" cellpadding="0"> + <tr> + <th scope="row"><label for="link_image"><?php _e('Image Address') ?></label></th> + <td><input type="text" name="link_image" class="code" id="link_image" value="<?php echo ( isset( $link->link_image ) ? esc_attr($link->link_image) : ''); ?>" /></td> </tr> - <tr class="form-field"> - <th valign="top" scope="row"><label for="rss_uri"><?php _e('RSS Address') ?></label></th> - <td><input name="link_rss" class="code" type="text" id="rss_uri" value="<?php echo ( isset( $link->link_rss ) ? esc_attr($link->link_rss) : ''); ?>" size="50" style="width: 95%" /></td> + <tr> + <th scope="row"><label for="rss_uri"><?php _e('RSS Address') ?></label></th> + <td><input name="link_rss" class="code" type="text" id="rss_uri" value="<?php echo ( isset( $link->link_rss ) ? esc_attr($link->link_rss) : ''); ?>" /></td> </tr> - <tr class="form-field"> - <th valign="top" scope="row"><label for="link_notes"><?php _e('Notes') ?></label></th> - <td><textarea name="link_notes" id="link_notes" cols="50" rows="10" style="width: 95%"><?php echo ( isset( $link->link_notes ) ? $link->link_notes : ''); // textarea_escaped ?></textarea></td> + <tr> + <th scope="row"><label for="link_notes"><?php _e('Notes') ?></label></th> + <td><textarea name="link_notes" id="link_notes" rows="10"><?php echo ( isset( $link->link_notes ) ? $link->link_notes : ''); // textarea_escaped ?></textarea></td> </tr> - <tr class="form-field"> - <th valign="top" scope="row"><label for="link_rating"><?php _e('Rating') ?></label></th> + <tr> + <th scope="row"><label for="link_rating"><?php _e('Rating') ?></label></th> <td><select name="link_rating" id="link_rating" size="1"> <?php - for ($r = 0; $r <= 10; $r++) { - echo(' <option value="'. esc_attr($r) .'" '); - if ( isset($link->link_rating) && $link->link_rating == $r) - echo 'selected="selected"'; - echo('>'.$r.'</option>'); + for ( $r = 0; $r <= 10; $r++ ) { + echo '<option value="' . $r . '"'; + if ( isset($link->link_rating) && $link->link_rating == $r ) + echo ' selected="selected"'; + echo('>' . $r . '</option>'); } ?></select> <?php _e('(Leave at 0 for no rating.)') ?> </td> diff --git a/wp-admin/includes/misc.php b/wp-admin/includes/misc.php index 594ec7a7f..14f94fbed 100644 --- a/wp-admin/includes/misc.php +++ b/wp-admin/includes/misc.php @@ -196,17 +196,15 @@ function update_recently_edited( $file ) { * * @since 2.1.0 * - * @param unknown_type $old_value - * @param unknown_type $value + * @param string $old_value + * @param string $value */ function update_home_siteurl( $old_value, $value ) { - global $wp_rewrite; - if ( defined( "WP_INSTALLING" ) ) return; // If home changed, write rewrite rules to new location. - $wp_rewrite->flush_rules(); + flush_rewrite_rules(); } add_action( 'update_option_home', 'update_home_siteurl', 10, 2 ); @@ -340,7 +338,6 @@ function set_screen_options() { if ( in_array( $type, get_taxonomies()) ) $map_option = 'edit_tags_per_page'; - switch ( $map_option ) { case 'edit_per_page': case 'users_per_page': @@ -586,10 +583,10 @@ foreach ( $_wp_admin_css_colors as $color => $color_info ): ?> } function _ipad_meta() { - if ( strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false ) { ?> - <meta name="viewport" id="ipad-viewportmeta" content="width=device-width, initial-scale=1"> - <?php + if ( wp_is_mobile() ) { + ?> + <meta name="viewport" id="viewport-meta" content="width=device-width, initial-scale=1"> + <?php } } add_action('admin_head', '_ipad_meta'); - diff --git a/wp-admin/includes/ms-deprecated.php b/wp-admin/includes/ms-deprecated.php index e7b017beb..7119018b1 100644 --- a/wp-admin/includes/ms-deprecated.php +++ b/wp-admin/includes/ms-deprecated.php @@ -65,4 +65,12 @@ function is_wpmu_sitewide_plugin( $file ) { return is_network_only_plugin( $file ); } -?> \ No newline at end of file +function get_site_allowed_themes() { + _deprecated_function( __FUNCTION__, '3.4', 'WP_Theme::get_allowed_on_network()' ); + return array_map( 'intval', WP_Theme::get_allowed_on_network() ); +} + +function wpmu_get_blog_allowedthemes( $blog_id = 0 ) { + _deprecated_function( __FUNCTION__, '3.4', 'WP_Theme::get_allowed_on_site()' ); + return array_map( 'intval', WP_Theme::get_allowed_on_site( $blog_id ) ); +} \ No newline at end of file diff --git a/wp-admin/includes/ms.php b/wp-admin/includes/ms.php index 2c275dfca..a6828b2de 100644 --- a/wp-admin/includes/ms.php +++ b/wp-admin/includes/ms.php @@ -49,7 +49,7 @@ add_filter( 'wp_handle_upload_prefilter', 'check_upload_size' ); * @since 3.0.0 * * @param int $blog_id Blog ID - * @param bool $drop True if blog's table should be dropped. Default is false. + * @param bool $drop True if blog's table should be dropped. Default is false. * @return void */ function wpmu_delete_blog( $blog_id, $drop = false ) { @@ -89,7 +89,8 @@ function wpmu_delete_blog( $blog_id, $drop = false ) { $wpdb->query( "DROP TABLE IF EXISTS `$table`" ); } - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) ); + $wpdb->delete( $wpdb->blogs, array( 'blog_id' => $blog_id ) ); + $dir = apply_filters( 'wpmu_delete_blog_upload_dir', WP_CONTENT_DIR . "/blogs.dir/{$blog_id}/files/", $blog_id ); $dir = rtrim( $dir, DIRECTORY_SEPARATOR ); $top_dir = $dir; @@ -115,7 +116,7 @@ function wpmu_delete_blog( $blog_id, $drop = false ) { $index++; } - $stack = array_reverse( $stack ); // Last added dirs are deepest + $stack = array_reverse( $stack ); // Last added dirs are deepest foreach( (array) $stack as $dir ) { if ( $dir != $top_dir) @rmdir( $dir ); @@ -131,6 +132,7 @@ function wpmu_delete_user( $id ) { global $wpdb; $id = (int) $id; + $user = new WP_User( $id ); do_action( 'wpmu_delete_user', $id ); @@ -158,10 +160,13 @@ function wpmu_delete_user( $id ) { } } - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->users WHERE ID = %d", $id ) ); - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->usermeta WHERE user_id = %d", $id ) ); + $meta = $wpdb->get_col( $wpdb->prepare( "SELECT umeta_id FROM $wpdb->usermeta WHERE user_id = %d", $id ) ); + foreach ( $meta as $mid ) + delete_metadata_by_mid( 'user', $mid ); + + $wpdb->delete( $wpdb->users, array( 'ID' => $id ) ); - clean_user_cache( $id ); + clean_user_cache( $user ); // allow for commit transaction do_action( 'deleted_user', $id ); @@ -169,35 +174,6 @@ function wpmu_delete_user( $id ) { return true; } -function wpmu_get_blog_allowedthemes( $blog_id = 0 ) { - $themes = get_themes(); - - if ( $blog_id != 0 ) - switch_to_blog( $blog_id ); - - $blog_allowed_themes = get_option( 'allowedthemes' ); - if ( !is_array( $blog_allowed_themes ) || empty( $blog_allowed_themes ) ) { // convert old allowed_themes to new allowedthemes - $blog_allowed_themes = get_option( 'allowed_themes' ); - - if ( is_array( $blog_allowed_themes ) ) { - foreach( (array) $themes as $key => $theme ) { - $theme_key = esc_html( $theme['Stylesheet'] ); - if ( isset( $blog_allowed_themes[$key] ) == true ) { - $blog_allowedthemes[$theme_key] = 1; - } - } - $blog_allowed_themes = $blog_allowedthemes; - add_option( 'allowedthemes', $blog_allowed_themes ); - delete_option( 'allowed_themes' ); - } - } - - if ( $blog_id != 0 ) - restore_current_blog(); - - return $blog_allowed_themes; -} - function update_option_new_admin_email( $old_value, $value ) { $email = get_option( 'admin_email' ); if ( $value == get_option( 'admin_email' ) || !is_email( $value ) ) @@ -296,26 +272,6 @@ function new_user_email_admin_notice() { } add_action( 'admin_notices', 'new_user_email_admin_notice' ); -function get_site_allowed_themes() { - $themes = get_themes(); - $allowed_themes = get_site_option( 'allowedthemes' ); - if ( !is_array( $allowed_themes ) || empty( $allowed_themes ) ) { - $allowed_themes = get_site_option( 'allowed_themes' ); // convert old allowed_themes format - if ( !is_array( $allowed_themes ) ) { - $allowed_themes = array(); - } else { - foreach( (array) $themes as $key => $theme ) { - $theme_key = esc_html( $theme['Stylesheet'] ); - if ( isset( $allowed_themes[ $key ] ) == true ) { - $allowedthemes[ $theme_key ] = 1; - } - } - $allowed_themes = $allowedthemes; - } - } - return $allowed_themes; -} - /** * Determines if there is any upload space left in the current blog's quota. * @@ -423,7 +379,7 @@ function upload_space_setting( $id ) { ?> <tr> <th><?php _e( 'Site Upload Space Quota '); ?></th> - <td><input type="text" size="3" name="option[blog_upload_space]" value="<?php echo $quota; ?>" /> <?php _e( 'MB (Leave blank for network default)' ); ?></td> + <td><input type="number" step="1" min="0" style="width: 100px" name="option[blog_upload_space]" value="<?php echo $quota; ?>" /> <?php _e( 'MB (Leave blank for network default)' ); ?></td> </tr> <?php } @@ -432,12 +388,13 @@ add_action( 'wpmueditblogaction', 'upload_space_setting' ); function update_user_status( $id, $pref, $value, $deprecated = null ) { global $wpdb; - if ( null !== $deprecated ) + if ( null !== $deprecated ) _deprecated_argument( __FUNCTION__, '3.1' ); $wpdb->update( $wpdb->users, array( $pref => $value ), array( 'ID' => $id ) ); - clean_user_cache( $id ); + $user = new WP_User( $id ); + clean_user_cache( $user ); if ( $pref == 'spam' ) { if ( $value == 1 ) @@ -455,7 +412,7 @@ function refresh_user_details( $id ) { if ( !$user = get_userdata( $id ) ) return false; - clean_user_cache( $id ); + clean_user_cache( $user ); return $id; } @@ -551,7 +508,7 @@ function mu_dropdown_languages( $lang_files = array(), $current = '' ) { $output[$be] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . $be . '</option>'; } else { $translated = format_code_lang( $code_lang ); - $output[$translated] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . esc_html ( $translated ) . '</option>'; + $output[$translated] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . esc_html ( $translated ) . '</option>'; } } @@ -636,7 +593,7 @@ function choose_primary_blog() { <?php foreach( (array) $all_blogs as $blog ) { if ( $primary_blog == $blog->userblog_id ) $found = true; - ?><option value="<?php echo $blog->userblog_id ?>"<?php selected( $primary_blog, $blog->userblog_id ); ?>><?php echo esc_url( get_home_url( $blog->userblog_id ) ) ?></option><?php + ?><option value="<?php echo $blog->userblog_id ?>"<?php selected( $primary_blog, $blog->userblog_id ); ?>><?php echo esc_url( get_home_url( $blog->userblog_id ) ) ?></option><?php } ?> </select> <?php @@ -773,10 +730,10 @@ var tb_closeImage = "../../wp-includes/js/thickbox/tb-close.png"; * Whether or not we have a large network. * * The default criteria for a large network is either more than 10,000 users or more than 10,000 sites. - * Plugins can alter this criteria using the 'wp_is_large_network' filter. + * Plugins can alter this criteria using the 'wp_is_large_network' filter. * * @since 3.3.0 - * @param string $using 'sites or 'users'. Default is 'sites'. + * @param string $using 'sites or 'users'. Default is 'sites'. * @return bool True if the network meets the criteria for large. False otherwise. */ function wp_is_large_network( $using = 'sites' ) { @@ -788,4 +745,3 @@ function wp_is_large_network( $using = 'sites' ) { $count = get_blog_count(); return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count ); } -?> diff --git a/wp-admin/includes/nav-menu.php b/wp-admin/includes/nav-menu.php index 7c3380275..5fc73fcbb 100644 --- a/wp-admin/includes/nav-menu.php +++ b/wp-admin/includes/nav-menu.php @@ -7,7 +7,7 @@ * @since 3.0.0 * @uses Walker_Nav_Menu */ -class Walker_Nav_Menu_Edit extends Walker_Nav_Menu { +class Walker_Nav_Menu_Edit extends Walker_Nav_Menu { /** * @see Walker_Nav_Menu::start_lvl() * @since 3.0.0 @@ -209,7 +209,7 @@ class Walker_Nav_Menu_Edit extends Walker_Nav_Menu { * @since 3.0.0 * @uses Walker_Nav_Menu */ -class Walker_Nav_Menu_Checklist extends Walker_Nav_Menu { +class Walker_Nav_Menu_Checklist extends Walker_Nav_Menu { function __construct( $fields = false ) { if ( $fields ) { $this->db_fields = $fields; @@ -324,7 +324,6 @@ function _wp_ajax_menu_quick_search( $request = array() ) { } - } elseif ( preg_match('/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*\b)/', $type, $matches) ) { if ( 'posttype' == $matches[1] && get_post_type_object( $matches[2] ) ) { query_posts(array( @@ -692,7 +691,7 @@ function wp_nav_menu_item_post_type_meta_box( $object, $post_type ) { } ?> <p class="quick-search-wrap"> - <input type="text" class="quick-search input-with-default-title" title="<?php esc_attr_e('Search'); ?>" value="<?php echo $searched; ?>" name="quick-search-posttype-<?php echo $post_type_name; ?>" /> + <input type="search" class="quick-search input-with-default-title" title="<?php esc_attr_e('Search'); ?>" value="<?php echo $searched; ?>" name="quick-search-posttype-<?php echo $post_type_name; ?>" /> <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /> <?php submit_button( __( 'Search' ), 'quick-search-submit button-secondary hide-if-js', 'submit', false, array( 'id' => 'submit-quick-search-posttype-' . $post_type_name ) ); ?> </p> @@ -711,7 +710,6 @@ function wp_nav_menu_item_post_type_meta_box( $object, $post_type ) { </ul> </div><!-- /.tabs-panel --> - <div id="<?php echo $post_type_name; ?>-all" class="tabs-panel tabs-panel-view-all <?php echo ( 'all' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' ); ?>"> @@ -767,7 +765,6 @@ function wp_nav_menu_item_post_type_meta_box( $object, $post_type ) { <?php endif; ?> </div><!-- /.tabs-panel --> - <p class="button-controls"> <span class="list-controls"> <a href="<?php @@ -814,7 +811,6 @@ function wp_nav_menu_item_taxonomy_meta_box( $object, $taxonomy ) { 'hide_empty' => false, 'hierarchical' => 1, 'include' => '', - 'include_last_update_time' => false, 'number' => $per_page, 'offset' => $offset, 'order' => 'ASC', @@ -926,7 +922,7 @@ function wp_nav_menu_item_taxonomy_meta_box( $object, $taxonomy ) { } ?> <p class="quick-search-wrap"> - <input type="text" class="quick-search input-with-default-title" title="<?php esc_attr_e('Search'); ?>" value="<?php echo $searched; ?>" name="quick-search-taxonomy-<?php echo $taxonomy_name; ?>" /> + <input type="search" class="quick-search input-with-default-title" title="<?php esc_attr_e('Search'); ?>" value="<?php echo $searched; ?>" name="quick-search-taxonomy-<?php echo $taxonomy_name; ?>" /> <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /> <?php submit_button( __( 'Search' ), 'quick-search-submit button-secondary hide-if-js', 'submit', false, array( 'id' => 'submit-quick-search-taxonomy-' . $taxonomy_name ) ); ?> </p> @@ -990,7 +986,7 @@ function wp_save_nav_menu_items( $menu_id = 0, $menu_data = array() ) { ( ! isset( $_item_object_data['menu-item-type'] ) || // and item type either isn't set in_array( $_item_object_data['menu-item-url'], array( 'http://', '' ) ) || // or URL is the default - ! ( 'custom' == $_item_object_data['menu-item-type'] && ! isset( $_item_object_data['menu-item-db-id'] ) ) || // or it's not a custom menu item (but not the custom home page) + ! ( 'custom' == $_item_object_data['menu-item-type'] && ! isset( $_item_object_data['menu-item-db-id'] ) ) || // or it's not a custom menu item (but not the custom home page) ! empty( $_item_object_data['menu-item-db-id'] ) // or it *is* a custom menu item that already exists ) ) { @@ -1125,7 +1121,6 @@ function wp_get_nav_menu_to_edit( $menu_id = 0 ) { return $menu; } - } /** @@ -1165,5 +1160,3 @@ function _wp_delete_orphaned_draft_menu_items() { } add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); - -?> diff --git a/wp-admin/includes/plugin-install.php b/wp-admin/includes/plugin-install.php index 71cc36dc6..f0d7cbdeb 100644 --- a/wp-admin/includes/plugin-install.php +++ b/wp-admin/includes/plugin-install.php @@ -43,11 +43,11 @@ function plugins_api($action, $args = null) { if ( false === $res ) { $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) ); if ( is_wp_error($request) ) { - $res = new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occurred during the API request.'), $request->get_error_message() ); + $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), $request->get_error_message() ); } else { - $res = unserialize( wp_remote_retrieve_body( $request ) ); - if ( false === $res ) - $res = new WP_Error('plugins_api_failed', __('An unknown error occurred.'), wp_remote_retrieve_body( $request ) ); + $res = maybe_unserialize( wp_remote_retrieve_body( $request ) ); + if ( ! is_object( $res ) && ! is_array( $res ) ) + $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), wp_remote_retrieve_body( $request ) ); } } elseif ( !is_wp_error($res) ) { $res->external = true; @@ -84,8 +84,7 @@ function install_dashboard() { <p><?php printf( __( 'Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the <a href="http://wordpress.org/extend/plugins/">WordPress Plugin Directory</a> or upload a plugin in .zip format via <a href="%s">this page</a>.' ), self_admin_url( 'plugin-install.php?tab=upload' ) ); ?></p> <h4><?php _e('Search') ?></h4> - <p class="install-help"><?php _e('Search for plugins by keyword, author, or tag.') ?></p> - <?php install_search_form(); ?> + <?php install_search_form( false ); ?> <h4><?php _e('Popular tags') ?></h4> <p class="install-help"><?php _e('You may also browse based on the most popular tags in the Plugin Directory:') ?></p> @@ -116,18 +115,20 @@ add_action('install_plugins_dashboard', 'install_dashboard'); * * @since 2.7.0 */ -function install_search_form(){ - $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : ''; +function install_search_form( $type_selector = true ) { + $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : 'term'; $term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : ''; ?><form id="search-plugins" method="get" action=""> <input type="hidden" name="tab" value="search" /> + <?php if ( $type_selector ) : ?> <select name="type" id="typeselector"> - <option value="term"<?php selected('term', $type) ?>><?php _e('Term'); ?></option> + <option value="term"<?php selected('term', $type) ?>><?php _e('Keyword'); ?></option> <option value="author"<?php selected('author', $type) ?>><?php _e('Author'); ?></option> <option value="tag"<?php selected('tag', $type) ?>><?php _ex('Tag', 'Plugin Installer'); ?></option> </select> - <input type="text" name="s" value="<?php echo esc_attr($term) ?>" /> + <?php endif; ?> + <input type="search" name="s" value="<?php echo esc_attr($term) ?>" /> <label class="screen-reader-text" for="plugin-search-input"><?php _e('Search Plugins'); ?></label> <?php submit_button( __( 'Search Plugins' ), 'button', 'plugin-search-input', false ); ?> </form><?php @@ -167,7 +168,6 @@ add_action('install_plugins_search', 'display_plugins_table'); add_action('install_plugins_featured', 'display_plugins_table'); add_action('install_plugins_popular', 'display_plugins_table'); add_action('install_plugins_new', 'display_plugins_table'); -add_action('install_plugins_updated', 'display_plugins_table'); /** * Determine the status we can perform on a plugin. @@ -185,7 +185,7 @@ function install_plugin_install_status($api, $loop = false) { //Check to see if this plugin is known to be installed, and has an update awaiting it. $update_plugins = get_site_transient('update_plugins'); - if ( is_object( $update_plugins ) ) { + if ( isset( $update_plugins->response ) ) { foreach ( (array)$update_plugins->response as $file => $plugin ) { if ( $plugin->slug === $api->slug ) { $status = 'update_available'; @@ -199,7 +199,7 @@ function install_plugin_install_status($api, $loop = false) { } if ( 'install' == $status ) { - if ( is_dir( WP_PLUGIN_DIR . '/' . $api->slug ) ) { + if ( is_dir( WP_PLUGIN_DIR . '/' . $api->slug ) ) { $installed_plugin = get_plugins('/' . $api->slug); if ( empty($installed_plugin) ) { if ( current_user_can('install_plugins') ) @@ -245,12 +245,24 @@ function install_plugin_information() { if ( is_wp_error($api) ) wp_die($api); - $plugins_allowedtags = array('a' => array('href' => array(), 'title' => array(), 'target' => array()), - 'abbr' => array('title' => array()), 'acronym' => array('title' => array()), - 'code' => array(), 'pre' => array(), 'em' => array(), 'strong' => array(), - 'div' => array(), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), - 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(), - 'img' => array('src' => array(), 'class' => array(), 'alt' => array())); + $plugins_allowedtags = array( + 'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ), + 'abbr' => array( 'title' => array() ), 'acronym' => array( 'title' => array() ), + 'code' => array(), 'pre' => array(), 'em' => array(), 'strong' => array(), + 'div' => array(), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), + 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(), + 'img' => array( 'src' => array(), 'class' => array(), 'alt' => array() ) + ); + + $plugins_section_titles = array( + 'description' => _x('Description', 'Plugin installer section title'), + 'installation' => _x('Installation', 'Plugin installer section title'), + 'faq' => _x('FAQ', 'Plugin installer section title'), + 'screenshots' => _x('Screenshots', 'Plugin installer section title'), + 'changelog' => _x('Changelog', 'Plugin installer section title'), + 'other_notes' => _x('Other Notes', 'Plugin installer section title') + ); + //Sanitize HTML foreach ( (array)$api->sections as $section_name => $content ) $api->sections[$section_name] = wp_kses($content, $plugins_allowedtags); @@ -268,14 +280,16 @@ function install_plugin_information() { echo "<ul id='sidemenu'>\n"; foreach ( (array)$api->sections as $section_name => $content ) { - $title = $section_name; - $title = ucwords(str_replace('_', ' ', $title)); + if ( isset( $plugins_section_titles[ $section_name ] ) ) + $title = $plugins_section_titles[ $section_name ]; + else + $title = ucwords( str_replace( '_', ' ', $section_name ) ); $class = ( $section_name == $section ) ? ' class="current"' : ''; $href = add_query_arg( array('tab' => $tab, 'section' => $section_name) ); $href = esc_url($href); - $san_title = esc_attr(sanitize_title_with_dashes($title)); - echo "\t<li><a name='$san_title' target='' href='$href'$class>$title</a></li>\n"; + $san_section = esc_attr( $section_name ); + echo "\t<li><a name='$san_section' href='$href' $class>$title</a></li>\n"; } echo "</ul>\n"; echo "</div>\n"; @@ -322,18 +336,13 @@ function install_plugin_information() { <?php endif; if ( ! empty($api->slug) && empty($api->external) ) : ?> <li><a target="_blank" href="http://wordpress.org/extend/plugins/<?php echo $api->slug ?>/"><?php _e('WordPress.org Plugin Page »') ?></a></li> <?php endif; if ( ! empty($api->homepage) ) : ?> - <li><a target="_blank" href="<?php echo $api->homepage ?>"><?php _e('Plugin Homepage »') ?></a></li> + <li><a target="_blank" href="<?php echo $api->homepage ?>"><?php _e('Plugin Homepage »') ?></a></li> <?php endif; ?> </ul> <?php if ( ! empty($api->rating) ) : ?> <h2><?php _e('Average Rating') ?></h2> <div class="star-holder" title="<?php printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings), number_format_i18n($api->num_ratings)); ?>"> - <div class="star star-rating" style="width: <?php echo esc_attr($api->rating) ?>px"></div> - <div class="star star5"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('5 stars') ?>" /></div> - <div class="star star4"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('4 stars') ?>" /></div> - <div class="star star3"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('3 stars') ?>" /></div> - <div class="star star2"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('2 stars') ?>" /></div> - <div class="star star1"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('1 star') ?>" /></div> + <div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $api->rating ) ); ?>px"></div> </div> <small><?php printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings), number_format_i18n($api->num_ratings)); ?></small> <?php endif; ?> @@ -347,18 +356,20 @@ function install_plugin_information() { echo '<div class="updated"><p>' . __('<strong>Warning:</strong> This plugin has <strong>not been marked as compatible</strong> with your version of WordPress.') . '</p></div>'; foreach ( (array)$api->sections as $section_name => $content ) { - $title = $section_name; - $title[0] = strtoupper($title[0]); - $title = str_replace('_', ' ', $title); + + if ( isset( $plugins_section_titles[ $section_name ] ) ) + $title = $plugins_section_titles[ $section_name ]; + else + $title = ucwords( str_replace( '_', ' ', $section_name ) ); $content = links_add_base_url($content, 'http://wordpress.org/extend/plugins/' . $api->slug . '/'); $content = links_add_target($content, '_blank'); - $san_title = esc_attr(sanitize_title_with_dashes($title)); + $san_section = esc_attr( $section_name ); $display = ( $section_name == $section ) ? 'block' : 'none'; - echo "\t<div id='section-{$san_title}' class='section' style='display: {$display};'>\n"; + echo "\t<div id='section-{$san_section}' class='section' style='display: {$display};'>\n"; echo "\t\t<h2 class='long-header'>$title</h2>"; echo $content; echo "\t</div>\n"; diff --git a/wp-admin/includes/plugin.php b/wp-admin/includes/plugin.php index be97e8c38..89ebdea83 100644 --- a/wp-admin/includes/plugin.php +++ b/wp-admin/includes/plugin.php @@ -65,8 +65,8 @@ * @since 1.5.0 * * @param string $plugin_file Path to the plugin file - * @param bool $markup If the returned data should have HTML markup applied - * @param bool $translate If the returned data should be translated + * @param bool $markup Optional. If the returned data should have HTML markup applied. Defaults to true. + * @param bool $translate Optional. If the returned data should be translated. Defaults to true. * @return array See above for description. */ function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { @@ -88,68 +88,85 @@ function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { $plugin_data = get_file_data( $plugin_file, $default_headers, 'plugin' ); // Site Wide Only is the old header for Network - if ( empty( $plugin_data['Network'] ) && ! empty( $plugin_data['_sitewide'] ) ) { + if ( ! $plugin_data['Network'] && $plugin_data['_sitewide'] ) { _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The <code>%1$s</code> plugin header is deprecated. Use <code>%2$s</code> instead.' ), 'Site Wide Only: true', 'Network: true' ) ); $plugin_data['Network'] = $plugin_data['_sitewide']; } $plugin_data['Network'] = ( 'true' == strtolower( $plugin_data['Network'] ) ); unset( $plugin_data['_sitewide'] ); - //For backward compatibility by default Title is the same as Name. - $plugin_data['Title'] = $plugin_data['Name']; - - if ( $markup || $translate ) + if ( $markup || $translate ) { $plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); - else + } else { + $plugin_data['Title'] = $plugin_data['Name']; $plugin_data['AuthorName'] = $plugin_data['Author']; + } return $plugin_data; } -function _get_plugin_data_markup_translate($plugin_file, $plugin_data, $markup = true, $translate = true) { - - //Translate fields - if ( $translate && ! empty($plugin_data['TextDomain']) ) { - if ( ! empty( $plugin_data['DomainPath'] ) ) - load_plugin_textdomain($plugin_data['TextDomain'], false, dirname($plugin_file). $plugin_data['DomainPath']); - else - load_plugin_textdomain($plugin_data['TextDomain'], false, dirname($plugin_file)); +/** + * Sanitizes plugin data, optionally adds markup, optionally translates. + * + * @since 2.7.0 + * @access private + * @see get_plugin_data() + */ +function _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup = true, $translate = true ) { - foreach ( array('Name', 'PluginURI', 'Description', 'Author', 'AuthorURI', 'Version') as $field ) - $plugin_data[ $field ] = translate($plugin_data[ $field ], $plugin_data['TextDomain']); + // Translate fields + if ( $translate ) { + if ( $textdomain = $plugin_data['TextDomain'] ) { + if ( $plugin_data['DomainPath'] ) + load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) . $plugin_data['DomainPath'] ); + else + load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) ); + } elseif ( in_array( basename( $plugin_file ), array( 'hello.php', 'akismet.php' ) ) ) { + $textdomain = 'default'; + } + if ( $textdomain ) { + foreach ( array( 'Name', 'PluginURI', 'Description', 'Author', 'AuthorURI', 'Version' ) as $field ) + $plugin_data[ $field ] = translate( $plugin_data[ $field ], $textdomain ); + } } - $plugins_allowedtags = array( - 'a' => array( 'href' => array(), 'title' => array() ), - 'abbr' => array( 'title' => array() ), - 'acronym' => array( 'title' => array() ), - 'code' => array(), - 'em' => array(), - 'strong' => array(), + // Sanitize fields + $allowed_tags = $allowed_tags_in_links = array( + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, ); + $allowed_tags['a'] = array( 'href' => true, 'title' => true ); - $plugin_data['AuthorName'] = $plugin_data['Author'] = wp_kses( $plugin_data['Author'], $plugins_allowedtags ); + // Name is marked up inside <a> tags. Don't allow these. + // Author is too, but some plugins have used <a> here (omitting Author URI). + $plugin_data['Name'] = wp_kses( $plugin_data['Name'], $allowed_tags_in_links ); + $plugin_data['Author'] = wp_kses( $plugin_data['Author'], $allowed_tags ); - //Apply Markup + $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $allowed_tags ); + $plugin_data['Version'] = wp_kses( $plugin_data['Version'], $allowed_tags ); + + $plugin_data['PluginURI'] = esc_url( $plugin_data['PluginURI'] ); + $plugin_data['AuthorURI'] = esc_url( $plugin_data['AuthorURI'] ); + + $plugin_data['Title'] = $plugin_data['Name']; + $plugin_data['AuthorName'] = $plugin_data['Author']; + + // Apply markup if ( $markup ) { - if ( ! empty($plugin_data['PluginURI']) && ! empty($plugin_data['Name']) ) + if ( $plugin_data['PluginURI'] && $plugin_data['Name'] ) $plugin_data['Title'] = '<a href="' . $plugin_data['PluginURI'] . '" title="' . esc_attr__( 'Visit plugin homepage' ) . '">' . $plugin_data['Name'] . '</a>'; - else - $plugin_data['Title'] = $plugin_data['Name']; - if ( ! empty($plugin_data['AuthorURI']) && ! empty($plugin_data['Author']) ) + if ( $plugin_data['AuthorURI'] && $plugin_data['Author'] ) $plugin_data['Author'] = '<a href="' . $plugin_data['AuthorURI'] . '" title="' . esc_attr__( 'Visit author homepage' ) . '">' . $plugin_data['Author'] . '</a>'; $plugin_data['Description'] = wptexturize( $plugin_data['Description'] ); - if ( ! empty($plugin_data['Author']) ) - $plugin_data['Description'] .= ' <cite>' . sprintf( __('By %s'), $plugin_data['Author'] ) . '.</cite>'; - } - // Sanitize all displayed data. Author and AuthorName sanitized above. - $plugin_data['Title'] = wp_kses( $plugin_data['Title'], $plugins_allowedtags ); - $plugin_data['Version'] = wp_kses( $plugin_data['Version'], $plugins_allowedtags ); - $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $plugins_allowedtags ); - $plugin_data['Name'] = wp_kses( $plugin_data['Name'], $plugins_allowedtags ); + if ( $plugin_data['Author'] ) + $plugin_data['Description'] .= ' <cite>' . sprintf( __('By %s.'), $plugin_data['Author'] ) . '</cite>'; + } return $plugin_data; } @@ -555,9 +572,11 @@ function activate_plugin( $plugin, $redirect = '', $network_wide = false, $silen * @since 2.5.0 * * @param string|array $plugins Single plugin or list of plugins to deactivate. + * @param mixed $network_wide Whether to deactivate the plugin for all sites in the network. + * A value of null (the default) will deactivate plugins for both the site and the network. * @param bool $silent Prevent calling deactivation hooks. Default is false. */ -function deactivate_plugins( $plugins, $silent = false ) { +function deactivate_plugins( $plugins, $silent = false, $network_wide = null ) { if ( is_multisite() ) $network_current = get_site_option( 'active_sitewide_plugins', array() ); $current = get_option( 'active_plugins', array() ); @@ -568,15 +587,21 @@ function deactivate_plugins( $plugins, $silent = false ) { if ( ! is_plugin_active($plugin) ) continue; - $network_wide = is_plugin_active_for_network( $plugin ); + $network_deactivating = false !== $network_wide && is_plugin_active_for_network( $plugin ); if ( ! $silent ) - do_action( 'deactivate_plugin', $plugin, $network_wide ); + do_action( 'deactivate_plugin', $plugin, $network_deactivating ); - if ( $network_wide ) { - $do_network = true; - unset( $network_current[ $plugin ] ); - } else { + if ( false !== $network_wide ) { + if ( is_plugin_active_for_network( $plugin ) ) { + $do_network = true; + unset( $network_current[ $plugin ] ); + } elseif ( $network_wide ) { + continue; + } + } + + if ( true !== $network_wide ) { $key = array_search( $plugin, $current ); if ( false !== $key ) { $do_blog = true; @@ -585,8 +610,8 @@ function deactivate_plugins( $plugins, $silent = false ) { } if ( ! $silent ) { - do_action( 'deactivate_' . $plugin, $network_wide ); - do_action( 'deactivated_plugin', $plugin, $network_wide ); + do_action( 'deactivate_' . $plugin, $network_deactivating ); + do_action( 'deactivated_plugin', $plugin, $network_deactivating ); } } @@ -863,7 +888,7 @@ function uninstall_plugin($plugin) { * * @return string The resulting page's hook_suffix */ -function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = NULL ) { +function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = null ) { global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages; $menu_slug = plugin_basename( $menu_slug ); @@ -882,7 +907,7 @@ function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $func $new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $hookname, $hookname, $icon_url ); - if ( null === $position ) + if ( null === $position ) $menu[] = $new_menu; else $menu[$position] = $new_menu; @@ -985,10 +1010,10 @@ function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, } // If the parent doesn't already have a submenu, add a link to the parent - // as the first item in the submenu. If the submenu file is the same as the - // parent file someone is trying to link back to the parent manually. In + // as the first item in the submenu. If the submenu file is the same as the + // parent file someone is trying to link back to the parent manually. In // this case, don't automatically add a link back to avoid duplication. - if (!isset( $submenu[$parent_slug] ) && $menu_slug != $parent_slug ) { + if (!isset( $submenu[$parent_slug] ) && $menu_slug != $parent_slug ) { foreach ( (array)$menu as $parent_menu ) { if ( $parent_menu[2] == $parent_slug && current_user_can( $parent_menu[1] ) ) $submenu[$parent_slug][] = $parent_menu; @@ -1002,7 +1027,7 @@ function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, add_action( $hookname, $function ); $_registered_pages[$hookname] = true; - // backwards-compatibility for plugins using add_management page. See wp-admin/admin.php for redirect from edit.php to tools.php + // backwards-compatibility for plugins using add_management page. See wp-admin/admin.php for redirect from edit.php to tools.php if ( 'tools.php' == $parent_slug ) $_registered_pages[get_plugin_page_hookname( $menu_slug, 'edit.php')] = true; @@ -1246,7 +1271,6 @@ function add_comments_page( $page_title, $menu_title, $capability, $menu_slug, $ return add_submenu_page( 'edit-comments.php', $page_title, $menu_title, $capability, $menu_slug, $function ); } - /** * Remove a top level admin menu * @@ -1589,7 +1613,7 @@ function user_can_access_admin_page() { * * @since 2.7.0 * - * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. + * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. * Default whitelisted option key names include "general," "discussion," and "reading," among others. * @param string $option_name The name of an option to sanitize and save. * @param unknown_type $sanitize_callback A callback function that sanitizes the option's value. @@ -1715,12 +1739,10 @@ function remove_option_whitelist( $del_options, $options = '' ) { * * @since 2.7.0 * - * @param string $option_group A settings group name. This should match the group name used in register_setting(). + * @param string $option_group A settings group name. This should match the group name used in register_setting(). */ function settings_fields($option_group) { echo "<input type='hidden' name='option_page' value='" . esc_attr($option_group) . "' />"; echo '<input type="hidden" name="action" value="update" />'; wp_nonce_field("$option_group-options"); } - -?> diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php index 831c7025e..3bfea5741 100644 --- a/wp-admin/includes/post.php +++ b/wp-admin/includes/post.php @@ -171,7 +171,7 @@ function edit_post( $post_data = null ) { $post_data = _wp_translate_postdata( true, $post_data ); if ( is_wp_error($post_data) ) wp_die( $post_data->get_error_message() ); - if ( 'autosave' != $post_data['action'] && 'auto-draft' == $post_data['post_status'] ) + if ( 'autosave' != $post_data['action'] && 'auto-draft' == $post_data['post_status'] ) $post_data['post_status'] = 'draft'; if ( isset($post_data['visibility']) ) { @@ -302,10 +302,12 @@ function bulk_edit_posts( $post_data = null ) { if ( empty($terms) ) continue; if ( is_taxonomy_hierarchical( $tax_name ) ) { - $tax_input[$tax_name] = array_map( 'absint', $terms ); + $tax_input[ $tax_name ] = array_map( 'absint', $terms ); } else { - $tax_input[$tax_name] = preg_replace( '/\s*,\s*/', ',', rtrim( trim($terms), ' ,' ) ); - $tax_input[$tax_name] = explode(',', $tax_input[$tax_name]); + $comma = _x( ',', 'tag delimiter' ); + if ( ',' !== $comma ) + $terms = str_replace( $comma, ',', $terms ); + $tax_input[ $tax_name ] = explode( ',', trim( $terms, " \n\t\r\0\x0B," ) ); } } } @@ -352,7 +354,7 @@ function bulk_edit_posts( $post_data = null ) { $tax_names = get_object_taxonomies( $post ); foreach ( $tax_names as $tax_name ) { $taxonomy_obj = get_taxonomy($tax_name); - if ( isset( $tax_input[$tax_name]) && current_user_can( $taxonomy_obj->cap->assign_terms ) ) + if ( isset( $tax_input[$tax_name]) && current_user_can( $taxonomy_obj->cap->assign_terms ) ) $new_terms = $tax_input[$tax_name]; else $new_terms = array(); @@ -415,10 +417,6 @@ function get_default_post_to_edit( $post_type = 'post', $create_in_db = false ) $post_excerpt = esc_html( stripslashes( $_REQUEST['excerpt'] )); if ( $create_in_db ) { - // Cleanup old auto-drafts more than 7 days old - $old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" ); - foreach ( (array) $old_posts as $delete ) - wp_delete_post( $delete, true ); // Force delete $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ); $post = get_post( $post_id ); if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) ) @@ -747,50 +745,47 @@ function update_meta( $meta_id, $meta_key, $meta_value ) { * @return unknown */ function _fix_attachment_links( $post_ID ) { - global $_fix_attachment_link_id; - $post = & get_post( $post_ID, ARRAY_A ); + $content = $post['post_content']; - $search = "#<a[^>]+rel=('|\")[^'\"]*attachment[^>]*>#ie"; + // quick sanity check, don't run if no pretty permalinks or post is not published + if ( !get_option('permalink_structure') || $post['post_status'] != 'publish' ) + return; - // See if we have any rel="attachment" links - if ( 0 == preg_match_all( $search, $post['post_content'], $anchor_matches, PREG_PATTERN_ORDER ) ) + // Short if there aren't any links or no '?attachment_id=' strings (strpos cannot be zero) + if ( !strpos($content, '?attachment_id=') || !preg_match_all( '/<a ([^>]+)>[\s\S]+?<\/a>/', $content, $link_matches ) ) return; - $i = 0; - $search = "#[\s]+rel=(\"|')(.*?)wp-att-(\d+)\\1#i"; - foreach ( $anchor_matches[0] as $anchor ) { - if ( 0 == preg_match( $search, $anchor, $id_matches ) ) - continue; + $site_url = get_bloginfo('url'); + $site_url = substr( $site_url, (int) strpos($site_url, '://') ); // remove the http(s) + $replace = ''; - $id = (int) $id_matches[3]; + foreach ( $link_matches[1] as $key => $value ) { + if ( !strpos($value, '?attachment_id=') || !strpos($value, 'wp-att-') + || !preg_match( '/href=(["\'])[^"\']*\?attachment_id=(\d+)[^"\']*\\1/', $value, $url_match ) + || !preg_match( '/rel=["\'][^"\']*wp-att-(\d+)/', $value, $rel_match ) ) + continue; - // While we have the attachment ID, let's adopt any orphans. - $attachment = & get_post( $id, ARRAY_A ); - if ( ! empty( $attachment) && ! is_object( get_post( $attachment['post_parent'] ) ) ) { - $attachment['post_parent'] = $post_ID; - // Escape data pulled from DB. - $attachment = add_magic_quotes( $attachment ); - wp_update_post( $attachment ); - } + $quote = $url_match[1]; // the quote (single or double) + $url_id = (int) $url_match[2]; + $rel_id = (int) $rel_match[1]; - $post_search[$i] = $anchor; - $_fix_attachment_link_id = $id; - $post_replace[$i] = preg_replace_callback( "#href=(\"|')[^'\"]*\\1#", '_fix_attachment_links_replace_cb', $anchor ); - ++$i; - } + if ( !$url_id || !$rel_id || $url_id != $rel_id || strpos($url_match[0], $site_url) === false ) + continue; - $post['post_content'] = str_replace( $post_search, $post_replace, $post['post_content'] ); + $link = $link_matches[0][$key]; + $replace = str_replace( $url_match[0], 'href=' . $quote . get_attachment_link( $url_id ) . $quote, $link ); - // Escape data pulled from DB. - $post = add_magic_quotes( $post); + $content = str_replace( $link, $replace, $content ); + } - return wp_update_post( $post); -} + if ( $replace ) { + $post['post_content'] = $content; + // Escape data pulled from DB. + $post = add_magic_quotes($post); -function _fix_attachment_links_replace_cb($match) { - global $_fix_attachment_link_id; - return stripslashes( 'href='.$match[1] ).get_attachment_link( $_fix_attachment_link_id ).stripslashes( $match[1] ); + return wp_update_post($post); + } } /** @@ -973,7 +968,8 @@ function wp_edit_attachments_query( $q = false ) { } function _edit_attachments_query_helper($where) { - return $where .= ' AND post_parent < 1'; + global $wpdb; + return $where .= " AND {$wpdb->posts}.post_parent < 1"; } /** @@ -1140,12 +1136,18 @@ function get_sample_permalink_html( $id, $new_title = null, $new_slug = null ) { * @since 2.9.0 * * @param int $thumbnail_id ID of the attachment used for thumbnail + * @param int $post_id ID of the post associated with the thumbnail, defaults to global $post_ID * @return string html */ -function _wp_post_thumbnail_html( $thumbnail_id = NULL ) { +function _wp_post_thumbnail_html( $thumbnail_id = null, $post_id = null ) { global $content_width, $_wp_additional_image_sizes, $post_ID; - $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set featured image' ) . '" href="' . esc_url( get_upload_iframe_src('image') ) . '" id="set-post-thumbnail" class="thickbox">%s</a></p>'; - $content = sprintf($set_thumbnail_link, esc_html__( 'Set featured image' )); + + if ( empty( $post_id ) ) + $post_id = $post_ID; + + $upload_iframe_src = esc_url( get_upload_iframe_src('image', $post_id) ); + $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set featured image' ) . '" href="%s" id="set-post-thumbnail" class="thickbox">%s</a></p>'; + $content = sprintf( $set_thumbnail_link, $upload_iframe_src, esc_html__( 'Set featured image' ) ); if ( $thumbnail_id && get_post( $thumbnail_id ) ) { $old_content_width = $content_width; @@ -1155,8 +1157,8 @@ function _wp_post_thumbnail_html( $thumbnail_id = NULL ) { else $thumbnail_html = wp_get_attachment_image( $thumbnail_id, 'post-thumbnail' ); if ( !empty( $thumbnail_html ) ) { - $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$post_ID" ); - $content = sprintf($set_thumbnail_link, $thumbnail_html); + $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$post_id" ); + $content = sprintf( $set_thumbnail_link, $upload_iframe_src, $thumbnail_html ); $content .= '<p class="hide-if-no-js"><a href="#" id="remove-post-thumbnail" onclick="WPRemoveThumbnail(\'' . $ajax_nonce . '\');return false;">' . esc_html__( 'Remove featured image' ) . '</a></p>'; } $content_width = $old_content_width; @@ -1259,7 +1261,7 @@ function wp_create_post_autosave( $post_id ) { if ( is_wp_error( $translated ) ) return $translated; - // Only store one autosave. If there is already an autosave, overwrite it. + // Only store one autosave. If there is already an autosave, overwrite it. if ( $old_autosave = wp_get_post_autosave( $post_id ) ) { $new_autosave = _wp_post_revision_fields( $_POST, true ); $new_autosave['ID'] = $old_autosave->ID; @@ -1320,7 +1322,7 @@ function post_preview() { if ( 'draft' == $post->post_status ) { $id = edit_post(); - } else { // Non drafts are not overwritten. The autosave is stored in a special post revision. + } else { // Non drafts are not overwritten. The autosave is stored in a special post revision. $id = wp_create_post_autosave( $post->ID ); if ( ! is_wp_error($id) ) $id = $post->ID; diff --git a/wp-admin/includes/schema.php b/wp-admin/includes/schema.php index 687b8fd30..bba0871d6 100644 --- a/wp-admin/includes/schema.php +++ b/wp-admin/includes/schema.php @@ -30,7 +30,7 @@ if ( ! empty( $wpdb->collate ) ) * @since 3.3.0 * * @param string $scope Optional. The tables for which to retrieve SQL. Can be all, global, ms_global, or blog tables. Defaults to all. - * @param int $blog_id Optional. The blog ID for which to retrieve SQL. Default is the current blog ID. + * @param int $blog_id Optional. The blog ID for which to retrieve SQL. Default is the current blog ID. * @return string The SQL needed to create the requested tables. */ function wp_get_db_schema( $scope = 'all', $blog_id = null ) { @@ -103,7 +103,6 @@ CREATE TABLE $wpdb->comments ( comment_parent bigint(20) unsigned NOT NULL default '0', user_id bigint(20) unsigned NOT NULL default '0', PRIMARY KEY (comment_ID), - KEY comment_approved (comment_approved), KEY comment_post_ID (comment_post_ID), KEY comment_approved_date_gmt (comment_approved,comment_date_gmt), KEY comment_date_gmt (comment_date_gmt), @@ -128,7 +127,6 @@ CREATE TABLE $wpdb->links ( ) $charset_collate; CREATE TABLE $wpdb->options ( option_id bigint(20) unsigned NOT NULL auto_increment, - blog_id int(11) NOT NULL default '0', option_name varchar(64) NOT NULL default '', option_value longtext NOT NULL, autoload varchar(20) NOT NULL default 'yes', @@ -161,7 +159,7 @@ CREATE TABLE $wpdb->posts ( pinged text NOT NULL, post_modified datetime NOT NULL default '0000-00-00 00:00:00', post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00', - post_content_filtered text NOT NULL, + post_content_filtered longtext NOT NULL, post_parent bigint(20) unsigned NOT NULL default '0', guid varchar(255) NOT NULL default '', menu_order int(11) NOT NULL default '0', @@ -345,12 +343,21 @@ function populate_options() { $template = WP_DEFAULT_THEME; // If default theme is a child theme, we need to get its template - foreach ( (array) get_themes() as $theme ) { - if ( WP_DEFAULT_THEME == $theme['Stylesheet'] ) { - $template = $theme['Template']; - break; - } - } + $theme = wp_get_theme( $template ); + if ( ! $theme->errors() ) + $template = $theme->get_template(); + + $timezone_string = ''; + $gmt_offset = 0; + /* translators: default GMT offset or timezone string. Must be either a valid offset (-12 to 14) + or a valid timezone string (America/New_York). See http://us3.php.net/manual/en/timezones.php + for all timezone strings supported by PHP. + */ + $offset_or_tz = _x( '0', 'default GMT offset or timezone string' ); + if ( is_numeric( $offset_or_tz ) ) + $gmt_offset = $offset_or_tz; + elseif ( $offset_or_tz && in_array( $offset_or_tz, timezone_identifiers_list() ) ) + $timezone_string = $offset_or_tz; $options = array( 'siteurl' => $guessurl, @@ -359,7 +366,8 @@ function populate_options() { 'blogdescription' => __('Just another WordPress site'), 'users_can_register' => 0, 'admin_email' => 'you@example.com', - 'start_of_week' => 1, + /* translators: default start of the week. 0 = Sunday, 1 = Monday */ + 'start_of_week' => _x( '1', 'start of week' ), 'use_balanceTags' => 0, 'use_smilies' => 1, 'require_name_email' => 1, @@ -398,7 +406,7 @@ function populate_options() { 'ping_sites' => 'http://rpc.pingomatic.com/', 'advanced_edit' => 0, 'comment_max_links' => 2, - 'gmt_offset' => date('Z') / 3600, + 'gmt_offset' => $gmt_offset, // 1.5 'default_email_category' => 1, @@ -408,7 +416,6 @@ function populate_options() { 'comment_whitelist' => 1, 'blacklist_keys' => '', 'comment_registration' => 0, - 'rss_language' => 'en', 'html_type' => 'text/html', // 1.5.1 @@ -463,9 +470,10 @@ function populate_options() { 'widget_categories' => array(), 'widget_text' => array(), 'widget_rss' => array(), + 'uninstall_plugins' => array(), // 2.8 - 'timezone_string' => '', + 'timezone_string' => $timezone_string, // 2.9 'embed_autourls' => 1, @@ -494,7 +502,7 @@ function populate_options() { } // Set autoload to no for these options - $fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' ); + $fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys', 'uninstall_plugins' ); $existing_options = $wpdb->get_col("SELECT option_name FROM $wpdb->options"); @@ -523,7 +531,7 @@ function populate_options() { if ( !__get_option('home') ) update_option('home', $guessurl); // Delete unused options - $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing', 'autosave_interval', 'deactivated_plugins', 'can_compress_scripts', 'page_uris', 'update_core', 'update_plugins', 'update_themes', 'doing_cron', 'random_seed', 'rss_excerpt_length', 'secret', 'use_linksupdate', 'default_comment_status_page', 'wporg_popular_tags', 'what_to_show'); + $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing', 'autosave_interval', 'deactivated_plugins', 'can_compress_scripts', 'page_uris', 'update_core', 'update_plugins', 'update_themes', 'doing_cron', 'random_seed', 'rss_excerpt_length', 'secret', 'use_linksupdate', 'default_comment_status_page', 'wporg_popular_tags', 'what_to_show', 'rss_language'); foreach ( $unusedoptions as $option ) delete_option($option); @@ -879,7 +887,7 @@ We hope you enjoy your new site. Thanks! 'admin_user_id' => $site_user->ID, 'registration' => 'none', 'upload_filetypes' => 'jpg jpeg png gif mp3 mov avi wmv midi mid pdf', - 'blog_upload_space' => 10, + 'blog_upload_space' => 100, 'fileupload_maxk' => 1500, 'site_admins' => $site_admins, 'allowedthemes' => $allowed_themes, @@ -928,11 +936,11 @@ We hope you enjoy your new site. Thanks! } if ( $subdomain_install ) - update_option( 'permalink_structure', '/%year%/%monthnum%/%day%/%postname%/'); + $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' ); else - update_option( 'permalink_structure', '/blog/%year%/%monthnum%/%day%/%postname%/'); + $wp_rewrite->set_permalink_structure( '/blog/%year%/%monthnum%/%day%/%postname%/' ); - $wp_rewrite->flush_rules(); + flush_rewrite_rules(); if ( $subdomain_install ) { $vhost_ok = false; @@ -958,5 +966,3 @@ We hope you enjoy your new site. Thanks! return true; } - -?> diff --git a/wp-admin/includes/screen.php b/wp-admin/includes/screen.php index a182b7453..2fe318d9a 100644 --- a/wp-admin/includes/screen.php +++ b/wp-admin/includes/screen.php @@ -114,7 +114,6 @@ function get_hidden_meta_boxes( $screen ) { * * @param string $option An option name. * @param mixed $args Option-dependent arguments. - * @return void */ function add_screen_option( $option, $args = array() ) { $current_screen = get_current_screen(); @@ -176,7 +175,7 @@ function get_screen_icon( $screen = '' ) { * * @since 3.1.0 * - * @return object Current screen object + * @return WP_Screen Current screen object */ function get_current_screen() { global $current_screen; @@ -196,7 +195,7 @@ function get_current_screen() { * @param mixed $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen, * or an existing screen object. */ -function set_current_screen( $hook_name = '' ) { +function set_current_screen( $hook_name = '' ) { WP_Screen::get( $hook_name )->set_current_screen(); } @@ -208,7 +207,7 @@ function set_current_screen( $hook_name = '' ) { */ final class WP_Screen { /** - * Any action associated with the screen. 'add' for *-add.php and *-new.php screens. Empty otherwise. + * Any action associated with the screen. 'add' for *-add.php and *-new.php screens. Empty otherwise. * * @since 3.3.0 * @var string @@ -217,7 +216,7 @@ final class WP_Screen { public $action; /** - * The base type of the screen. This is typically the same as $id but with any post types and taxonomies stripped. + * The base type of the screen. This is typically the same as $id but with any post types and taxonomies stripped. * For example, for an $id of 'edit-post' the base is 'edit'. * * @since 3.3.0 @@ -226,6 +225,15 @@ final class WP_Screen { */ public $base; + /** + * The number of columns to display. Access with get_columns(). + * + * @since 3.4.0 + * @var int + * @access private + */ + private $columns = 0; + /** * The unique ID of the screen. * @@ -539,7 +547,7 @@ final class WP_Screen { * * @since 3.3.0 * - * @param string $parent_file The parent file of the screen. Typically the $parent_file global. + * @param string $parent_file The parent file of the screen. Typically the $parent_file global. */ function set_parentage( $parent_file ) { $this->parent_file = $parent_file; @@ -565,7 +573,8 @@ final class WP_Screen { * * @since 3.3.0 * - * @param string + * @param string $option Option ID. + * @param mixed $key Optional. Specific array key for when the option is an array. */ public function get_option( $option, $key = false ) { if ( ! isset( $this->_options[ $option ] ) ) @@ -578,6 +587,31 @@ final class WP_Screen { return $this->_options[ $option ]; } + /** + * Gets the help tabs registered for the screen. + * + * @since 3.4.0 + * + * @return array Help tabs with arguments. + */ + public function get_help_tabs() { + return $this->_help_tabs; + } + + /** + * Gets the arguments for a help tab. + * + * @since 3.4.0 + * + * @param string $id Help Tab ID. + * @return array Help tab arguments. + */ + public function get_help_tab( $id ) { + if ( ! isset( $this->_help_tabs[ $id ] ) ) + return null; + return $this->_help_tabs[ $id ]; + } + /** * Add a help tab to the contextual help for the screen. * Call this on the load-$pagenow hook for the relevant screen. @@ -606,7 +640,8 @@ final class WP_Screen { if ( ! $args['id'] || ! $args['title'] ) return; - $this->_help_tabs[] = $args; + // Allows for overriding an existing tab with that ID. + $this->_help_tabs[ $args['id'] ] = $args; } /** @@ -629,6 +664,17 @@ final class WP_Screen { $this->_help_tabs = array(); } + /** + * Gets the content from a contextual help sidebar. + * + * @since 3.4.0 + * + * @return string Contents of the help sidebar. + */ + public function get_help_sidebar() { + return $this->_help_sidebar; + } + /** * Add a sidebar to the contextual help for the screen. * Call this in template files after admin.php is loaded and before admin-header.php is loaded to add a sidebar to the contextual help. @@ -641,6 +687,23 @@ final class WP_Screen { $this->_help_sidebar = $content; } + /** + * Gets the number of layout columns the user has selected. + * + * The layout_columns option controls the max number and default number of + * columns. This method returns the number of columns within that range selected + * by the user via Screen Options. If no selection has been made, the default + * provisioned in layout_columns is returned. If the screen does not support + * selecting the number of layout columns, 0 is returned. + * + * @since 3.4.0 + * + * @return int Number of columns to display. + */ + public function get_columns() { + return $this->columns; + } + /** * Render the screen's help section. * @@ -657,7 +720,7 @@ final class WP_Screen { $old_help = apply_filters( 'contextual_help', $old_help, $this->id, $this ); // Default help only if there is no old-style block of text and no new-style help tabs. - if ( empty( $old_help ) && empty( $this->_help_tabs ) ) { + if ( empty( $old_help ) && ! $this->get_help_tabs() ) { $default_help = apply_filters( 'default_contextual_help', '' ); if ( $default_help ) $old_help = '<p>' . $default_help . '</p>'; @@ -671,10 +734,10 @@ final class WP_Screen { ) ); } - $has_sidebar = ! empty( $this->_help_sidebar ); + $help_sidebar = $this->get_help_sidebar(); $help_class = 'hidden'; - if ( ! $has_sidebar ) + if ( ! $help_sidebar ) $help_class .= ' no-sidebar'; // Time to render! @@ -686,35 +749,39 @@ final class WP_Screen { <div id="contextual-help-columns"> <div class="contextual-help-tabs"> <ul> - <?php foreach ( $this->_help_tabs as $i => $tab ): + <?php + $class = ' class="active"'; + foreach ( $this->get_help_tabs() as $tab ) : $link_id = "tab-link-{$tab['id']}"; $panel_id = "tab-panel-{$tab['id']}"; - $classes = ( $i == 0 ) ? 'active' : ''; ?> - <li id="<?php echo esc_attr( $link_id ); ?>" class="<?php echo esc_attr( $classes ); ?>"> + <li id="<?php echo esc_attr( $link_id ); ?>"<?php echo $class; ?>> <a href="<?php echo esc_url( "#$panel_id" ); ?>"> <?php echo esc_html( $tab['title'] ); ?> </a> </li> - <?php endforeach; ?> + <?php + $class = ''; + endforeach; + ?> </ul> </div> - <?php if ( $has_sidebar ) : ?> + <?php if ( $help_sidebar ) : ?> <div class="contextual-help-sidebar"> - <?php echo self::$this->_help_sidebar; ?> + <?php echo $help_sidebar; ?> </div> <?php endif; ?> <div class="contextual-help-tabs-wrap"> - <?php foreach ( $this->_help_tabs as $i => $tab ): + <?php + $classes = 'help-tab-content active'; + foreach ( $this->get_help_tabs() as $tab ): $panel_id = "tab-panel-{$tab['id']}"; - $classes = ( $i == 0 ) ? 'active' : ''; - $classes .= ' help-tab-content'; ?> - <div id="<?php echo esc_attr( $panel_id ); ?>" class="<?php echo esc_attr( $classes ); ?>"> + <div id="<?php echo esc_attr( $panel_id ); ?>" class="<?php echo $classes; ?>"> <?php // Print tab content. echo $tab['content']; @@ -724,22 +791,41 @@ final class WP_Screen { call_user_func_array( $tab['callback'], array( $this, $tab ) ); ?> </div> - <?php endforeach; ?> + <?php + $classes = 'help-tab-content'; + endforeach; + ?> </div> </div> </div> <?php + // Setup layout columns + + // Back compat for plugins using the filter instead of add_screen_option() + $columns = apply_filters( 'screen_layout_columns', array(), $this->id, $this ); + + if ( ! empty( $columns ) && isset( $columns[ $this->id ] ) ) + $this->add_option( 'layout_columns', array('max' => $columns[ $this->id ] ) ); + + if ( $this->get_option( 'layout_columns' ) ) { + $this->columns = (int) get_user_option("screen_layout_$this->id"); + + if ( ! $this->columns && $this->get_option( 'layout_columns', 'default' ) ) + $this->columns = $this->get_option( 'layout_columns', 'default' ); + } + $GLOBALS[ 'screen_layout_columns' ] = $this->columns; // Set the global for back-compat. + // Add screen options if ( $this->show_screen_options() ) $this->render_screen_options(); ?> </div> <?php - if ( ! $this->_help_tabs && ! $this->show_screen_options() ) + if ( ! $this->get_help_tabs() && ! $this->show_screen_options() ) return; ?> <div id="screen-meta-links"> - <?php if ( $this->_help_tabs ) : ?> + <?php if ( $this->get_help_tabs() ) : ?> <div id="contextual-help-link-wrap" class="hide-if-no-js screen-meta-toggle"> <a href="#contextual-help-wrap" id="contextual-help-link" class="show-settings"><?php _e( 'Help' ); ?></a> </div> @@ -792,9 +878,12 @@ final class WP_Screen { ?> <div id="screen-options-wrap" class="hidden"> <form id="adv-settings" action="" method="post"> + <?php if ( isset( $wp_meta_boxes[ $this->id ] ) || $this->get_option( 'per_page' ) || ( $columns && empty( $columns['_title'] ) ) ) : ?> + <h5><?php _e( 'Show on screen' ); ?></h5> <?php + endif; + if ( isset( $wp_meta_boxes[ $this->id ] ) ) : ?> - <h5><?php _ex('Show on screen', 'Metaboxes') ?></h5> <div class="metabox-prefs"> <?php meta_box_prefs( $this ); @@ -809,15 +898,17 @@ final class WP_Screen { $welcome_checked = false; } echo '<label for="wp_welcome_panel-hide">'; - echo '<input type="checkbox" id="wp_welcome_panel-hide"' . checked( (bool) $welcome_checked, true, false ) . ' />'; - echo __( 'Welcome' ) . "</label>\n"; + echo '<input type="checkbox" id="wp_welcome_panel-hide"' . checked( (bool) $welcome_checked, true, false ) . ' />'; + echo _x( 'Welcome', 'Welcome panel' ) . "</label>\n"; } ?> <br class="clear" /> </div> <?php endif; - if ( ! empty( $columns ) ) : ?> - <h5><?php echo ( isset( $columns['_title'] ) ? $columns['_title'] : _x('Show on screen', 'Columns') ) ?></h5> + if ( $columns ) : + if ( ! empty( $columns['_title'] ) ) : ?> + <h5><?php echo $columns['_title']; ?></h5> + <?php endif; ?> <div class="metabox-prefs"> <?php $special = array('_title', 'cb', 'comment', 'media', 'name', 'title', 'username', 'blogname'); @@ -858,34 +949,19 @@ final class WP_Screen { * @since 3.3.0 */ function render_screen_layout() { - global $screen_layout_columns; - - // Back compat for plugins using the filter instead of add_screen_option() - $columns = apply_filters( 'screen_layout_columns', array(), $this->id, $this ); - - if ( ! empty( $columns ) && isset( $columns[ $this->id ] ) ) - $this->add_option( 'layout_columns', array('max' => $columns[ $this->id ] ) ); - - if ( ! $this->get_option('layout_columns') ) { - $screen_layout_columns = 0; + if ( ! $this->get_option('layout_columns') ) return; - } - $screen_layout_columns = get_user_option("screen_layout_$this->id"); + $screen_layout_columns = $this->get_columns(); $num = $this->get_option( 'layout_columns', 'max' ); - if ( ! $screen_layout_columns || 'auto' == $screen_layout_columns ) { - if ( $this->get_option( 'layout_columns', 'default' ) ) - $screen_layout_columns = $this->get_option( 'layout_columns', 'default' ); - } - ?> - <h5><?php _e('Screen Layout'); ?></h5> + <h5 class="screen-layout"><?php _e('Screen Layout'); ?></h5> <div class='columns-prefs'><?php _e('Number of Columns:'); for ( $i = 1; $i <= $num; ++$i ): ?> - <label> + <label class="columns-prefs-<?php echo $i; ?>"> <input type='radio' name='screen_columns' value='<?php echo esc_attr( $i ); ?>' <?php checked( $screen_layout_columns, $i ); ?> /> <?php echo esc_html( $i ); ?> @@ -932,13 +1008,12 @@ final class WP_Screen { $per_page = apply_filters( 'edit_posts_per_page', $per_page, $this->post_type ); ?> - <h5><?php _ex('Show on screen', 'Screen Options') ?></h5> - <div class='screen-options'> - <?php if ( !empty($per_page_label) ): ?> - <input type='text' class='screen-per-page' name='wp_screen_options[value]' - id='<?php echo esc_attr( $option ); ?>' maxlength='3' - value='<?php echo esc_attr( $per_page ); ?>' /> - <label for='<?php echo esc_attr( $option ); ?>'> + <div class="screen-options"> + <?php if ( $per_page_label ) : ?> + <input type="number" step="1" min="1" max="999" class="screen-per-page" name="wp_screen_options[value]" + id="<?php echo esc_attr( $option ); ?>" maxlength="3" + value="<?php echo esc_attr( $per_page ); ?>" /> + <label for="<?php echo esc_attr( $option ); ?>"> <?php echo esc_html( $per_page_label ); ?> </label> <?php endif; diff --git a/wp-admin/includes/taxonomy.php b/wp-admin/includes/taxonomy.php index 12e231a81..7423cf921 100644 --- a/wp-admin/includes/taxonomy.php +++ b/wp-admin/includes/taxonomy.php @@ -86,7 +86,7 @@ function wp_create_categories($categories, $post_id = '') { * * @param mixed $catarr See defaults below. Set 'cat_ID' to a non-zero value to update an existing category. The 'taxonomy' key was added in 3.0.0. * @param bool $wp_error Optional, since 2.5.0. Set this to true if the caller handles WP_Error return values. - * @return int|object The ID number of the new or updated Category on success. Zero or a WP_Error on failure, depending on param $wp_error. + * @return int|object The ID number of the new or updated Category on success. Zero or a WP_Error on failure, depending on param $wp_error. */ function wp_insert_category($catarr, $wp_error = false) { $cat_defaults = array('cat_ID' => 0, 'taxonomy' => 'category', 'cat_name' => '', 'category_description' => '', 'category_nicename' => '', 'category_parent' => ''); @@ -117,7 +117,7 @@ function wp_insert_category($catarr, $wp_error = false) { if ( $parent < 0 ) $parent = 0; - if ( empty($parent) || !category_exists( $parent ) || ($cat_ID && cat_is_ancestor_of($cat_ID, $parent) ) ) + if ( empty( $parent ) || ! term_exists( $parent, $taxonomy ) || ( $cat_ID && term_is_ancestor_of( $cat_ID, $parent, $taxonomy ) ) ) $parent = 0; $args = compact('name', 'slug', 'parent', 'description'); @@ -145,7 +145,7 @@ function wp_insert_category($catarr, $wp_error = false) { * * @since 2.0.0 * - * @param array $catarr The 'cat_ID' value is required. All other keys are optional. + * @param array $catarr The 'cat_ID' value is required. All other keys are optional. * @return int|bool The ID number of the new or updated Category on success. Zero or FALSE on failure. */ function wp_update_category($catarr) { diff --git a/wp-admin/includes/template.php b/wp-admin/includes/template.php index 3d0c1162c..383487458 100644 --- a/wp-admin/includes/template.php +++ b/wp-admin/includes/template.php @@ -8,31 +8,33 @@ * @subpackage Administration */ - // // Category Checklists // /** - * {@internal Missing Short Description}} + * Walker to output an unordered list of category checkbox <input> elements. * + * @see Walker + * @see wp_category_checklist() + * @see wp_terms_checklist() * @since 2.5.1 */ class Walker_Category_Checklist extends Walker { var $tree_type = 'category'; var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this - function start_lvl(&$output, $depth, $args) { + function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "$indent<ul class='children'>\n"; } - function end_lvl(&$output, $depth, $args) { + function end_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "$indent</ul>\n"; } - function start_el(&$output, $category, $depth, $args) { + function start_el( &$output, $category, $depth, $args, $id = 0 ) { extract($args); if ( empty($taxonomy) ) $taxonomy = 'category'; @@ -46,35 +48,39 @@ class Walker_Category_Checklist extends Walker { $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>'; } - function end_el(&$output, $category, $depth, $args) { + function end_el( &$output, $category, $depth = 0, $args = array() ) { $output .= "</li>\n"; } } /** - * {@internal Missing Short Description}} + * Output an unordered list of checkbox <input> elements labelled + * with category names. * + * @see wp_terms_checklist() * @since 2.5.1 * - * @param unknown_type $post_id - * @param unknown_type $descendants_and_self - * @param unknown_type $selected_cats - * @param unknown_type $popular_cats + * @param int $post_id Mark categories associated with this post as checked. $selected_cats must not be an array. + * @param int $descendants_and_self ID of the category to output along with its descendents. + * @param bool|array $selected_cats List of categories to mark as checked. + * @param bool|array $popular_cats Override the list of categories that receive the "popular-category" class. + * @param object $walker Walker object to use to build the output. + * @param bool $checked_ontop Move checked items out of the hierarchy and to the top of the list. */ function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) { - wp_terms_checklist($post_id, - array( - 'taxonomy' => 'category', - 'descendants_and_self' => $descendants_and_self, - 'selected_cats' => $selected_cats, - 'popular_cats' => $popular_cats, - 'walker' => $walker, - 'checked_ontop' => $checked_ontop - )); + wp_terms_checklist( $post_id, array( + 'taxonomy' => 'category', + 'descendants_and_self' => $descendants_and_self, + 'selected_cats' => $selected_cats, + 'popular_cats' => $popular_cats, + 'walker' => $walker, + 'checked_ontop' => $checked_ontop + ) ); } /** - * Taxonomy independent version of wp_category_checklist + * Output an unordered list of checkbox <input> elements labelled + * with term names. Taxonomy independent version of wp_category_checklist(). * * @since 3.0.0 * @@ -90,6 +96,8 @@ function wp_terms_checklist($post_id = 0, $args = array()) { 'taxonomy' => 'category', 'checked_ontop' => true ); + $args = apply_filters( 'wp_terms_checklist_args', $args, $post_id ); + extract( wp_parse_args($args, $defaults), EXTR_SKIP ); if ( empty($walker) || !is_a($walker, 'Walker') ) @@ -142,15 +150,20 @@ function wp_terms_checklist($post_id = 0, $args = array()) { } /** - * {@internal Missing Short Description}} + * Retrieve a list of the most popular terms from the specified taxonomy. + * + * If the $echo argument is true then the elements for a list of checkbox + * <input> elements labelled with the names of the selected terms is output. + * If the $post_ID global isn't empty then the terms associated with that + * post will be marked as checked. * * @since 2.5.0 * - * @param unknown_type $taxonomy - * @param unknown_type $default - * @param unknown_type $number - * @param unknown_type $echo - * @return unknown + * @param string $taxonomy Taxonomy to retrieve terms from. + * @param int $default Unused. + * @param int $number Number of terms to retrieve. Defaults to 10. + * @param bool $echo Optionally output the list as well. Defaults to true. + * @return array List of popular term IDs. */ function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $echo = true ) { global $post_ID; @@ -258,17 +271,20 @@ function get_inline_data($post) { if ( $post->post_type == 'page' ) echo '<div class="page_template">' . esc_html( get_post_meta( $post->ID, '_wp_page_template', true ) ) . '</div>'; - if ( $post_type_object->hierarchical ) + if ( post_type_supports( $post->post_type, 'page-attributes' ) ) echo '<div class="menu_order">' . $post->menu_order . '</div>'; $taxonomy_names = get_object_taxonomies( $post->post_type ); foreach ( $taxonomy_names as $taxonomy_name) { $taxonomy = get_taxonomy( $taxonomy_name ); - if ( $taxonomy->hierarchical && $taxonomy->show_ui ) - echo '<div class="post_category" id="'.$taxonomy_name.'_'.$post->ID.'">' . implode( ',', wp_get_object_terms( $post->ID, $taxonomy_name, array('fields'=>'ids')) ) . '</div>'; - elseif ( $taxonomy->show_ui ) - echo '<div class="tags_input" id="'.$taxonomy_name.'_'.$post->ID.'">' . esc_html( str_replace( ',', ', ', get_terms_to_edit($post->ID, $taxonomy_name) ) ) . '</div>'; + if ( $taxonomy->hierarchical && $taxonomy->show_ui ) { + echo '<div class="post_category" id="' . $taxonomy_name . '_' . $post->ID . '">' + . implode( ',', wp_get_object_terms( $post->ID, $taxonomy_name, array( 'fields' => 'ids' ) ) ) . '</div>'; + } elseif ( $taxonomy->show_ui ) { + echo '<div class="tags_input" id="'.$taxonomy_name.'_'.$post->ID.'">' + . esc_html( str_replace( ',', ', ', get_terms_to_edit( $post->ID, $taxonomy_name ) ) ) . '</div>'; + } } if ( !$post_type_object->hierarchical ) @@ -312,7 +328,7 @@ function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', <div id="com-reply" style="display:none;"><div id="replyrow" style="display:none;"> <?php endif; ?> <div id="replyhead" style="display:none;"><h5><?php _e( 'Reply to Comment' ); ?></h5></div> - + <div id="addhead" style="display:none;"><h5><?php _e('Add new Comment'); ?></h5></div> <div id="edithead" style="display:none;"> <div class="inside"> <label for="author"><?php _e('Name') ?></label> @@ -341,6 +357,7 @@ function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', <p id="replysubmit" class="submit"> <a href="#comments-form" class="cancel button-secondary alignleft" tabindex="106"><?php _e('Cancel'); ?></a> <a href="#comments-form" class="save button-primary alignright" tabindex="104"> + <span id="addbtn" style="display:none;"><?php _e('Add Comment'); ?></span> <span id="savebtn" style="display:none;"><?php _e('Update Comment'); ?></span> <span id="replybtn" style="display:none;"><?php _e('Submit Reply'); ?></span></a> <img class="waiting" style="display:none;" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /> @@ -590,7 +607,8 @@ function touch_time( $edit = 1, $for_post = 1, $tab_index = 0, $multi = 0 ) { $month .= "\t\t\t" . '<option value="' . $monthnum . '"'; if ( $i == $mm ) $month .= ' selected="selected"'; - $month .= '>' . $monthnum . '-' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\n"; + /* translators: 1: month number (01, 02, etc.), 2: month abbreviation */ + $month .= '>' . sprintf( __( '%1$s-%2$s' ), $monthnum, $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) ) . "</option>\n"; } $month .= '</select>'; @@ -728,7 +746,6 @@ function the_attachment_links( $id = false ) { <?php } - /** * Print out <option> html elements for role selectors * @@ -1200,7 +1217,7 @@ function add_settings_error( $setting, $code, $message, $type = 'error' ) { * @param boolean $sanitize Whether to re-sanitize the setting value before returning errors. * @return array Array of settings errors */ -function get_settings_errors( $setting = '', $sanitize = FALSE ) { +function get_settings_errors( $setting = '', $sanitize = false ) { global $wp_settings_errors; // If $sanitize is true, manually re-run the sanitizisation for this option @@ -1252,13 +1269,15 @@ function get_settings_errors( $setting = '', $sanitize = FALSE ) { * @param boolean $sanitize Whether to re-sanitize the setting value before returning errors. * @param boolean $hide_on_update If set to true errors will not be shown if the settings page has already been submitted. */ -function settings_errors( $setting = '', $sanitize = FALSE, $hide_on_update = FALSE ) { +function settings_errors( $setting = '', $sanitize = false, $hide_on_update = false ) { - if ($hide_on_update AND $_GET['settings-updated']) return; + if ( $hide_on_update && ! empty( $_GET['settings-updated'] ) ) + return; $settings_errors = get_settings_errors( $setting, $sanitize ); - if ( !is_array($settings_errors) ) return; + if ( ! is_array( $settings_errors ) ) + return; $output = ''; foreach ( $settings_errors as $key => $details ) { @@ -1300,7 +1319,7 @@ function find_posts_div($found_action = '') { if ( 'attachment' == $post->name ) continue; ?> - <input type="radio" name="find-posts-what" id="find-posts-<?php echo esc_attr($post->name); ?>" value="<?php echo esc_attr($post->name); ?>" <?php checked($post->name, 'post'); ?> /> + <input type="radio" name="find-posts-what" id="find-posts-<?php echo esc_attr($post->name); ?>" value="<?php echo esc_attr($post->name); ?>" <?php checked($post->name, 'post'); ?> /> <label for="find-posts-<?php echo esc_attr($post->name); ?>"><?php echo $post->label; ?></label> <?php } ?> @@ -1390,7 +1409,7 @@ var userSettings = { 'uid': '<?php if ( ! isset($current_user) ) $current_user = wp_get_current_user(); echo $current_user->ID; ?>', 'time':'<?php echo time() ?>' }, - ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>', + ajaxurl = '<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>', pagenow = '<?php echo $current_screen->id; ?>', typenow = '<?php echo $current_screen->post_type; ?>', adminpage = '<?php echo $admin_body_class; ?>', @@ -1407,9 +1426,11 @@ do_action("admin_print_scripts-$hook_suffix"); do_action('admin_print_scripts'); do_action("admin_head-$hook_suffix"); do_action('admin_head'); + +$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); ?> </head> -<body<?php if ( isset($GLOBALS['body_id']) ) echo ' id="' . $GLOBALS['body_id'] . '"'; ?> class="wp-admin no-js iframe <?php echo apply_filters( 'admin_body_class', '' ) . ' ' . $admin_body_class; ?>"> +<body<?php if ( isset($GLOBALS['body_id']) ) echo ' id="' . $GLOBALS['body_id'] . '"'; ?> class="wp-admin no-js iframe <?php echo apply_filters( 'admin_body_class', '' ) . ' ' . $admin_body_class; ?>"> <script type="text/javascript"> //<![CDATA[ (function(){ @@ -1589,7 +1610,7 @@ function compression_test() { * Defaults to no other attributes. Other attributes can also be provided as a * string such as 'tabindex="1"', though the array format is typically cleaner. */ -function submit_button( $text = NULL, $type = 'primary', $name = 'submit', $wrap = true, $other_attributes = NULL ) { +function submit_button( $text = null, $type = 'primary', $name = 'submit', $wrap = true, $other_attributes = null ) { echo get_submit_button( $text, $type, $name, $wrap, $other_attributes ); } @@ -1610,7 +1631,7 @@ function submit_button( $text = NULL, $type = 'primary', $name = 'submit', $wrap * Defaults to no other attributes. Other attributes can also be provided as a * string such as 'tabindex="1"', though the array format is typically cleaner. */ -function get_submit_button( $text = NULL, $type = 'primary', $name = 'submit', $wrap = true, $other_attributes = NULL ) { +function get_submit_button( $text = null, $type = 'primary', $name = 'submit', $wrap = true, $other_attributes = null ) { switch ( $type ) : case 'primary' : case 'secondary' : @@ -1622,7 +1643,7 @@ function get_submit_button( $text = NULL, $type = 'primary', $name = 'submit', $ default : $class = $type; // Custom cases can just pass in the classes they want to be used endswitch; - $text = ( NULL == $text ) ? __( 'Save Changes' ) : $text; + $text = ( null == $text ) ? __( 'Save Changes' ) : $text; // Default the id attribute to $name unless an id was specifically provided in $other_attributes $id = $name; @@ -1651,13 +1672,14 @@ function get_submit_button( $text = NULL, $type = 'primary', $name = 'submit', $ } function _wp_admin_html_begin() { + $admin_html_class = ( is_admin_bar_showing() ) ? 'wp-toolbar' : ''; ?> <!DOCTYPE html> <!--[if IE 8]> -<html xmlns="http://www.w3.org/1999/xhtml" class="ie8" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>> +<html xmlns="http://www.w3.org/1999/xhtml" class="ie8 <?php echo $admin_html_class; ?>" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>> <![endif]--> <!--[if !(IE 8) ]><!--> -<html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>> +<html xmlns="http://www.w3.org/1999/xhtml" class="<?php echo $admin_html_class; ?>" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>> <!--<![endif]--> <head> <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php echo get_option('blog_charset'); ?>" /> @@ -1686,36 +1708,43 @@ final class WP_Internal_Pointers { 'index.php' => 'wp330_toolbar', 'post-new.php' => 'wp330_media_uploader', 'post.php' => 'wp330_media_uploader', - 'themes.php' => 'wp330_saving_widgets', + 'themes.php' => array( 'wp330_saving_widgets', 'wp340_customize_current_theme_link' ), + 'appearance_page_custom-header' => 'wp340_choose_image_from_library', + 'appearance_page_custom-background' => 'wp340_choose_image_from_library', ); // Check if screen related pointer is registered if ( empty( $registered_pointers[ $hook_suffix ] ) ) return; - $pointer = $registered_pointers[ $hook_suffix ]; + $pointers = (array) $registered_pointers[ $hook_suffix ]; $caps_required = array( 'wp330_media_uploader' => array( 'upload_files' ), 'wp330_saving_widgets' => array( 'edit_theme_options', 'switch_themes' ), + 'wp340_customize_current_theme_link' => array( 'edit_theme_options' ), + 'wp340_choose_image_from_library' => array( 'edit_theme_options' ), ); - if ( isset( $caps_required[ $pointer ] ) ) { - foreach ( $caps_required[ $pointer ] as $cap ) { - if ( ! current_user_can( $cap ) ) - return; - } - } - // Get dismissed pointers $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); - // Pointer has been dismissed - if ( in_array( $pointer, $dismissed ) ) - return; + $got_pointers = false; + foreach ( array_diff( $pointers, $dismissed ) as $pointer ) { + if ( isset( $caps_required[ $pointer ] ) ) { + foreach ( $caps_required[ $pointer ] as $cap ) { + if ( ! current_user_can( $cap ) ) + continue 2; + } + } - // Bind pointer print function - add_action( 'admin_print_footer_scripts', array( 'WP_Internal_Pointers', 'pointer_' . $pointer ) ); + // Bind pointer print function + add_action( 'admin_print_footer_scripts', array( 'WP_Internal_Pointers', 'pointer_' . $pointer ) ); + $got_pointers = true; + } + + if ( ! $got_pointers ) + return; // Add pointers script and style to queue wp_enqueue_style( 'wp-pointer' ); @@ -1738,8 +1767,8 @@ final class WP_Internal_Pointers { ?> <script type="text/javascript"> //<![CDATA[ - jQuery(document).ready( function($) { - var options = <?php echo json_encode( $args ); ?>; + (function($){ + var options = <?php echo json_encode( $args ); ?>, setup; if ( ! options ) return; @@ -1753,8 +1782,16 @@ final class WP_Internal_Pointers { } }); - $('<?php echo $selector; ?>').pointer( options ).pointer('open'); - }); + setup = function() { + $('<?php echo $selector; ?>').pointer( options ).pointer('open'); + }; + + if ( options.position && options.position.defer_loading ) + $(window).bind( 'load.wp-pointers', setup ); + else + $(document).ready( setup ); + + })( jQuery ); //]]> </script> <?php @@ -1795,7 +1832,7 @@ final class WP_Internal_Pointers { */ public static function pointer_wp330_saving_widgets() { $content = '<h3>' . __( 'New Feature: Saving Widgets' ) . '</h3>'; - $content .= '<p>' . __( 'If you change your mind and revert to your previous theme, we’ll put the widgets back the way you had them.' ). '</p>'; + $content .= '<p>' . __( 'If you change your mind and revert to your previous theme, we’ll put the widgets back the way you had them.' ) . '</p>'; WP_Internal_Pointers::print_js( 'wp330_saving_widgets', '#message2', array( 'content' => $content, @@ -1803,13 +1840,44 @@ final class WP_Internal_Pointers { ) ); } + /** + * Print 'New Feature: Current Theme Customize Link' for 3.4.0. + * + * @since 3.4.0 + */ + public static function pointer_wp340_customize_current_theme_link() { + $content = '<h3>' . __( 'New Feature: Customizer' ) . '</h3>'; + $content .= '<p>' . __( 'Click Customize to change the header, background, title and menus of the current theme, all in one place.' ) . '</p>'; + $content .= '<p>' . __( 'Click the Live Preview links in the Available Themes list below to customize and preview another theme before activating it.' ) . '</p>'; + + WP_Internal_Pointers::print_js( 'wp340_customize_current_theme_link', '#customize-current-theme-link', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'offset' => is_rtl() ? '32 0' : '-32 0' ), + ) ); + } + + /** + * Print 'New Feature: Choose Image from Library' for 3.4.0. + * + * @since 3.4.0 + */ + public static function pointer_wp340_choose_image_from_library() { + $content = '<h3>' . __( 'New Feature: Choose Image from Library' ) . '</h3>'; + $content .= '<p>' . __( 'Want to use an image you uploaded earlier? Select it from your media library instead of uploading it again.' ) . '</p>'; + + WP_Internal_Pointers::print_js( 'wp340_choose_image_from_library', '#choose-from-library-link', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'defer_loading' => true ), + ) ); + } + /** * Prevents new users from seeing existing 'new feature' pointers. * * @since 3.3.0 */ public static function dismiss_pointers_for_new_users( $user_id ) { - add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp330_toolbar,wp330_media_uploader,wp330_saving_widgets' ); + add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp330_toolbar,wp330_media_uploader,wp330_saving_widgets,wp340_choose_image_from_library,wp340_customize_current_theme_link' ); } } @@ -1831,4 +1899,4 @@ function convert_to_screen( $hook_name ) { } return WP_Screen::get( $hook_name ); -} \ No newline at end of file +} diff --git a/wp-admin/includes/theme-install.php b/wp-admin/includes/theme-install.php index 9171daba4..1fdafec83 100644 --- a/wp-admin/includes/theme-install.php +++ b/wp-admin/includes/theme-install.php @@ -24,15 +24,15 @@ $theme_field_defaults = array( 'description' => true, 'sections' => false, 'test * * @since 2.8.0 * - * @deprecated since 3.1.0 Use get_theme_feature_list() instead. + * @deprecated since 3.1.0 Use get_theme_feature_list() instead. * * @return array */ function install_themes_feature_list( ) { if ( !$cache = get_transient( 'wporg_theme_feature_list' ) ) - set_transient( 'wporg_theme_feature_list', array( ), 10800); + set_transient( 'wporg_theme_feature_list', array( ), 10800); - if ( $cache ) + if ( $cache ) return $cache; $feature_list = themes_api( 'feature_list', array( ) ); @@ -49,20 +49,22 @@ function install_themes_feature_list( ) { * * @since 2.8.0 */ -function install_theme_search_form() { - $type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : ''; +function install_theme_search_form( $type_selector = true ) { + $type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : 'term'; $term = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : ''; + if ( ! $type_selector ) + echo '<p class="install-help">' . __( 'Search for themes by keyword.' ) . '</p>'; ?> -<p class="install-help"><?php _e('Search for themes by keyword, author, or tag.') ?></p> - <form id="search-themes" method="get" action=""> <input type="hidden" name="tab" value="search" /> + <?php if ( $type_selector ) : ?> <select name="type" id="typeselector"> - <option value="term" <?php selected('term', $type) ?>><?php _e('Term'); ?></option> + <option value="term" <?php selected('term', $type) ?>><?php _e('Keyword'); ?></option> <option value="author" <?php selected('author', $type) ?>><?php _e('Author'); ?></option> <option value="tag" <?php selected('tag', $type) ?>><?php _ex('Tag', 'Theme Installer'); ?></option> </select> - <input type="text" name="s" size="30" value="<?php echo esc_attr($term) ?>" /> + <?php endif; ?> + <input type="search" name="s" size="30" value="<?php echo esc_attr($term) ?>" /> <?php submit_button( __( 'Search' ), 'button', 'search', false ); ?> </form> <?php @@ -74,11 +76,13 @@ function install_theme_search_form() { * @since 2.8.0 */ function install_themes_dashboard() { - install_theme_search_form(); + install_theme_search_form( false ); ?> <h4><?php _e('Feature Filter') ?></h4> -<form method="post" action="<?php echo self_admin_url( 'theme-install.php?tab=search' ); ?>"> -<p class="install-help"><?php _e('Find a theme based on specific features') ?></p> +<p class="install-help"><?php _e( 'Find a theme based on specific features.' ); ?></p> + +<form method="get" action=""> + <input type="hidden" name="tab" value="search" /> <?php $feature_list = get_theme_feature_list( ); echo '<div class="feature-filter">'; @@ -94,7 +98,7 @@ function install_themes_dashboard() { ?> <li> - <input type="checkbox" name="features[<?php echo $feature; ?>]" id="feature-id-<?php echo $feature; ?>" value="<?php echo $feature; ?>" /> + <input type="checkbox" name="features[]" id="feature-id-<?php echo $feature; ?>" value="<?php echo $feature; ?>" /> <label for="feature-id-<?php echo $feature; ?>"><?php echo $feature_name; ?></label> </li> @@ -125,75 +129,15 @@ function install_themes_upload($page = 1) { } add_action('install_themes_upload', 'install_themes_upload', 10, 1); -function display_theme($theme, $actions = null, $show_details = true) { - global $themes_allowedtags; - - if ( empty($theme) ) - return; - - $name = wp_kses($theme->name, $themes_allowedtags); - $desc = wp_kses($theme->description, $themes_allowedtags); - //if ( strlen($desc) > 30 ) - // $desc = substr($desc, 0, 15) . '<span class="dots">...</span><span>' . substr($desc, -15) . '</span>'; - - $preview_link = $theme->preview_url . '?TB_iframe=true&width=600&height=400'; - if ( !is_array($actions) ) { - $actions = array(); - $actions[] = '<a href="' . self_admin_url('theme-install.php?tab=theme-information&theme=' . $theme->slug . - '&TB_iframe=true&tbWidth=500&tbHeight=385') . '" class="thickbox thickbox-preview onclick" title="' . esc_attr(sprintf(__('Install “%s”'), $name)) . '">' . __('Install') . '</a>'; - if ( !is_network_admin() ) - $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview onclick previewlink" title="' . esc_attr(sprintf(__('Preview “%s”'), $name)) . '">' . __('Preview') . '</a>'; - $actions = apply_filters('theme_install_action_links', $actions, $theme); - } - - $actions = implode ( ' | ', $actions ); - ?> -<a class='thickbox thickbox-preview screenshot' - href='<?php echo esc_url($preview_link); ?>' - title='<?php echo esc_attr(sprintf(__('Preview “%s”'), $name)); ?>'> -<img src='<?php echo esc_url($theme->screenshot_url); ?>' width='150' /> -</a> -<h3><?php echo $name ?></h3> -<span class='action-links'><?php echo $actions ?></span> -<p><?php echo $desc ?></p> -<?php if ( $show_details ) { ?> -<a href="#theme_detail" class="theme-detail hide-if-no-js" tabindex='4'><?php _e('Details') ?></a> -<div class="themedetaildiv hide-if-js"> -<p><strong><?php _e('Version:') ?></strong> <?php echo wp_kses($theme->version, $themes_allowedtags) ?></p> -<p><strong><?php _e('Author:') ?></strong> <?php echo wp_kses($theme->author, $themes_allowedtags) ?></p> -<?php if ( ! empty($theme->last_updated) ) : ?> -<p><strong><?php _e('Last Updated:') ?></strong> <span title="<?php echo $theme->last_updated ?>"><?php printf( __('%s ago'), human_time_diff(strtotime($theme->last_updated)) ) ?></span></p> -<?php endif; if ( ! empty($theme->requires) ) : ?> -<p><strong><?php _e('Requires WordPress Version:') ?></strong> <?php printf(__('%s or higher'), $theme->requires) ?></p> -<?php endif; if ( ! empty($theme->tested) ) : ?> -<p><strong><?php _e('Compatible up to:') ?></strong> <?php echo $theme->tested ?></p> -<?php endif; if ( !empty($theme->downloaded) ) : ?> -<p><strong><?php _e('Downloaded:') ?></strong> <?php printf(_n('%s time', '%s times', $theme->downloaded), number_format_i18n($theme->downloaded)) ?></p> -<?php endif; ?> -<div class="star-holder" title="<?php printf(_n('(based on %s rating)', '(based on %s ratings)', $theme->num_ratings), number_format_i18n($theme->num_ratings)) ?>"> - <div class="star star-rating" style="width: <?php echo esc_attr($theme->rating) ?>px"></div> - <div class="star star5"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('5 stars') ?>" /></div> - <div class="star star4"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('4 stars') ?>" /></div> - <div class="star star3"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('3 stars') ?>" /></div> - <div class="star star2"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('2 stars') ?>" /></div> - <div class="star star1"><img src="<?php echo admin_url('images/star.png?v=20110615'); ?>" alt="<?php esc_attr_e('1 star') ?>" /></div> -</div> -</div> -<?php } - /* - object(stdClass)[59] - public 'name' => string 'Magazine Basic' (length=14) - public 'slug' => string 'magazine-basic' (length=14) - public 'version' => string '1.1' (length=3) - public 'author' => string 'tinkerpriest' (length=12) - public 'preview_url' => string 'http://wp-themes.com/?magazine-basic' (length=36) - public 'screenshot_url' => string 'http://wp-themes.com/wp-content/themes/magazine-basic/screenshot.png' (length=68) - public 'rating' => float 80 - public 'num_ratings' => int 1 - public 'homepage' => string 'http://wordpress.org/extend/themes/magazine-basic' (length=49) - public 'description' => string 'A basic magazine style layout with a fully customizable layout through a backend interface. Designed by <a href="http://bavotasan.com">c.bavota</a> of <a href="http://tinkerpriestmedia.com">Tinker Priest Media</a>.' (length=214) - public 'download_link' => string 'http://wordpress.org/extend/themes/download/magazine-basic.1.1.zip' (length=66) - */ +/** + * Prints a theme on the Install Themes pages. + * + * @deprecated 3.4.0 + */ +function display_theme( $theme ) { + _deprecated_function( __FUNCTION__, '3.4' ); + global $wp_list_table; + return $wp_list_table->single_row( $theme ); } /** @@ -217,107 +161,16 @@ add_action('install_themes_updated', 'display_themes'); * @since 2.8.0 */ function install_theme_information() { - //TODO: This function needs a LOT of UI work :) - global $tab, $themes_allowedtags; - - $api = themes_api('theme_information', array('slug' => stripslashes( $_REQUEST['theme'] ) )); - - if ( is_wp_error($api) ) - wp_die($api); + global $tab, $themes_allowedtags, $wp_list_table; - // Sanitize HTML - foreach ( (array)$api->sections as $section_name => $content ) - $api->sections[$section_name] = wp_kses($content, $themes_allowedtags); + $theme = themes_api( 'theme_information', array( 'slug' => stripslashes( $_REQUEST['theme'] ) ) ); - foreach ( array('version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug') as $key ) { - if ( isset($api->$key) ) - $api->$key = wp_kses($api->$key, $themes_allowedtags); - } + if ( is_wp_error( $theme ) ) + wp_die( $theme ); iframe_header( __('Theme Install') ); - - if ( empty($api->download_link) ) { - echo '<div id="message" class="error"><p>' . __('<strong>ERROR:</strong> This theme is currently not available. Please try again later.') . '</p></div>'; - iframe_footer(); - exit; - } - - if ( !empty($api->tested) && version_compare($GLOBALS['wp_version'], $api->tested, '>') ) - echo '<div class="updated"><p>' . __('<strong>Warning:</strong> This theme has <strong>not been tested</strong> with your current version of WordPress.') . '</p></div>'; - else if ( !empty($api->requires) && version_compare($GLOBALS['wp_version'], $api->requires, '<') ) - echo '<div class="updated"><p>' . __('<strong>Warning:</strong> This theme has not been marked as <strong>compatible</strong> with your version of WordPress.') . '</p></div>'; - - // Default to a "new" theme - $type = 'install'; - // Check to see if this theme is known to be installed, and has an update awaiting it. - $update_themes = get_site_transient('update_themes'); - if ( is_object($update_themes) && isset($update_themes->response) ) { - foreach ( (array)$update_themes->response as $theme_slug => $theme_info ) { - if ( $theme_slug === $api->slug ) { - $type = 'update_available'; - $update_file = $theme_slug; - break; - } - } - } - - $themes = get_themes(); - foreach ( (array) $themes as $this_theme ) { - if ( is_array($this_theme) && $this_theme['Stylesheet'] == $api->slug ) { - if ( $this_theme['Version'] == $api->version ) { - $type = 'latest_installed'; - } elseif ( $this_theme['Version'] > $api->version ) { - $type = 'newer_installed'; - $newer_version = $this_theme['Version']; - } - break; - } - } -?> - -<div class='available-theme'> -<img src='<?php echo esc_url($api->screenshot_url) ?>' width='300' class="theme-preview-img" /> -<h3><?php echo $api->name; ?></h3> -<p><?php printf(__('by %s'), $api->author); ?></p> -<p><?php printf(__('Version: %s'), $api->version); ?></p> - -<?php -$buttons = '<a class="button" id="cancel" href="#" onclick="tb_close();return false;">' . __('Cancel') . '</a> '; - -switch ( $type ) { -default: -case 'install': - if ( current_user_can('install_themes') ) : - $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(self_admin_url('update.php?action=install-theme&theme=' . $api->slug), 'install-theme_' . $api->slug) . '" target="_parent">' . __('Install Now') . '</a>'; - endif; - break; -case 'update_available': - if ( current_user_can('update_themes') ) : - $buttons .= '<a class="button-primary" id="install" href="' . wp_nonce_url(self_admin_url('update.php?action=upgrade-theme&theme=' . $update_file), 'upgrade-theme_' . $update_file) . '" target="_parent">' . __('Install Update Now') . '</a>'; - endif; - break; -case 'newer_installed': - if ( current_user_can('install_themes') || current_user_can('update_themes') ) : - ?><p><?php printf(__('Newer version (%s) is installed.'), $newer_version); ?></p><?php - endif; - break; -case 'latest_installed': - if ( current_user_can('install_themes') || current_user_can('update_themes') ) : - ?><p><?php _e('This version is already installed.'); ?></p><?php - endif; - break; -} ?> -<br class="clear" /> -</div> - -<p class="action-button"> -<?php echo $buttons; ?> -<br class="clear" /> -</p> - -<?php + $wp_list_table->theme_installer_single( $theme ); iframe_footer(); exit; } add_action('install_themes_pre_theme-information', 'install_theme_information'); - diff --git a/wp-admin/includes/theme.php b/wp-admin/includes/theme.php index 7cb5dc4a3..af1960e47 100644 --- a/wp-admin/includes/theme.php +++ b/wp-admin/includes/theme.php @@ -6,64 +6,24 @@ * @subpackage Administration */ -/** - * {@internal Missing Short Description}} - * - * @since 2.0.0 - * - * @return unknown - */ -function current_theme_info() { - $themes = get_themes(); - $current_theme = get_current_theme(); - - if ( ! $themes ) { - $ct = new stdClass; - $ct->name = $current_theme; - return $ct; - } - - if ( ! isset( $themes[$current_theme] ) ) { - delete_option( 'current_theme' ); - $current_theme = get_current_theme(); - } - - $ct = new stdClass; - $ct->name = $current_theme; - $ct->title = $themes[$current_theme]['Title']; - $ct->version = $themes[$current_theme]['Version']; - $ct->parent_theme = $themes[$current_theme]['Parent Theme']; - $ct->template_dir = $themes[$current_theme]['Template Dir']; - $ct->stylesheet_dir = $themes[$current_theme]['Stylesheet Dir']; - $ct->template = $themes[$current_theme]['Template']; - $ct->stylesheet = $themes[$current_theme]['Stylesheet']; - $ct->screenshot = $themes[$current_theme]['Screenshot']; - $ct->description = $themes[$current_theme]['Description']; - $ct->author = $themes[$current_theme]['Author']; - $ct->tags = $themes[$current_theme]['Tags']; - $ct->theme_root = $themes[$current_theme]['Theme Root']; - $ct->theme_root_uri = $themes[$current_theme]['Theme Root URI']; - return $ct; -} - /** * Remove a theme * * @since 2.8.0 * - * @param string $template Template directory of the theme to delete + * @param string $stylesheet Stylesheet of the theme to delete * @param string $redirect Redirect to page when complete. * @return mixed */ -function delete_theme($template, $redirect = '') { +function delete_theme($stylesheet, $redirect = '') { global $wp_filesystem; - if ( empty($template) ) + if ( empty($stylesheet) ) return false; ob_start(); if ( empty( $redirect ) ) - $redirect = wp_nonce_url('themes.php?action=delete&template=' . $template, 'delete-theme_' . $template); + $redirect = wp_nonce_url('themes.php?action=delete&stylesheet=' . $stylesheet, 'delete-theme_' . $stylesheet); if ( false === ($credentials = request_filesystem_credentials($redirect)) ) { $data = ob_get_contents(); ob_end_clean(); @@ -89,7 +49,6 @@ function delete_theme($template, $redirect = '') { return; } - if ( ! is_object($wp_filesystem) ) return new WP_Error('fs_unavailable', __('Could not access filesystem.')); @@ -102,11 +61,11 @@ function delete_theme($template, $redirect = '') { return new WP_Error('fs_no_themes_dir', __('Unable to locate WordPress theme directory.')); $themes_dir = trailingslashit( $themes_dir ); - $theme_dir = trailingslashit($themes_dir . $template); + $theme_dir = trailingslashit($themes_dir . $stylesheet); $deleted = $wp_filesystem->delete($theme_dir, true); if ( ! $deleted ) - return new WP_Error('could_not_remove_theme', sprintf(__('Could not fully remove the theme %s.'), $template) ); + return new WP_Error('could_not_remove_theme', sprintf(__('Could not fully remove the theme %s.'), $stylesheet) ); // Force refresh of theme update information delete_site_transient('update_themes'); @@ -114,59 +73,6 @@ function delete_theme($template, $redirect = '') { return true; } -/** - * {@internal Missing Short Description}} - * - * @since 1.5.0 - * - * @return unknown - */ -function get_broken_themes() { - global $wp_broken_themes; - - get_themes(); - return $wp_broken_themes; -} - -/** - * Get the allowed themes for the current blog. - * - * @since 3.0.0 - * - * @uses get_themes() - * @uses current_theme_info() - * @uses get_site_allowed_themes() - * @uses wpmu_get_blog_allowedthemes - * - * @return array $themes Array of allowed themes. - */ -function get_allowed_themes() { - if ( !is_multisite() ) - return get_themes(); - - $themes = get_themes(); - $ct = current_theme_info(); - $allowed_themes = apply_filters("allowed_themes", get_site_allowed_themes() ); - if ( $allowed_themes == false ) - $allowed_themes = array(); - - $blog_allowed_themes = wpmu_get_blog_allowedthemes(); - if ( is_array( $blog_allowed_themes ) ) - $allowed_themes = array_merge( $allowed_themes, $blog_allowed_themes ); - - if ( isset( $allowed_themes[ esc_html( $ct->stylesheet ) ] ) == false ) - $allowed_themes[ esc_html( $ct->stylesheet ) ] = true; - - reset( $themes ); - foreach ( $themes as $key => $theme ) { - if ( isset( $allowed_themes[ esc_html( $theme[ 'Stylesheet' ] ) ] ) == false ) - unset( $themes[ $key ] ); - } - reset( $themes ); - - return $themes; -} - /** * Get the Page Templates available in this theme * @@ -175,37 +81,7 @@ function get_allowed_themes() { * @return array Key is the template name, value is the filename of the template */ function get_page_templates() { - $themes = get_themes(); - $theme = get_current_theme(); - $templates = $themes[$theme]['Template Files']; - $page_templates = array(); - - if ( is_array( $templates ) ) { - $base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) ); - - foreach ( $templates as $template ) { - $basename = str_replace($base, '', $template); - - // don't allow template files in subdirectories - if ( false !== strpos($basename, '/') ) - continue; - - if ( 'functions.php' == $basename ) - continue; - - $template_data = implode( '', file( $template )); - - $name = ''; - if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) ) - $name = _cleanup_header_comment($name[1]); - - if ( !empty( $name ) ) { - $page_templates[trim( $name )] = $basename; - } - } - } - - return $page_templates; + return array_flip( wp_get_theme()->get_page_templates() ); } /** @@ -241,19 +117,17 @@ function theme_update_available( $theme ) { if ( !isset($themes_update) ) $themes_update = get_site_transient('update_themes'); - if ( is_object($theme) && isset($theme->stylesheet) ) - $stylesheet = $theme->stylesheet; - elseif ( is_array($theme) && isset($theme['Stylesheet']) ) - $stylesheet = $theme['Stylesheet']; - else - return false; //No valid info passed. + if ( ! is_a( $theme, 'WP_Theme' ) ) + return; + + $stylesheet = $theme->get_stylesheet(); if ( isset($themes_update->response[ $stylesheet ]) ) { $update = $themes_update->response[ $stylesheet ]; - $theme_name = is_object($theme) ? $theme->name : (is_array($theme) ? $theme['Name'] : ''); + $theme_name = $theme->display('Name'); $details_url = add_query_arg(array('TB_iframe' => 'true', 'width' => 1024, 'height' => 800), $update['url']); //Theme browser inside WP? replace this, Also, theme preview JS will override this on the available list. $update_url = wp_nonce_url('update.php?action=upgrade-theme&theme=' . urlencode($stylesheet), 'upgrade-theme_' . $stylesheet); - $update_onclick = 'onclick="if ( confirm(\'' . esc_js( __("Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update.") ) . '\') ) {return true;}return false;"'; + $update_onclick = 'onclick="if ( confirm(\'' . esc_js( __("Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update.") ) . '\') ) {return true;}return false;"'; if ( !is_multisite() ) { if ( ! current_user_can('update_themes') ) @@ -261,7 +135,7 @@ function theme_update_available( $theme ) { else if ( empty($update['package']) ) printf( '<p><strong>' . __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s details</a>. <em>Automatic update is unavailable for this theme.</em>') . '</strong></p>', $theme_name, $details_url, $update['new_version']); else - printf( '<p><strong>' . __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s details</a> or <a href="%4$s" %5$s>update automatically</a>.') . '</strong></p>', $theme_name, $details_url, $update['new_version'], $update_url, $update_onclick ); + printf( '<p><strong>' . __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s details</a> or <a href="%4$s" %5$s>update now</a>.') . '</strong></p>', $theme_name, $details_url, $update['new_version'], $update_url, $update_onclick ); } } } @@ -271,9 +145,10 @@ function theme_update_available( $theme ) { * * @since 3.1.0 * - * @return array Array of features keyed by category with translations keyed by slug. + * @param bool $api Optional. Whether try to fetch tags from the WP.org API. Defaults to true. + * @return array Array of features keyed by category with translations keyed by slug. */ -function get_theme_feature_list() { +function get_theme_feature_list( $api = true ) { // Hard-coded list is used if api not accessible. $features = array( __('Colors') => array( @@ -291,7 +166,7 @@ function get_theme_feature_list() { 'white' => __( 'White' ), 'yellow' => __( 'Yellow' ), 'dark' => __( 'Dark' ), - 'light' => __( 'Light ') + 'light' => __( 'Light' ), ), __('Columns') => array( @@ -300,12 +175,12 @@ function get_theme_feature_list() { 'three-columns' => __( 'Three Columns' ), 'four-columns' => __( 'Four Columns' ), 'left-sidebar' => __( 'Left Sidebar' ), - 'right-sidebar' => __( 'Right Sidebar' ) + 'right-sidebar' => __( 'Right Sidebar' ), ), __('Width') => array( 'fixed-width' => __( 'Fixed Width' ), - 'flexible-width' => __( 'Flexible Width' ) + 'flexible-width' => __( 'Flexible Width' ), ), __( 'Features' ) => array( @@ -326,21 +201,21 @@ function get_theme_feature_list() { 'sticky-post' => __( 'Sticky Post' ), 'theme-options' => __( 'Theme Options' ), 'threaded-comments' => __( 'Threaded Comments' ), - 'translation-ready' => __( 'Translation Ready' ) + 'translation-ready' => __( 'Translation Ready' ), ), __( 'Subject' ) => array( 'holiday' => __( 'Holiday' ), 'photoblogging' => __( 'Photoblogging' ), - 'seasonal' => __( 'Seasonal' ) + 'seasonal' => __( 'Seasonal' ), ) ); - if ( !current_user_can('install_themes') ) + if ( ! $api || ! current_user_can( 'install_themes' ) ) return $features; if ( !$feature_list = get_site_transient( 'wporg_theme_feature_list' ) ) - set_site_transient( 'wporg_theme_feature_list', array( ), 10800); + set_site_transient( 'wporg_theme_feature_list', array( ), 10800); if ( !$feature_list ) { $feature_list = themes_api( 'feature_list', array( ) ); @@ -408,15 +283,13 @@ function themes_api($action, $args = null) { if ( ! $res ) { $request = wp_remote_post('http://api.wordpress.org/themes/info/1.0/', array( 'body' => array('action' => $action, 'request' => serialize($args))) ); if ( is_wp_error($request) ) { - $res = new WP_Error('themes_api_failed', __('An Unexpected HTTP Error occurred during the API request.'), $request->get_error_message() ); + $res = new WP_Error('themes_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), $request->get_error_message() ); } else { - $res = unserialize( wp_remote_retrieve_body( $request ) ); - if ( ! $res ) - $res = new WP_Error('themes_api_failed', __('An unknown error occurred.'), wp_remote_retrieve_body( $request ) ); + $res = maybe_unserialize( wp_remote_retrieve_body( $request ) ); + if ( ! is_object( $res ) && ! is_array( $res ) ) + $res = new WP_Error('themes_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), wp_remote_retrieve_body( $request ) ); } } - //var_dump(array($args, $res)); + return apply_filters('themes_api_result', $res, $action, $args); } - -?> diff --git a/wp-admin/includes/update-core.php b/wp-admin/includes/update-core.php index 185e0258a..bf9ef2766 100644 --- a/wp-admin/includes/update-core.php +++ b/wp-admin/includes/update-core.php @@ -18,13 +18,74 @@ global $_old_files; $_old_files = array( -'wp-admin/bookmarklet.php', +// 2.0 +'wp-admin/import-b2.php', +'wp-admin/import-blogger.php', +'wp-admin/import-greymatter.php', +'wp-admin/import-livejournal.php', +'wp-admin/import-mt.php', +'wp-admin/import-rss.php', +'wp-admin/import-textpattern.php', +'wp-admin/quicktags.js', +'wp-images/fade-butt.png', +'wp-images/get-firefox.png', +'wp-images/header-shadow.png', +'wp-images/smilies', +'wp-images/wp-small.png', +'wp-images/wpminilogo.png', +'wp.php', +// 2.0.8 +'wp-includes/js/tinymce/plugins/inlinepopups/readme.txt', +// 2.1 +'wp-admin/edit-form-ajax-cat.php', +'wp-admin/execute-pings.php', +'wp-admin/inline-uploading.php', +'wp-admin/link-categories.php', +'wp-admin/list-manipulation.js', +'wp-admin/list-manipulation.php', +'wp-includes/comment-functions.php', +'wp-includes/feed-functions.php', +'wp-includes/functions-compat.php', +'wp-includes/functions-formatting.php', +'wp-includes/functions-post.php', +'wp-includes/js/dbx-key.js', +'wp-includes/js/tinymce/plugins/autosave/langs/cs.js', +'wp-includes/js/tinymce/plugins/autosave/langs/sv.js', +'wp-includes/links.php', +'wp-includes/pluggable-functions.php', +'wp-includes/template-functions-author.php', +'wp-includes/template-functions-category.php', +'wp-includes/template-functions-general.php', +'wp-includes/template-functions-links.php', +'wp-includes/template-functions-post.php', +'wp-includes/wp-l10n.php', +// 2.2 +'wp-admin/cat-js.php', +'wp-admin/import/b2.php', +'wp-includes/js/autosave-js.php', +'wp-includes/js/list-manipulation-js.php', +'wp-includes/js/wp-ajax-js.php', +// 2.3 +'wp-admin/admin-db.php', +'wp-admin/cat.js', +'wp-admin/categories.js', +'wp-admin/custom-fields.js', +'wp-admin/dbx-admin-key.js', +'wp-admin/edit-comments.js', +'wp-admin/install-rtl.css', +'wp-admin/install.css', +'wp-admin/upgrade-schema.php', +'wp-admin/upload-functions.php', +'wp-admin/upload-rtl.css', +'wp-admin/upload.css', +'wp-admin/upload.js', +'wp-admin/users.js', +'wp-admin/widgets-rtl.css', +'wp-admin/widgets.css', +'wp-admin/xfn.js', +'wp-includes/js/tinymce/license.html', +// 2.5 'wp-admin/css/upload.css', -'wp-admin/css/upload-rtl.css', -'wp-admin/css/press-this-ie.css', -'wp-admin/css/press-this-ie-rtl.css', -'wp-admin/edit-form.php', -'wp-admin/link-import.php', 'wp-admin/images/box-bg-left.gif', 'wp-admin/images/box-bg-right.gif', 'wp-admin/images/box-bg.gif', @@ -39,47 +100,17 @@ $_old_files = array( 'wp-admin/images/login-bkg-tile.gif', 'wp-admin/images/notice.gif', 'wp-admin/images/toggle.gif', -'wp-admin/images/comment-stalk-classic.gif', -'wp-admin/images/comment-stalk-fresh.gif', -'wp-admin/images/comment-stalk-rtl.gif', -'wp-admin/images/comment-pill.gif', -'wp-admin/images/del.png', -'wp-admin/images/media-button-gallery.gif', -'wp-admin/images/media-buttons.gif', -'wp-admin/images/tail.gif', -'wp-admin/images/gear.png', -'wp-admin/images/tab.png', -'wp-admin/images/postbox-bg.gif', 'wp-admin/includes/upload.php', 'wp-admin/js/dbx-admin-key.js', 'wp-admin/js/link-cat.js', -'wp-admin/js/forms.js', -'wp-admin/js/upload.js', -'wp-admin/js/set-post-thumbnail-handler.js', -'wp-admin/js/set-post-thumbnail-handler.dev.js', -'wp-admin/js/page.js', -'wp-admin/js/page.dev.js', -'wp-admin/js/slug.js', -'wp-admin/js/slug.dev.js', 'wp-admin/profile-update.php', 'wp-admin/templates.php', -'wp-includes/images/audio.png', -'wp-includes/images/css.png', -'wp-includes/images/default.png', -'wp-includes/images/doc.png', -'wp-includes/images/exe.png', -'wp-includes/images/html.png', -'wp-includes/images/js.png', -'wp-includes/images/pdf.png', -'wp-includes/images/swf.png', -'wp-includes/images/tar.png', -'wp-includes/images/text.png', -'wp-includes/images/video.png', -'wp-includes/images/zip.png', +'wp-includes/images/wlw/WpComments.png', +'wp-includes/images/wlw/WpIcon.png', +'wp-includes/images/wlw/WpWatermark.png', 'wp-includes/js/dbx.js', 'wp-includes/js/fat.js', 'wp-includes/js/list-manipulation.js', -'wp-includes/js/jquery/jquery.dimensions.min.js', 'wp-includes/js/tinymce/langs/en.js', 'wp-includes/js/tinymce/plugins/autosave/editor_plugin_src.js', 'wp-includes/js/tinymce/plugins/autosave/langs', @@ -101,78 +132,83 @@ $_old_files = array( 'wp-includes/js/tinymce/plugins/spellchecker/tinyspell.php', 'wp-includes/js/tinymce/plugins/wordpress/images', 'wp-includes/js/tinymce/plugins/wordpress/langs', -'wp-includes/js/tinymce/plugins/wordpress/popups.css', 'wp-includes/js/tinymce/plugins/wordpress/wordpress.css', 'wp-includes/js/tinymce/plugins/wphelp', 'wp-includes/js/tinymce/themes/advanced/css', 'wp-includes/js/tinymce/themes/advanced/images', 'wp-includes/js/tinymce/themes/advanced/jscripts', 'wp-includes/js/tinymce/themes/advanced/langs', +// 2.5.1 'wp-includes/js/tinymce/tiny_mce_gzip.php', +// 2.6 +'wp-admin/bookmarklet.php', +'wp-includes/js/jquery/jquery.dimensions.min.js', +'wp-includes/js/tinymce/plugins/wordpress/popups.css', 'wp-includes/js/wp-ajax.js', -'wp-admin/admin-db.php', -'wp-admin/cat.js', -'wp-admin/categories.js', -'wp-admin/custom-fields.js', -'wp-admin/dbx-admin-key.js', -'wp-admin/edit-comments.js', -'wp-admin/install-rtl.css', -'wp-admin/install.css', -'wp-admin/upgrade-schema.php', -'wp-admin/upload-functions.php', -'wp-admin/upload-rtl.css', -'wp-admin/upload.css', -'wp-admin/upload.js', -'wp-admin/users.js', -'wp-admin/widgets-rtl.css', -'wp-admin/widgets.css', -'wp-admin/xfn.js', -'wp-includes/js/tinymce/license.html', -'wp-admin/cat-js.php', -'wp-admin/edit-form-ajax-cat.php', -'wp-admin/execute-pings.php', -'wp-admin/import/b2.php', +// 2.7 +'wp-admin/css/press-this-ie-rtl.css', +'wp-admin/css/press-this-ie.css', +'wp-admin/css/upload-rtl.css', +'wp-admin/edit-form.php', +'wp-admin/images/comment-pill.gif', +'wp-admin/images/comment-stalk-classic.gif', +'wp-admin/images/comment-stalk-fresh.gif', +'wp-admin/images/comment-stalk-rtl.gif', +'wp-admin/images/del.png', +'wp-admin/images/gear.png', +'wp-admin/images/media-button-gallery.gif', +'wp-admin/images/media-buttons.gif', +'wp-admin/images/postbox-bg.gif', +'wp-admin/images/tab.png', +'wp-admin/images/tail.gif', +'wp-admin/js/forms.js', +'wp-admin/js/upload.js', +'wp-admin/link-import.php', +'wp-includes/images/audio.png', +'wp-includes/images/css.png', +'wp-includes/images/default.png', +'wp-includes/images/doc.png', +'wp-includes/images/exe.png', +'wp-includes/images/html.png', +'wp-includes/images/js.png', +'wp-includes/images/pdf.png', +'wp-includes/images/swf.png', +'wp-includes/images/tar.png', +'wp-includes/images/text.png', +'wp-includes/images/video.png', +'wp-includes/images/zip.png', +'wp-includes/js/tinymce/tiny_mce_config.php', +'wp-includes/js/tinymce/tiny_mce_ext.js', +// 2.8 +'wp-admin/js/users.js', +'wp-includes/js/swfupload/plugins/swfupload.documentready.js', +'wp-includes/js/swfupload/plugins/swfupload.graceful_degradation.js', +'wp-includes/js/swfupload/swfupload_f9.swf', +'wp-includes/js/tinymce/plugins/autosave', +'wp-includes/js/tinymce/plugins/paste/css', +'wp-includes/js/tinymce/utils/mclayer.js', +'wp-includes/js/tinymce/wordpress.css', +// 2.8.5 'wp-admin/import/btt.php', 'wp-admin/import/jkw.php', -'wp-admin/inline-uploading.php', -'wp-admin/link-categories.php', -'wp-admin/list-manipulation.js', -'wp-admin/list-manipulation.php', -'wp-includes/comment-functions.php', -'wp-includes/feed-functions.php', -'wp-includes/functions-compat.php', -'wp-includes/functions-formatting.php', -'wp-includes/functions-post.php', -'wp-includes/js/dbx-key.js', -'wp-includes/js/tinymce/plugins/autosave/langs/cs.js', -'wp-includes/js/tinymce/plugins/autosave/langs/sv.js', -'wp-includes/js/tinymce/themes/advanced/editor_template_src.js', -'wp-includes/links.php', -'wp-includes/pluggable-functions.php', -'wp-includes/template-functions-author.php', -'wp-includes/template-functions-category.php', -'wp-includes/template-functions-general.php', -'wp-includes/template-functions-links.php', -'wp-includes/template-functions-post.php', -'wp-includes/wp-l10n.php', -'wp-admin/import-b2.php', -'wp-admin/import-blogger.php', -'wp-admin/import-greymatter.php', -'wp-admin/import-livejournal.php', -'wp-admin/import-mt.php', -'wp-admin/import-rss.php', -'wp-admin/import-textpattern.php', -'wp-admin/quicktags.js', -'wp-images/fade-butt.png', -'wp-images/get-firefox.png', -'wp-images/header-shadow.png', -'wp-images/smilies', -'wp-images/wp-small.png', -'wp-images/wpminilogo.png', -'wp.php', +// 2.9 +'wp-admin/js/page.dev.js', +'wp-admin/js/page.js', +'wp-admin/js/set-post-thumbnail-handler.dev.js', +'wp-admin/js/set-post-thumbnail-handler.js', +'wp-admin/js/slug.dev.js', +'wp-admin/js/slug.js', 'wp-includes/gettext.php', +'wp-includes/js/tinymce/plugins/wordpress/js', 'wp-includes/streams.php', // MU +'README.txt', +'htaccess.dist', +'index-install.php', +'wp-admin/css/mu-rtl.css', +'wp-admin/css/mu.css', +'wp-admin/images/site-admin.png', +'wp-admin/includes/mu.php', 'wp-admin/wpmu-admin.php', 'wp-admin/wpmu-blogs.php', 'wp-admin/wpmu-edit.php', @@ -180,23 +216,26 @@ $_old_files = array( 'wp-admin/wpmu-themes.php', 'wp-admin/wpmu-upgrade-site.php', 'wp-admin/wpmu-users.php', +'wp-includes/images/wordpress-mu.png', 'wp-includes/wpmu-default-filters.php', 'wp-includes/wpmu-functions.php', 'wpmu-settings.php', -'index-install.php', -'README.txt', -'htaccess.dist', -'wp-admin/css/mu-rtl.css', -'wp-admin/css/mu.css', -'wp-admin/images/site-admin.png', -'wp-admin/includes/mu.php', -'wp-includes/images/wordpress-mu.png', // 3.0 'wp-admin/categories.php', 'wp-admin/edit-category-form.php', 'wp-admin/edit-page-form.php', 'wp-admin/edit-pages.php', +'wp-admin/images/admin-header-footer.png', +'wp-admin/images/browse-happy.gif', +'wp-admin/images/ico-add.png', +'wp-admin/images/ico-close.png', +'wp-admin/images/ico-edit.png', +'wp-admin/images/ico-viewpage.png', +'wp-admin/images/fav-top.png', +'wp-admin/images/screen-options-left.gif', +'wp-admin/images/wp-logo-vs.gif', 'wp-admin/images/wp-logo.gif', +'wp-admin/import', 'wp-admin/js/wp-gears.dev.js', 'wp-admin/js/wp-gears.js', 'wp-admin/options-misc.php', @@ -208,51 +247,46 @@ $_old_files = array( 'wp-admin/wp-admin.css', 'wp-admin/wp-admin.dev.css', 'wp-includes/js/codepress', +'wp-includes/js/codepress/engines/khtml.js', +'wp-includes/js/codepress/engines/older.js', 'wp-includes/js/jquery/autocomplete.dev.js', -'wp-includes/js/jquery/interface.js', 'wp-includes/js/jquery/autocomplete.js', +'wp-includes/js/jquery/interface.js', 'wp-includes/js/scriptaculous/prototype.js', 'wp-includes/js/tinymce/wp-tinymce.js', -'wp-admin/import', -'wp-admin/images/ico-edit.png', -'wp-admin/images/fav-top.png', -'wp-admin/images/ico-close.png', -'wp-admin/images/admin-header-footer.png', -'wp-admin/images/screen-options-left.gif', -'wp-admin/images/ico-add.png', -'wp-admin/images/browse-happy.gif', -'wp-admin/images/ico-viewpage.png', // 3.1 -'wp-includes/js/tinymce/blank.htm', -'wp-includes/js/tinymce/plugins/safari', -'wp-admin/edit-link-categories.php', -'wp-admin/edit-post-rows.php', 'wp-admin/edit-attachment-rows.php', -'wp-admin/link-category.php', +'wp-admin/edit-link-categories.php', 'wp-admin/edit-link-category-form.php', -'wp-admin/sidebar.php', -'wp-admin/images/list-vs.png', -'wp-admin/images/button-grad-vs.png', +'wp-admin/edit-post-rows.php', 'wp-admin/images/button-grad-active-vs.png', -'wp-admin/images/fav-arrow-vs.gif', +'wp-admin/images/button-grad-vs.png', 'wp-admin/images/fav-arrow-vs-rtl.gif', +'wp-admin/images/fav-arrow-vs.gif', 'wp-admin/images/fav-top-vs.gif', -'wp-admin/images/screen-options-right.gif', +'wp-admin/images/list-vs.png', 'wp-admin/images/screen-options-right-up.gif', +'wp-admin/images/screen-options-right.gif', 'wp-admin/images/visit-site-button-grad-vs.gif', 'wp-admin/images/visit-site-button-grad.gif', +'wp-admin/link-category.php', +'wp-admin/sidebar.php', 'wp-includes/classes.php', +'wp-includes/js/tinymce/blank.htm', +'wp-includes/js/tinymce/plugins/media/css/content.css', +'wp-includes/js/tinymce/plugins/media/img', +'wp-includes/js/tinymce/plugins/safari', // 3.2 +'wp-admin/images/logo-login.gif', +'wp-admin/images/star.gif', +'wp-admin/js/list-table.dev.js', +'wp-admin/js/list-table.js', 'wp-includes/default-embeds.php', +'wp-includes/js/tinymce/plugins/wordpress/img/help.gif', 'wp-includes/js/tinymce/plugins/wordpress/img/more.gif', 'wp-includes/js/tinymce/plugins/wordpress/img/toolbars.gif', -'wp-includes/js/tinymce/plugins/wordpress/img/help.gif', 'wp-includes/js/tinymce/themes/advanced/img/fm.gif', 'wp-includes/js/tinymce/themes/advanced/img/sflogo.png', -'wp-admin/js/list-table.js', -'wp-admin/js/list-table.dev.js', -'wp-admin/images/logo-login.gif', -'wp-admin/images/star.gif', // 3.3 'wp-admin/css/colors-classic-rtl.css', 'wp-admin/css/colors-classic-rtl.dev.css', @@ -324,6 +358,43 @@ $_old_files = array( 'wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/down_arrow.gif', 'wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/fade-butt.png', 'wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/separator.gif', +// Don't delete, yet: 'wp-rss.php', +// Don't delete, yet: 'wp-rdf.php', +// Don't delete, yet: 'wp-rss2.php', +// Don't delete, yet: 'wp-commentsrss2.php', +// Don't delete, yet: 'wp-atom.php', +// Don't delete, yet: 'wp-feed.php', +// 3.4 +'wp-admin/images/gray-star.png', +'wp-admin/images/logo-login.png', +'wp-admin/images/star.png', +'wp-admin/index-extra.php', +'wp-admin/network/index-extra.php', +'wp-admin/user/index-extra.php', +'wp-admin/images/screenshots/admin-flyouts.png', +'wp-admin/images/screenshots/coediting.png', +'wp-admin/images/screenshots/drag-and-drop.png', +'wp-admin/images/screenshots/help-screen.png', +'wp-admin/images/screenshots/media-icon.png', +'wp-admin/images/screenshots/new-feature-pointer.png', +'wp-admin/images/screenshots/welcome-screen.png', +'wp-includes/css/editor-buttons.css', +'wp-includes/css/editor-buttons.dev.css', +'wp-includes/js/tinymce/plugins/paste/blank.htm', +'wp-includes/js/tinymce/plugins/wordpress/css', +'wp-includes/js/tinymce/plugins/wordpress/editor_plugin.dev.js', +'wp-includes/js/tinymce/plugins/wordpress/img/embedded.png', +'wp-includes/js/tinymce/plugins/wordpress/img/more_bug.gif', +'wp-includes/js/tinymce/plugins/wordpress/img/page_bug.gif', +'wp-includes/js/tinymce/plugins/wpdialogs/editor_plugin.dev.js', +'wp-includes/js/tinymce/plugins/wpeditimage/css/editimage-rtl.css', +'wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin.dev.js', +'wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin.dev.js', +'wp-includes/js/tinymce/plugins/wpgallery/editor_plugin.dev.js', +'wp-includes/js/tinymce/plugins/wpgallery/img/gallery.png', +'wp-includes/js/tinymce/plugins/wplink/editor_plugin.dev.js', +// Don't delete, yet: 'wp-pass.php', +// Don't delete, yet: 'wp-register.php', ); /** @@ -335,7 +406,7 @@ $_old_files = array( * introduced version present here being older than the current installed version. * * The content of this array should follow the following format: - * Filename (relative to wp-content) => Introduced version + * Filename (relative to wp-content) => Introduced version * Directories should be noted by suffixing it with a trailing slash (/) * * @since 3.2.0 @@ -406,7 +477,7 @@ function update_core($from, $to) { $mysql_version = $wpdb->db_version(); $required_php_version = '5.2.4'; $required_mysql_version = '5.0'; - $wp_version = '3.3.2'; + $wp_version = '3.4'; $php_compat = version_compare( $php_version, $required_php_version, '>=' ); if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) $mysql_compat = true; @@ -601,7 +672,7 @@ function _copy_dir($from, $to, $skip_list = array() ) { /** * Redirect to the About WordPress page after a successful upgrade. * - * This function is only needed when the existing install is older than 3.3.0. + * This function is only needed when the existing install is older than 3.4.0. * * @since 3.3.0 * @@ -609,7 +680,7 @@ function _copy_dir($from, $to, $skip_list = array() ) { function _redirect_to_about_wordpress( $new_version ) { global $wp_version, $pagenow, $action; - if ( version_compare( $wp_version, '3.3', '>=' ) ) + if ( version_compare( $wp_version, '3.4-RC1', '>=' ) ) return; // Ensure we only run this on the update-core.php page. wp_update_core() could be called in other contexts. @@ -624,12 +695,12 @@ function _redirect_to_about_wordpress( $new_version ) { // See do_core_upgrade() show_message( __('WordPress updated successfully') ); - show_message( '<span class="hide-if-no-js">' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%s">here</a>.' ), $new_version, esc_url( admin_url( 'about.php?updated' ) ) ) . '</span>' ); - show_message( '<span class="hide-if-js">' . sprintf( __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $new_version, esc_url( admin_url( 'about.php?updated' ) ) ) . '</span>' ); + show_message( '<span class="hide-if-no-js">' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%s">here</a>.' ), $new_version, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' ); + show_message( '<span class="hide-if-js">' . sprintf( __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $new_version, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' ); echo '</div>'; ?> <script type="text/javascript"> -window.location = '<?php echo admin_url( 'about.php?updated' ); ?>'; +window.location = '<?php echo self_admin_url( 'about.php?updated' ); ?>'; </script> <?php diff --git a/wp-admin/includes/update.php b/wp-admin/includes/update.php index f82402457..ff787167e 100644 --- a/wp-admin/includes/update.php +++ b/wp-admin/includes/update.php @@ -142,7 +142,7 @@ function update_right_now_message() { if ( current_user_can('update_core') ) { $cur = get_preferred_from_update_core(); - if ( isset( $cur->response ) && $cur->response == 'upgrade' ) + if ( isset( $cur->response ) && $cur->response == 'upgrade' ) $msg .= " <a href='" . network_admin_url( 'update-core.php' ) . "' class='button'>" . sprintf( __('Update to %s'), $cur->current ? $cur->current : __( 'Latest' ) ) . '</a>'; } @@ -187,7 +187,7 @@ function wp_plugin_update_row( $file, $plugin_data ) { $plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()); $plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags ); - $details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $r->slug . '&TB_iframe=true&width=600&height=800'); + $details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $r->slug . '§ion=changelog&TB_iframe=true&width=600&height=800'); $wp_list_table = _get_list_table('WP_Plugins_List_Table'); @@ -199,7 +199,7 @@ function wp_plugin_update_row( $file, $plugin_data ) { else if ( empty($r->package) ) printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a>. <em>Automatic update is unavailable for this plugin.</em>'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version ); else - printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">update automatically</a>.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version, wp_nonce_url( self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file, 'upgrade-plugin_' . $file) ); + printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">update now</a>.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version, wp_nonce_url( self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file, 'upgrade-plugin_' . $file) ); do_action( "in_plugin_update_message-$file", $plugin_data, $r ); @@ -217,16 +217,16 @@ function wp_update_plugin($plugin, $feedback = '') { } function get_theme_updates() { - $themes = get_themes(); + $themes = wp_get_themes(); $current = get_site_transient('update_themes'); - $update_themes = array(); - foreach ( $themes as $theme ) { - $theme = (object) $theme; - if ( isset($current->response[ $theme->Stylesheet ]) ) { - $update_themes[$theme->Stylesheet] = $theme; - $update_themes[$theme->Stylesheet]->update = $current->response[ $theme->Stylesheet ]; - } + if ( ! isset( $current->response ) ) + return array(); + + $update_themes = array(); + foreach ( $current->response as $stylesheet => $data ) { + $update_themes[ $stylesheet ] = wp_get_theme( $stylesheet ); + $update_themes[ $stylesheet ]->update = $data; } return $update_themes; @@ -272,9 +272,9 @@ function wp_theme_update_row( $theme_key, $theme ) { if ( ! current_user_can('update_themes') ) printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a>.'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r->new_version ); else if ( empty( $r['package'] ) ) - printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a>. <em>Automatic update is unavailable for this plugin.</em>'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r['new_version'] ); + printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a>. <em>Automatic update is unavailable for this theme.</em>'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r['new_version'] ); else - printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">update automatically</a>.'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r['new_version'], wp_nonce_url( self_admin_url('update.php?action=upgrade-theme&theme=') . $theme_key, 'upgrade-theme_' . $theme_key) ); + printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s details</a> or <a href="%5$s">update now</a>.'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r['new_version'], wp_nonce_url( self_admin_url('update.php?action=upgrade-theme&theme=') . $theme_key, 'upgrade-theme_' . $theme_key) ); do_action( "in_theme_update_message-$theme_key", $theme, $r ); @@ -304,5 +304,3 @@ function maintenance_nag() { echo "<div class='update-nag'>$msg</div>"; } add_action( 'admin_notices', 'maintenance_nag' ); - -?> diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php index 646e1ccb5..bb69d9a07 100644 --- a/wp-admin/includes/upgrade.php +++ b/wp-admin/includes/upgrade.php @@ -35,8 +35,6 @@ if ( !function_exists('wp_install') ) : * @return array Array keys 'url', 'user_id', 'password', 'password_message'. */ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated = '', $user_password = '' ) { - global $wp_rewrite; - if ( !empty( $deprecated ) ) _deprecated_argument( __FUNCTION__, '2.6' ); @@ -58,8 +56,8 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated if ( ! $public ) update_option('default_pingback_flag', 0); - // Create default user. If the user already exists, the user tables are - // being shared among blogs. Just set the role in that case. + // Create default user. If the user already exists, the user tables are + // being shared among blogs. Just set the role in that case. $user_id = username_exists($user_name); $user_password = trim($user_password); $email_password = false; @@ -74,7 +72,7 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated $message = '<em>'.__('Your chosen password.').'</em>'; $user_id = wp_create_user($user_name, $user_password, $user_email); } else { - $message = __('User already exists. Password inherited.'); + $message = __('User already exists. Password inherited.'); } $user = new WP_User($user_id); @@ -82,7 +80,7 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated wp_install_defaults($user_id); - $wp_rewrite->flush_rules(); + flush_rewrite_rules(); wp_new_blog_notification($blog_title, $guessurl, $user_id, ($email_password ? $user_password : __('The password you chose during the install.') ) ); @@ -147,38 +145,38 @@ function wp_install_defaults($user_id) { // Now drop in some default links $default_links = array(); - $default_links[] = array( 'link_url' => 'http://codex.wordpress.org/', - 'link_name' => 'Documentation', + $default_links[] = array( 'link_url' => __( 'http://codex.wordpress.org/' ), + 'link_name' => __( 'Documentation' ), 'link_rss' => '', 'link_notes' => ''); - $default_links[] = array( 'link_url' => 'http://wordpress.org/news/', - 'link_name' => 'WordPress Blog', - 'link_rss' => 'http://wordpress.org/news/feed/', + $default_links[] = array( 'link_url' => __( 'http://wordpress.org/news/' ), + 'link_name' => __( 'WordPress Blog' ), + 'link_rss' => __( 'http://wordpress.org/news/feed/' ), 'link_notes' => ''); - $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/ideas/', - 'link_name' => 'Suggest Ideas', + $default_links[] = array( 'link_url' => __( 'http://wordpress.org/support/' ), + 'link_name' => _x( 'Support Forums', 'default link' ), 'link_rss' => '', 'link_notes' =>''); - $default_links[] = array( 'link_url' => 'http://wordpress.org/support/', - 'link_name' => 'Support Forum', + $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/plugins/', + 'link_name' => _x( 'Plugins', 'Default link to wordpress.org/extend/plugins/' ), 'link_rss' => '', 'link_notes' =>''); - $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/plugins/', - 'link_name' => 'Plugins', + $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/themes/', + 'link_name' => _x( 'Themes', 'Default link to wordpress.org/extend/themes/' ), 'link_rss' => '', 'link_notes' =>''); - $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/themes/', - 'link_name' => 'Themes', + $default_links[] = array( 'link_url' => __( 'http://wordpress.org/support/forum/requests-and-feedback' ), + 'link_name' => __( 'Feedback' ), 'link_rss' => '', 'link_notes' =>''); - $default_links[] = array( 'link_url' => 'http://planet.wordpress.org/', - 'link_name' => 'WordPress Planet', + $default_links[] = array( 'link_url' => __( 'http://planet.wordpress.org/' ), + 'link_name' => __( 'WordPress Planet' ), 'link_rss' => '', 'link_notes' =>''); @@ -302,7 +300,7 @@ As a new WordPress user, you should go to <a href=\"%s\">your dashboard</a> to d // Delete any caps that snuck into the previously active blog. (Hardcoded to blog 1 for now.) TODO: Get previous_blog_id. if ( !is_super_admin( $user_id ) && $user_id != 1 ) - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $wpdb->base_prefix.'1_capabilities') ); + $wpdb->delete( $wpdb->usermeta, array( 'user_id' => $user_id , 'meta_key' => $wpdb->base_prefix.'1_capabilities' ) ); } } endif; @@ -358,7 +356,7 @@ function wp_upgrade() { $wp_current_db_version = __get_option('db_version'); - // We are up-to-date. Nothing to do. + // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; @@ -391,10 +389,10 @@ endif; * @since 1.0.1 */ function upgrade_all() { - global $wp_current_db_version, $wp_db_version, $wp_rewrite; + global $wp_current_db_version, $wp_db_version; $wp_current_db_version = __get_option('db_version'); - // We are up-to-date. Nothing to do. + // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; @@ -459,6 +457,9 @@ function upgrade_all() { if ( $wp_current_db_version < 19389 ) upgrade_330(); + if ( $wp_current_db_version < 20080 ) + upgrade_340(); + maybe_disable_automattic_widgets(); update_option( 'db_version', $wp_db_version ); @@ -565,7 +566,7 @@ function upgrade_110() { $time_difference = $all_options->time_difference; - $server_time = time()+date('Z'); + $server_time = time()+date('Z'); $weblogger_time = $server_time + $time_difference*3600; $gmt_time = time(); @@ -646,7 +647,7 @@ function upgrade_130() { $active_plugins = __get_option('active_plugins'); // If plugins are not stored in an array, they're stored in the old - // newline separated format. Convert to new format. + // newline separated format. Convert to new format. if ( !is_array( $active_plugins ) ) { $active_plugins = explode("\n", trim($active_plugins)); update_option('active_plugins', $active_plugins); @@ -898,9 +899,9 @@ function upgrade_230() { $wpdb->insert( $wpdb->term_relationships, array('object_id' => $post_id, 'term_taxonomy_id' => $tt_id) ); } - // < 3570 we used linkcategories. >= 3570 we used categories and link2cat. + // < 3570 we used linkcategories. >= 3570 we used categories and link2cat. if ( $wp_current_db_version < 3570 ) { - // Create link_category terms for link categories. Create a map of link cat IDs + // Create link_category terms for link categories. Create a map of link cat IDs // to link_category terms. $link_cat_id_map = array(); $default_link_cat = 0; @@ -1151,11 +1152,6 @@ function upgrade_330() { $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('show_admin_bar_admin', 'plugins_last_view')" ); } - // 3.3-beta. Can remove before release. - if ( $wp_current_db_version > 18715 && $wp_current_db_version < 19389 - && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) - delete_metadata( 'user', 0, 'dismissed_wp_pointers', '', true ); - if ( $wp_current_db_version >= 11548 ) return; @@ -1213,6 +1209,39 @@ function upgrade_330() { } } +/** + * Execute changes made in WordPress 3.4. + * + * @since 3.4.0 + */ +function upgrade_340() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 19798 ) { + $wpdb->hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->options DROP COLUMN blog_id" ); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 19799 ) { + $wpdb->hide_errors(); + $wpdb->query("ALTER TABLE $wpdb->comments DROP INDEX comment_approved"); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 20022 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key = 'themes_last_view'" ); + } + + if ( $wp_current_db_version < 20080 ) { + if ( 'yes' == $wpdb->get_var( "SELECT autoload FROM $wpdb->options WHERE option_name = 'uninstall_plugins'" ) ) { + $uninstall_plugins = get_option( 'uninstall_plugins' ); + delete_option( 'uninstall_plugins' ); + add_option( 'uninstall_plugins', $uninstall_plugins, null, 'no' ); + } + } +} + /** * Execute network level changes * @@ -1248,16 +1277,36 @@ function upgrade_network() { $start += 20; } } + // 3.0 if ( $wp_current_db_version < 13576 ) update_site_option( 'global_terms_enabled', '1' ); + // 3.3 if ( $wp_current_db_version < 19390 ) update_site_option( 'initial_db_version', $wp_current_db_version ); + if ( $wp_current_db_version < 19470 ) { if ( false === get_site_option( 'active_sitewide_plugins' ) ) update_site_option( 'active_sitewide_plugins', array() ); } + + // 3.4 + if ( $wp_current_db_version < 20148 ) { + // 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. + $allowedthemes = get_site_option( 'allowedthemes' ); + $allowed_themes = get_site_option( 'allowed_themes' ); + if ( false === $allowedthemes && is_array( $allowed_themes ) && $allowed_themes ) { + $converted = array(); + $themes = wp_get_themes(); + foreach ( $themes as $stylesheet => $theme_data ) { + if ( isset( $allowed_themes[ $theme_data->get('Name') ] ) ) + $converted[ $stylesheet ] = true; + } + update_site_option( 'allowedthemes', $converted ); + delete_site_option( 'allowed_themes' ); + } + } } // The functions we use to actually do stuff @@ -1335,9 +1384,8 @@ function add_clean_index($table, $index) { ** false on error */ function maybe_add_column($table_name, $column_name, $create_ddl) { - global $wpdb, $debug; + global $wpdb; foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { - if ($debug) echo("checking $column == $column_name<br />"); if ($column == $column_name) { return true; } @@ -1362,14 +1410,12 @@ function maybe_add_column($table_name, $column_name, $create_ddl) { */ function get_alloptions_110() { global $wpdb; - if ($options = $wpdb->get_results("SELECT option_name, option_value FROM $wpdb->options")) { - foreach ($options as $option) { - // "When trying to design a foolproof system, - // never underestimate the ingenuity of the fools :)" -- Dougal - if ('siteurl' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); - if ('home' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); - if ('category_base' == $option->option_name) $option->option_value = preg_replace('|/+$|', '', $option->option_value); - $all_options->{$option->option_name} = stripslashes($option->option_value); + $all_options = new stdClass; + if ( $options = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" ) ) { + foreach ( $options as $option ) { + if ( 'siteurl' == $option->option_name || 'home' == $option->option_name || 'category_base' == $option->option_name ) + $option->option_value = untrailingslashit( $option->option_value ); + $all_options->{$option->option_name} = stripslashes( $option->option_value ); } } return $all_options; @@ -1387,24 +1433,22 @@ function get_alloptions_110() { function __get_option($setting) { global $wpdb; - if ( $setting == 'home' && defined( 'WP_HOME' ) ) { - return preg_replace( '|/+$|', '', WP_HOME ); - } + if ( $setting == 'home' && defined( 'WP_HOME' ) ) + return untrailingslashit( WP_HOME ); - if ( $setting == 'siteurl' && defined( 'WP_SITEURL' ) ) { - return preg_replace( '|/+$|', '', WP_SITEURL ); - } + if ( $setting == 'siteurl' && defined( 'WP_SITEURL' ) ) + return untrailingslashit( WP_SITEURL ); - $option = $wpdb->get_var( $wpdb->prepare("SELECT option_value FROM $wpdb->options WHERE option_name = %s", $setting) ); + $option = $wpdb->get_var( $wpdb->prepare("SELECT option_value FROM $wpdb->options WHERE option_name = %s", $setting ) ); if ( 'home' == $setting && '' == $option ) - return __get_option('siteurl'); + return __get_option( 'siteurl' ); - if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting ) - $option = preg_replace('|/+$|', '', $option); + if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting || 'tag_base' == $setting ) + $option = untrailingslashit( $option ); - @ $kellogs = unserialize($option); - if ($kellogs !== FALSE) + @ $kellogs = unserialize( $option ); + if ( $kellogs !== false ) return $kellogs; else return $option; @@ -1457,7 +1501,7 @@ function dbDelta( $queries = '', $execute = true ) { // Separate individual queries into an array if ( !is_array($queries) ) { $queries = explode( ';', $queries ); - if ('' == $queries[count($queries) - 1]) array_pop($queries); + $queries = array_filter( $queries ); } $queries = apply_filters( 'dbdelta_queries', $queries ); @@ -1468,7 +1512,7 @@ function dbDelta( $queries = '', $execute = true ) { // Create a tablename index for an array ($cqueries) of queries foreach($queries as $qry) { if (preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) { - $cqueries[trim( strtolower($matches[1]), '`' )] = $qry; + $cqueries[ trim( $matches[1], '`' ) ] = $qry; $for_update[$matches[1]] = 'Created table '.$matches[1]; } else if (preg_match("|CREATE DATABASE ([^ ]*)|", $qry, $matches)) { array_unshift($cqueries, $qry); @@ -1667,7 +1711,7 @@ function make_db_current( $tables = 'all' ) { * * @since 1.5.0 */ -function make_db_current_silent( $tables = 'all' ) { +function make_db_current_silent( $tables = 'all' ) { $alterations = dbDelta( $tables ); } @@ -1690,7 +1734,7 @@ function make_site_theme_from_oldschool($theme_name, $template) { return false; // Copy files from the old locations to the site theme. - // TODO: This does not copy arbitrary include dependencies. Only the + // TODO: This does not copy arbitrary include dependencies. Only the // standard WP files are copied. $files = array('index.php' => 'index.php', 'wp-layout.css' => 'style.css', 'wp-comments.php' => 'comments.php', 'wp-comments-popup.php' => 'comments-popup.php'); @@ -1848,12 +1892,12 @@ function make_site_theme() { if (file_exists(ABSPATH . 'wp-layout.css')) { if (! make_site_theme_from_oldschool($theme_name, $template)) { - // TODO: rm -rf the site theme directory. + // TODO: rm -rf the site theme directory. return false; } } else { if (! make_site_theme_from_default($theme_name, $template)) - // TODO: rm -rf the site theme directory. + // TODO: rm -rf the site theme directory. return false; } @@ -1938,7 +1982,7 @@ function pre_schema_upgrade() { // Upgrade versions prior to 2.9 if ( $wp_current_db_version < 11557 ) { - // Delete duplicate options. Keep the option with the highest option_id. + // Delete duplicate options. Keep the option with the highest option_id. $wpdb->query("DELETE o1 FROM $wpdb->options AS o1 JOIN $wpdb->options AS o2 USING (`option_name`) WHERE o2.option_id > o1.option_id"); // Drop the old primary key and add the new. @@ -1974,4 +2018,3 @@ CREATE TABLE $wpdb->sitecategories ( dbDelta( $ms_queries ); } endif; -?> diff --git a/wp-admin/includes/user.php b/wp-admin/includes/user.php index 816a9e79f..ff1e91dce 100644 --- a/wp-admin/includes/user.php +++ b/wp-admin/includes/user.php @@ -9,38 +9,12 @@ /** * Creates a new user from the "Users" form using $_POST information. * - * It seems that the first half is for backwards compatibility, but only - * has the ability to alter the user's role. WordPress core seems to - * use this function only in the second way, running edit_user() with - * no id so as to create a new user. - * * @since 2.0 * - * @param int $user_id Optional. User ID. * @return null|WP_Error|int Null when adding user, WP_Error or User ID integer when no parameters. */ function add_user() { - if ( func_num_args() ) { // The hackiest hack that ever did hack - global $wp_roles; - $user_id = (int) func_get_arg( 0 ); - - if ( isset( $_POST['role'] ) ) { - $new_role = sanitize_text_field( $_POST['role'] ); - // Don't let anyone with 'edit_users' (admins) edit their own role to something without it. - if ( $user_id != get_current_user_id() || $wp_roles->role_objects[$new_role]->has_cap( 'edit_users' ) ) { - // If the new role isn't editable by the logged-in user die with error - $editable_roles = get_editable_roles(); - if ( empty( $editable_roles[$new_role] ) ) - wp_die(__('You can’t give users that role.')); - - $user = new WP_User( $user_id ); - $user->set_role( $new_role ); - } - } - } else { - add_action( 'user_register', 'add_user' ); // See above - return edit_user(); - } + return edit_user(); } /** @@ -263,16 +237,27 @@ function wp_delete_user( $id, $reassign = 'novalue' ) { global $wpdb; $id = (int) $id; + $user = new WP_User( $id ); // allow for transaction statement do_action('delete_user', $id); if ( 'novalue' === $reassign || null === $reassign ) { - $post_ids = $wpdb->get_col( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id) ); + $post_types_to_delete = array(); + foreach ( get_post_types( array(), 'objects' ) as $post_type ) { + if ( $post_type->delete_with_user ) { + $post_types_to_delete[] = $post_type->name; + } elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) { + $post_types_to_delete[] = $post_type->name; + } + } + $post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $id ); + $post_types_to_delete = implode( "', '", $post_types_to_delete ); + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d AND post_type IN ('$post_types_to_delete')", $id ) ); if ( $post_ids ) { foreach ( $post_ids as $post_id ) - wp_delete_post($post_id); + wp_delete_post( $post_id ); } // Clean links @@ -288,17 +273,19 @@ function wp_delete_user( $id, $reassign = 'novalue' ) { $wpdb->update( $wpdb->links, array('link_owner' => $reassign), array('link_owner' => $id) ); } - clean_user_cache($id); - // FINALLY, delete user - if ( !is_multisite() ) { - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d", $id) ); - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->users WHERE ID = %d", $id) ); + if ( is_multisite() ) { + remove_user_from_blog( $id, get_current_blog_id() ); } else { - $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels - $wpdb->query("DELETE FROM $wpdb->usermeta WHERE user_id = $id AND meta_key = '{$level_key}'"); + $meta = $wpdb->get_col( $wpdb->prepare( "SELECT umeta_id FROM $wpdb->usermeta WHERE user_id = %d", $id ) ); + foreach ( $meta as $mid ) + delete_metadata_by_mid( 'user', $mid ); + + $wpdb->delete( $wpdb->users, array( 'ID' => $id ) ); } + clean_user_cache( $user ); + // allow for commit transaction do_action('deleted_user', $id); @@ -369,5 +356,3 @@ function default_password_nag() { printf( '<a href="%s" id="default-password-nag-no">' . __('No thanks, do not remind me again') . '</a>', '?default_password_nag=0' ); echo '</p></div>'; } - -?> diff --git a/wp-admin/includes/widgets.php b/wp-admin/includes/widgets.php index aed123601..318cf3f64 100644 --- a/wp-admin/includes/widgets.php +++ b/wp-admin/includes/widgets.php @@ -222,4 +222,3 @@ function wp_widget_control( $sidebar_args ) { echo $sidebar_args['after_widget']; return $sidebar_args; } - diff --git a/wp-admin/index.php b/wp-admin/index.php index b7b40bb87..342739773 100644 --- a/wp-admin/index.php +++ b/wp-admin/index.php @@ -19,6 +19,9 @@ wp_enqueue_script( 'plugin-install' ); wp_enqueue_script( 'media-upload' ); add_thickbox(); +if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); + $title = __('Dashboard'); $parent_file = 'index.php'; @@ -27,7 +30,6 @@ if ( is_user_admin() ) else add_screen_option('layout_columns', array('max' => 4, 'default' => 2) ); - $help = '<p>' . __( 'Welcome to your WordPress Dashboard! This is the screen you will see when you log in to your site, and gives you access to all the site management features of WordPress. You can get help for any screen by clicking the Help tab in the upper corner.' ) . '</p>'; get_current_screen()->add_help_tab( array( @@ -59,14 +61,22 @@ get_current_screen()->add_help_tab( array( ) ); $help = '<p>' . __('The boxes on your Dashboard screen are:') . '</p>'; -$help .= '<p>' . __('<strong>Right Now</strong> - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.') . '</p>'; -$help .= '<p>' . __('<strong>Recent Comments</strong> - Shows the most recent comments on your posts (configurable, up to 30) and allows you to moderate them.') . '</p>'; -$help .= '<p>' . __('<strong>Incoming Links</strong> - Shows links to your site found by Google Blog Search.') . '</p>'; -$help .= '<p>' . __('<strong>QuickPress</strong> - Allows you to create a new post and either publish it or save it as a draft.') . '</p>'; -$help .= '<p>' . __('<strong>Recent Drafts</strong> - Displays links to the 5 most recent draft posts you’ve started.') . '</p>'; +if ( current_user_can( 'edit_posts' ) ) + $help .= '<p>' . __('<strong>Right Now</strong> - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.') . '</p>'; +if ( current_user_can( 'moderate_comments' ) ) + $help .= '<p>' . __('<strong>Recent Comments</strong> - Shows the most recent comments on your posts (configurable, up to 30) and allows you to moderate them.') . '</p>'; +if ( current_user_can( 'publish_posts' ) ) + $help .= '<p>' . __('<strong>Incoming Links</strong> - Shows links to your site found by Google Blog Search.') . '</p>'; +if ( current_user_can( 'edit_posts' ) ) { + $help .= '<p>' . __('<strong>QuickPress</strong> - Allows you to create a new post and either publish it or save it as a draft.') . '</p>'; + $help .= '<p>' . __('<strong>Recent Drafts</strong> - Displays links to the 5 most recent draft posts you’ve started.') . '</p>'; +} $help .= '<p>' . __('<strong>WordPress Blog</strong> - Latest news from the official WordPress project.') . '</p>'; $help .= '<p>' . __('<strong>Other WordPress News</strong> - Shows the <a href="http://planet.wordpress.org" target="_blank">WordPress Planet</a> feed. You can configure it to show a different feed of your choosing.') . '</p>'; -$help .= '<p>' . __('<strong>Plugins</strong> - Features the most popular, newest, and recently updated plugins from the WordPress.org Plugin Directory.') . '</p>'; +if ( ! is_multisite() && current_user_can( 'install_plugins' ) ) + $help .= '<p>' . __('<strong>Plugins</strong> - Features the most popular, newest, and recently updated plugins from the WordPress.org Plugin Directory.') . '</p>'; +if ( current_user_can( 'edit_theme_options' ) ) + $help .= '<p>' . __('<strong>Welcome</strong> - Shows links for some of the most common tasks when setting up a new site.') . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'help-content', diff --git a/wp-admin/install-helper.php b/wp-admin/install-helper.php index 2970b7cba..c98b28cc3 100644 --- a/wp-admin/install-helper.php +++ b/wp-admin/install-helper.php @@ -10,9 +10,6 @@ * needing to use these functions a lot, you might experience time outs. If you * do, then it is advised to just write the SQL code yourself. * - * You can turn debugging on, by setting $debug to 1 after you include this - * file. - * * <code> * check_column('wp_links', 'link_description', 'mediumtext'); * if (check_column($wpdb->comments, 'comment_author', 'tinytext')) @@ -41,15 +38,6 @@ /** Load WordPress Bootstrap */ require_once(dirname(dirname(__FILE__)).'/wp-load.php'); -/** - * Turn debugging on or off. - * @global bool|int $debug - * @name $debug - * @var bool|int - * @since 1.0.0 - */ -$debug = 0; - if ( ! function_exists('maybe_create_table') ) : /** * Create database table, if it doesn't already exist. @@ -90,7 +78,6 @@ if ( ! function_exists('maybe_add_column') ) : * @package WordPress * @subpackage Plugin * @uses $wpdb - * @uses $debug * * @param string $table_name Database table name * @param string $column_name Table column name @@ -98,9 +85,8 @@ if ( ! function_exists('maybe_add_column') ) : * @return bool False on failure. True, if already exists or was successful. */ function maybe_add_column($table_name, $column_name, $create_ddl) { - global $wpdb, $debug; + global $wpdb; foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { - if ($debug) echo("checking $column == $column_name<br />"); if ($column == $column_name) { return true; @@ -179,16 +165,14 @@ function maybe_drop_column($table_name, $column_name, $drop_ddl) { * @return bool True, if matches. False, if not matching. */ function check_column($table_name, $col_name, $col_type, $is_null = null, $key = null, $default = null, $extra = null) { - global $wpdb, $debug; + global $wpdb; $diffs = 0; $results = $wpdb->get_results("DESC $table_name"); foreach ($results as $row ) { - if ($debug > 1) print_r($row); if ($row->Field == $col_name) { // got our column, check the params - if ($debug) echo ("checking $row->Type against $col_type\n"); if (($col_type != null) && ($row->Type != $col_type)) { ++$diffs; } @@ -205,7 +189,6 @@ function check_column($table_name, $col_name, $col_type, $is_null = null, $key = ++$diffs; } if ($diffs > 0) { - if ($debug) echo ("diffs = $diffs returning false\n"); return false; } return true; @@ -213,5 +196,3 @@ function check_column($table_name, $col_name, $col_type, $is_null = null, $key = } return false; } - -?> \ No newline at end of file diff --git a/wp-admin/install.php b/wp-admin/install.php index edbc8c013..e39d1f4fc 100644 --- a/wp-admin/install.php +++ b/wp-admin/install.php @@ -10,13 +10,13 @@ if ( false ) { ?> <!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml" > +<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Error: PHP is not running</title> </head> <body> - <h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png" /></h1> + <h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png?ver=20120216" /></h1> <h2>Error: PHP is not running</h2> <p>WordPress requires that your web server is running PHP. Your server does not have PHP installed, or PHP is turned off.</p> </body> @@ -41,7 +41,7 @@ require_once( dirname( __FILE__ ) . '/includes/upgrade.php' ); /** Load wpdb */ require_once(dirname(dirname(__FILE__)) . '/wp-includes/wp-db.php'); -$step = isset( $_GET['step'] ) ? $_GET['step'] : 0; +$step = isset( $_GET['step'] ) ? (int) $_GET['step'] : 0; /** * Display install header. @@ -61,7 +61,7 @@ function display_header() { <?php wp_admin_css( 'install', true ); ?> </head> <body<?php if ( is_rtl() ) echo ' class="rtl"'; ?>> -<h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png" /></h1> +<h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png?ver=20120216" /></h1> <?php } // end display_header() @@ -131,7 +131,7 @@ function display_setup_form( $error = null ) { </tr> <tr> <th scope="row"><label for="blog_public"><?php _e( 'Privacy' ); ?></label></th> - <td colspan="2"><label><input type="checkbox" name="blog_public" value="1" <?php checked( $blog_public ); ?> /> <?php _e( 'Allow my site to appear in search engines like Google and Technorati.' ); ?></label></td> + <td colspan="2"><label><input type="checkbox" name="blog_public" value="1" <?php checked( $blog_public ); ?> /> <?php _e( 'Allow search engines to index this site.' ); ?></label></td> </tr> </table> <p class="step"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Install WordPress' ); ?>" class="button" /></p> @@ -151,15 +151,20 @@ $php_compat = version_compare( $php_version, $required_php_version, '>=' ); $mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ) || file_exists( WP_CONTENT_DIR . '/db.php' ); if ( !$mysql_compat && !$php_compat ) - $compat = sprintf( __('You cannot install because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.'), $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ); + $compat = sprintf( __( 'You cannot install because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.' ), $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ); elseif ( !$php_compat ) - $compat = sprintf( __('You cannot install because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires PHP version %2$s or higher. You are running version %3$s.'), $wp_version, $required_php_version, $php_version ); + $compat = sprintf( __( 'You cannot install because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires PHP version %2$s or higher. You are running version %3$s.' ), $wp_version, $required_php_version, $php_version ); elseif ( !$mysql_compat ) - $compat = sprintf( __('You cannot install because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires MySQL version %2$s or higher. You are running version %3$s.'), $wp_version, $required_mysql_version, $mysql_version ); + $compat = sprintf( __( 'You cannot install because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires MySQL version %2$s or higher. You are running version %3$s.' ), $wp_version, $required_mysql_version, $mysql_version ); if ( !$mysql_compat || !$php_compat ) { display_header(); - die('<h1>' . __('Insufficient Requirements') . '</h1><p>' . $compat . '</p></body></html>'); + die( '<h1>' . __( 'Insufficient Requirements' ) . '</h1><p>' . $compat . '</p></body></html>' ); +} + +if ( ! is_string( $wpdb->base_prefix ) || '' === $wpdb->base_prefix ) { + display_header(); + die( '<h1>' . __( 'Configuration Error' ) . '</h1><p>' . __( 'Your <code>wp-config.php</code> file has an empty database table prefix, which is not supported.' ) . '</p></body></html>' ); } switch($step) { @@ -167,7 +172,7 @@ switch($step) { case 1: // Step 1, direct link. display_header(); ?> -<h1><?php _e( 'Welcome' ); ?></h1> +<h1><?php _ex( 'Welcome', 'Howdy' ); ?></h1> <p><?php printf( __( 'Welcome to the famous five minute WordPress installation process! You may want to browse the <a href="%s">ReadMe documentation</a> at your leisure. Otherwise, just fill in the information below and you’ll be on your way to using the most extendable and powerful personal publishing platform in the world.' ), '../readme.html' ); ?></p> <h1><?php _e( 'Information needed' ); ?></h1> @@ -207,7 +212,7 @@ switch($step) { $error = true; } elseif ( ! is_email( $admin_email ) ) { // TODO: poka-yoke - display_setup_form( __( 'that isn’t a valid e-mail address. E-mail addresses look like: <code>username@example.com</code>' ) ); + display_setup_form( __( 'that isn’t a valid e-mail address. E-mail addresses look like: <code>username@example.com</code>' ) ); $error = true; } diff --git a/wp-admin/js/common.dev.js b/wp-admin/js/common.dev.js index 4918f1f77..4c87a877f 100644 --- a/wp-admin/js/common.dev.js +++ b/wp-admin/js/common.dev.js @@ -1,4 +1,4 @@ -var showNotice, adminMenu, columns, validateForm, screenMeta, autofold_menu; +var showNotice, adminMenu, columns, validateForm, screenMeta; (function($){ // Removed in 3.3. // (perhaps) needed for back-compat @@ -160,7 +160,7 @@ $('.contextual-help-tabs').delegate('a', 'click focus', function(e) { $(document).ready( function() { var lastClicked = false, checks, first, last, checked, menu = $('#adminmenu'), - pageInput = $('input.current-page'), currentPage = pageInput.val(), folded, refresh; + pageInput = $('input.current-page'), currentPage = pageInput.val(), refresh; // admin menu refresh = function(i, el){ // force the browser to refresh the tabbing index @@ -172,6 +172,9 @@ $(document).ready( function() { $('#collapse-menu', menu).click(function(){ var body = $(document.body); + // reset any compensation for submenus near the bottom of the screen + $('#adminmenu div.wp-submenu').css('margin-top', ''); + if ( body.hasClass('folded') ) { body.removeClass('folded'); setUserSetting('mfold', 'o'); @@ -186,7 +189,7 @@ $(document).ready( function() { over: function(e){ var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop; - if ( !$(document.body).hasClass('folded') && $(this).hasClass('wp-menu-open') ) + if ( m.is(':visible') ) return; menutop = $(this).offset().top; @@ -205,9 +208,9 @@ $(document).ready( function() { o = maxtop; if ( o > 1 ) - m.css({'marginTop':'-'+o+'px'}); - else if ( m.css('marginTop') ) - m.css({'marginTop':''}); + m.css('margin-top', '-'+o+'px'); + else + m.css('margin-top', ''); menu.find('.wp-submenu').removeClass('sub-open'); m.addClass('sub-open'); @@ -317,7 +320,7 @@ $(document).ready( function() { var el = e.target, selStart = el.selectionStart, selEnd = el.selectionEnd, val = el.value, scroll, sel; try { - this.lastKey = 9; // not a standard DOM property, lastKey is to help stop Opera tab event. See blur handler below. + this.lastKey = 9; // not a standard DOM property, lastKey is to help stop Opera tab event. See blur handler below. } catch(err) {} if ( document.selection ) { @@ -351,28 +354,6 @@ $(document).ready( function() { }); } - // auto-fold the menu when screen is under 800px - $(window).bind('resize.autofold', function(){ - if ( getUserSetting('mfold') == 'f' ) - return; - - var width = $(window).width(); - - // fold admin menu - if ( width <= 800 ) { - if ( !folded ) { - $(document.body).addClass('folded'); - folded = true; - } - } else { - if ( folded ) { - $(document.body).removeClass('folded'); - folded = false; - } - } - - }).triggerHandler('resize'); - }); // internal use diff --git a/wp-admin/js/common.js b/wp-admin/js/common.js index c812f3fc6..7f71b3d01 100644 --- a/wp-admin/js/common.js +++ b/wp-admin/js/common.js @@ -1 +1 @@ -var showNotice,adminMenu,columns,validateForm,screenMeta,autofold_menu;(function(a){adminMenu={init:function(){},fold:function(){},restoreMenuState:function(){},toggle:function(){},favorites:function(){}};columns={init:function(){var b=this;a(".hide-column-tog","#adv-settings").click(function(){var d=a(this),c=d.val();if(d.prop("checked")){b.checked(c)}else{b.unchecked(c)}columns.saveManageColumnsState()})},saveManageColumnsState:function(){var b=this.hidden();a.post(ajaxurl,{action:"hidden-columns",hidden:b,screenoptionnonce:a("#screenoptionnonce").val(),page:pagenow})},checked:function(b){a(".column-"+b).show();this.colSpanChange(+1)},unchecked:function(b){a(".column-"+b).hide();this.colSpanChange(-1)},hidden:function(){return a(".manage-column").filter(":hidden").map(function(){return this.id}).get().join(",")},useCheckboxesForHidden:function(){this.hidden=function(){return a(".hide-column-tog").not(":checked").map(function(){var b=this.id;return b.substring(b,b.length-5)}).get().join(",")}},colSpanChange:function(b){var d=a("table").find(".colspanchange"),c;if(!d.length){return}c=parseInt(d.attr("colspan"),10)+b;d.attr("colspan",c.toString())}};a(document).ready(function(){columns.init()});validateForm=function(b){return !a(b).find(".form-required").filter(function(){return a("input:visible",this).val()==""}).addClass("form-invalid").find("input:visible").change(function(){a(this).closest(".form-invalid").removeClass("form-invalid")}).size()};showNotice={warn:function(){var b=commonL10n.warnDelete||"";if(confirm(b)){return true}return false},note:function(b){alert(b)}};screenMeta={element:null,toggles:null,page:null,init:function(){this.element=a("#screen-meta");this.toggles=a(".screen-meta-toggle a");this.page=a("#wpcontent");this.toggles.click(this.toggleEvent)},toggleEvent:function(c){var b=a(this.href.replace(/.+#/,"#"));c.preventDefault();if(!b.length){return}if(b.is(":visible")){screenMeta.close(b,a(this))}else{screenMeta.open(b,a(this))}},open:function(b,c){a(".screen-meta-toggle").not(c.parent()).css("visibility","hidden");b.parent().show();b.slideDown("fast",function(){c.addClass("screen-meta-active")})},close:function(b,c){b.slideUp("fast",function(){c.removeClass("screen-meta-active");a(".screen-meta-toggle").css("visibility","");b.parent().hide()})}};a(".contextual-help-tabs").delegate("a","click focus",function(d){var c=a(this),b;d.preventDefault();if(c.is(".active a")){return false}a(".contextual-help-tabs .active").removeClass("active");c.parent("li").addClass("active");b=a(c.attr("href"));a(".help-tab-content").not(b).removeClass("active").hide();b.addClass("active").show()});a(document).ready(function(){var j=false,c,e,k,i,b=a("#adminmenu"),d=a("input.current-page"),f=d.val(),h,g;g=function(l,n){var o=a(n),m=o.attr("tabindex");if(m){o.attr("tabindex","0").attr("tabindex",m)}};a("#collapse-menu",b).click(function(){var l=a(document.body);if(l.hasClass("folded")){l.removeClass("folded");setUserSetting("mfold","o")}else{l.addClass("folded");setUserSetting("mfold","f")}return false});a("li.wp-has-submenu",b).hoverIntent({over:function(t){var u,r,l,s,n=a(this).find(".wp-submenu"),v,p,q;if(!a(document.body).hasClass("folded")&&a(this).hasClass("wp-menu-open")){return}v=a(this).offset().top;p=a(window).scrollTop();q=v-p-30;u=v+n.height()+1;r=a("#wpwrap").height();l=60+u-r;s=a(window).height()+p-15;if(s<(u-l)){l=u-s}if(l>q){l=q}if(l>1){n.css({marginTop:"-"+l+"px"})}else{if(n.css("marginTop")){n.css({marginTop:""})}}b.find(".wp-submenu").removeClass("sub-open");n.addClass("sub-open")},out:function(){a(this).find(".wp-submenu").removeClass("sub-open")},timeout:200,sensitivity:7,interval:90});a("li.wp-has-submenu > a.wp-not-current-submenu",b).bind("keydown.adminmenu",function(m){if(m.which!=13){return}var l=a(m.target);m.stopPropagation();m.preventDefault();b.find(".wp-submenu").removeClass("sub-open");l.siblings(".wp-submenu").toggleClass("sub-open").find('a[role="menuitem"]').each(g)}).each(g);a('a[role="menuitem"]',b).bind("keydown.adminmenu",function(m){if(m.which!=27){return}var l=a(m.target);m.stopPropagation();m.preventDefault();l.add(l.siblings()).closest(".sub-open").removeClass("sub-open").siblings("a.wp-not-current-submenu").focus()});a("div.wrap h2:first").nextAll("div.updated, div.error").addClass("below-h2");a("div.updated, div.error").not(".below-h2, .inline").insertAfter(a("div.wrap h2:first"));screenMeta.init();a("tbody").children().children(".check-column").find(":checkbox").click(function(l){if("undefined"==l.shiftKey){return true}if(l.shiftKey){if(!j){return true}c=a(j).closest("form").find(":checkbox");e=c.index(j);k=c.index(this);i=a(this).prop("checked");if(0<e&&0<k&&e!=k){c.slice(e,k).prop("checked",function(){if(a(this).closest("tr").is(":visible")){return i}return false})}}j=this;return true});a("thead, tfoot").find(".check-column :checkbox").click(function(n){var o=a(this).prop("checked"),m="undefined"==typeof toggleWithKeyboard?false:toggleWithKeyboard,l=n.shiftKey||m;a(this).closest("table").children("tbody").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){if(a(this).closest("tr").is(":hidden")){return false}if(l){return a(this).prop("checked")}else{if(o){return true}}return false});a(this).closest("table").children("thead, tfoot").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){if(l){return false}else{if(o){return true}}return false})});a("#default-password-nag-no").click(function(){setUserSetting("default_password_nag","hide");a("div.default-password-nag").hide();return false});a("#newcontent").bind("keydown.wpevent_InsertTab",function(q){if(q.keyCode!=9){return true}var n=q.target,s=n.selectionStart,m=n.selectionEnd,r=n.value,l,p;try{this.lastKey=9}catch(o){}if(document.selection){n.focus();p=document.selection.createRange();p.text="\t"}else{if(s>=0){l=this.scrollTop;n.value=r.substring(0,s).concat("\t",r.substring(m));n.selectionStart=n.selectionEnd=s+1;this.scrollTop=l}}if(q.stopPropagation){q.stopPropagation()}if(q.preventDefault){q.preventDefault()}});a("#newcontent").bind("blur.wpevent_InsertTab",function(l){if(this.lastKey&&9==this.lastKey){this.focus()}});if(d.length){d.closest("form").submit(function(l){if(a('select[name="action"]').val()==-1&&a('select[name="action2"]').val()==-1&&d.val()==f){d.val("1")}})}a(window).bind("resize.autofold",function(){if(getUserSetting("mfold")=="f"){return}var l=a(window).width();if(l<=800){if(!h){a(document.body).addClass("folded");h=true}}else{if(h){a(document.body).removeClass("folded");h=false}}}).triggerHandler("resize")});a(document).bind("wp_CloseOnEscape",function(c,b){if(typeof(b.cb)!="function"){return}if(typeof(b.condition)!="function"||b.condition()){b.cb()}return true})})(jQuery); \ No newline at end of file +var showNotice,adminMenu,columns,validateForm,screenMeta;(function(a){adminMenu={init:function(){},fold:function(){},restoreMenuState:function(){},toggle:function(){},favorites:function(){}};columns={init:function(){var b=this;a(".hide-column-tog","#adv-settings").click(function(){var d=a(this),c=d.val();if(d.prop("checked")){b.checked(c)}else{b.unchecked(c)}columns.saveManageColumnsState()})},saveManageColumnsState:function(){var b=this.hidden();a.post(ajaxurl,{action:"hidden-columns",hidden:b,screenoptionnonce:a("#screenoptionnonce").val(),page:pagenow})},checked:function(b){a(".column-"+b).show();this.colSpanChange(+1)},unchecked:function(b){a(".column-"+b).hide();this.colSpanChange(-1)},hidden:function(){return a(".manage-column").filter(":hidden").map(function(){return this.id}).get().join(",")},useCheckboxesForHidden:function(){this.hidden=function(){return a(".hide-column-tog").not(":checked").map(function(){var b=this.id;return b.substring(b,b.length-5)}).get().join(",")}},colSpanChange:function(b){var d=a("table").find(".colspanchange"),c;if(!d.length){return}c=parseInt(d.attr("colspan"),10)+b;d.attr("colspan",c.toString())}};a(document).ready(function(){columns.init()});validateForm=function(b){return !a(b).find(".form-required").filter(function(){return a("input:visible",this).val()==""}).addClass("form-invalid").find("input:visible").change(function(){a(this).closest(".form-invalid").removeClass("form-invalid")}).size()};showNotice={warn:function(){var b=commonL10n.warnDelete||"";if(confirm(b)){return true}return false},note:function(b){alert(b)}};screenMeta={element:null,toggles:null,page:null,init:function(){this.element=a("#screen-meta");this.toggles=a(".screen-meta-toggle a");this.page=a("#wpcontent");this.toggles.click(this.toggleEvent)},toggleEvent:function(c){var b=a(this.href.replace(/.+#/,"#"));c.preventDefault();if(!b.length){return}if(b.is(":visible")){screenMeta.close(b,a(this))}else{screenMeta.open(b,a(this))}},open:function(b,c){a(".screen-meta-toggle").not(c.parent()).css("visibility","hidden");b.parent().show();b.slideDown("fast",function(){c.addClass("screen-meta-active")})},close:function(b,c){b.slideUp("fast",function(){c.removeClass("screen-meta-active");a(".screen-meta-toggle").css("visibility","");b.parent().hide()})}};a(".contextual-help-tabs").delegate("a","click focus",function(d){var c=a(this),b;d.preventDefault();if(c.is(".active a")){return false}a(".contextual-help-tabs .active").removeClass("active");c.parent("li").addClass("active");b=a(c.attr("href"));a(".help-tab-content").not(b).removeClass("active").hide();b.addClass("active").show()});a(document).ready(function(){var i=false,c,e,j,h,b=a("#adminmenu"),d=a("input.current-page"),f=d.val(),g;g=function(k,m){var n=a(m),l=n.attr("tabindex");if(l){n.attr("tabindex","0").attr("tabindex",l)}};a("#collapse-menu",b).click(function(){var k=a(document.body);a("#adminmenu div.wp-submenu").css("margin-top","");if(k.hasClass("folded")){k.removeClass("folded");setUserSetting("mfold","o")}else{k.addClass("folded");setUserSetting("mfold","f")}return false});a("li.wp-has-submenu",b).hoverIntent({over:function(s){var t,q,k,r,l=a(this).find(".wp-submenu"),u,n,p;if(l.is(":visible")){return}u=a(this).offset().top;n=a(window).scrollTop();p=u-n-30;t=u+l.height()+1;q=a("#wpwrap").height();k=60+t-q;r=a(window).height()+n-15;if(r<(t-k)){k=t-r}if(k>p){k=p}if(k>1){l.css("margin-top","-"+k+"px")}else{l.css("margin-top","")}b.find(".wp-submenu").removeClass("sub-open");l.addClass("sub-open")},out:function(){a(this).find(".wp-submenu").removeClass("sub-open")},timeout:200,sensitivity:7,interval:90});a("li.wp-has-submenu > a.wp-not-current-submenu",b).bind("keydown.adminmenu",function(l){if(l.which!=13){return}var k=a(l.target);l.stopPropagation();l.preventDefault();b.find(".wp-submenu").removeClass("sub-open");k.siblings(".wp-submenu").toggleClass("sub-open").find('a[role="menuitem"]').each(g)}).each(g);a('a[role="menuitem"]',b).bind("keydown.adminmenu",function(l){if(l.which!=27){return}var k=a(l.target);l.stopPropagation();l.preventDefault();k.add(k.siblings()).closest(".sub-open").removeClass("sub-open").siblings("a.wp-not-current-submenu").focus()});a("div.wrap h2:first").nextAll("div.updated, div.error").addClass("below-h2");a("div.updated, div.error").not(".below-h2, .inline").insertAfter(a("div.wrap h2:first"));screenMeta.init();a("tbody").children().children(".check-column").find(":checkbox").click(function(k){if("undefined"==k.shiftKey){return true}if(k.shiftKey){if(!i){return true}c=a(i).closest("form").find(":checkbox");e=c.index(i);j=c.index(this);h=a(this).prop("checked");if(0<e&&0<j&&e!=j){c.slice(e,j).prop("checked",function(){if(a(this).closest("tr").is(":visible")){return h}return false})}}i=this;return true});a("thead, tfoot").find(".check-column :checkbox").click(function(m){var n=a(this).prop("checked"),l="undefined"==typeof toggleWithKeyboard?false:toggleWithKeyboard,k=m.shiftKey||l;a(this).closest("table").children("tbody").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){if(a(this).closest("tr").is(":hidden")){return false}if(k){return a(this).prop("checked")}else{if(n){return true}}return false});a(this).closest("table").children("thead, tfoot").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){if(k){return false}else{if(n){return true}}return false})});a("#default-password-nag-no").click(function(){setUserSetting("default_password_nag","hide");a("div.default-password-nag").hide();return false});a("#newcontent").bind("keydown.wpevent_InsertTab",function(p){if(p.keyCode!=9){return true}var m=p.target,r=m.selectionStart,l=m.selectionEnd,q=m.value,k,o;try{this.lastKey=9}catch(n){}if(document.selection){m.focus();o=document.selection.createRange();o.text="\t"}else{if(r>=0){k=this.scrollTop;m.value=q.substring(0,r).concat("\t",q.substring(l));m.selectionStart=m.selectionEnd=r+1;this.scrollTop=k}}if(p.stopPropagation){p.stopPropagation()}if(p.preventDefault){p.preventDefault()}});a("#newcontent").bind("blur.wpevent_InsertTab",function(k){if(this.lastKey&&9==this.lastKey){this.focus()}});if(d.length){d.closest("form").submit(function(k){if(a('select[name="action"]').val()==-1&&a('select[name="action2"]').val()==-1&&d.val()==f){d.val("1")}})}});a(document).bind("wp_CloseOnEscape",function(c,b){if(typeof(b.cb)!="function"){return}if(typeof(b.condition)!="function"||b.condition()){b.cb()}return true})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/custom-background.dev.js b/wp-admin/js/custom-background.dev.js index b4dbc6657..5bf085da2 100644 --- a/wp-admin/js/custom-background.dev.js +++ b/wp-admin/js/custom-background.dev.js @@ -1,55 +1,66 @@ -var farbtastic; - -function pickColor(color) { - farbtastic.setColor(color); - jQuery('#background-color').val(color); - jQuery('#custom-background-image').css('background-color', color); - if ( color && color !== '#' ) - jQuery('#clearcolor').show(); - else - jQuery('#clearcolor').hide(); -} - -jQuery(document).ready(function() { - jQuery('#pickcolor').click(function() { - jQuery('#colorPickerDiv').show(); - return false; - }); +var farbtastic, pickColor; - jQuery('#clearcolor a').click( function(e) { - pickColor(''); - e.preventDefault(); - }); +(function($) { - jQuery('#background-color').keyup(function() { - var _hex = jQuery('#background-color').val(), hex = _hex; - if ( hex.charAt(0) != '#' ) - hex = '#' + hex; - hex = hex.replace(/[^#a-fA-F0-9]+/, ''); - if ( hex != _hex ) - jQuery('#background-color').val(hex); - if ( hex.length == 4 || hex.length == 7 ) - pickColor( hex ); - }); + var defaultColor = ''; - jQuery('input[name="background-position-x"]').change(function() { - jQuery('#custom-background-image').css('background-position', jQuery(this).val() + ' top'); - }); + pickColor = function(color) { + farbtastic.setColor(color); + $('#background-color').val(color); + $('#custom-background-image').css('background-color', color); + // If we have a default color, and they match, then we need to hide the 'Default' link. + // Otherwise, we hide the 'Clear' link when it is empty. + if ( ( defaultColor && color === defaultColor ) || ( ! defaultColor && ( '' === color || '#' === color ) ) ) + $('#clearcolor').hide(); + else + $('#clearcolor').show(); + } - jQuery('input[name="background-repeat"]').change(function() { - jQuery('#custom-background-image').css('background-repeat', jQuery(this).val()); - }); + $(document).ready(function() { - farbtastic = jQuery.farbtastic('#colorPickerDiv', function(color) { - pickColor(color); - }); - pickColor(jQuery('#background-color').val()); + defaultColor = $('#defaultcolor').val(); + + $('#pickcolor').click(function() { + $('#colorPickerDiv').show(); + return false; + }); + + $('#clearcolor a').click( function(e) { + pickColor( defaultColor ); + e.preventDefault(); + }); - jQuery(document).mousedown(function(){ - jQuery('#colorPickerDiv').each(function(){ - var display = jQuery(this).css('display'); - if ( display == 'block' ) - jQuery(this).fadeOut(2); + $('#background-color').keyup(function() { + var _hex = $('#background-color').val(), hex = _hex; + if ( hex.charAt(0) != '#' ) + hex = '#' + hex; + hex = hex.replace(/[^#a-fA-F0-9]+/, ''); + if ( hex != _hex ) + $('#background-color').val(hex); + if ( hex.length == 4 || hex.length == 7 ) + pickColor( hex ); + }); + + $('input[name="background-position-x"]').change(function() { + $('#custom-background-image').css('background-position', $(this).val() + ' top'); + }); + + $('input[name="background-repeat"]').change(function() { + $('#custom-background-image').css('background-repeat', $(this).val()); + }); + + farbtastic = $.farbtastic('#colorPickerDiv', function(color) { + pickColor(color); + }); + pickColor($('#background-color').val()); + + $(document).mousedown(function(){ + $('#colorPickerDiv').each(function(){ + var display = $(this).css('display'); + if ( display == 'block' ) + $(this).fadeOut(2); + }); }); }); -}); + +})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/custom-background.js b/wp-admin/js/custom-background.js index 6cf8851bd..66b8bbfd4 100644 --- a/wp-admin/js/custom-background.js +++ b/wp-admin/js/custom-background.js @@ -1 +1 @@ -var farbtastic;function pickColor(a){farbtastic.setColor(a);jQuery("#background-color").val(a);jQuery("#custom-background-image").css("background-color",a);if(a&&a!=="#"){jQuery("#clearcolor").show()}else{jQuery("#clearcolor").hide()}}jQuery(document).ready(function(){jQuery("#pickcolor").click(function(){jQuery("#colorPickerDiv").show();return false});jQuery("#clearcolor a").click(function(a){pickColor("");a.preventDefault()});jQuery("#background-color").keyup(function(){var b=jQuery("#background-color").val(),a=b;if(a.charAt(0)!="#"){a="#"+a}a=a.replace(/[^#a-fA-F0-9]+/,"");if(a!=b){jQuery("#background-color").val(a)}if(a.length==4||a.length==7){pickColor(a)}});jQuery('input[name="background-position-x"]').change(function(){jQuery("#custom-background-image").css("background-position",jQuery(this).val()+" top")});jQuery('input[name="background-repeat"]').change(function(){jQuery("#custom-background-image").css("background-repeat",jQuery(this).val())});farbtastic=jQuery.farbtastic("#colorPickerDiv",function(a){pickColor(a)});pickColor(jQuery("#background-color").val());jQuery(document).mousedown(function(){jQuery("#colorPickerDiv").each(function(){var a=jQuery(this).css("display");if(a=="block"){jQuery(this).fadeOut(2)}})})}); \ No newline at end of file +var farbtastic,pickColor;(function(b){var a="";pickColor=function(c){farbtastic.setColor(c);b("#background-color").val(c);b("#custom-background-image").css("background-color",c);if((a&&c===a)||(!a&&(""===c||"#"===c))){b("#clearcolor").hide()}else{b("#clearcolor").show()}};b(document).ready(function(){a=b("#defaultcolor").val();b("#pickcolor").click(function(){b("#colorPickerDiv").show();return false});b("#clearcolor a").click(function(c){pickColor(a);c.preventDefault()});b("#background-color").keyup(function(){var d=b("#background-color").val(),c=d;if(c.charAt(0)!="#"){c="#"+c}c=c.replace(/[^#a-fA-F0-9]+/,"");if(c!=d){b("#background-color").val(c)}if(c.length==4||c.length==7){pickColor(c)}});b('input[name="background-position-x"]').change(function(){b("#custom-background-image").css("background-position",b(this).val()+" top")});b('input[name="background-repeat"]').change(function(){b("#custom-background-image").css("background-repeat",b(this).val())});farbtastic=b.farbtastic("#colorPickerDiv",function(c){pickColor(c)});pickColor(b("#background-color").val());b(document).mousedown(function(){b("#colorPickerDiv").each(function(){var c=b(this).css("display");if(c=="block"){b(this).fadeOut(2)}})})})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/customize-controls.dev.js b/wp-admin/js/customize-controls.dev.js new file mode 100644 index 000000000..cb4e6e20a --- /dev/null +++ b/wp-admin/js/customize-controls.dev.js @@ -0,0 +1,942 @@ +(function( exports, $ ){ + var api = wp.customize; + + /* + * @param options + * - previewer - The Previewer instance to sync with. + * - transport - The transport to use for previewing. Supports 'refresh' and 'postMessage'. + */ + api.Setting = api.Value.extend({ + initialize: function( id, value, options ) { + var element; + + api.Value.prototype.initialize.call( this, value, options ); + + this.id = id; + this.transport = this.transport || 'refresh'; + + this.bind( this.preview ); + }, + preview: function() { + switch ( this.transport ) { + case 'refresh': + return this.previewer.refresh(); + case 'postMessage': + return this.previewer.send( 'setting', [ this.id, this() ] ); + } + } + }); + + api.Control = api.Class.extend({ + initialize: function( id, options ) { + var control = this, + nodes, radios, settings; + + this.params = {}; + $.extend( this, options || {} ); + + this.id = id; + this.selector = '#customize-control-' + id.replace( ']', '' ).replace( '[', '-' ); + this.container = $( this.selector ); + + settings = $.map( this.params.settings, function( value ) { + return value; + }); + + api.apply( api, settings.concat( function() { + var key; + + control.settings = {}; + for ( key in control.params.settings ) { + control.settings[ key ] = api( control.params.settings[ key ] ); + } + + control.setting = control.settings['default'] || null; + control.ready(); + }) ); + + control.elements = []; + + nodes = this.container.find('[data-customize-setting-link]'); + radios = {}; + + nodes.each( function() { + var node = $(this), + name; + + if ( node.is(':radio') ) { + name = node.prop('name'); + if ( radios[ name ] ) + return; + + radios[ name ] = true; + node = nodes.filter( '[name="' + name + '"]' ); + } + + api( node.data('customizeSettingLink'), function( setting ) { + var element = new api.Element( node ); + control.elements.push( element ); + element.sync( setting ); + element.set( setting() ); + }); + }); + }, + + ready: function() {}, + + dropdownInit: function() { + var control = this, + statuses = this.container.find('.dropdown-status'), + params = this.params, + update = function( to ) { + if ( typeof to === 'string' && params.statuses && params.statuses[ to ] ) + statuses.html( params.statuses[ to ] ).show(); + else + statuses.hide(); + }; + + // Support the .dropdown class to open/close complex elements + this.container.on( 'click', '.dropdown', function( event ) { + event.preventDefault(); + control.container.toggleClass('open'); + }); + + this.setting.bind( update ); + update( this.setting() ); + } + }); + + api.ColorControl = api.Control.extend({ + ready: function() { + var control = this, + rhex, spot, input, text, update; + + rhex = /^#([A-Fa-f0-9]{3}){0,2}$/; + spot = this.container.find('.dropdown-content'); + input = new api.Element( this.container.find('.color-picker-hex') ); + update = function( color ) { + spot.css( 'background', color ); + control.farbtastic.setColor( color ); + }; + + this.farbtastic = $.farbtastic( this.container.find('.farbtastic-placeholder'), control.setting.set ); + + // Only pass through values that are valid hexes/empty. + input.sync( this.setting ).validate = function( to ) { + return rhex.test( to ) ? to : null; + }; + + this.setting.bind( update ); + update( this.setting() ); + + this.dropdownInit(); + } + }); + + api.UploadControl = api.Control.extend({ + ready: function() { + var control = this; + + this.params.removed = this.params.removed || ''; + + this.success = $.proxy( this.success, this ); + + this.uploader = $.extend({ + container: this.container, + browser: this.container.find('.upload'), + dropzone: this.container.find('.upload-dropzone'), + success: this.success + }, this.uploader || {} ); + + if ( this.uploader.supported ) { + if ( control.params.context ) + control.uploader.param( 'post_data[context]', this.params.context ); + + control.uploader.param( 'post_data[theme]', api.settings.theme.stylesheet ); + } + + this.uploader = new wp.Uploader( this.uploader ); + + this.remover = this.container.find('.remove'); + this.remover.click( function( event ) { + control.setting.set( control.params.removed ); + event.preventDefault(); + }); + + this.removerVisibility = $.proxy( this.removerVisibility, this ); + this.setting.bind( this.removerVisibility ); + this.removerVisibility( this.setting.get() ); + }, + success: function( attachment ) { + this.setting.set( attachment.url ); + }, + removerVisibility: function( to ) { + this.remover.toggle( to != this.params.removed ); + } + }); + + api.ImageControl = api.UploadControl.extend({ + ready: function() { + var control = this, + panels; + + this.uploader = { + init: function( up ) { + var fallback, button; + + if ( this.supports.dragdrop ) + return; + + // Maintain references while wrapping the fallback button. + fallback = control.container.find( '.upload-fallback' ); + button = fallback.children().detach(); + + this.browser.detach().empty().append( button ); + fallback.append( this.browser ).show(); + } + }; + + api.UploadControl.prototype.ready.call( this ); + + this.thumbnail = this.container.find('.preview-thumbnail img'); + this.thumbnailSrc = $.proxy( this.thumbnailSrc, this ); + this.setting.bind( this.thumbnailSrc ); + + this.library = this.container.find('.library'); + + // Generate tab objects + this.tabs = {}; + panels = this.library.find('.library-content'); + + this.library.children('ul').children('li').each( function() { + var link = $(this), + id = link.data('customizeTab'), + panel = panels.filter('[data-customize-tab="' + id + '"]'); + + control.tabs[ id ] = { + both: link.add( panel ), + link: link, + panel: panel + }; + }); + + // Select a tab + this.selected = this.tabs[ panels.first().data('customizeTab') ]; + this.selected.both.addClass('library-selected'); + + // Bind tab switch events + this.library.children('ul').on( 'click', 'li', function( event ) { + var id = $(this).data('customizeTab'), + tab = control.tabs[ id ]; + + event.preventDefault(); + + if ( tab.link.hasClass('library-selected') ) + return; + + control.selected.both.removeClass('library-selected'); + control.selected = tab; + control.selected.both.addClass('library-selected'); + }); + + // Bind events to switch image urls. + this.library.on( 'click', 'a', function( event ) { + var value = $(this).data('customizeImageValue'); + + if ( value ) { + control.setting.set( value ); + event.preventDefault(); + } + }); + + if ( this.tabs.uploaded ) { + this.tabs.uploaded.target = this.library.find('.uploaded-target'); + if ( ! this.tabs.uploaded.panel.find('.thumbnail').length ) + this.tabs.uploaded.both.addClass('hidden'); + } + + this.dropdownInit(); + }, + success: function( attachment ) { + api.UploadControl.prototype.success.call( this, attachment ); + + // Add the uploaded image to the uploaded tab. + if ( this.tabs.uploaded && this.tabs.uploaded.target.length ) { + this.tabs.uploaded.both.removeClass('hidden'); + + attachment.element = $( '<a href="#" class="thumbnail"></a>' ) + .data( 'customizeImageValue', attachment.url ) + .append( '<img src="' + attachment.url+ '" />' ) + .appendTo( this.tabs.uploaded.target ); + } + }, + thumbnailSrc: function( to ) { + if ( /^(https?:)?\/\//.test( to ) ) + this.thumbnail.prop( 'src', to ).show(); + else + this.thumbnail.hide(); + } + }); + + // Change objects contained within the main customize object to Settings. + api.defaultConstructor = api.Setting; + + // Create the collection of Control objects. + api.control = new api.Values({ defaultConstructor: api.Control }); + + api.PreviewFrame = api.Messenger.extend({ + sensitivity: 2000, + + initialize: function( params, options ) { + var deferred = $.Deferred(), + self = this; + + // This is the promise object. + deferred.promise( this ); + + this.previewer = params.previewer; + + $.extend( params, { channel: api.PreviewFrame.uuid() }); + + api.Messenger.prototype.initialize.call( this, params, options ); + + this.add( 'previewUrl', params.previewUrl ); + + this.query = $.extend( params.query || {}, { customize_messenger_channel: this.channel() }); + + this.run( deferred ); + }, + + run: function( deferred ) { + var self = this, + loaded = false, + ready = false; + + if ( this._ready ) + this.unbind( 'ready', this._ready ); + + this._ready = function() { + ready = true; + + if ( loaded ) + deferred.resolveWith( self ); + }; + + this.bind( 'ready', this._ready ); + + this.request = $.ajax( this.previewUrl(), { + type: 'POST', + data: this.query, + xhrFields: { + withCredentials: true + } + } ); + + this.request.fail( function() { + deferred.rejectWith( self, [ 'request failure' ] ); + }); + + this.request.done( function( response ) { + var location = self.request.getResponseHeader('Location'), + signature = 'WP_CUSTOMIZER_SIGNATURE', + index; + + // Check if the location response header differs from the current URL. + // If so, the request was redirected; try loading the requested page. + if ( location && location != self.previewUrl() ) { + deferred.rejectWith( self, [ 'redirect', location ] ); + return; + } + + // Check if the user is not logged in. + if ( '0' === response ) { + self.login( deferred ); + return; + } + + // Check for cheaters. + if ( '-1' === response ) { + deferred.rejectWith( self, [ 'cheatin' ] ); + return; + } + + // Check for a signature in the request. + index = response.lastIndexOf( signature ); + if ( -1 === index || index < response.lastIndexOf('</html>') ) { + deferred.rejectWith( self, [ 'unsigned' ] ); + return; + } + + // Strip the signature from the request. + response = response.slice( 0, index ) + response.slice( index + signature.length ); + + // Create the iframe and inject the html content. + self.iframe = $('<iframe />').appendTo( self.previewer.container ); + + // Bind load event after the iframe has been added to the page; + // otherwise it will fire when injected into the DOM. + self.iframe.one( 'load', function() { + loaded = true; + + if ( ready ) { + deferred.resolveWith( self ); + } else { + setTimeout( function() { + deferred.rejectWith( self, [ 'ready timeout' ] ); + }, self.sensitivity ); + } + }); + + self.targetWindow( self.iframe[0].contentWindow ); + + self.targetWindow().document.open(); + self.targetWindow().document.write( response ); + self.targetWindow().document.close(); + }); + }, + + login: function( deferred ) { + var self = this, + reject; + + reject = function() { + deferred.rejectWith( self, [ 'logged out' ] ); + }; + + if ( this.triedLogin ) + return reject(); + + // Check if we have an admin cookie. + $.get( api.settings.url.ajax, { + action: 'logged-in' + }).fail( reject ).done( function( response ) { + var iframe; + + if ( '1' !== response ) + reject(); + + iframe = $('<iframe src="' + self.previewUrl() + '" />').hide(); + iframe.appendTo( self.previewer.container ); + iframe.load( function() { + self.triedLogin = true; + + iframe.remove(); + self.run( deferred ); + }); + }); + }, + + destroy: function() { + api.Messenger.prototype.destroy.call( this ); + this.request.abort(); + + if ( this.iframe ) + this.iframe.remove(); + + delete this.request; + delete this.iframe; + delete this.targetWindow; + } + }); + + (function(){ + var uuid = 0; + api.PreviewFrame.uuid = function() { + return 'preview-' + uuid++; + }; + }()); + + api.Previewer = api.Messenger.extend({ + refreshBuffer: 250, + + /** + * Requires params: + * - container - a selector or jQuery element + * - previewUrl - the URL of preview frame + */ + initialize: function( params, options ) { + var self = this, + rscheme = /^https?/, + url; + + $.extend( this, options || {} ); + + /* + * Wrap this.refresh to prevent it from hammering the servers: + * + * If refresh is called once and no other refresh requests are + * loading, trigger the request immediately. + * + * If refresh is called while another refresh request is loading, + * debounce the refresh requests: + * 1. Stop the loading request (as it is instantly outdated). + * 2. Trigger the new request once refresh hasn't been called for + * self.refreshBuffer milliseconds. + */ + this.refresh = (function( self ) { + var refresh = self.refresh, + callback = function() { + timeout = null; + refresh.call( self ); + }, + timeout; + + return function() { + if ( typeof timeout !== 'number' ) { + if ( self.loading ) { + self.abort(); + } else { + return callback(); + } + } + + clearTimeout( timeout ); + timeout = setTimeout( callback, self.refreshBuffer ); + }; + })( this ); + + this.container = api.ensure( params.container ); + this.allowedUrls = params.allowedUrls; + + params.url = window.location.href; + + api.Messenger.prototype.initialize.call( this, params ); + + this.add( 'scheme', this.origin() ).link( this.origin ).setter( function( to ) { + var match = to.match( rscheme ); + return match ? match[0] : ''; + }); + + // Limit the URL to internal, front-end links. + // + // If the frontend and the admin are served from the same domain, load the + // preview over ssl if the customizer is being loaded over ssl. This avoids + // insecure content warnings. This is not attempted if the admin and frontend + // are on different domains to avoid the case where the frontend doesn't have + // ssl certs. + + this.add( 'previewUrl', params.previewUrl ).setter( function( to ) { + var result; + + // Check for URLs that include "/wp-admin/" or end in "/wp-admin". + // Strip hashes and query strings before testing. + if ( /\/wp-admin(\/|$)/.test( to.replace(/[#?].*$/, '') ) ) + return null; + + // Attempt to match the URL to the control frame's scheme + // and check if it's allowed. If not, try the original URL. + $.each([ to.replace( rscheme, self.scheme() ), to ], function( i, url ) { + $.each( self.allowedUrls, function( i, allowed ) { + if ( 0 === url.indexOf( allowed ) ) { + result = url; + return false; + } + }); + if ( result ) + return false; + }); + + // If we found a matching result, return it. If not, bail. + return result ? result : null; + }); + + // Refresh the preview when the URL is changed (but not yet). + this.previewUrl.bind( this.refresh ); + + this.scroll = 0; + this.bind( 'scroll', function( distance ) { + this.scroll = distance; + }); + + // Update the URL when the iframe sends a URL message. + this.bind( 'url', this.previewUrl ); + }, + + query: function() {}, + + abort: function() { + if ( this.loading ) { + this.loading.destroy(); + delete this.loading; + } + }, + + refresh: function() { + var self = this; + + this.abort(); + + this.loading = new api.PreviewFrame({ + url: this.url(), + previewUrl: this.previewUrl(), + query: this.query() || {}, + previewer: this + }); + + this.loading.done( function() { + // 'this' is the loading frame + this.bind( 'synced', function() { + if ( self.preview ) + self.preview.destroy(); + self.preview = this; + delete self.loading; + + self.targetWindow( this.targetWindow() ); + self.channel( this.channel() ); + }); + + this.send( 'sync', { + scroll: self.scroll, + settings: api.get() + }); + }); + + this.loading.fail( function( reason, location ) { + if ( 'redirect' === reason && location ) + self.previewUrl( location ); + + if ( 'logged out' === reason ) { + if ( self.preview ) { + self.preview.destroy(); + delete self.preview; + } + + self.login().done( self.refresh ); + } + + if ( 'cheatin' === reason ) + self.cheatin(); + }); + }, + + login: function() { + var previewer = this, + deferred, messenger, iframe; + + if ( this._login ) + return this._login; + + deferred = $.Deferred(); + this._login = deferred.promise(); + + messenger = new api.Messenger({ + channel: 'login', + url: api.settings.url.login + }); + + iframe = $('<iframe src="' + api.settings.url.login + '" />').appendTo( this.container ); + + messenger.targetWindow( iframe[0].contentWindow ); + + messenger.bind( 'login', function() { + iframe.remove(); + messenger.destroy(); + delete previewer._login; + deferred.resolve(); + }); + + return this._login; + }, + + cheatin: function() { + $( document.body ).empty().addClass('cheatin').append( '<p>' + api.l10n.cheatin + '</p>' ); + } + }); + + /* ===================================================================== + * Ready. + * ===================================================================== */ + + api.controlConstructor = { + color: api.ColorControl, + upload: api.UploadControl, + image: api.ImageControl + }; + + $( function() { + api.settings = window._wpCustomizeSettings; + api.l10n = window._wpCustomizeControlsL10n; + + // Check if we can run the customizer. + if ( ! api.settings ) + return; + + // Redirect to the fallback preview if any incompatibilities are found. + if ( ! $.support.postMessage || ( ! $.support.cors && api.settings.isCrossDomain ) ) + return window.location = api.settings.url.fallback; + + var body = $( document.body ), + overlay = body.children('.wp-full-overlay'), + query, previewer, parent; + + // Prevent the form from saving when enter is pressed. + $('#customize-controls').on( 'keydown', function( e ) { + if ( $( e.target ).is('textarea') ) + return; + + if ( 13 === e.which ) // Enter + e.preventDefault(); + }); + + // Initialize Previewer + previewer = new api.Previewer({ + container: '#customize-preview', + form: '#customize-controls', + previewUrl: api.settings.url.preview, + allowedUrls: api.settings.url.allowed + }, { + query: function() { + return { + wp_customize: 'on', + theme: api.settings.theme.stylesheet, + customized: JSON.stringify( api.get() ) + }; + }, + + nonce: $('#_wpnonce').val(), + + save: function() { + var self = this, + query = $.extend( this.query(), { + action: 'customize_save', + nonce: this.nonce + }), + request = $.post( api.settings.url.ajax, query ); + + api.trigger( 'save', request ); + + body.addClass('saving'); + + request.always( function() { + body.removeClass('saving'); + }); + + request.done( function( response ) { + // Check if the user is logged out. + if ( '0' === response ) { + self.preview.iframe.hide(); + self.login().done( function() { + self.save(); + self.preview.iframe.show(); + }); + return; + } + + // Check for cheaters. + if ( '-1' === response ) { + self.cheatin(); + return; + } + + api.trigger( 'saved' ); + }); + } + }); + + $.each( api.settings.settings, function( id, data ) { + api.create( id, id, data.value, { + transport: data.transport, + previewer: previewer + } ); + }); + + $.each( api.settings.controls, function( id, data ) { + var constructor = api.controlConstructor[ data.type ] || api.Control, + control; + + control = api.control.add( id, new constructor( id, { + params: data, + previewer: previewer + } ) ); + }); + + // Check if preview url is valid and load the preview frame. + if ( previewer.previewUrl() ) + previewer.refresh(); + else + previewer.previewUrl( api.settings.url.home ); + + // Save and activated states + (function() { + var state = new api.Values(), + saved = state.create('saved'), + activated = state.create('activated'); + + state.bind( 'change', function() { + var save = $('#save'), + back = $('.back'); + + if ( ! activated() ) { + save.val( api.l10n.activate ).prop( 'disabled', false ); + back.text( api.l10n.cancel ); + + } else if ( saved() ) { + save.val( api.l10n.saved ).prop( 'disabled', true ); + back.text( api.l10n.close ); + + } else { + save.val( api.l10n.save ).prop( 'disabled', false ); + back.text( api.l10n.cancel ); + } + }); + + // Set default states. + saved( true ); + activated( api.settings.theme.active ); + + api.bind( 'change', function() { + state('saved').set( false ); + }); + + api.bind( 'saved', function() { + state('saved').set( true ); + state('activated').set( true ); + }); + + activated.bind( function( to ) { + if ( to ) + api.trigger( 'activated' ); + }); + + // Expose states to the API. + api.state = state; + }()); + + // Temporary accordion code. + $('.customize-section-title').click( function( event ) { + var clicked = $( this ).parents( '.customize-section' ); + + if ( clicked.hasClass('cannot-expand') ) + return; + + $( '.customize-section' ).not( clicked ).removeClass( 'open' ); + clicked.toggleClass( 'open' ); + event.preventDefault(); + }); + + // Button bindings. + $('#save').click( function( event ) { + previewer.save(); + event.preventDefault(); + }); + + $('.collapse-sidebar').click( function( event ) { + overlay.toggleClass( 'collapsed' ).toggleClass( 'expanded' ); + event.preventDefault(); + }); + + // Create a potential postMessage connection with the parent frame. + parent = new api.Messenger({ + url: api.settings.url.parent, + channel: 'loader' + }); + + // If we receive a 'back' event, we're inside an iframe. + // Send any clicks to the 'Return' link to the parent page. + parent.bind( 'back', function() { + $('.back').on( 'click.back', function( event ) { + event.preventDefault(); + parent.send( 'close' ); + }); + }); + + // Pass events through to the parent. + api.bind( 'saved', function() { + parent.send( 'saved' ); + }); + + // When activated, let the loader handle redirecting the page. + // If no loader exists, redirect the page ourselves (if a url exists). + api.bind( 'activated', function() { + if ( parent.targetWindow() ) + parent.send( 'activated', api.settings.url.activated ); + else if ( api.settings.url.activated ) + window.location = api.settings.url.activated; + }); + + // Initialize the connection with the parent frame. + parent.send( 'ready' ); + + // Control visibility for default controls + $.each({ + 'background_image': { + controls: [ 'background_repeat', 'background_position_x', 'background_attachment' ], + callback: function( to ) { return !! to } + }, + 'show_on_front': { + controls: [ 'page_on_front', 'page_for_posts' ], + callback: function( to ) { return 'page' === to } + }, + 'header_textcolor': { + controls: [ 'header_textcolor' ], + callback: function( to ) { return 'blank' !== to } + } + }, function( settingId, o ) { + api( settingId, function( setting ) { + $.each( o.controls, function( i, controlId ) { + api.control( controlId, function( control ) { + var visibility = function( to ) { + control.container.toggle( o.callback( to ) ); + }; + + visibility( setting.get() ); + setting.bind( visibility ); + }); + }); + }); + }); + + // Juggle the two controls that use header_textcolor + api.control( 'display_header_text', function( control ) { + var last = ''; + + control.elements[0].unsync( api( 'header_textcolor' ) ); + + control.element = new api.Element( control.container.find('input') ); + control.element.set( 'blank' !== control.setting() ); + + control.element.bind( function( to ) { + if ( ! to ) + last = api( 'header_textcolor' ).get(); + + control.setting.set( to ? last : 'blank' ); + }); + + control.setting.bind( function( to ) { + control.element.set( 'blank' !== to ); + }); + }); + + // Handle header image data + api.control( 'header_image', function( control ) { + control.setting.bind( function( to ) { + if ( to === control.params.removed ) + control.settings.data.set( false ); + }); + + control.library.on( 'click', 'a', function( event ) { + control.settings.data.set( $(this).data('customizeHeaderImageData') ); + }); + + control.uploader.success = function( attachment ) { + var data; + + api.ImageControl.prototype.success.call( control, attachment ); + + data = { + attachment_id: attachment.id, + url: attachment.url, + thumbnail_url: attachment.url, + height: attachment.meta.height, + width: attachment.meta.width + }; + + attachment.element.data( 'customizeHeaderImageData', data ); + control.settings.data.set( data ); + } + }); + + api.trigger( 'ready' ); + }); + +})( wp, jQuery ); \ No newline at end of file diff --git a/wp-admin/js/customize-controls.js b/wp-admin/js/customize-controls.js new file mode 100644 index 000000000..2fae4c6d9 --- /dev/null +++ b/wp-admin/js/customize-controls.js @@ -0,0 +1 @@ +(function(a,c){var b=wp.customize;b.Setting=b.Value.extend({initialize:function(g,f,d){var e;b.Value.prototype.initialize.call(this,f,d);this.id=g;this.transport=this.transport||"refresh";this.bind(this.preview)},preview:function(){switch(this.transport){case"refresh":return this.previewer.refresh();case"postMessage":return this.previewer.send("setting",[this.id,this()])}}});b.Control=b.Class.extend({initialize:function(i,e){var g=this,d,h,f;this.params={};c.extend(this,e||{});this.id=i;this.selector="#customize-control-"+i.replace("]","").replace("[","-");this.container=c(this.selector);f=c.map(this.params.settings,function(j){return j});b.apply(b,f.concat(function(){var j;g.settings={};for(j in g.params.settings){g.settings[j]=b(g.params.settings[j])}g.setting=g.settings["default"]||null;g.ready()}));g.elements=[];d=this.container.find("[data-customize-setting-link]");h={};d.each(function(){var k=c(this),j;if(k.is(":radio")){j=k.prop("name");if(h[j]){return}h[j]=true;k=d.filter('[name="'+j+'"]')}b(k.data("customizeSettingLink"),function(m){var l=new b.Element(k);g.elements.push(l);l.sync(m);l.set(m())})})},ready:function(){},dropdownInit:function(){var e=this,d=this.container.find(".dropdown-status"),f=this.params,g=function(h){if(typeof h==="string"&&f.statuses&&f.statuses[h]){d.html(f.statuses[h]).show()}else{d.hide()}};this.container.on("click",".dropdown",function(h){h.preventDefault();e.container.toggleClass("open")});this.setting.bind(g);g(this.setting())}});b.ColorControl=b.Control.extend({ready:function(){var g=this,f,e,d,h,i;f=/^#([A-Fa-f0-9]{3}){0,2}$/;e=this.container.find(".dropdown-content");d=new b.Element(this.container.find(".color-picker-hex"));i=function(j){e.css("background",j);g.farbtastic.setColor(j)};this.farbtastic=c.farbtastic(this.container.find(".farbtastic-placeholder"),g.setting.set);d.sync(this.setting).validate=function(j){return f.test(j)?j:null};this.setting.bind(i);i(this.setting());this.dropdownInit()}});b.UploadControl=b.Control.extend({ready:function(){var d=this;this.params.removed=this.params.removed||"";this.success=c.proxy(this.success,this);this.uploader=c.extend({container:this.container,browser:this.container.find(".upload"),dropzone:this.container.find(".upload-dropzone"),success:this.success},this.uploader||{});if(this.uploader.supported){if(d.params.context){d.uploader.param("post_data[context]",this.params.context)}d.uploader.param("post_data[theme]",b.settings.theme.stylesheet)}this.uploader=new wp.Uploader(this.uploader);this.remover=this.container.find(".remove");this.remover.click(function(e){d.setting.set(d.params.removed);e.preventDefault()});this.removerVisibility=c.proxy(this.removerVisibility,this);this.setting.bind(this.removerVisibility);this.removerVisibility(this.setting.get())},success:function(d){this.setting.set(d.url)},removerVisibility:function(d){this.remover.toggle(d!=this.params.removed)}});b.ImageControl=b.UploadControl.extend({ready:function(){var e=this,d;this.uploader={init:function(f){var h,g;if(this.supports.dragdrop){return}h=e.container.find(".upload-fallback");g=h.children().detach();this.browser.detach().empty().append(g);h.append(this.browser).show()}};b.UploadControl.prototype.ready.call(this);this.thumbnail=this.container.find(".preview-thumbnail img");this.thumbnailSrc=c.proxy(this.thumbnailSrc,this);this.setting.bind(this.thumbnailSrc);this.library=this.container.find(".library");this.tabs={};d=this.library.find(".library-content");this.library.children("ul").children("li").each(function(){var g=c(this),h=g.data("customizeTab"),f=d.filter('[data-customize-tab="'+h+'"]');e.tabs[h]={both:g.add(f),link:g,panel:f}});this.selected=this.tabs[d.first().data("customizeTab")];this.selected.both.addClass("library-selected");this.library.children("ul").on("click","li",function(g){var h=c(this).data("customizeTab"),f=e.tabs[h];g.preventDefault();if(f.link.hasClass("library-selected")){return}e.selected.both.removeClass("library-selected");e.selected=f;e.selected.both.addClass("library-selected")});this.library.on("click","a",function(f){var g=c(this).data("customizeImageValue");if(g){e.setting.set(g);f.preventDefault()}});if(this.tabs.uploaded){this.tabs.uploaded.target=this.library.find(".uploaded-target");if(!this.tabs.uploaded.panel.find(".thumbnail").length){this.tabs.uploaded.both.addClass("hidden")}}this.dropdownInit()},success:function(d){b.UploadControl.prototype.success.call(this,d);if(this.tabs.uploaded&&this.tabs.uploaded.target.length){this.tabs.uploaded.both.removeClass("hidden");d.element=c('<a href="#" class="thumbnail"></a>').data("customizeImageValue",d.url).append('<img src="'+d.url+'" />').appendTo(this.tabs.uploaded.target)}},thumbnailSrc:function(d){if(/^(https?:)?\/\//.test(d)){this.thumbnail.prop("src",d).show()}else{this.thumbnail.hide()}}});b.defaultConstructor=b.Setting;b.control=new b.Values({defaultConstructor:b.Control});b.PreviewFrame=b.Messenger.extend({sensitivity:2000,initialize:function(g,f){var e=c.Deferred(),d=this;e.promise(this);this.previewer=g.previewer;c.extend(g,{channel:b.PreviewFrame.uuid()});b.Messenger.prototype.initialize.call(this,g,f);this.add("previewUrl",g.previewUrl);this.query=c.extend(g.query||{},{customize_messenger_channel:this.channel()});this.run(e)},run:function(e){var d=this,f=false,g=false;if(this._ready){this.unbind("ready",this._ready)}this._ready=function(){g=true;if(f){e.resolveWith(d)}};this.bind("ready",this._ready);this.request=c.ajax(this.previewUrl(),{type:"POST",data:this.query,xhrFields:{withCredentials:true}});this.request.fail(function(){e.rejectWith(d,["request failure"])});this.request.done(function(j){var i=d.request.getResponseHeader("Location"),h="WP_CUSTOMIZER_SIGNATURE",k;if(i&&i!=d.previewUrl()){e.rejectWith(d,["redirect",i]);return}if("0"===j){d.login(e);return}if("-1"===j){e.rejectWith(d,["cheatin"]);return}k=j.lastIndexOf(h);if(-1===k||k<j.lastIndexOf("</html>")){e.rejectWith(d,["unsigned"]);return}j=j.slice(0,k)+j.slice(k+h.length);d.iframe=c("<iframe />").appendTo(d.previewer.container);d.iframe.one("load",function(){f=true;if(g){e.resolveWith(d)}else{setTimeout(function(){e.rejectWith(d,["ready timeout"])},d.sensitivity)}});d.targetWindow(d.iframe[0].contentWindow);d.targetWindow().document.open();d.targetWindow().document.write(j);d.targetWindow().document.close()})},login:function(e){var d=this,f;f=function(){e.rejectWith(d,["logged out"])};if(this.triedLogin){return f()}c.get(b.settings.url.ajax,{action:"logged-in"}).fail(f).done(function(g){var h;if("1"!==g){f()}h=c('<iframe src="'+d.previewUrl()+'" />').hide();h.appendTo(d.previewer.container);h.load(function(){d.triedLogin=true;h.remove();d.run(e)})})},destroy:function(){b.Messenger.prototype.destroy.call(this);this.request.abort();if(this.iframe){this.iframe.remove()}delete this.request;delete this.iframe;delete this.targetWindow}});(function(){var d=0;b.PreviewFrame.uuid=function(){return"preview-"+d++}}());b.Previewer=b.Messenger.extend({refreshBuffer:250,initialize:function(h,f){var d=this,g=/^https?/,e;c.extend(this,f||{});this.refresh=(function(i){var j=i.refresh,l=function(){k=null;j.call(i)},k;return function(){if(typeof k!=="number"){if(i.loading){i.abort()}else{return l()}}clearTimeout(k);k=setTimeout(l,i.refreshBuffer)}})(this);this.container=b.ensure(h.container);this.allowedUrls=h.allowedUrls;h.url=window.location.href;b.Messenger.prototype.initialize.call(this,h);this.add("scheme",this.origin()).link(this.origin).setter(function(j){var i=j.match(g);return i?i[0]:""});this.add("previewUrl",h.previewUrl).setter(function(j){var i;if(/\/wp-admin(\/|$)/.test(j.replace(/[#?].*$/,""))){return null}c.each([j.replace(g,d.scheme()),j],function(l,k){c.each(d.allowedUrls,function(m,n){if(0===k.indexOf(n)){i=k;return false}});if(i){return false}});return i?i:null});this.previewUrl.bind(this.refresh);this.scroll=0;this.bind("scroll",function(i){this.scroll=i});this.bind("url",this.previewUrl)},query:function(){},abort:function(){if(this.loading){this.loading.destroy();delete this.loading}},refresh:function(){var d=this;this.abort();this.loading=new b.PreviewFrame({url:this.url(),previewUrl:this.previewUrl(),query:this.query()||{},previewer:this});this.loading.done(function(){this.bind("synced",function(){if(d.preview){d.preview.destroy()}d.preview=this;delete d.loading;d.targetWindow(this.targetWindow());d.channel(this.channel())});this.send("sync",{scroll:d.scroll,settings:b.get()})});this.loading.fail(function(f,e){if("redirect"===f&&e){d.previewUrl(e)}if("logged out"===f){if(d.preview){d.preview.destroy();delete d.preview}d.login().done(d.refresh)}if("cheatin"===f){d.cheatin()}})},login:function(){var g=this,d,f,e;if(this._login){return this._login}d=c.Deferred();this._login=d.promise();f=new b.Messenger({channel:"login",url:b.settings.url.login});e=c('<iframe src="'+b.settings.url.login+'" />').appendTo(this.container);f.targetWindow(e[0].contentWindow);f.bind("login",function(){e.remove();f.destroy();delete g._login;d.resolve()});return this._login},cheatin:function(){c(document.body).empty().addClass("cheatin").append("<p>"+b.l10n.cheatin+"</p>")}});b.controlConstructor={color:b.ColorControl,upload:b.UploadControl,image:b.ImageControl};c(function(){b.settings=window._wpCustomizeSettings;b.l10n=window._wpCustomizeControlsL10n;if(!b.settings){return}if(!c.support.postMessage||(!c.support.cors&&b.settings.isCrossDomain)){return window.location=b.settings.url.fallback}var d=c(document.body),e=d.children(".wp-full-overlay"),g,h,f;c("#customize-controls").on("keydown",function(i){if(c(i.target).is("textarea")){return}if(13===i.which){i.preventDefault()}});h=new b.Previewer({container:"#customize-preview",form:"#customize-controls",previewUrl:b.settings.url.preview,allowedUrls:b.settings.url.allowed},{query:function(){return{wp_customize:"on",theme:b.settings.theme.stylesheet,customized:JSON.stringify(b.get())}},nonce:c("#_wpnonce").val(),save:function(){var i=this,k=c.extend(this.query(),{action:"customize_save",nonce:this.nonce}),j=c.post(b.settings.url.ajax,k);b.trigger("save",j);d.addClass("saving");j.always(function(){d.removeClass("saving")});j.done(function(l){if("0"===l){i.preview.iframe.hide();i.login().done(function(){i.save();i.preview.iframe.show()});return}if("-1"===l){i.cheatin();return}b.trigger("saved")})}});c.each(b.settings.settings,function(j,i){b.create(j,j,i.value,{transport:i.transport,previewer:h})});c.each(b.settings.controls,function(l,j){var i=b.controlConstructor[j.type]||b.Control,k;k=b.control.add(l,new i(l,{params:j,previewer:h}))});if(h.previewUrl()){h.refresh()}else{h.previewUrl(b.settings.url.home)}(function(){var k=new b.Values(),j=k.create("saved"),i=k.create("activated");k.bind("change",function(){var m=c("#save"),l=c(".back");if(!i()){m.val(b.l10n.activate).prop("disabled",false);l.text(b.l10n.cancel)}else{if(j()){m.val(b.l10n.saved).prop("disabled",true);l.text(b.l10n.close)}else{m.val(b.l10n.save).prop("disabled",false);l.text(b.l10n.cancel)}}});j(true);i(b.settings.theme.active);b.bind("change",function(){k("saved").set(false)});b.bind("saved",function(){k("saved").set(true);k("activated").set(true)});i.bind(function(l){if(l){b.trigger("activated")}});b.state=k}());c(".customize-section-title").click(function(j){var i=c(this).parents(".customize-section");if(i.hasClass("cannot-expand")){return}c(".customize-section").not(i).removeClass("open");i.toggleClass("open");j.preventDefault()});c("#save").click(function(i){h.save();i.preventDefault()});c(".collapse-sidebar").click(function(i){e.toggleClass("collapsed").toggleClass("expanded");i.preventDefault()});f=new b.Messenger({url:b.settings.url.parent,channel:"loader"});f.bind("back",function(){c(".back").on("click.back",function(i){i.preventDefault();f.send("close")})});b.bind("saved",function(){f.send("saved")});b.bind("activated",function(){if(f.targetWindow()){f.send("activated",b.settings.url.activated)}else{if(b.settings.url.activated){window.location=b.settings.url.activated}}});f.send("ready");c.each({background_image:{controls:["background_repeat","background_position_x","background_attachment"],callback:function(i){return !!i}},show_on_front:{controls:["page_on_front","page_for_posts"],callback:function(i){return"page"===i}},header_textcolor:{controls:["header_textcolor"],callback:function(i){return"blank"!==i}}},function(i,j){b(i,function(k){c.each(j.controls,function(l,m){b.control(m,function(o){var n=function(p){o.container.toggle(j.callback(p))};n(k.get());k.bind(n)})})})});b.control("display_header_text",function(j){var i="";j.elements[0].unsync(b("header_textcolor"));j.element=new b.Element(j.container.find("input"));j.element.set("blank"!==j.setting());j.element.bind(function(k){if(!k){i=b("header_textcolor").get()}j.setting.set(k?i:"blank")});j.setting.bind(function(k){j.element.set("blank"!==k)})});b.control("header_image",function(i){i.setting.bind(function(j){if(j===i.params.removed){i.settings.data.set(false)}});i.library.on("click","a",function(j){i.settings.data.set(c(this).data("customizeHeaderImageData"))});i.uploader.success=function(k){var j;b.ImageControl.prototype.success.call(i,k);j={attachment_id:k.id,url:k.url,thumbnail_url:k.url,height:k.meta.height,width:k.meta.width};k.element.data("customizeHeaderImageData",j);i.settings.data.set(j)}});b.trigger("ready")})})(wp,jQuery); \ No newline at end of file diff --git a/wp-admin/js/dashboard.dev.js b/wp-admin/js/dashboard.dev.js index 62ff7e347..6709ba7bd 100644 --- a/wp-admin/js/dashboard.dev.js +++ b/wp-admin/js/dashboard.dev.js @@ -22,7 +22,6 @@ jQuery(document).ready( function($) { $('#wp_welcome_panel-hide').prop('checked', false); }); - welcomePanelHide.click( function() { welcomePanel.toggleClass('hidden', ! this.checked ); updateWelcomePanel( this.checked ? 1 : 0 ); @@ -42,7 +41,7 @@ jQuery(document).ready( function($) { if ( e.length ) { p = e.parent(); setTimeout( function(){ - p.load( ajaxurl.replace( '/admin-ajax.php', '' ) + '/index-extra.php?jax=' + id, '', function() { + p.load( ajaxurl + '?action=dashboard-widgets&widget=' + id, '', function() { p.hide().slideDown('normal', function(){ $(this).css('display', ''); }); diff --git a/wp-admin/js/dashboard.js b/wp-admin/js/dashboard.js index f9a4f63fd..c44eed79d 100644 --- a/wp-admin/js/dashboard.js +++ b/wp-admin/js/dashboard.js @@ -1 +1 @@ -var ajaxWidgets,ajaxPopulateWidgets,quickPressLoad;jQuery(document).ready(function(c){var d=c("#welcome-panel"),a=c("#wp_welcome_panel-hide"),b=function(e){c.post(ajaxurl,{action:"update-welcome-panel",visible:e,welcomepanelnonce:c("#welcomepanelnonce").val()})};if(d.hasClass("hidden")&&a.prop("checked")){d.removeClass("hidden")}c(".welcome-panel-close, .welcome-panel-dismiss a",d).click(function(f){f.preventDefault();d.addClass("hidden");b(0);c("#wp_welcome_panel-hide").prop("checked",false)});a.click(function(){d.toggleClass("hidden",!this.checked);b(this.checked?1:0)});ajaxWidgets=["dashboard_incoming_links","dashboard_primary","dashboard_secondary","dashboard_plugins"];ajaxPopulateWidgets=function(f){function e(g,k){var j,h=c("#"+k+" div.inside:visible").find(".widget-loading");if(h.length){j=h.parent();setTimeout(function(){j.load(ajaxurl.replace("/admin-ajax.php","")+"/index-extra.php?jax="+k,"",function(){j.hide().slideDown("normal",function(){c(this).css("display","")})})},g*500)}}if(f){f=f.toString();if(c.inArray(f,ajaxWidgets)!=-1){e(0,f)}}else{c.each(ajaxWidgets,e)}};ajaxPopulateWidgets();postboxes.add_postbox_toggles(pagenow,{pbshow:ajaxPopulateWidgets});quickPressLoad=function(){var e=c("#quickpost-action"),f;f=c("#quick-press").submit(function(){c("#dashboard_quick_press #publishing-action img.waiting").css("visibility","visible");c('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",true);if("post"==e.val()){e.val("post-quickpress-publish")}c("#dashboard_quick_press div.inside").load(f.attr("action"),f.serializeArray(),function(){c("#dashboard_quick_press #publishing-action img.waiting").css("visibility","hidden");c('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",false);c("#dashboard_quick_press ul").next("p").remove();c("#dashboard_quick_press ul").find("li").each(function(){c("#dashboard_recent_drafts ul").prepend(this)}).end().remove();quickPressLoad()});return false});c("#publish").click(function(){e.val("post-quickpress-publish")})};quickPressLoad()}); \ No newline at end of file +var ajaxWidgets,ajaxPopulateWidgets,quickPressLoad;jQuery(document).ready(function(c){var d=c("#welcome-panel"),a=c("#wp_welcome_panel-hide"),b=function(e){c.post(ajaxurl,{action:"update-welcome-panel",visible:e,welcomepanelnonce:c("#welcomepanelnonce").val()})};if(d.hasClass("hidden")&&a.prop("checked")){d.removeClass("hidden")}c(".welcome-panel-close, .welcome-panel-dismiss a",d).click(function(f){f.preventDefault();d.addClass("hidden");b(0);c("#wp_welcome_panel-hide").prop("checked",false)});a.click(function(){d.toggleClass("hidden",!this.checked);b(this.checked?1:0)});ajaxWidgets=["dashboard_incoming_links","dashboard_primary","dashboard_secondary","dashboard_plugins"];ajaxPopulateWidgets=function(f){function e(g,k){var j,h=c("#"+k+" div.inside:visible").find(".widget-loading");if(h.length){j=h.parent();setTimeout(function(){j.load(ajaxurl+"?action=dashboard-widgets&widget="+k,"",function(){j.hide().slideDown("normal",function(){c(this).css("display","")})})},g*500)}}if(f){f=f.toString();if(c.inArray(f,ajaxWidgets)!=-1){e(0,f)}}else{c.each(ajaxWidgets,e)}};ajaxPopulateWidgets();postboxes.add_postbox_toggles(pagenow,{pbshow:ajaxPopulateWidgets});quickPressLoad=function(){var e=c("#quickpost-action"),f;f=c("#quick-press").submit(function(){c("#dashboard_quick_press #publishing-action img.waiting").css("visibility","visible");c('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",true);if("post"==e.val()){e.val("post-quickpress-publish")}c("#dashboard_quick_press div.inside").load(f.attr("action"),f.serializeArray(),function(){c("#dashboard_quick_press #publishing-action img.waiting").css("visibility","hidden");c('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",false);c("#dashboard_quick_press ul").next("p").remove();c("#dashboard_quick_press ul").find("li").each(function(){c("#dashboard_recent_drafts ul").prepend(this)}).end().remove();quickPressLoad()});return false});c("#publish").click(function(){e.val("post-quickpress-publish")})};quickPressLoad()}); \ No newline at end of file diff --git a/wp-admin/js/edit-comments.dev.js b/wp-admin/js/edit-comments.dev.js index 634275a7a..b35337786 100644 --- a/wp-admin/js/edit-comments.dev.js +++ b/wp-admin/js/edit-comments.dev.js @@ -1,5 +1,7 @@ -var theList, theExtraList, toggleWithKeyboard = false, getCount, updateCount, updatePending, dashboardTotals; +var theList, theExtraList, toggleWithKeyboard = false; + (function($) { +var getCount, updateCount, updatePending, dashboardTotals; setCommentsList = function() { var totalInput, perPageInput, pageInput, lastConfidentTime = 0, dimAfter, delBefore, updateTotalCount, delAfter, refillTheExtraList; @@ -27,25 +29,8 @@ setCommentsList = function() { c.find('div.comment_status').html('1'); } - $('span.pending-count').each( function() { - var a = $(this), n, dif; - - n = a.html().replace(/[^0-9]+/g, ''); - n = parseInt(n, 10); - - if ( isNaN(n) ) - return; - - dif = $('#' + settings.element).is('.' + settings.dimClass) ? 1 : -1; - n = n + dif; - - if ( n < 0 ) - n = 0; - - a.closest('.awaiting-mod')[ 0 == n ? 'addClass' : 'removeClass' ]('count-0'); - updateCount(a, n); - dashboardTotals(); - }); + var diff = $('#' + settings.element).is('.' + settings.dimClass) ? 1 : -1; + updatePending( diff ); }; // Send current total, page, per_page and url @@ -84,7 +69,7 @@ setCommentsList = function() { el.before(h); - $('strong', '#undo-' + id).text(author + ' '); + $('strong', '#undo-' + id).text(author); a = $('.undo a', '#undo-' + id); a.attr('href', 'comment.php?action=un' + action + 'comment&c=' + id + '&_wpnonce=' + settings.data._ajax_nonce); a.attr('class', 'delete:the-comment-list:comment-' + id + '::un' + action + '=1 vim-z vim-destructive'); @@ -129,7 +114,6 @@ setCommentsList = function() { apprN = totalN - getCount( $('span.pending-count', dash) ) - getCount( $('span.spam-count', dash) ); updateCount(total, totalN); updateCount(appr, apprN); - }; getCount = function(el) { @@ -154,17 +138,16 @@ setCommentsList = function() { el.html(n); }; - updatePending = function(n) { - $('span.pending-count').each( function() { - var a = $(this); - - if ( n < 0 ) + updatePending = function( diff ) { + $('span.pending-count').each(function() { + var a = $(this), n = getCount(a) + diff; + if ( n < 1 ) n = 0; - a.closest('.awaiting-mod')[ 0 == n ? 'addClass' : 'removeClass' ]('count-0'); - updateCount(a, n); - dashboardTotals(); + updateCount( a, n ); }); + + dashboardTotals(); }; // In admin-ajax.php, we send back the unix time stamp instead of 1 on success @@ -193,15 +176,17 @@ setCommentsList = function() { else spam = getUpdate('spam'); - pending = getCount( $('span.pending-count').eq(0) ); - - if ( $(settings.target).parent().is('span.unapprove') || ( ( untrash || unspam ) && unapproved ) ) { // we "deleted" an approved comment from the approved list by clicking "Unapprove" - pending = pending + 1; - } else if ( unapproved ) { // we deleted a formerly unapproved comment - pending = pending - 1; + if ( $(settings.target).parent().is('span.unapprove') || ( ( untrash || unspam ) && unapproved ) ) { + // a comment was 'deleted' from another list (e.g. approved, spam, trash) and moved to pending, + // or a trash/spam of a pending comment was undone + pending = 1; + } else if ( unapproved ) { + // a pending comment was trashed/spammed/approved + pending = -1; } - updatePending(pending); + if ( pending ) + updatePending(pending); $('span.spam-count').each( function() { var a = $(this), n = getCount(a) + spam; @@ -239,7 +224,6 @@ setCommentsList = function() { } } - if ( ! theExtraList || theExtraList.size() == 0 || theExtraList.children().size() == 0 || untrash || unspam ) { return; } @@ -362,61 +346,72 @@ commentReply = { }, close : function() { - var c; + var c, replyrow = $('#replyrow'); - if ( this.cid ) { + // replyrow is not showing? + if ( replyrow.parent().is('#com-reply') ) + return; + + if ( this.cid && this.act == 'edit-comment' ) { c = $('#comment-' + this.cid); + c.fadeIn(300, function(){ c.show() }).css('backgroundColor', ''); + } - if ( typeof QTags != 'undefined' ) - QTags.closeAllTags('replycontent'); + // reset the Quicktags buttons + if ( typeof QTags != 'undefined' ) + QTags.closeAllTags('replycontent'); - if ( this.act == 'edit-comment' ) - c.fadeIn(300, function(){ c.show() }).css('backgroundColor', ''); + $('#add-new-comment').css('display', ''); - $('#replyrow').hide(); - $('#com-reply').append( $('#replyrow') ); - $('#replycontent').val(''); - $('input', '#edithead').val(''); - $('.error', '#replysubmit').html('').hide(); - $('.waiting', '#replysubmit').hide(); - $('#replycontent').css('height', ''); + replyrow.hide(); + $('#com-reply').append( replyrow ); + $('#replycontent').css('height', '').val(''); + $('#edithead input').val(''); + $('.error', replyrow).html('').hide(); + $('.waiting', replyrow).hide(); - this.cid = ''; - } + this.cid = ''; }, - open : function(id, p, a) { - var t = this, editRow, rowData, act, c = $('#comment-' + id), h = c.height(), replyButton; + open : function(comment_id, post_id, action) { + var t = this, editRow, rowData, act, c = $('#comment-' + comment_id), h = c.height(), replyButton; t.close(); - t.cid = id; + t.cid = comment_id; editRow = $('#replyrow'); - rowData = $('#inline-'+id); - act = t.act = (a == 'edit') ? 'edit-comment' : 'replyto-comment'; + rowData = $('#inline-'+comment_id); + action = action || 'replyto'; + act = 'edit' == action ? 'edit' : 'replyto'; + act = t.act = act + '-comment'; $('#action', editRow).val(act); - $('#comment_post_ID', editRow).val(p); - $('#comment_ID', editRow).val(id); + $('#comment_post_ID', editRow).val(post_id); + $('#comment_ID', editRow).val(comment_id); if ( h > 120 ) $('#replycontent', editRow).css('height', (35+h) + 'px'); - if ( a == 'edit' ) { + if ( action == 'edit' ) { $('#author', editRow).val( $('div.author', rowData).text() ); $('#author-email', editRow).val( $('div.author-email', rowData).text() ); $('#author-url', editRow).val( $('div.author-url', rowData).text() ); $('#status', editRow).val( $('div.comment_status', rowData).text() ); $('#replycontent', editRow).val( $('textarea.comment', rowData).val() ); $('#edithead, #savebtn', editRow).show(); - $('#replyhead, #replybtn', editRow).hide(); + $('#replyhead, #replybtn, #addhead, #addbtn', editRow).hide(); c.after( editRow ).fadeOut('fast', function(){ $('#replyrow').fadeIn(300, function(){ $(this).show() }); }); - } else { - replyButton = $('#replybtn', editRow); - $('#edithead, #savebtn', editRow).hide(); + } else if ( action == 'add' ) { + $('#addhead, #addbtn', editRow).show(); + $('#replyhead, #replybtn, #edithead, #editbtn', editRow).hide(); + $('#the-comment-list').prepend(editRow); + $('#replyrow').fadeIn(300); + } else { + replyButton = $('#replybtn', editRow); + $('#edithead, #savebtn, #addhead, #addbtn', editRow).hide(); $('#replyhead, #replybtn', editRow).show(); c.after(editRow); @@ -459,7 +454,8 @@ commentReply = { $('#replysubmit .waiting').show(); $('#replyrow input').not(':button').each(function() { - post[ $(this).attr('name') ] = $(this).val(); + var t = $(this); + post[ t.attr('name') ] = t.val(); }); post.content = $('#replycontent').val(); @@ -500,12 +496,13 @@ commentReply = { r = r.responses[0]; c = r.data; id = '#comment-' + r.id; + if ( 'edit-comment' == t.act ) $(id).remove(); if ( r.supplemental.parent_approved ) { pid = $('#comment-' + r.supplemental.parent_approved); - updatePending( getCount( $('span.pending-count').eq(0) ) - 1 ); + updatePending( -1 ); if ( this.comments_listing == 'moderated' ) { pid.animate( { 'backgroundColor':'#CCEEBB' }, 400, function(){ @@ -544,6 +541,16 @@ commentReply = { if ( er ) $('#replysubmit .error').html(er).show(); + }, + + addcomment: function(post_id) { + var t = this; + + $('#add-new-comment').fadeOut(200, function(){ + t.open(0, post_id, 'add'); + $('table.comments-box').css('display', ''); + $('#no-comments').remove(); + }); } }; @@ -554,7 +561,6 @@ $(document).ready(function(){ commentReply.init(); $(document).delegate('span.delete a.delete', 'click', function(){return false;}); - if ( typeof $.table_hotkeys != 'undefined' ) { make_hotkeys_redirect = function(which) { return function() { diff --git a/wp-admin/js/edit-comments.js b/wp-admin/js/edit-comments.js index 314c532c9..6171510f8 100644 --- a/wp-admin/js/edit-comments.js +++ b/wp-admin/js/edit-comments.js @@ -1 +1 @@ -var theList,theExtraList,toggleWithKeyboard=false,getCount,updateCount,updatePending,dashboardTotals;(function($){setCommentsList=function(){var totalInput,perPageInput,pageInput,lastConfidentTime=0,dimAfter,delBefore,updateTotalCount,delAfter,refillTheExtraList;totalInput=$('input[name="_total"]',"#comments-form");perPageInput=$('input[name="_per_page"]',"#comments-form");pageInput=$('input[name="_page"]',"#comments-form");dimAfter=function(r,settings){var c=$("#"+settings.element),editRow,replyID,replyButton;editRow=$("#replyrow");replyID=$("#comment_ID",editRow).val();replyButton=$("#replybtn",editRow);if(c.is(".unapproved")){if(settings.data.id==replyID){replyButton.text(adminCommentsL10n.replyApprove)}c.find("div.comment_status").html("0")}else{if(settings.data.id==replyID){replyButton.text(adminCommentsL10n.reply)}c.find("div.comment_status").html("1")}$("span.pending-count").each(function(){var a=$(this),n,dif;n=a.html().replace(/[^0-9]+/g,"");n=parseInt(n,10);if(isNaN(n)){return}dif=$("#"+settings.element).is("."+settings.dimClass)?1:-1;n=n+dif;if(n<0){n=0}a.closest(".awaiting-mod")[0==n?"addClass":"removeClass"]("count-0");updateCount(a,n);dashboardTotals()})};delBefore=function(settings,list){var cl=$(settings.target).attr("class"),id,el,n,h,a,author,action=false;settings.data._total=totalInput.val()||0;settings.data._per_page=perPageInput.val()||0;settings.data._page=pageInput.val()||0;settings.data._url=document.location.href;settings.data.comment_status=$('input[name="comment_status"]',"#comments-form").val();if(cl.indexOf(":trash=1")!=-1){action="trash"}else{if(cl.indexOf(":spam=1")!=-1){action="spam"}}if(action){id=cl.replace(/.*?comment-([0-9]+).*/,"$1");el=$("#comment-"+id);note=$("#"+action+"-undo-holder").html();el.find(".check-column :checkbox").prop("checked",false);if(el.siblings("#replyrow").length&&commentReply.cid==id){commentReply.close()}if(el.is("tr")){n=el.children(":visible").length;author=$(".author strong",el).text();h=$('<tr id="undo-'+id+'" class="undo un'+action+'" style="display:none;"><td colspan="'+n+'">'+note+"</td></tr>")}else{author=$(".comment-author",el).text();h=$('<div id="undo-'+id+'" style="display:none;" class="undo un'+action+'">'+note+"</div>")}el.before(h);$("strong","#undo-"+id).text(author+" ");a=$(".undo a","#undo-"+id);a.attr("href","comment.php?action=un"+action+"comment&c="+id+"&_wpnonce="+settings.data._ajax_nonce);a.attr("class","delete:the-comment-list:comment-"+id+"::un"+action+"=1 vim-z vim-destructive");$(".avatar",el).clone().prependTo("#undo-"+id+" ."+action+"-undo-inside");a.click(function(){list.wpList.del(this);$("#undo-"+id).css({backgroundColor:"#ceb"}).fadeOut(350,function(){$(this).remove();$("#comment-"+id).css("backgroundColor","").fadeIn(300,function(){$(this).show()})});return false})}return settings};updateTotalCount=function(total,time,setConfidentTime){if(time<lastConfidentTime){return}if(setConfidentTime){lastConfidentTime=time}totalInput.val(total.toString())};dashboardTotals=function(n){var dash=$("#dashboard_right_now"),total,appr,totalN,apprN;n=n||0;if(isNaN(n)||!dash.length){return}total=$("span.total-count",dash);appr=$("span.approved-count",dash);totalN=getCount(total);totalN=totalN+n;apprN=totalN-getCount($("span.pending-count",dash))-getCount($("span.spam-count",dash));updateCount(total,totalN);updateCount(appr,apprN)};getCount=function(el){var n=parseInt(el.html().replace(/[^0-9]+/g,""),10);if(isNaN(n)){return 0}return n};updateCount=function(el,n){var n1="";if(isNaN(n)){return}n=n<1?"0":n.toString();if(n.length>3){while(n.length>3){n1=thousandsSeparator+n.substr(n.length-3)+n1;n=n.substr(0,n.length-3)}n=n+n1}el.html(n)};updatePending=function(n){$("span.pending-count").each(function(){var a=$(this);if(n<0){n=0}a.closest(".awaiting-mod")[0==n?"addClass":"removeClass"]("count-0");updateCount(a,n);dashboardTotals()})};delAfter=function(r,settings){var total,N,spam,trash,pending,untrash=$(settings.target).parent().is("span.untrash"),unspam=$(settings.target).parent().is("span.unspam"),unapproved=$("#"+settings.element).is(".unapproved");function getUpdate(s){if($(settings.target).parent().is("span."+s)){return 1}else{if($("#"+settings.element).is("."+s)){return -1}}return 0}if(untrash){trash=-1}else{trash=getUpdate("trash")}if(unspam){spam=-1}else{spam=getUpdate("spam")}pending=getCount($("span.pending-count").eq(0));if($(settings.target).parent().is("span.unapprove")||((untrash||unspam)&&unapproved)){pending=pending+1}else{if(unapproved){pending=pending-1}}updatePending(pending);$("span.spam-count").each(function(){var a=$(this),n=getCount(a)+spam;updateCount(a,n)});$("span.trash-count").each(function(){var a=$(this),n=getCount(a)+trash;updateCount(a,n)});if($("#dashboard_right_now").length){N=trash?-1*trash:0;dashboardTotals(N)}else{total=totalInput.val()?parseInt(totalInput.val(),10):0;if($(settings.target).parent().is("span.undo")){total++}else{total--}if(total<0){total=0}if(("object"==typeof r)&&lastConfidentTime<settings.parsed.responses[0].supplemental.time){total_items_i18n=settings.parsed.responses[0].supplemental.total_items_i18n||"";if(total_items_i18n){$(".displaying-num").text(total_items_i18n);$(".total-pages").text(settings.parsed.responses[0].supplemental.total_pages_i18n);$(".tablenav-pages").find(".next-page, .last-page").toggleClass("disabled",settings.parsed.responses[0].supplemental.total_pages==$(".current-page").val())}updateTotalCount(total,settings.parsed.responses[0].supplemental.time,true)}else{updateTotalCount(total,r,false)}}if(!theExtraList||theExtraList.size()==0||theExtraList.children().size()==0||untrash||unspam){return}theList.get(0).wpList.add(theExtraList.children(":eq(0)").remove().clone());refillTheExtraList()};refillTheExtraList=function(ev){var args=$.query.get(),total_pages=$(".total-pages").text(),per_page=$('input[name="_per_page"]',"#comments-form").val();if(!args.paged){args.paged=1}if(args.paged>total_pages){return}if(ev){theExtraList.empty();args.number=Math.min(8,per_page)}else{args.number=1;args.offset=Math.min(8,per_page)-1}args.no_placeholder=true;args.paged++;if(true===args.comment_type){args.comment_type=""}args=$.extend(args,{action:"fetch-list",list_args:list_args,_ajax_fetch_list_nonce:$("#_ajax_fetch_list_nonce").val()});$.ajax({url:ajaxurl,global:false,dataType:"json",data:args,success:function(response){theExtraList.get(0).wpList.add(response.rows)}})};theExtraList=$("#the-extra-comment-list").wpList({alt:"",delColor:"none",addColor:"none"});theList=$("#the-comment-list").wpList({alt:"",delBefore:delBefore,dimAfter:dimAfter,delAfter:delAfter,addColor:"none"}).bind("wpListDelEnd",function(e,s){var id=s.element.replace(/[^0-9]+/g,"");if(s.target.className.indexOf(":trash=1")!=-1||s.target.className.indexOf(":spam=1")!=-1){$("#undo-"+id).fadeIn(300,function(){$(this).show()})}})};commentReply={cid:"",act:"",init:function(){var row=$("#replyrow");$("a.cancel",row).click(function(){return commentReply.revert()});$("a.save",row).click(function(){return commentReply.send()});$("input#author, input#author-email, input#author-url",row).keypress(function(e){if(e.which==13){commentReply.send();e.preventDefault();return false}});$("#the-comment-list .column-comment > p").dblclick(function(){commentReply.toggle($(this).parent())});$("#doaction, #doaction2, #post-query-submit").click(function(e){if($("#the-comment-list #replyrow").length>0){commentReply.close()}});this.comments_listing=$('#comments-form > input[name="comment_status"]').val()||""},addEvents:function(r){r.each(function(){$(this).find(".column-comment > p").dblclick(function(){commentReply.toggle($(this).parent())})})},toggle:function(el){if($(el).css("display")!="none"){$(el).find("a.vim-q").click()}},revert:function(){if($("#the-comment-list #replyrow").length<1){return false}$("#replyrow").fadeOut("fast",function(){commentReply.close()});return false},close:function(){var c;if(this.cid){c=$("#comment-"+this.cid);if(typeof QTags!="undefined"){QTags.closeAllTags("replycontent")}if(this.act=="edit-comment"){c.fadeIn(300,function(){c.show()}).css("backgroundColor","")}$("#replyrow").hide();$("#com-reply").append($("#replyrow"));$("#replycontent").val("");$("input","#edithead").val("");$(".error","#replysubmit").html("").hide();$(".waiting","#replysubmit").hide();$("#replycontent").css("height","");this.cid=""}},open:function(id,p,a){var t=this,editRow,rowData,act,c=$("#comment-"+id),h=c.height(),replyButton;t.close();t.cid=id;editRow=$("#replyrow");rowData=$("#inline-"+id);act=t.act=(a=="edit")?"edit-comment":"replyto-comment";$("#action",editRow).val(act);$("#comment_post_ID",editRow).val(p);$("#comment_ID",editRow).val(id);if(h>120){$("#replycontent",editRow).css("height",(35+h)+"px")}if(a=="edit"){$("#author",editRow).val($("div.author",rowData).text());$("#author-email",editRow).val($("div.author-email",rowData).text());$("#author-url",editRow).val($("div.author-url",rowData).text());$("#status",editRow).val($("div.comment_status",rowData).text());$("#replycontent",editRow).val($("textarea.comment",rowData).val());$("#edithead, #savebtn",editRow).show();$("#replyhead, #replybtn",editRow).hide();c.after(editRow).fadeOut("fast",function(){$("#replyrow").fadeIn(300,function(){$(this).show()})})}else{replyButton=$("#replybtn",editRow);$("#edithead, #savebtn",editRow).hide();$("#replyhead, #replybtn",editRow).show();c.after(editRow);if(c.hasClass("unapproved")){replyButton.text(adminCommentsL10n.replyApprove)}else{replyButton.text(adminCommentsL10n.reply)}$("#replyrow").fadeIn(300,function(){$(this).show()})}setTimeout(function(){var rtop,rbottom,scrollTop,vp,scrollBottom;rtop=$("#replyrow").offset().top;rbottom=rtop+$("#replyrow").height();scrollTop=window.pageYOffset||document.documentElement.scrollTop;vp=document.documentElement.clientHeight||self.innerHeight||0;scrollBottom=scrollTop+vp;if(scrollBottom-20<rbottom){window.scroll(0,rbottom-vp+35)}else{if(rtop-20<scrollTop){window.scroll(0,rtop-35)}}$("#replycontent").focus().keyup(function(e){if(e.which==27){commentReply.revert()}})},600);return false},send:function(){var post={};$("#replysubmit .error").hide();$("#replysubmit .waiting").show();$("#replyrow input").not(":button").each(function(){post[$(this).attr("name")]=$(this).val()});post.content=$("#replycontent").val();post.id=post.comment_post_ID;post.comments_listing=this.comments_listing;post.p=$('[name="p"]').val();if($("#comment-"+$("#comment_ID").val()).hasClass("unapproved")){post.approve_parent=1}$.ajax({type:"POST",url:ajaxurl,data:post,success:function(x){commentReply.show(x)},error:function(r){commentReply.error(r)}});return false},show:function(xml){var t=this,r,c,id,bg,pid;if(typeof(xml)=="string"){t.error({responseText:xml});return false}r=wpAjax.parseAjaxResponse(xml);if(r.errors){t.error({responseText:wpAjax.broken});return false}t.revert();r=r.responses[0];c=r.data;id="#comment-"+r.id;if("edit-comment"==t.act){$(id).remove()}if(r.supplemental.parent_approved){pid=$("#comment-"+r.supplemental.parent_approved);updatePending(getCount($("span.pending-count").eq(0))-1);if(this.comments_listing=="moderated"){pid.animate({backgroundColor:"#CCEEBB"},400,function(){pid.fadeOut()});return}}$(c).hide();$("#replyrow").after(c);id=$(id);t.addEvents(id);bg=id.hasClass("unapproved")?"#FFFFE0":id.closest(".widefat, .postbox").css("backgroundColor");id.animate({backgroundColor:"#CCEEBB"},300).animate({backgroundColor:bg},300,function(){if(pid&&pid.length){pid.animate({backgroundColor:"#CCEEBB"},300).animate({backgroundColor:bg},300).removeClass("unapproved").addClass("approved").find("div.comment_status").html("1")}})},error:function(r){var er=r.statusText;$("#replysubmit .waiting").hide();if(r.responseText){er=r.responseText.replace(/<.[^<>]*?>/g,"")}if(er){$("#replysubmit .error").html(er).show()}}};$(document).ready(function(){var make_hotkeys_redirect,edit_comment,toggle_all,make_bulk;setCommentsList();commentReply.init();$(document).delegate("span.delete a.delete","click",function(){return false});if(typeof $.table_hotkeys!="undefined"){make_hotkeys_redirect=function(which){return function(){var first_last,l;first_last="next"==which?"first":"last";l=$(".tablenav-pages ."+which+"-page:not(.disabled)");if(l.length){window.location=l[0].href.replace(/\&hotkeys_highlight_(first|last)=1/g,"")+"&hotkeys_highlight_"+first_last+"=1"}}};edit_comment=function(event,current_row){window.location=$("span.edit a",current_row).attr("href")};toggle_all=function(){toggleWithKeyboard=true;$("input:checkbox","#cb").click().prop("checked",false);toggleWithKeyboard=false};make_bulk=function(value){return function(){var scope=$('select[name="action"]');$('option[value="'+value+'"]',scope).prop("selected",true);$("#doaction").click()}};$.table_hotkeys($("table.widefat"),["a","u","s","d","r","q","z",["e",edit_comment],["shift+x",toggle_all],["shift+a",make_bulk("approve")],["shift+s",make_bulk("spam")],["shift+d",make_bulk("delete")],["shift+t",make_bulk("trash")],["shift+z",make_bulk("untrash")],["shift+u",make_bulk("unapprove")]],{highlight_first:adminCommentsL10n.hotkeys_highlight_first,highlight_last:adminCommentsL10n.hotkeys_highlight_last,prev_page_link_cb:make_hotkeys_redirect("prev"),next_page_link_cb:make_hotkeys_redirect("next")})}})})(jQuery); \ No newline at end of file +var theList,theExtraList,toggleWithKeyboard=false;(function(d){var b,a,e,c;setCommentsList=function(){var g,i,k,n=0,j,l,h,m,f;g=d('input[name="_total"]',"#comments-form");i=d('input[name="_per_page"]',"#comments-form");k=d('input[name="_page"]',"#comments-form");j=function(s,p){var v=d("#"+p.element),o,u,q;o=d("#replyrow");u=d("#comment_ID",o).val();q=d("#replybtn",o);if(v.is(".unapproved")){if(p.data.id==u){q.text(adminCommentsL10n.replyApprove)}v.find("div.comment_status").html("0")}else{if(p.data.id==u){q.text(adminCommentsL10n.reply)}v.find("div.comment_status").html("1")}var t=d("#"+p.element).is("."+p.dimClass)?1:-1;e(t)};l=function(r,v){var x=d(r.target).attr("class"),o,p,q,u,w,t,s=false;r.data._total=g.val()||0;r.data._per_page=i.val()||0;r.data._page=k.val()||0;r.data._url=document.location.href;r.data.comment_status=d('input[name="comment_status"]',"#comments-form").val();if(x.indexOf(":trash=1")!=-1){s="trash"}else{if(x.indexOf(":spam=1")!=-1){s="spam"}}if(s){o=x.replace(/.*?comment-([0-9]+).*/,"$1");p=d("#comment-"+o);note=d("#"+s+"-undo-holder").html();p.find(".check-column :checkbox").prop("checked",false);if(p.siblings("#replyrow").length&&commentReply.cid==o){commentReply.close()}if(p.is("tr")){q=p.children(":visible").length;t=d(".author strong",p).text();u=d('<tr id="undo-'+o+'" class="undo un'+s+'" style="display:none;"><td colspan="'+q+'">'+note+"</td></tr>")}else{t=d(".comment-author",p).text();u=d('<div id="undo-'+o+'" style="display:none;" class="undo un'+s+'">'+note+"</div>")}p.before(u);d("strong","#undo-"+o).text(t);w=d(".undo a","#undo-"+o);w.attr("href","comment.php?action=un"+s+"comment&c="+o+"&_wpnonce="+r.data._ajax_nonce);w.attr("class","delete:the-comment-list:comment-"+o+"::un"+s+"=1 vim-z vim-destructive");d(".avatar",p).clone().prependTo("#undo-"+o+" ."+s+"-undo-inside");w.click(function(){v.wpList.del(this);d("#undo-"+o).css({backgroundColor:"#ceb"}).fadeOut(350,function(){d(this).remove();d("#comment-"+o).css("backgroundColor","").fadeIn(300,function(){d(this).show()})});return false})}return r};h=function(o,p,q){if(p<n){return}if(q){n=p}g.val(o.toString())};c=function(t){var s=d("#dashboard_right_now"),p,r,q,o;t=t||0;if(isNaN(t)||!s.length){return}p=d("span.total-count",s);r=d("span.approved-count",s);q=b(p);q=q+t;o=q-b(d("span.pending-count",s))-b(d("span.spam-count",s));a(p,q);a(r,o)};b=function(o){var p=parseInt(o.html().replace(/[^0-9]+/g,""),10);if(isNaN(p)){return 0}return p};a=function(p,q){var o="";if(isNaN(q)){return}q=q<1?"0":q.toString();if(q.length>3){while(q.length>3){o=thousandsSeparator+q.substr(q.length-3)+o;q=q.substr(0,q.length-3)}q=q+o}p.html(q)};e=function(o){d("span.pending-count").each(function(){var p=d(this),q=b(p)+o;if(q<1){q=0}p.closest(".awaiting-mod")[0==q?"addClass":"removeClass"]("count-0");a(p,q)});c()};m=function(o,s){var v,t,x,w,p,y=d(s.target).parent().is("span.untrash"),q=d(s.target).parent().is("span.unspam"),u=d("#"+s.element).is(".unapproved");function z(r){if(d(s.target).parent().is("span."+r)){return 1}else{if(d("#"+s.element).is("."+r)){return -1}}return 0}if(y){w=-1}else{w=z("trash")}if(q){x=-1}else{x=z("spam")}if(d(s.target).parent().is("span.unapprove")||((y||q)&&u)){p=1}else{if(u){p=-1}}if(p){e(p)}d("span.spam-count").each(function(){var r=d(this),A=b(r)+x;a(r,A)});d("span.trash-count").each(function(){var r=d(this),A=b(r)+w;a(r,A)});if(d("#dashboard_right_now").length){t=w?-1*w:0;c(t)}else{v=g.val()?parseInt(g.val(),10):0;if(d(s.target).parent().is("span.undo")){v++}else{v--}if(v<0){v=0}if(("object"==typeof o)&&n<s.parsed.responses[0].supplemental.time){total_items_i18n=s.parsed.responses[0].supplemental.total_items_i18n||"";if(total_items_i18n){d(".displaying-num").text(total_items_i18n);d(".total-pages").text(s.parsed.responses[0].supplemental.total_pages_i18n);d(".tablenav-pages").find(".next-page, .last-page").toggleClass("disabled",s.parsed.responses[0].supplemental.total_pages==d(".current-page").val())}h(v,s.parsed.responses[0].supplemental.time,true)}else{h(v,o,false)}}if(!theExtraList||theExtraList.size()==0||theExtraList.children().size()==0||y||q){return}theList.get(0).wpList.add(theExtraList.children(":eq(0)").remove().clone());f()};f=function(r){var p=d.query.get(),o=d(".total-pages").text(),q=d('input[name="_per_page"]',"#comments-form").val();if(!p.paged){p.paged=1}if(p.paged>o){return}if(r){theExtraList.empty();p.number=Math.min(8,q)}else{p.number=1;p.offset=Math.min(8,q)-1}p.no_placeholder=true;p.paged++;if(true===p.comment_type){p.comment_type=""}p=d.extend(p,{action:"fetch-list",list_args:list_args,_ajax_fetch_list_nonce:d("#_ajax_fetch_list_nonce").val()});d.ajax({url:ajaxurl,global:false,dataType:"json",data:p,success:function(s){theExtraList.get(0).wpList.add(s.rows)}})};theExtraList=d("#the-extra-comment-list").wpList({alt:"",delColor:"none",addColor:"none"});theList=d("#the-comment-list").wpList({alt:"",delBefore:l,dimAfter:j,delAfter:m,addColor:"none"}).bind("wpListDelEnd",function(p,o){var q=o.element.replace(/[^0-9]+/g,"");if(o.target.className.indexOf(":trash=1")!=-1||o.target.className.indexOf(":spam=1")!=-1){d("#undo-"+q).fadeIn(300,function(){d(this).show()})}})};commentReply={cid:"",act:"",init:function(){var f=d("#replyrow");d("a.cancel",f).click(function(){return commentReply.revert()});d("a.save",f).click(function(){return commentReply.send()});d("input#author, input#author-email, input#author-url",f).keypress(function(g){if(g.which==13){commentReply.send();g.preventDefault();return false}});d("#the-comment-list .column-comment > p").dblclick(function(){commentReply.toggle(d(this).parent())});d("#doaction, #doaction2, #post-query-submit").click(function(g){if(d("#the-comment-list #replyrow").length>0){commentReply.close()}});this.comments_listing=d('#comments-form > input[name="comment_status"]').val()||""},addEvents:function(f){f.each(function(){d(this).find(".column-comment > p").dblclick(function(){commentReply.toggle(d(this).parent())})})},toggle:function(f){if(d(f).css("display")!="none"){d(f).find("a.vim-q").click()}},revert:function(){if(d("#the-comment-list #replyrow").length<1){return false}d("#replyrow").fadeOut("fast",function(){commentReply.close()});return false},close:function(){var g,f=d("#replyrow");if(f.parent().is("#com-reply")){return}if(this.cid&&this.act=="edit-comment"){g=d("#comment-"+this.cid);g.fadeIn(300,function(){g.show()}).css("backgroundColor","")}if(typeof QTags!="undefined"){QTags.closeAllTags("replycontent")}d("#add-new-comment").css("display","");f.hide();d("#com-reply").append(f);d("#replycontent").css("height","").val("");d("#edithead input").val("");d(".error",f).html("").hide();d(".waiting",f).hide();this.cid=""},open:function(f,i,k){var p=this,g,j,m,n=d("#comment-"+f),l=n.height(),o;p.close();p.cid=f;g=d("#replyrow");j=d("#inline-"+f);k=k||"replyto";m="edit"==k?"edit":"replyto";m=p.act=m+"-comment";d("#action",g).val(m);d("#comment_post_ID",g).val(i);d("#comment_ID",g).val(f);if(l>120){d("#replycontent",g).css("height",(35+l)+"px")}if(k=="edit"){d("#author",g).val(d("div.author",j).text());d("#author-email",g).val(d("div.author-email",j).text());d("#author-url",g).val(d("div.author-url",j).text());d("#status",g).val(d("div.comment_status",j).text());d("#replycontent",g).val(d("textarea.comment",j).val());d("#edithead, #savebtn",g).show();d("#replyhead, #replybtn, #addhead, #addbtn",g).hide();n.after(g).fadeOut("fast",function(){d("#replyrow").fadeIn(300,function(){d(this).show()})})}else{if(k=="add"){d("#addhead, #addbtn",g).show();d("#replyhead, #replybtn, #edithead, #editbtn",g).hide();d("#the-comment-list").prepend(g);d("#replyrow").fadeIn(300)}else{o=d("#replybtn",g);d("#edithead, #savebtn, #addhead, #addbtn",g).hide();d("#replyhead, #replybtn",g).show();n.after(g);if(n.hasClass("unapproved")){o.text(adminCommentsL10n.replyApprove)}else{o.text(adminCommentsL10n.reply)}d("#replyrow").fadeIn(300,function(){d(this).show()})}}setTimeout(function(){var s,q,t,h,r;s=d("#replyrow").offset().top;q=s+d("#replyrow").height();t=window.pageYOffset||document.documentElement.scrollTop;h=document.documentElement.clientHeight||self.innerHeight||0;r=t+h;if(r-20<q){window.scroll(0,q-h+35)}else{if(s-20<t){window.scroll(0,s-35)}}d("#replycontent").focus().keyup(function(u){if(u.which==27){commentReply.revert()}})},600);return false},send:function(){var f={};d("#replysubmit .error").hide();d("#replysubmit .waiting").show();d("#replyrow input").not(":button").each(function(){var g=d(this);f[g.attr("name")]=g.val()});f.content=d("#replycontent").val();f.id=f.comment_post_ID;f.comments_listing=this.comments_listing;f.p=d('[name="p"]').val();if(d("#comment-"+d("#comment_ID").val()).hasClass("unapproved")){f.approve_parent=1}d.ajax({type:"POST",url:ajaxurl,data:f,success:function(g){commentReply.show(g)},error:function(g){commentReply.error(g)}});return false},show:function(g){var i=this,j,l,k,h,f;if(typeof(g)=="string"){i.error({responseText:g});return false}j=wpAjax.parseAjaxResponse(g);if(j.errors){i.error({responseText:wpAjax.broken});return false}i.revert();j=j.responses[0];l=j.data;k="#comment-"+j.id;if("edit-comment"==i.act){d(k).remove()}if(j.supplemental.parent_approved){f=d("#comment-"+j.supplemental.parent_approved);e(-1);if(this.comments_listing=="moderated"){f.animate({backgroundColor:"#CCEEBB"},400,function(){f.fadeOut()});return}}d(l).hide();d("#replyrow").after(l);k=d(k);i.addEvents(k);h=k.hasClass("unapproved")?"#FFFFE0":k.closest(".widefat, .postbox").css("backgroundColor");k.animate({backgroundColor:"#CCEEBB"},300).animate({backgroundColor:h},300,function(){if(f&&f.length){f.animate({backgroundColor:"#CCEEBB"},300).animate({backgroundColor:h},300).removeClass("unapproved").addClass("approved").find("div.comment_status").html("1")}})},error:function(f){var g=f.statusText;d("#replysubmit .waiting").hide();if(f.responseText){g=f.responseText.replace(/<.[^<>]*?>/g,"")}if(g){d("#replysubmit .error").html(g).show()}},addcomment:function(f){var g=this;d("#add-new-comment").fadeOut(200,function(){g.open(0,f,"add");d("table.comments-box").css("display","");d("#no-comments").remove()})}};d(document).ready(function(){var i,f,g,h;setCommentsList();commentReply.init();d(document).delegate("span.delete a.delete","click",function(){return false});if(typeof d.table_hotkeys!="undefined"){i=function(j){return function(){var m,k;m="next"==j?"first":"last";k=d(".tablenav-pages ."+j+"-page:not(.disabled)");if(k.length){window.location=k[0].href.replace(/\&hotkeys_highlight_(first|last)=1/g,"")+"&hotkeys_highlight_"+m+"=1"}}};f=function(k,j){window.location=d("span.edit a",j).attr("href")};g=function(){toggleWithKeyboard=true;d("input:checkbox","#cb").click().prop("checked",false);toggleWithKeyboard=false};h=function(j){return function(){var k=d('select[name="action"]');d('option[value="'+j+'"]',k).prop("selected",true);d("#doaction").click()}};d.table_hotkeys(d("table.widefat"),["a","u","s","d","r","q","z",["e",f],["shift+x",g],["shift+a",h("approve")],["shift+s",h("spam")],["shift+d",h("delete")],["shift+t",h("trash")],["shift+z",h("untrash")],["shift+u",h("unapprove")]],{highlight_first:adminCommentsL10n.hotkeys_highlight_first,highlight_last:adminCommentsL10n.hotkeys_highlight_last,prev_page_link_cb:i("prev"),next_page_link_cb:i("next")})}})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/editor.dev.js b/wp-admin/js/editor.dev.js index 37c792788..93bb6d4f3 100644 --- a/wp-admin/js/editor.dev.js +++ b/wp-admin/js/editor.dev.js @@ -62,13 +62,22 @@ var switchEditors = { }, _wp_Nop : function(content) { - var blocklist1, blocklist2; + var blocklist1, blocklist2, preserve_linebreaks = false, preserve_br = false; // Protect pre|script tags if ( content.indexOf('<pre') != -1 || content.indexOf('<script') != -1 ) { + preserve_linebreaks = true; content = content.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { - a = a.replace(/<br ?\/?>(\r\n|\n)?/g, '<wp_temp>'); - return a.replace(/<\/?p( [^>]*)?>(\r\n|\n)?/g, '<wp_temp>'); + a = a.replace(/<br ?\/?>(\r\n|\n)?/g, '<wp-temp-lb>'); + return a.replace(/<\/?p( [^>]*)?>(\r\n|\n)?/g, '<wp-temp-lb>'); + }); + } + + // keep <br> tags inside captions and remove line breaks + if ( content.indexOf('[caption') != -1 ) { + preserve_br = true; + content = content.replace(/\[caption[\s\S]+?\[\/caption\]/g, function(a) { + return a.replace(/<br([^>]*)>/g, '<wp-temp-br$1>').replace(/[\r\n\t]+/, ''); }); } @@ -119,13 +128,19 @@ var switchEditors = { content = content.replace(/[\s\u00a0]+$/, ''); // put back the line breaks in pre|script - content = content.replace(/<wp_temp>/g, '\n'); + if ( preserve_linebreaks ) + content = content.replace(/<wp-temp-lb>/g, '\n'); + + // and the <br> tags in captions + if ( preserve_br ) + content = content.replace(/<wp-temp-br([^>]*)>/g, '<br$1>'); return content; }, _wp_Autop : function(pee) { - var blocklist = 'table|thead|tfoot|tbody|tr|td|th|caption|col|colgroup|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend|hr|noscript|menu|samp|header|footer|article|section|hgroup|nav|aside|details|summary'; + var preserve_linebreaks = false, preserve_br = false, + blocklist = 'table|thead|tfoot|tbody|tr|td|th|caption|col|colgroup|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend|hr|noscript|menu|samp|header|footer|article|section|hgroup|nav|aside|details|summary'; if ( pee.indexOf('<object') != -1 ) { pee = pee.replace(/<object[\s\S]+?<\/object>/g, function(a){ @@ -139,8 +154,24 @@ var switchEditors = { // Protect pre|script tags if ( pee.indexOf('<pre') != -1 || pee.indexOf('<script') != -1 ) { + preserve_linebreaks = true; pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { - return a.replace(/(\r\n|\n)/g, '<wp_temp_br>'); + return a.replace(/(\r\n|\n)/g, '<wp-temp-lb>'); + }); + } + + // keep <br> tags inside captions and convert line breaks + if ( pee.indexOf('[caption') != -1 ) { + preserve_br = true; + pee = pee.replace(/\[caption[\s\S]+?\[\/caption\]/g, function(a) { + // keep existing <br> + a = a.replace(/<br([^>]*)>/g, '<wp-temp-br$1>'); + // no line breaks inside HTML tags + a = a.replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(b){ + return b.replace(/[\r\n\t]+/, ' '); + }); + // convert remaining line breaks to <br> + return a.replace(/\s*\n\s*/g, '<wp-temp-br />'); }); } @@ -172,7 +203,11 @@ var switchEditors = { }); // put back the line breaks in pre|script - pee = pee.replace(/<wp_temp_br>/g, '\n'); + if ( preserve_linebreaks ) + pee = pee.replace(/<wp-temp-lb>/g, '\n'); + + if ( preserve_br ) + pee = pee.replace(/<wp-temp-br([^>]*)>/g, '<br$1>'); return pee; }, @@ -203,4 +238,3 @@ var switchEditors = { return o.data; } } - diff --git a/wp-admin/js/editor.js b/wp-admin/js/editor.js index 6de774f4b..905fffdd9 100644 --- a/wp-admin/js/editor.js +++ b/wp-admin/js/editor.js @@ -1 +1 @@ -var switchEditors={switchto:function(b){var c=b.id,a=c.length,e=c.substr(0,a-5),d=c.substr(a-4);this.go(e,d)},go:function(g,f){g=g||"content";f=f||"toggle";var c=this,b=tinyMCE.get(g),a,d,e=tinymce.DOM;a="wp-"+g+"-wrap";d=e.get(g);if("toggle"==f){if(b&&!b.isHidden()){f="html"}else{f="tmce"}}if("tmce"==f||"tinymce"==f){if(b&&!b.isHidden()){return false}if(typeof(QTags)!="undefined"){QTags.closeAllTags(g)}if(tinyMCEPreInit.mceInit[g]&&tinyMCEPreInit.mceInit[g].wpautop){d.value=c.wpautop(d.value)}if(b){b.show()}else{b=new tinymce.Editor(g,tinyMCEPreInit.mceInit[g]);b.render()}e.removeClass(a,"html-active");e.addClass(a,"tmce-active");setUserSetting("editor","tinymce")}else{if("html"==f){if(b&&b.isHidden()){return false}if(b){d.style.height=b.getContentAreaContainer().offsetHeight+20+"px";b.hide()}e.removeClass(a,"tmce-active");e.addClass(a,"html-active");setUserSetting("editor","html")}}return false},_wp_Nop:function(b){var c,a;if(b.indexOf("<pre")!=-1||b.indexOf("<script")!=-1){b=b.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(d){d=d.replace(/<br ?\/?>(\r\n|\n)?/g,"<wp_temp>");return d.replace(/<\/?p( [^>]*)?>(\r\n|\n)?/g,"<wp_temp>")})}c="blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p|fieldset";b=b.replace(new RegExp("\\s*</("+c+")>\\s*","g"),"</$1>\n");b=b.replace(new RegExp("\\s*<((?:"+c+")(?: [^>]*)?)>","g"),"\n<$1>");b=b.replace(/(<p [^>]+>.*?)<\/p>/g,"$1</p#>");b=b.replace(/<div( [^>]*)?>\s*<p>/gi,"<div$1>\n\n");b=b.replace(/\s*<p>/gi,"");b=b.replace(/\s*<\/p>\s*/gi,"\n\n");b=b.replace(/\n[\s\u00a0]+\n/g,"\n\n");b=b.replace(/\s*<br ?\/?>\s*/gi,"\n");b=b.replace(/\s*<div/g,"\n<div");b=b.replace(/<\/div>\s*/g,"</div>\n");b=b.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi,"\n\n[caption$1[/caption]\n\n");b=b.replace(/caption\]\n\n+\[caption/g,"caption]\n\n[caption");a="blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|h[1-6]|pre|fieldset";b=b.replace(new RegExp("\\s*<((?:"+a+")(?: [^>]*)?)\\s*>","g"),"\n<$1>");b=b.replace(new RegExp("\\s*</("+a+")>\\s*","g"),"</$1>\n");b=b.replace(/<li([^>]*)>/g,"\t<li$1>");if(b.indexOf("<hr")!=-1){b=b.replace(/\s*<hr( [^>]*)?>\s*/g,"\n\n<hr$1>\n\n")}if(b.indexOf("<object")!=-1){b=b.replace(/<object[\s\S]+?<\/object>/g,function(d){return d.replace(/[\r\n]+/g,"")})}b=b.replace(/<\/p#>/g,"</p>\n");b=b.replace(/\s*(<p [^>]+>[\s\S]*?<\/p>)/g,"\n$1");b=b.replace(/^\s+/,"");b=b.replace(/[\s\u00a0]+$/,"");b=b.replace(/<wp_temp>/g,"\n");return b},_wp_Autop:function(a){var b="table|thead|tfoot|tbody|tr|td|th|caption|col|colgroup|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend|hr|noscript|menu|samp|header|footer|article|section|hgroup|nav|aside|details|summary";if(a.indexOf("<object")!=-1){a=a.replace(/<object[\s\S]+?<\/object>/g,function(c){return c.replace(/[\r\n]+/g,"")})}a=a.replace(/<[^<>]+>/g,function(c){return c.replace(/[\r\n]+/g," ")});if(a.indexOf("<pre")!=-1||a.indexOf("<script")!=-1){a=a.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(c){return c.replace(/(\r\n|\n)/g,"<wp_temp_br>")})}a=a+"\n\n";a=a.replace(/<br \/>\s*<br \/>/gi,"\n\n");a=a.replace(new RegExp("(<(?:"+b+")(?: [^>]*)?>)","gi"),"\n$1");a=a.replace(new RegExp("(</(?:"+b+")>)","gi"),"$1\n\n");a=a.replace(/<hr( [^>]*)?>/gi,"<hr$1>\n\n");a=a.replace(/\r\n|\r/g,"\n");a=a.replace(/\n\s*\n+/g,"\n\n");a=a.replace(/([\s\S]+?)\n\n/g,"<p>$1</p>\n");a=a.replace(/<p>\s*?<\/p>/gi,"");a=a.replace(new RegExp("<p>\\s*(</?(?:"+b+")(?: [^>]*)?>)\\s*</p>","gi"),"$1");a=a.replace(/<p>(<li.+?)<\/p>/gi,"$1");a=a.replace(/<p>\s*<blockquote([^>]*)>/gi,"<blockquote$1><p>");a=a.replace(/<\/blockquote>\s*<\/p>/gi,"</p></blockquote>");a=a.replace(new RegExp("<p>\\s*(</?(?:"+b+")(?: [^>]*)?>)","gi"),"$1");a=a.replace(new RegExp("(</?(?:"+b+")(?: [^>]*)?>)\\s*</p>","gi"),"$1");a=a.replace(/\s*\n/gi,"<br />\n");a=a.replace(new RegExp("(</?(?:"+b+")[^>]*>)\\s*<br />","gi"),"$1");a=a.replace(/<br \/>(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi,"$1");a=a.replace(/(?:<p>|<br ?\/?>)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|<br ?\/?>)*/gi,"[caption$1[/caption]");a=a.replace(/(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)<\/p>/g,function(e,d,f){if(f.match(/<p( [^>]*)?>/)){return e}return d+"<p>"+f+"</p>"});a=a.replace(/<wp_temp_br>/g,"\n");return a},pre_wpautop:function(b){var a=this,d={o:a,data:b,unfiltered:b},c=typeof(jQuery)!="undefined";if(c){jQuery("body").trigger("beforePreWpautop",[d])}d.data=a._wp_Nop(d.data);if(c){jQuery("body").trigger("afterPreWpautop",[d])}return d.data},wpautop:function(b){var a=this,d={o:a,data:b,unfiltered:b},c=typeof(jQuery)!="undefined";if(c){jQuery("body").trigger("beforeWpautop",[d])}d.data=a._wp_Autop(d.data);if(c){jQuery("body").trigger("afterWpautop",[d])}return d.data}}; \ No newline at end of file +var switchEditors={switchto:function(b){var c=b.id,a=c.length,e=c.substr(0,a-5),d=c.substr(a-4);this.go(e,d)},go:function(g,f){g=g||"content";f=f||"toggle";var c=this,b=tinyMCE.get(g),a,d,e=tinymce.DOM;a="wp-"+g+"-wrap";d=e.get(g);if("toggle"==f){if(b&&!b.isHidden()){f="html"}else{f="tmce"}}if("tmce"==f||"tinymce"==f){if(b&&!b.isHidden()){return false}if(typeof(QTags)!="undefined"){QTags.closeAllTags(g)}if(tinyMCEPreInit.mceInit[g]&&tinyMCEPreInit.mceInit[g].wpautop){d.value=c.wpautop(d.value)}if(b){b.show()}else{b=new tinymce.Editor(g,tinyMCEPreInit.mceInit[g]);b.render()}e.removeClass(a,"html-active");e.addClass(a,"tmce-active");setUserSetting("editor","tinymce")}else{if("html"==f){if(b&&b.isHidden()){return false}if(b){d.style.height=b.getContentAreaContainer().offsetHeight+20+"px";b.hide()}e.removeClass(a,"tmce-active");e.addClass(a,"html-active");setUserSetting("editor","html")}}return false},_wp_Nop:function(c){var d,b,e=false,a=false;if(c.indexOf("<pre")!=-1||c.indexOf("<script")!=-1){e=true;c=c.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(f){f=f.replace(/<br ?\/?>(\r\n|\n)?/g,"<wp-temp-lb>");return f.replace(/<\/?p( [^>]*)?>(\r\n|\n)?/g,"<wp-temp-lb>")})}if(c.indexOf("[caption")!=-1){a=true;c=c.replace(/\[caption[\s\S]+?\[\/caption\]/g,function(f){return f.replace(/<br([^>]*)>/g,"<wp-temp-br$1>").replace(/[\r\n\t]+/,"")})}d="blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p|fieldset";c=c.replace(new RegExp("\\s*</("+d+")>\\s*","g"),"</$1>\n");c=c.replace(new RegExp("\\s*<((?:"+d+")(?: [^>]*)?)>","g"),"\n<$1>");c=c.replace(/(<p [^>]+>.*?)<\/p>/g,"$1</p#>");c=c.replace(/<div( [^>]*)?>\s*<p>/gi,"<div$1>\n\n");c=c.replace(/\s*<p>/gi,"");c=c.replace(/\s*<\/p>\s*/gi,"\n\n");c=c.replace(/\n[\s\u00a0]+\n/g,"\n\n");c=c.replace(/\s*<br ?\/?>\s*/gi,"\n");c=c.replace(/\s*<div/g,"\n<div");c=c.replace(/<\/div>\s*/g,"</div>\n");c=c.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi,"\n\n[caption$1[/caption]\n\n");c=c.replace(/caption\]\n\n+\[caption/g,"caption]\n\n[caption");b="blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|h[1-6]|pre|fieldset";c=c.replace(new RegExp("\\s*<((?:"+b+")(?: [^>]*)?)\\s*>","g"),"\n<$1>");c=c.replace(new RegExp("\\s*</("+b+")>\\s*","g"),"</$1>\n");c=c.replace(/<li([^>]*)>/g,"\t<li$1>");if(c.indexOf("<hr")!=-1){c=c.replace(/\s*<hr( [^>]*)?>\s*/g,"\n\n<hr$1>\n\n")}if(c.indexOf("<object")!=-1){c=c.replace(/<object[\s\S]+?<\/object>/g,function(f){return f.replace(/[\r\n]+/g,"")})}c=c.replace(/<\/p#>/g,"</p>\n");c=c.replace(/\s*(<p [^>]+>[\s\S]*?<\/p>)/g,"\n$1");c=c.replace(/^\s+/,"");c=c.replace(/[\s\u00a0]+$/,"");if(e){c=c.replace(/<wp-temp-lb>/g,"\n")}if(a){c=c.replace(/<wp-temp-br([^>]*)>/g,"<br$1>")}return c},_wp_Autop:function(a){var c=false,b=false,d="table|thead|tfoot|tbody|tr|td|th|caption|col|colgroup|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend|hr|noscript|menu|samp|header|footer|article|section|hgroup|nav|aside|details|summary";if(a.indexOf("<object")!=-1){a=a.replace(/<object[\s\S]+?<\/object>/g,function(e){return e.replace(/[\r\n]+/g,"")})}a=a.replace(/<[^<>]+>/g,function(e){return e.replace(/[\r\n]+/g," ")});if(a.indexOf("<pre")!=-1||a.indexOf("<script")!=-1){c=true;a=a.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g,function(e){return e.replace(/(\r\n|\n)/g,"<wp-temp-lb>")})}if(a.indexOf("[caption")!=-1){b=true;a=a.replace(/\[caption[\s\S]+?\[\/caption\]/g,function(e){e=e.replace(/<br([^>]*)>/g,"<wp-temp-br$1>");e=e.replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g,function(f){return f.replace(/[\r\n\t]+/," ")});return e.replace(/\s*\n\s*/g,"<wp-temp-br />")})}a=a+"\n\n";a=a.replace(/<br \/>\s*<br \/>/gi,"\n\n");a=a.replace(new RegExp("(<(?:"+d+")(?: [^>]*)?>)","gi"),"\n$1");a=a.replace(new RegExp("(</(?:"+d+")>)","gi"),"$1\n\n");a=a.replace(/<hr( [^>]*)?>/gi,"<hr$1>\n\n");a=a.replace(/\r\n|\r/g,"\n");a=a.replace(/\n\s*\n+/g,"\n\n");a=a.replace(/([\s\S]+?)\n\n/g,"<p>$1</p>\n");a=a.replace(/<p>\s*?<\/p>/gi,"");a=a.replace(new RegExp("<p>\\s*(</?(?:"+d+")(?: [^>]*)?>)\\s*</p>","gi"),"$1");a=a.replace(/<p>(<li.+?)<\/p>/gi,"$1");a=a.replace(/<p>\s*<blockquote([^>]*)>/gi,"<blockquote$1><p>");a=a.replace(/<\/blockquote>\s*<\/p>/gi,"</p></blockquote>");a=a.replace(new RegExp("<p>\\s*(</?(?:"+d+")(?: [^>]*)?>)","gi"),"$1");a=a.replace(new RegExp("(</?(?:"+d+")(?: [^>]*)?>)\\s*</p>","gi"),"$1");a=a.replace(/\s*\n/gi,"<br />\n");a=a.replace(new RegExp("(</?(?:"+d+")[^>]*>)\\s*<br />","gi"),"$1");a=a.replace(/<br \/>(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi,"$1");a=a.replace(/(?:<p>|<br ?\/?>)*\s*\[caption([^\[]+)\[\/caption\]\s*(?:<\/p>|<br ?\/?>)*/gi,"[caption$1[/caption]");a=a.replace(/(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)<\/p>/g,function(f,e,g){if(g.match(/<p( [^>]*)?>/)){return f}return e+"<p>"+g+"</p>"});if(c){a=a.replace(/<wp-temp-lb>/g,"\n")}if(b){a=a.replace(/<wp-temp-br([^>]*)>/g,"<br$1>")}return a},pre_wpautop:function(b){var a=this,d={o:a,data:b,unfiltered:b},c=typeof(jQuery)!="undefined";if(c){jQuery("body").trigger("beforePreWpautop",[d])}d.data=a._wp_Nop(d.data);if(c){jQuery("body").trigger("afterPreWpautop",[d])}return d.data},wpautop:function(b){var a=this,d={o:a,data:b,unfiltered:b},c=typeof(jQuery)!="undefined";if(c){jQuery("body").trigger("beforeWpautop",[d])}d.data=a._wp_Autop(d.data);if(c){jQuery("body").trigger("afterWpautop",[d])}return d.data}}; \ No newline at end of file diff --git a/wp-admin/js/inline-edit-post.dev.js b/wp-admin/js/inline-edit-post.dev.js index e73c4a009..4b0eb2eeb 100644 --- a/wp-admin/js/inline-edit-post.dev.js +++ b/wp-admin/js/inline-edit-post.dev.js @@ -117,7 +117,7 @@ inlineEditPost = { if ( 'post' == type ) { // support multi taxonomies? tax = 'post_tag'; - $('tr.inline-editor textarea[name="tax_input['+tax+']"]').suggest( 'admin-ajax.php?action=ajax-tag-search&tax='+tax, { delay: 500, minchars: 2, multiple: true, multipleSep: ", " } ); + $('tr.inline-editor textarea[name="tax_input['+tax+']"]').suggest( ajaxurl + '?action=ajax-tag-search&tax=' + tax, { delay: 500, minchars: 2, multiple: true, multipleSep: inlineEditL10n.comma + ' ' } ); } $('html, body').animate( { scrollTop: 0 }, 'fast' ); }, @@ -129,9 +129,9 @@ inlineEditPost = { if ( typeof(id) == 'object' ) id = t.getId(id); - fields = ['post_title', 'post_name', 'post_author', '_status', 'jj', 'mm', 'aa', 'hh', 'mn', 'ss', 'post_password', 'post_format']; + fields = ['post_title', 'post_name', 'post_author', '_status', 'jj', 'mm', 'aa', 'hh', 'mn', 'ss', 'post_password', 'post_format', 'menu_order']; if ( t.type == 'page' ) - fields.push('post_parent', 'menu_order', 'page_template'); + fields.push('post_parent', 'page_template'); // add the new blank row editRow = $('#inline-edit').clone(true); @@ -184,12 +184,16 @@ inlineEditPost = { $('.tags_input', rowData).each(function(){ var terms = $(this).text(), taxname = $(this).attr('id').replace('_' + id, ''), - textarea = $('textarea.tax_input_' + taxname, editRow); + textarea = $('textarea.tax_input_' + taxname, editRow), + comma = inlineEditL10n.comma; - if ( terms ) + if ( terms ) { + if ( ',' !== comma ) + terms = terms.replace(/,/g, comma); textarea.val(terms); + } - textarea.suggest( 'admin-ajax.php?action=ajax-tag-search&tax='+taxname, { delay: 500, minchars: 2, multiple: true, multipleSep: ", " } ); + textarea.suggest( ajaxurl + '?action=ajax-tag-search&tax=' + taxname, { delay: 500, minchars: 2, multiple: true, multipleSep: inlineEditL10n.comma + ' ' } ); }); // handle the post status @@ -247,7 +251,7 @@ inlineEditPost = { params = fields + '&' + $.param(params); // make ajax request - $.post('admin-ajax.php', params, + $.post( ajaxurl, params, function(r) { $('table.widefat .inline-edit-save .waiting').hide(); diff --git a/wp-admin/js/inline-edit-post.js b/wp-admin/js/inline-edit-post.js index 61d9f48c3..13430d395 100644 --- a/wp-admin/js/inline-edit-post.js +++ b/wp-admin/js/inline-edit-post.js @@ -1 +1 @@ -(function(a){inlineEditPost={init:function(){var c=this,d=a("#inline-edit"),b=a("#bulk-edit");c.type=a("table.widefat").hasClass("pages")?"page":"post";c.what="#post-";d.keyup(function(f){if(f.which==27){return inlineEditPost.revert()}});b.keyup(function(f){if(f.which==27){return inlineEditPost.revert()}});a("a.cancel",d).click(function(){return inlineEditPost.revert()});a("a.save",d).click(function(){return inlineEditPost.save(this)});a("td",d).keydown(function(f){if(f.which==13){return inlineEditPost.save(this)}});a("a.cancel",b).click(function(){return inlineEditPost.revert()});a('#inline-edit .inline-edit-private input[value="private"]').click(function(){var e=a("input.inline-edit-password-input");if(a(this).prop("checked")){e.val("").prop("disabled",true)}else{e.prop("disabled",false)}});a("a.editinline").live("click",function(){inlineEditPost.edit(this);return false});a("#bulk-title-div").parents("fieldset").after(a("#inline-edit fieldset.inline-edit-categories").clone()).siblings("fieldset:last").prepend(a("#inline-edit label.inline-edit-tags").clone());a("span.catshow").click(function(){a(this).hide().next().show().parent().next().addClass("cat-hover")});a("span.cathide").click(function(){a(this).hide().prev().show().parent().next().removeClass("cat-hover")});a('select[name="_status"] option[value="future"]',b).remove();a("#doaction, #doaction2").click(function(f){var g=a(this).attr("id").substr(2);if(a('select[name="'+g+'"]').val()=="edit"){f.preventDefault();c.setBulk()}else{if(a("form#posts-filter tr.inline-editor").length>0){c.revert()}}});a("#post-query-submit").mousedown(function(f){c.revert();a('select[name^="action"]').val("-1")})},toggle:function(c){var b=this;a(b.what+b.getId(c)).css("display")=="none"?b.revert():b.edit(c)},setBulk:function(){var e="",d=this.type,b,f=true;this.revert();a("#bulk-edit td").attr("colspan",a(".widefat:first thead th:visible").length);a("table.widefat tbody").prepend(a("#bulk-edit"));a("#bulk-edit").addClass("inline-editor").show();a('tbody th.check-column input[type="checkbox"]').each(function(g){if(a(this).prop("checked")){f=false;var h=a(this).val(),c;c=a("#inline_"+h+" .post_title").text()||inlineEditL10n.notitle;e+='<div id="ttle'+h+'"><a id="_'+h+'" class="ntdelbutton" title="'+inlineEditL10n.ntdeltitle+'">X</a>'+c+"</div>"}});if(f){return this.revert()}a("#bulk-titles").html(e);a("#bulk-titles a").click(function(){var c=a(this).attr("id").substr(1);a('table.widefat input[value="'+c+'"]').prop("checked",false);a("#ttle"+c).remove()});if("post"==d){b="post_tag";a('tr.inline-editor textarea[name="tax_input['+b+']"]').suggest("admin-ajax.php?action=ajax-tag-search&tax="+b,{delay:500,minchars:2,multiple:true,multipleSep:", "})}a("html, body").animate({scrollTop:0},"fast")},edit:function(c){var n=this,j,e,g,i,h,m,l,d=true,o,b,k;n.revert();if(typeof(c)=="object"){c=n.getId(c)}j=["post_title","post_name","post_author","_status","jj","mm","aa","hh","mn","ss","post_password","post_format"];if(n.type=="page"){j.push("post_parent","menu_order","page_template")}e=a("#inline-edit").clone(true);a("td",e).attr("colspan",a(".widefat:first thead th:visible").length);if(a(n.what+c).hasClass("alternate")){a(e).addClass("alternate")}a(n.what+c).hide().after(e);g=a("#inline_"+c);if(!a(':input[name="post_author"] option[value="'+a(".post_author",g).text()+'"]',e).val()){a(':input[name="post_author"]',e).prepend('<option value="'+a(".post_author",g).text()+'">'+a("#"+n.type+"-"+c+" .author").text()+"</option>")}if(a(':input[name="post_author"] option',e).length==1){a("label.inline-edit-author",e).hide()}b=a(".post_format",g).text();a("option.unsupported",e).each(function(){var f=a(this);if(f.val()!=b){f.remove()}});for(k=0;k<j.length;k++){a(':input[name="'+j[k]+'"]',e).val(a("."+j[k],g).text())}if(a(".comment_status",g).text()=="open"){a('input[name="comment_status"]',e).prop("checked",true)}if(a(".ping_status",g).text()=="open"){a('input[name="ping_status"]',e).prop("checked",true)}if(a(".sticky",g).text()=="sticky"){a('input[name="sticky"]',e).prop("checked",true)}a(".post_category",g).each(function(){var f=a(this).text();if(f){taxname=a(this).attr("id").replace("_"+c,"");a("ul."+taxname+"-checklist :checkbox",e).val(f.split(","))}});a(".tags_input",g).each(function(){var p=a(this).text(),q=a(this).attr("id").replace("_"+c,""),f=a("textarea.tax_input_"+q,e);if(p){f.val(p)}f.suggest("admin-ajax.php?action=ajax-tag-search&tax="+q,{delay:500,minchars:2,multiple:true,multipleSep:", "})});i=a("._status",g).text();if("future"!=i){a('select[name="_status"] option[value="future"]',e).remove()}if("private"==i){a('input[name="keep_private"]',e).prop("checked",true);a("input.inline-edit-password-input").val("").prop("disabled",true)}h=a('select[name="post_parent"] option[value="'+c+'"]',e);if(h.length>0){m=h[0].className.split("-")[1];l=h;while(d){l=l.next("option");if(l.length==0){break}o=l[0].className.split("-")[1];if(o<=m){d=false}else{l.remove();l=h}}h.remove()}a(e).attr("id","edit-"+c).addClass("inline-editor").show();a(".ptitle",e).focus();return false},save:function(e){var d,b,c=a(".post_status_page").val()||"";if(typeof(e)=="object"){e=this.getId(e)}a("table.widefat .inline-edit-save .waiting").show();d={action:"inline-save",post_type:typenow,post_ID:e,edit_date:"true",post_status:c};b=a("#edit-"+e+" :input").serialize();d=b+"&"+a.param(d);a.post("admin-ajax.php",d,function(f){a("table.widefat .inline-edit-save .waiting").hide();if(f){if(-1!=f.indexOf("<tr")){a(inlineEditPost.what+e).remove();a("#edit-"+e).before(f).remove();a(inlineEditPost.what+e).hide().fadeIn()}else{f=f.replace(/<.[^<>]*?>/g,"");a("#edit-"+e+" .inline-edit-save .error").html(f).show()}}else{a("#edit-"+e+" .inline-edit-save .error").html(inlineEditL10n.error).show()}},"html");return false},revert:function(){var b=a("table.widefat tr.inline-editor").attr("id");if(b){a("table.widefat .inline-edit-save .waiting").hide();if("bulk-edit"==b){a("table.widefat #bulk-edit").removeClass("inline-editor").hide();a("#bulk-titles").html("");a("#inlineedit").append(a("#bulk-edit"))}else{a("#"+b).remove();b=b.substr(b.lastIndexOf("-")+1);a(this.what+b).show()}}return false},getId:function(c){var d=a(c).closest("tr").attr("id"),b=d.split("-");return b[b.length-1]}};a(document).ready(function(){inlineEditPost.init()})})(jQuery); \ No newline at end of file +(function(a){inlineEditPost={init:function(){var c=this,d=a("#inline-edit"),b=a("#bulk-edit");c.type=a("table.widefat").hasClass("pages")?"page":"post";c.what="#post-";d.keyup(function(f){if(f.which==27){return inlineEditPost.revert()}});b.keyup(function(f){if(f.which==27){return inlineEditPost.revert()}});a("a.cancel",d).click(function(){return inlineEditPost.revert()});a("a.save",d).click(function(){return inlineEditPost.save(this)});a("td",d).keydown(function(f){if(f.which==13){return inlineEditPost.save(this)}});a("a.cancel",b).click(function(){return inlineEditPost.revert()});a('#inline-edit .inline-edit-private input[value="private"]').click(function(){var e=a("input.inline-edit-password-input");if(a(this).prop("checked")){e.val("").prop("disabled",true)}else{e.prop("disabled",false)}});a("a.editinline").live("click",function(){inlineEditPost.edit(this);return false});a("#bulk-title-div").parents("fieldset").after(a("#inline-edit fieldset.inline-edit-categories").clone()).siblings("fieldset:last").prepend(a("#inline-edit label.inline-edit-tags").clone());a("span.catshow").click(function(){a(this).hide().next().show().parent().next().addClass("cat-hover")});a("span.cathide").click(function(){a(this).hide().prev().show().parent().next().removeClass("cat-hover")});a('select[name="_status"] option[value="future"]',b).remove();a("#doaction, #doaction2").click(function(f){var g=a(this).attr("id").substr(2);if(a('select[name="'+g+'"]').val()=="edit"){f.preventDefault();c.setBulk()}else{if(a("form#posts-filter tr.inline-editor").length>0){c.revert()}}});a("#post-query-submit").mousedown(function(f){c.revert();a('select[name^="action"]').val("-1")})},toggle:function(c){var b=this;a(b.what+b.getId(c)).css("display")=="none"?b.revert():b.edit(c)},setBulk:function(){var e="",d=this.type,b,f=true;this.revert();a("#bulk-edit td").attr("colspan",a(".widefat:first thead th:visible").length);a("table.widefat tbody").prepend(a("#bulk-edit"));a("#bulk-edit").addClass("inline-editor").show();a('tbody th.check-column input[type="checkbox"]').each(function(g){if(a(this).prop("checked")){f=false;var h=a(this).val(),c;c=a("#inline_"+h+" .post_title").text()||inlineEditL10n.notitle;e+='<div id="ttle'+h+'"><a id="_'+h+'" class="ntdelbutton" title="'+inlineEditL10n.ntdeltitle+'">X</a>'+c+"</div>"}});if(f){return this.revert()}a("#bulk-titles").html(e);a("#bulk-titles a").click(function(){var c=a(this).attr("id").substr(1);a('table.widefat input[value="'+c+'"]').prop("checked",false);a("#ttle"+c).remove()});if("post"==d){b="post_tag";a('tr.inline-editor textarea[name="tax_input['+b+']"]').suggest(ajaxurl+"?action=ajax-tag-search&tax="+b,{delay:500,minchars:2,multiple:true,multipleSep:inlineEditL10n.comma+" "})}a("html, body").animate({scrollTop:0},"fast")},edit:function(c){var n=this,j,e,g,i,h,m,l,d=true,o,b,k;n.revert();if(typeof(c)=="object"){c=n.getId(c)}j=["post_title","post_name","post_author","_status","jj","mm","aa","hh","mn","ss","post_password","post_format","menu_order"];if(n.type=="page"){j.push("post_parent","page_template")}e=a("#inline-edit").clone(true);a("td",e).attr("colspan",a(".widefat:first thead th:visible").length);if(a(n.what+c).hasClass("alternate")){a(e).addClass("alternate")}a(n.what+c).hide().after(e);g=a("#inline_"+c);if(!a(':input[name="post_author"] option[value="'+a(".post_author",g).text()+'"]',e).val()){a(':input[name="post_author"]',e).prepend('<option value="'+a(".post_author",g).text()+'">'+a("#"+n.type+"-"+c+" .author").text()+"</option>")}if(a(':input[name="post_author"] option',e).length==1){a("label.inline-edit-author",e).hide()}b=a(".post_format",g).text();a("option.unsupported",e).each(function(){var f=a(this);if(f.val()!=b){f.remove()}});for(k=0;k<j.length;k++){a(':input[name="'+j[k]+'"]',e).val(a("."+j[k],g).text())}if(a(".comment_status",g).text()=="open"){a('input[name="comment_status"]',e).prop("checked",true)}if(a(".ping_status",g).text()=="open"){a('input[name="ping_status"]',e).prop("checked",true)}if(a(".sticky",g).text()=="sticky"){a('input[name="sticky"]',e).prop("checked",true)}a(".post_category",g).each(function(){var f=a(this).text();if(f){taxname=a(this).attr("id").replace("_"+c,"");a("ul."+taxname+"-checklist :checkbox",e).val(f.split(","))}});a(".tags_input",g).each(function(){var q=a(this).text(),r=a(this).attr("id").replace("_"+c,""),p=a("textarea.tax_input_"+r,e),f=inlineEditL10n.comma;if(q){if(","!==f){q=q.replace(/,/g,f)}p.val(q)}p.suggest(ajaxurl+"?action=ajax-tag-search&tax="+r,{delay:500,minchars:2,multiple:true,multipleSep:inlineEditL10n.comma+" "})});i=a("._status",g).text();if("future"!=i){a('select[name="_status"] option[value="future"]',e).remove()}if("private"==i){a('input[name="keep_private"]',e).prop("checked",true);a("input.inline-edit-password-input").val("").prop("disabled",true)}h=a('select[name="post_parent"] option[value="'+c+'"]',e);if(h.length>0){m=h[0].className.split("-")[1];l=h;while(d){l=l.next("option");if(l.length==0){break}o=l[0].className.split("-")[1];if(o<=m){d=false}else{l.remove();l=h}}h.remove()}a(e).attr("id","edit-"+c).addClass("inline-editor").show();a(".ptitle",e).focus();return false},save:function(e){var d,b,c=a(".post_status_page").val()||"";if(typeof(e)=="object"){e=this.getId(e)}a("table.widefat .inline-edit-save .waiting").show();d={action:"inline-save",post_type:typenow,post_ID:e,edit_date:"true",post_status:c};b=a("#edit-"+e+" :input").serialize();d=b+"&"+a.param(d);a.post(ajaxurl,d,function(f){a("table.widefat .inline-edit-save .waiting").hide();if(f){if(-1!=f.indexOf("<tr")){a(inlineEditPost.what+e).remove();a("#edit-"+e).before(f).remove();a(inlineEditPost.what+e).hide().fadeIn()}else{f=f.replace(/<.[^<>]*?>/g,"");a("#edit-"+e+" .inline-edit-save .error").html(f).show()}}else{a("#edit-"+e+" .inline-edit-save .error").html(inlineEditL10n.error).show()}},"html");return false},revert:function(){var b=a("table.widefat tr.inline-editor").attr("id");if(b){a("table.widefat .inline-edit-save .waiting").hide();if("bulk-edit"==b){a("table.widefat #bulk-edit").removeClass("inline-editor").hide();a("#bulk-titles").html("");a("#inlineedit").append(a("#bulk-edit"))}else{a("#"+b).remove();b=b.substr(b.lastIndexOf("-")+1);a(this.what+b).show()}}return false},getId:function(c){var d=a(c).closest("tr").attr("id"),b=d.split("-");return b[b.length-1]}};a(document).ready(function(){inlineEditPost.init()})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/inline-edit-tax.dev.js b/wp-admin/js/inline-edit-tax.dev.js index 333bf6bae..64c7bab94 100644 --- a/wp-admin/js/inline-edit-tax.dev.js +++ b/wp-admin/js/inline-edit-tax.dev.js @@ -73,7 +73,7 @@ inlineEditTax = { params = fields + '&' + $.param(params); // make ajax request - $.post('admin-ajax.php', params, + $.post( ajaxurl, params, function(r) { var row, new_id; $('table.widefat .inline-edit-save .waiting').hide(); diff --git a/wp-admin/js/inline-edit-tax.js b/wp-admin/js/inline-edit-tax.js index 113e5a0e8..cccde57d0 100644 --- a/wp-admin/js/inline-edit-tax.js +++ b/wp-admin/js/inline-edit-tax.js @@ -1 +1 @@ -(function(a){inlineEditTax={init:function(){var b=this,c=a("#inline-edit");b.type=a("#the-list").attr("class").substr(5);b.what="#"+b.type+"-";a(".editinline").live("click",function(){inlineEditTax.edit(this);return false});c.keyup(function(d){if(d.which==27){return inlineEditTax.revert()}});a("a.cancel",c).click(function(){return inlineEditTax.revert()});a("a.save",c).click(function(){return inlineEditTax.save(this)});a("input, select",c).keydown(function(d){if(d.which==13){return inlineEditTax.save(this)}});a('#posts-filter input[type="submit"]').mousedown(function(d){b.revert()})},toggle:function(c){var b=this;a(b.what+b.getId(c)).css("display")=="none"?b.revert():b.edit(c)},edit:function(d){var c=this,b;c.revert();if(typeof(d)=="object"){d=c.getId(d)}b=a("#inline-edit").clone(true),rowData=a("#inline_"+d);a("td",b).attr("colspan",a(".widefat:first thead th:visible").length);if(a(c.what+d).hasClass("alternate")){a(b).addClass("alternate")}a(c.what+d).hide().after(b);a(':input[name="name"]',b).val(a(".name",rowData).text());a(':input[name="slug"]',b).val(a(".slug",rowData).text());a(b).attr("id","edit-"+d).addClass("inline-editor").show();a(".ptitle",b).eq(0).focus();return false},save:function(e){var d,b,c=a('input[name="taxonomy"]').val()||"";if(typeof(e)=="object"){e=this.getId(e)}a("table.widefat .inline-edit-save .waiting").show();d={action:"inline-save-tax",tax_type:this.type,tax_ID:e,taxonomy:c};b=a("#edit-"+e+" :input").serialize();d=b+"&"+a.param(d);a.post("admin-ajax.php",d,function(g){var h,f;a("table.widefat .inline-edit-save .waiting").hide();if(g){if(-1!=g.indexOf("<tr")){a(inlineEditTax.what+e).remove();f=a(g).attr("id");a("#edit-"+e).before(g).remove();h=f?a("#"+f):a(inlineEditTax.what+e);h.hide().fadeIn()}else{a("#edit-"+e+" .inline-edit-save .error").html(g).show()}}else{a("#edit-"+e+" .inline-edit-save .error").html(inlineEditL10n.error).show()}});return false},revert:function(){var b=a("table.widefat tr.inline-editor").attr("id");if(b){a("table.widefat .inline-edit-save .waiting").hide();a("#"+b).remove();b=b.substr(b.lastIndexOf("-")+1);a(this.what+b).show()}return false},getId:function(c){var d=c.tagName=="TR"?c.id:a(c).parents("tr").attr("id"),b=d.split("-");return b[b.length-1]}};a(document).ready(function(){inlineEditTax.init()})})(jQuery); \ No newline at end of file +(function(a){inlineEditTax={init:function(){var b=this,c=a("#inline-edit");b.type=a("#the-list").attr("class").substr(5);b.what="#"+b.type+"-";a(".editinline").live("click",function(){inlineEditTax.edit(this);return false});c.keyup(function(d){if(d.which==27){return inlineEditTax.revert()}});a("a.cancel",c).click(function(){return inlineEditTax.revert()});a("a.save",c).click(function(){return inlineEditTax.save(this)});a("input, select",c).keydown(function(d){if(d.which==13){return inlineEditTax.save(this)}});a('#posts-filter input[type="submit"]').mousedown(function(d){b.revert()})},toggle:function(c){var b=this;a(b.what+b.getId(c)).css("display")=="none"?b.revert():b.edit(c)},edit:function(d){var c=this,b;c.revert();if(typeof(d)=="object"){d=c.getId(d)}b=a("#inline-edit").clone(true),rowData=a("#inline_"+d);a("td",b).attr("colspan",a(".widefat:first thead th:visible").length);if(a(c.what+d).hasClass("alternate")){a(b).addClass("alternate")}a(c.what+d).hide().after(b);a(':input[name="name"]',b).val(a(".name",rowData).text());a(':input[name="slug"]',b).val(a(".slug",rowData).text());a(b).attr("id","edit-"+d).addClass("inline-editor").show();a(".ptitle",b).eq(0).focus();return false},save:function(e){var d,b,c=a('input[name="taxonomy"]').val()||"";if(typeof(e)=="object"){e=this.getId(e)}a("table.widefat .inline-edit-save .waiting").show();d={action:"inline-save-tax",tax_type:this.type,tax_ID:e,taxonomy:c};b=a("#edit-"+e+" :input").serialize();d=b+"&"+a.param(d);a.post(ajaxurl,d,function(g){var h,f;a("table.widefat .inline-edit-save .waiting").hide();if(g){if(-1!=g.indexOf("<tr")){a(inlineEditTax.what+e).remove();f=a(g).attr("id");a("#edit-"+e).before(g).remove();h=f?a("#"+f):a(inlineEditTax.what+e);h.hide().fadeIn()}else{a("#edit-"+e+" .inline-edit-save .error").html(g).show()}}else{a("#edit-"+e+" .inline-edit-save .error").html(inlineEditL10n.error).show()}});return false},revert:function(){var b=a("table.widefat tr.inline-editor").attr("id");if(b){a("table.widefat .inline-edit-save .waiting").hide();a("#"+b).remove();b=b.substr(b.lastIndexOf("-")+1);a(this.what+b).show()}return false},getId:function(c){var d=c.tagName=="TR"?c.id:a(c).parents("tr").attr("id"),b=d.split("-");return b[b.length-1]}};a(document).ready(function(){inlineEditTax.init()})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/media-gallery.dev.js b/wp-admin/js/media-gallery.dev.js new file mode 100644 index 000000000..38e4f7b48 --- /dev/null +++ b/wp-admin/js/media-gallery.dev.js @@ -0,0 +1,25 @@ +jQuery(function($){ + $( 'body' ).bind( 'click.wp-gallery', function(e){ + var target = $( e.target ), id, img_size; + + if ( target.hasClass( 'wp-set-header' ) ) { + ( window.dialogArguments || opener || parent || top ).location.href = target.data( 'location' ); + e.preventDefault(); + } else if ( target.hasClass( 'wp-set-background' ) ) { + id = target.data( 'attachment-id' ); + img_size = $( 'input[name="attachments[' + id + '][image-size]"]:checked').val(); + + jQuery.post(ajaxurl, { + action: 'set-background-image', + attachment_id: id, + size: img_size + }, function(){ + var win = window.dialogArguments || opener || parent || top; + win.tb_remove(); + win.location.reload(); + }); + + e.preventDefault(); + } + }); +}); diff --git a/wp-admin/js/media-gallery.js b/wp-admin/js/media-gallery.js new file mode 100644 index 000000000..81e51131a --- /dev/null +++ b/wp-admin/js/media-gallery.js @@ -0,0 +1 @@ +jQuery(function(a){a("body").bind("click.wp-gallery",function(d){var c=a(d.target),f,b;if(c.hasClass("wp-set-header")){(window.dialogArguments||opener||parent||top).location.href=c.data("location");d.preventDefault()}else{if(c.hasClass("wp-set-background")){f=c.data("attachment-id");b=a('input[name="attachments['+f+'][image-size]"]:checked').val();jQuery.post(ajaxurl,{action:"set-background-image",attachment_id:f,size:b},function(){var e=window.dialogArguments||opener||parent||top;e.tb_remove();e.location.reload()});d.preventDefault()}}})}); \ No newline at end of file diff --git a/wp-admin/js/media-upload.dev.js b/wp-admin/js/media-upload.dev.js index 488e3a01f..9b998ff2a 100644 --- a/wp-admin/js/media-upload.dev.js +++ b/wp-admin/js/media-upload.dev.js @@ -25,8 +25,8 @@ function send_to_editor(h) { ed.selection.moveToBookmark(ed.windowManager.insertimagebookmark); if ( h.indexOf('[caption') === 0 ) { - if ( ed.plugins.wpeditimage ) - h = ed.plugins.wpeditimage._do_shcode(h); + if ( ed.wpSetImgCaption ) + h = ed.wpSetImgCaption(h); } else if ( h.indexOf('[gallery') === 0 ) { if ( ed.plugins.wpgallery ) h = ed.plugins.wpgallery._do_gallery(h); diff --git a/wp-admin/js/media-upload.js b/wp-admin/js/media-upload.js index 618d92b37..7d1b9beef 100644 --- a/wp-admin/js/media-upload.js +++ b/wp-admin/js/media-upload.js @@ -1 +1 @@ -var wpActiveEditor;function send_to_editor(c){var b,a=typeof(tinymce)!="undefined",f=typeof(QTags)!="undefined";if(!wpActiveEditor){if(a&&tinymce.activeEditor){b=tinymce.activeEditor;wpActiveEditor=b.id}else{if(!f){return false}}}else{if(a){if(tinymce.activeEditor&&(tinymce.activeEditor.id=="mce_fullscreen"||tinymce.activeEditor.id=="wp_mce_fullscreen")){b=tinymce.activeEditor}else{b=tinymce.get(wpActiveEditor)}}}if(b&&!b.isHidden()){if(tinymce.isIE&&b.windowManager.insertimagebookmark){b.selection.moveToBookmark(b.windowManager.insertimagebookmark)}if(c.indexOf("[caption")===0){if(b.plugins.wpeditimage){c=b.plugins.wpeditimage._do_shcode(c)}}else{if(c.indexOf("[gallery")===0){if(b.plugins.wpgallery){c=b.plugins.wpgallery._do_gallery(c)}}else{if(c.indexOf("[embed")===0){if(b.plugins.wordpress){c=b.plugins.wordpress._setEmbed(c)}}}}b.execCommand("mceInsertContent",false,c)}else{if(f){QTags.insertContent(c)}else{document.getElementById(wpActiveEditor).value+=c}}try{tb_remove()}catch(d){}}var tb_position;(function(a){tb_position=function(){var f=a("#TB_window"),e=a(window).width(),d=a(window).height(),c=(720<e)?720:e,b=0;if(a("body.admin-bar").length){b=28}if(f.size()){f.width(c-50).height(d-45-b);a("#TB_iframeContent").width(c-50).height(d-75-b);f.css({"margin-left":"-"+parseInt(((c-50)/2),10)+"px"});if(typeof document.body.style.maxWidth!="undefined"){f.css({top:20+b+"px","margin-top":"0"})}}return a("a.thickbox").each(function(){var g=a(this).attr("href");if(!g){return}g=g.replace(/&width=[0-9]+/g,"");g=g.replace(/&height=[0-9]+/g,"");a(this).attr("href",g+"&width="+(c-80)+"&height="+(d-85-b))})};a(window).resize(function(){tb_position()});a(document).ready(function(b){b("a.thickbox").click(function(){var c;if(typeof(tinymce)!="undefined"&&tinymce.isIE&&(c=tinymce.get(wpActiveEditor))&&!c.isHidden()){c.focus();c.windowManager.insertimagebookmark=c.selection.getBookmark()}})})})(jQuery); \ No newline at end of file +var wpActiveEditor;function send_to_editor(c){var b,a=typeof(tinymce)!="undefined",f=typeof(QTags)!="undefined";if(!wpActiveEditor){if(a&&tinymce.activeEditor){b=tinymce.activeEditor;wpActiveEditor=b.id}else{if(!f){return false}}}else{if(a){if(tinymce.activeEditor&&(tinymce.activeEditor.id=="mce_fullscreen"||tinymce.activeEditor.id=="wp_mce_fullscreen")){b=tinymce.activeEditor}else{b=tinymce.get(wpActiveEditor)}}}if(b&&!b.isHidden()){if(tinymce.isIE&&b.windowManager.insertimagebookmark){b.selection.moveToBookmark(b.windowManager.insertimagebookmark)}if(c.indexOf("[caption")===0){if(b.wpSetImgCaption){c=b.wpSetImgCaption(c)}}else{if(c.indexOf("[gallery")===0){if(b.plugins.wpgallery){c=b.plugins.wpgallery._do_gallery(c)}}else{if(c.indexOf("[embed")===0){if(b.plugins.wordpress){c=b.plugins.wordpress._setEmbed(c)}}}}b.execCommand("mceInsertContent",false,c)}else{if(f){QTags.insertContent(c)}else{document.getElementById(wpActiveEditor).value+=c}}try{tb_remove()}catch(d){}}var tb_position;(function(a){tb_position=function(){var f=a("#TB_window"),e=a(window).width(),d=a(window).height(),c=(720<e)?720:e,b=0;if(a("body.admin-bar").length){b=28}if(f.size()){f.width(c-50).height(d-45-b);a("#TB_iframeContent").width(c-50).height(d-75-b);f.css({"margin-left":"-"+parseInt(((c-50)/2),10)+"px"});if(typeof document.body.style.maxWidth!="undefined"){f.css({top:20+b+"px","margin-top":"0"})}}return a("a.thickbox").each(function(){var g=a(this).attr("href");if(!g){return}g=g.replace(/&width=[0-9]+/g,"");g=g.replace(/&height=[0-9]+/g,"");a(this).attr("href",g+"&width="+(c-80)+"&height="+(d-85-b))})};a(window).resize(function(){tb_position()});a(document).ready(function(b){b("a.thickbox").click(function(){var c;if(typeof(tinymce)!="undefined"&&tinymce.isIE&&(c=tinymce.get(wpActiveEditor))&&!c.isHidden()){c.focus();c.windowManager.insertimagebookmark=c.selection.getBookmark()}})})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/media.dev.js b/wp-admin/js/media.dev.js index 3c221b35d..6c589ec37 100644 --- a/wp-admin/js/media.dev.js +++ b/wp-admin/js/media.dev.js @@ -28,13 +28,10 @@ var findPosts; var post = { ps: $('#find-posts-input').val(), action: 'find_posts', - _ajax_nonce: $('#_ajax_nonce').val() + _ajax_nonce: $('#_ajax_nonce').val(), + post_type: $('input[name="find-posts-what"]:checked').val() }; - var selectedItem; - $("input[@name='itemSelect[]']:checked").each(function() { selectedItem = $(this).val() }); - post['post_type'] = selectedItem; - $.ajax({ type : 'POST', url : ajaxurl, diff --git a/wp-admin/js/media.js b/wp-admin/js/media.js index d5bd85b99..2fe5c0f9c 100644 --- a/wp-admin/js/media.js +++ b/wp-admin/js/media.js @@ -1 +1 @@ -var findPosts;(function(a){findPosts={open:function(d,c){var b=document.documentElement.scrollTop||a(document).scrollTop();if(d&&c){a("#affected").attr("name",d).val(c)}a("#find-posts").show().draggable({handle:"#find-posts-head"}).css({top:b+50+"px",left:"50%",marginLeft:"-250px"});a("#find-posts-input").focus().keyup(function(f){if(f.which==27){findPosts.close()}});return false},close:function(){a("#find-posts-response").html("");a("#find-posts").draggable("destroy").hide()},send:function(){var b={ps:a("#find-posts-input").val(),action:"find_posts",_ajax_nonce:a("#_ajax_nonce").val()};var c;a("input[@name='itemSelect[]']:checked").each(function(){c=a(this).val()});b.post_type=c;a.ajax({type:"POST",url:ajaxurl,data:b,success:function(d){findPosts.show(d)},error:function(d){findPosts.error(d)}})},show:function(b){if(typeof(b)=="string"){this.error({responseText:b});return}var c=wpAjax.parseAjaxResponse(b);if(c.errors){this.error({responseText:wpAjax.broken})}c=c.responses[0];a("#find-posts-response").html(c.data)},error:function(b){var c=b.statusText;if(b.responseText){c=b.responseText.replace(/<.[^<>]*?>/g,"")}if(c){a("#find-posts-response").html(c)}}};a(document).ready(function(){a("#find-posts-submit").click(function(b){if(""==a("#find-posts-response").html()){b.preventDefault()}});a("#find-posts .find-box-search :input").keypress(function(b){if(13==b.which){findPosts.send();return false}});a("#find-posts-search").click(findPosts.send);a("#find-posts-close").click(findPosts.close);a("#doaction, #doaction2").click(function(b){a('select[name^="action"]').each(function(){if(a(this).val()=="attach"){b.preventDefault();findPosts.open()}})})})})(jQuery); \ No newline at end of file +var findPosts;(function(a){findPosts={open:function(d,c){var b=document.documentElement.scrollTop||a(document).scrollTop();if(d&&c){a("#affected").attr("name",d).val(c)}a("#find-posts").show().draggable({handle:"#find-posts-head"}).css({top:b+50+"px",left:"50%",marginLeft:"-250px"});a("#find-posts-input").focus().keyup(function(f){if(f.which==27){findPosts.close()}});return false},close:function(){a("#find-posts-response").html("");a("#find-posts").draggable("destroy").hide()},send:function(){var b={ps:a("#find-posts-input").val(),action:"find_posts",_ajax_nonce:a("#_ajax_nonce").val(),post_type:a('input[name="find-posts-what"]:checked').val()};a.ajax({type:"POST",url:ajaxurl,data:b,success:function(c){findPosts.show(c)},error:function(c){findPosts.error(c)}})},show:function(b){if(typeof(b)=="string"){this.error({responseText:b});return}var c=wpAjax.parseAjaxResponse(b);if(c.errors){this.error({responseText:wpAjax.broken})}c=c.responses[0];a("#find-posts-response").html(c.data)},error:function(b){var c=b.statusText;if(b.responseText){c=b.responseText.replace(/<.[^<>]*?>/g,"")}if(c){a("#find-posts-response").html(c)}}};a(document).ready(function(){a("#find-posts-submit").click(function(b){if(""==a("#find-posts-response").html()){b.preventDefault()}});a("#find-posts .find-box-search :input").keypress(function(b){if(13==b.which){findPosts.send();return false}});a("#find-posts-search").click(findPosts.send);a("#find-posts-close").click(findPosts.close);a("#doaction, #doaction2").click(function(b){a('select[name^="action"]').each(function(){if(a(this).val()=="attach"){b.preventDefault();findPosts.open()}})})})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/post.dev.js b/wp-admin/js/post.dev.js index dd038d898..42cd217dc 100644 --- a/wp-admin/js/post.dev.js +++ b/wp-admin/js/post.dev.js @@ -15,11 +15,19 @@ function array_unique_noempty(a) { tagBox = { clean : function(tags) { - return tags.replace(/\s*,\s*/g, ',').replace(/,+/g, ',').replace(/[,\s]+$/, '').replace(/^[,\s]+/, ''); + var comma = postL10n.comma; + if ( ',' !== comma ) + tags = tags.replace(new RegExp(comma, 'g'), ','); + tags = tags.replace(/\s*,\s*/g, ',').replace(/,+/g, ',').replace(/[,\s]+$/, '').replace(/^[,\s]+/, ''); + if ( ',' !== comma ) + tags = tags.replace(/,/g, comma); + return tags; }, parseTags : function(el) { - var id = el.id, num = id.split('-check-num-')[1], taxbox = $(el).closest('.tagsdiv'), thetags = taxbox.find('.the-tags'), current_tags = thetags.val().split(','), new_tags = []; + var id = el.id, num = id.split('-check-num-')[1], taxbox = $(el).closest('.tagsdiv'), + thetags = taxbox.find('.the-tags'), comma = postL10n.comma, + current_tags = thetags.val().split(comma), new_tags = []; delete current_tags[num]; $.each( current_tags, function(key, val) { @@ -29,7 +37,7 @@ tagBox = { } }); - thetags.val( this.clean( new_tags.join(',') ) ); + thetags.val( this.clean( new_tags.join(comma) ) ); this.quickClicks(taxbox); return false; @@ -46,7 +54,7 @@ tagBox = { disabled = thetags.prop('disabled'); - current_tags = thetags.val().split(','); + current_tags = thetags.val().split(postL10n.comma); tagchecklist.empty(); $.each( current_tags, function( key, val ) { @@ -74,14 +82,17 @@ tagBox = { flushTags : function(el, a, f) { a = a || false; - var text, tags = $('.the-tags', el), newtag = $('input.newtag', el), newtags; + var tags = $('.the-tags', el), + newtag = $('input.newtag', el), + comma = postL10n.comma, + newtags, text; text = a ? $(a).text() : newtag.val(); tagsval = tags.val(); - newtags = tagsval ? tagsval + ',' + text : text; + newtags = tagsval ? tagsval + comma + text : text; newtags = this.clean( newtags ); - newtags = array_unique_noempty( newtags.split(',') ).join(','); + newtags = array_unique_noempty( newtags.split(comma) ).join(comma); tags.val(newtags); this.quickClicks(el); @@ -96,7 +107,7 @@ tagBox = { get : function(id) { var tax = id.substr(id.indexOf('-')+1); - $.post(ajaxurl, {'action':'get-tagcloud','tax':tax}, function(r, stat) { + $.post(ajaxurl, {'action':'get-tagcloud', 'tax':tax}, function(r, stat) { if ( 0 == r || 'success' != stat ) r = wpAjax.broken; @@ -142,7 +153,7 @@ tagBox = { } }).each(function(){ var tax = $(this).closest('div.tagsdiv').attr('id'); - $(this).suggest( ajaxurl + '?action=ajax-tag-search&tax=' + tax, { delay: 500, minchars: 2, multiple: true, multipleSep: "," } ); + $(this).suggest( ajaxurl + '?action=ajax-tag-search&tax=' + tax, { delay: 500, minchars: 2, multiple: true, multipleSep: postL10n.comma + ' ' } ); }); // save tags on post save/publish @@ -200,10 +211,11 @@ commentsBox = { if ( commentsBox.st > commentsBox.total ) $('#show-comments').hide(); else - $('#show-comments').html(postL10n.showcomm); + $('#show-comments').show().children('a').html(postL10n.showcomm); + return; } else if ( 1 == r ) { - $('#show-comments').parent().html(postL10n.endcomm); + $('#show-comments').html(postL10n.endcomm); return; } @@ -302,12 +314,14 @@ jQuery(document).ready( function($) { if ( !$('#new'+taxonomy).val() ) return false; s.data += '&' + $( ':checked', '#'+taxonomy+'checklist' ).serialize(); + $( '#' + taxonomy + '-add-submit' ).prop( 'disabled', true ); return s; }; catAddAfter = function( r, s ) { var sup, drop = $('#new'+taxonomy+'_parent'); + $( '#' + taxonomy + '-add-submit' ).prop( 'disabled', false ); if ( 'undefined' != s.parsed.responses[0] && (sup = s.parsed.responses[0].supplemental.newcat_parent) ) { drop.before(sup); drop.remove(); diff --git a/wp-admin/js/post.js b/wp-admin/js/post.js index c37e6daef..963337e94 100644 --- a/wp-admin/js/post.js +++ b/wp-admin/js/post.js @@ -1 +1 @@ -var tagBox,commentsBox,editPermalink,makeSlugeditClickable,WPSetThumbnailHTML,WPSetThumbnailID,WPRemoveThumbnail,wptitlehint;function array_unique_noempty(a){var out=[];jQuery.each(a,function(key,val){val=jQuery.trim(val);if(val&&jQuery.inArray(val,out)==-1){out.push(val);}});return out;}(function($){tagBox={clean:function(tags){return tags.replace(/\s*,\s*/g,",").replace(/,+/g,",").replace(/[,\s]+$/,"").replace(/^[,\s]+/,"");},parseTags:function(el){var id=el.id,num=id.split("-check-num-")[1],taxbox=$(el).closest(".tagsdiv"),thetags=taxbox.find(".the-tags"),current_tags=thetags.val().split(","),new_tags=[];delete current_tags[num];$.each(current_tags,function(key,val){val=$.trim(val);if(val){new_tags.push(val);}});thetags.val(this.clean(new_tags.join(",")));this.quickClicks(taxbox);return false;},quickClicks:function(el){var thetags=$(".the-tags",el),tagchecklist=$(".tagchecklist",el),id=$(el).attr("id"),current_tags,disabled;if(!thetags.length){return;}disabled=thetags.prop("disabled");current_tags=thetags.val().split(",");tagchecklist.empty();$.each(current_tags,function(key,val){var span,xbutton;val=$.trim(val);if(!val){return;}span=$("<span />").text(val);if(!disabled){xbutton=$('<a id="'+id+"-check-num-"+key+'" class="ntdelbutton">X</a>');xbutton.click(function(){tagBox.parseTags(this);});span.prepend(" ").prepend(xbutton);}tagchecklist.append(span);});},flushTags:function(el,a,f){a=a||false;var text,tags=$(".the-tags",el),newtag=$("input.newtag",el),newtags;text=a?$(a).text():newtag.val();tagsval=tags.val();newtags=tagsval?tagsval+","+text:text;newtags=this.clean(newtags);newtags=array_unique_noempty(newtags.split(",")).join(",");tags.val(newtags);this.quickClicks(el);if(!a){newtag.val("");}if("undefined"==typeof(f)){newtag.focus();}return false;},get:function(id){var tax=id.substr(id.indexOf("-")+1);$.post(ajaxurl,{action:"get-tagcloud",tax:tax},function(r,stat){if(0==r||"success"!=stat){r=wpAjax.broken;}r=$('<p id="tagcloud-'+tax+'" class="the-tagcloud">'+r+"</p>");$("a",r).click(function(){tagBox.flushTags($(this).closest(".inside").children(".tagsdiv"),this);return false;});$("#"+id).after(r);});},init:function(){var t=this,ajaxtag=$("div.ajaxtag");$(".tagsdiv").each(function(){tagBox.quickClicks(this);});$("input.tagadd",ajaxtag).click(function(){t.flushTags($(this).closest(".tagsdiv"));});$("div.taghint",ajaxtag).click(function(){$(this).css("visibility","hidden").parent().siblings(".newtag").focus();});$("input.newtag",ajaxtag).blur(function(){if(this.value==""){$(this).parent().siblings(".taghint").css("visibility","");}}).focus(function(){$(this).parent().siblings(".taghint").css("visibility","hidden");}).keyup(function(e){if(13==e.which){tagBox.flushTags($(this).closest(".tagsdiv"));return false;}}).keypress(function(e){if(13==e.which){e.preventDefault();return false;}}).each(function(){var tax=$(this).closest("div.tagsdiv").attr("id");$(this).suggest(ajaxurl+"?action=ajax-tag-search&tax="+tax,{delay:500,minchars:2,multiple:true,multipleSep:","});});$("#post").submit(function(){$("div.tagsdiv").each(function(){tagBox.flushTags(this,false,1);});});$("a.tagcloud-link").click(function(){tagBox.get($(this).attr("id"));$(this).unbind().click(function(){$(this).siblings(".the-tagcloud").toggle();return false;});return false;});}};commentsBox={st:0,get:function(total,num){var st=this.st,data;if(!num){num=20;}this.st+=num;this.total=total;$("#commentsdiv img.waiting").show();data={action:"get-comments",mode:"single",_ajax_nonce:$("#add_comment_nonce").val(),p:$("#post_ID").val(),start:st,number:num};$.post(ajaxurl,data,function(r){r=wpAjax.parseAjaxResponse(r);$("#commentsdiv .widefat").show();$("#commentsdiv img.waiting").hide();if("object"==typeof r&&r.responses[0]){$("#the-comment-list").append(r.responses[0].data);theList=theExtraList=null;$("a[className*=':']").unbind();if(commentsBox.st>commentsBox.total){$("#show-comments").hide();}else{$("#show-comments").html(postL10n.showcomm);}return;}else{if(1==r){$("#show-comments").parent().html(postL10n.endcomm);return;}}$("#the-comment-list").append('<tr><td colspan="2">'+wpAjax.broken+"</td></tr>");});return false;}};WPSetThumbnailHTML=function(html){$(".inside","#postimagediv").html(html);};WPSetThumbnailID=function(id){var field=$('input[value="_thumbnail_id"]',"#list-table");if(field.size()>0){$("#meta\\["+field.attr("id").match(/[0-9]+/)+"\\]\\[value\\]").text(id);}};WPRemoveThumbnail=function(nonce){$.post(ajaxurl,{action:"set-post-thumbnail",post_id:$("#post_ID").val(),thumbnail_id:-1,_ajax_nonce:nonce,cookie:encodeURIComponent(document.cookie)},function(str){if(str=="0"){alert(setPostThumbnailL10n.error);}else{WPSetThumbnailHTML(str);}});};})(jQuery);jQuery(document).ready(function($){var stamp,visibility,sticky="",last=0,co=$("#content");postboxes.add_postbox_toggles(pagenow);if($("#tagsdiv-post_tag").length){tagBox.init();}else{$("#side-sortables, #normal-sortables, #advanced-sortables").children("div.postbox").each(function(){if(this.id.indexOf("tagsdiv-")===0){tagBox.init();return false;}});}$(".categorydiv").each(function(){var this_id=$(this).attr("id"),noSyncChecks=false,syncChecks,catAddAfter,taxonomyParts,taxonomy,settingName;taxonomyParts=this_id.split("-");taxonomyParts.shift();taxonomy=taxonomyParts.join("-");settingName=taxonomy+"_tab";if(taxonomy=="category"){settingName="cats";}$("a","#"+taxonomy+"-tabs").click(function(){var t=$(this).attr("href");$(this).parent().addClass("tabs").siblings("li").removeClass("tabs");$("#"+taxonomy+"-tabs").siblings(".tabs-panel").hide();$(t).show();if("#"+taxonomy+"-all"==t){deleteUserSetting(settingName);}else{setUserSetting(settingName,"pop");}return false;});if(getUserSetting(settingName)){$('a[href="#'+taxonomy+'-pop"]',"#"+taxonomy+"-tabs").click();}$("#new"+taxonomy).one("focus",function(){$(this).val("").removeClass("form-input-tip");});$("#"+taxonomy+"-add-submit").click(function(){$("#new"+taxonomy).focus();});syncChecks=function(){if(noSyncChecks){return;}noSyncChecks=true;var th=jQuery(this),c=th.is(":checked"),id=th.val().toString();$("#in-"+taxonomy+"-"+id+", #in-"+taxonomy+"-category-"+id).prop("checked",c);noSyncChecks=false;};catAddBefore=function(s){if(!$("#new"+taxonomy).val()){return false;}s.data+="&"+$(":checked","#"+taxonomy+"checklist").serialize();return s;};catAddAfter=function(r,s){var sup,drop=$("#new"+taxonomy+"_parent");if("undefined"!=s.parsed.responses[0]&&(sup=s.parsed.responses[0].supplemental.newcat_parent)){drop.before(sup);drop.remove();}};$("#"+taxonomy+"checklist").wpList({alt:"",response:taxonomy+"-ajax-response",addBefore:catAddBefore,addAfter:catAddAfter});$("#"+taxonomy+"-add-toggle").click(function(){$("#"+taxonomy+"-adder").toggleClass("wp-hidden-children");$('a[href="#'+taxonomy+'-all"]',"#"+taxonomy+"-tabs").click();$("#new"+taxonomy).focus();return false;});$("#"+taxonomy+"checklist li.popular-category :checkbox, #"+taxonomy+"checklist-pop :checkbox").live("click",function(){var t=$(this),c=t.is(":checked"),id=t.val();if(id&&t.parents("#taxonomy-"+taxonomy).length){$("#in-"+taxonomy+"-"+id+", #in-popular-"+taxonomy+"-"+id).prop("checked",c);}});});if($("#postcustom").length){$("#the-list").wpList({addAfter:function(xml,s){$("table#list-table").show();},addBefore:function(s){s.data+="&post_id="+$("#post_ID").val();return s;}});}if($("#submitdiv").length){stamp=$("#timestamp").html();visibility=$("#post-visibility-display").html();function updateVisibility(){var pvSelect=$("#post-visibility-select");if($("input:radio:checked",pvSelect).val()!="public"){$("#sticky").prop("checked",false);$("#sticky-span").hide();}else{$("#sticky-span").show();}if($("input:radio:checked",pvSelect).val()!="password"){$("#password-span").hide();}else{$("#password-span").show();}}function updateText(){var attemptedDate,originalDate,currentDate,publishOn,postStatus=$("#post_status"),optPublish=$('option[value="publish"]',postStatus),aa=$("#aa").val(),mm=$("#mm").val(),jj=$("#jj").val(),hh=$("#hh").val(),mn=$("#mn").val();attemptedDate=new Date(aa,mm-1,jj,hh,mn);originalDate=new Date($("#hidden_aa").val(),$("#hidden_mm").val()-1,$("#hidden_jj").val(),$("#hidden_hh").val(),$("#hidden_mn").val());currentDate=new Date($("#cur_aa").val(),$("#cur_mm").val()-1,$("#cur_jj").val(),$("#cur_hh").val(),$("#cur_mn").val());if(attemptedDate.getFullYear()!=aa||(1+attemptedDate.getMonth())!=mm||attemptedDate.getDate()!=jj||attemptedDate.getMinutes()!=mn){$(".timestamp-wrap","#timestampdiv").addClass("form-invalid");return false;}else{$(".timestamp-wrap","#timestampdiv").removeClass("form-invalid");}if(attemptedDate>currentDate&&$("#original_post_status").val()!="future"){publishOn=postL10n.publishOnFuture;$("#publish").val(postL10n.schedule);}else{if(attemptedDate<=currentDate&&$("#original_post_status").val()!="publish"){publishOn=postL10n.publishOn;$("#publish").val(postL10n.publish);}else{publishOn=postL10n.publishOnPast;$("#publish").val(postL10n.update);}}if(originalDate.toUTCString()==attemptedDate.toUTCString()){$("#timestamp").html(stamp);}else{$("#timestamp").html(publishOn+" <b>"+$('option[value="'+$("#mm").val()+'"]',"#mm").text()+" "+jj+", "+aa+" @ "+hh+":"+mn+"</b> ");}if($("input:radio:checked","#post-visibility-select").val()=="private"){$("#publish").val(postL10n.update);if(optPublish.length==0){postStatus.append('<option value="publish">'+postL10n.privatelyPublished+"</option>");}else{optPublish.html(postL10n.privatelyPublished);}$('option[value="publish"]',postStatus).prop("selected",true);$(".edit-post-status","#misc-publishing-actions").hide();}else{if($("#original_post_status").val()=="future"||$("#original_post_status").val()=="draft"){if(optPublish.length){optPublish.remove();postStatus.val($("#hidden_post_status").val());}}else{optPublish.html(postL10n.published);}if(postStatus.is(":hidden")){$(".edit-post-status","#misc-publishing-actions").show();}}$("#post-status-display").html($("option:selected",postStatus).text());if($("option:selected",postStatus).val()=="private"||$("option:selected",postStatus).val()=="publish"){$("#save-post").hide();}else{$("#save-post").show();if($("option:selected",postStatus).val()=="pending"){$("#save-post").show().val(postL10n.savePending);}else{$("#save-post").show().val(postL10n.saveDraft);}}return true;}$(".edit-visibility","#visibility").click(function(){if($("#post-visibility-select").is(":hidden")){updateVisibility();$("#post-visibility-select").slideDown("fast");$(this).hide();}return false;});$(".cancel-post-visibility","#post-visibility-select").click(function(){$("#post-visibility-select").slideUp("fast");$("#visibility-radio-"+$("#hidden-post-visibility").val()).prop("checked",true);$("#post_password").val($("#hidden_post_password").val());$("#sticky").prop("checked",$("#hidden-post-sticky").prop("checked"));$("#post-visibility-display").html(visibility);$(".edit-visibility","#visibility").show();updateText();return false;});$(".save-post-visibility","#post-visibility-select").click(function(){var pvSelect=$("#post-visibility-select");pvSelect.slideUp("fast");$(".edit-visibility","#visibility").show();updateText();if($("input:radio:checked",pvSelect).val()!="public"){$("#sticky").prop("checked",false);}if(true==$("#sticky").prop("checked")){sticky="Sticky";}else{sticky="";}$("#post-visibility-display").html(postL10n[$("input:radio:checked",pvSelect).val()+sticky]);return false;});$("input:radio","#post-visibility-select").change(function(){updateVisibility();});$("#timestampdiv").siblings("a.edit-timestamp").click(function(){if($("#timestampdiv").is(":hidden")){$("#timestampdiv").slideDown("fast");$(this).hide();}return false;});$(".cancel-timestamp","#timestampdiv").click(function(){$("#timestampdiv").slideUp("fast");$("#mm").val($("#hidden_mm").val());$("#jj").val($("#hidden_jj").val());$("#aa").val($("#hidden_aa").val());$("#hh").val($("#hidden_hh").val());$("#mn").val($("#hidden_mn").val());$("#timestampdiv").siblings("a.edit-timestamp").show();updateText();return false;});$(".save-timestamp","#timestampdiv").click(function(){if(updateText()){$("#timestampdiv").slideUp("fast");$("#timestampdiv").siblings("a.edit-timestamp").show();}return false;});$("#post-status-select").siblings("a.edit-post-status").click(function(){if($("#post-status-select").is(":hidden")){$("#post-status-select").slideDown("fast");$(this).hide();}return false;});$(".save-post-status","#post-status-select").click(function(){$("#post-status-select").slideUp("fast");$("#post-status-select").siblings("a.edit-post-status").show();updateText();return false;});$(".cancel-post-status","#post-status-select").click(function(){$("#post-status-select").slideUp("fast");$("#post_status").val($("#hidden_post_status").val());$("#post-status-select").siblings("a.edit-post-status").show();updateText();return false;});}if($("#edit-slug-box").length){editPermalink=function(post_id){var i,c=0,e=$("#editable-post-name"),revert_e=e.html(),real_slug=$("#post_name"),revert_slug=real_slug.val(),b=$("#edit-slug-buttons"),revert_b=b.html(),full=$("#editable-post-name-full").html();$("#view-post-btn").hide();b.html('<a href="#" class="save button">'+postL10n.ok+'</a> <a class="cancel" href="#">'+postL10n.cancel+"</a>");b.children(".save").click(function(){var new_slug=e.children("input").val();if(new_slug==$("#editable-post-name-full").text()){return $(".cancel","#edit-slug-buttons").click();}$.post(ajaxurl,{action:"sample-permalink",post_id:post_id,new_slug:new_slug,new_title:$("#title").val(),samplepermalinknonce:$("#samplepermalinknonce").val()},function(data){$("#edit-slug-box").html(data);b.html(revert_b);real_slug.val(new_slug);makeSlugeditClickable();$("#view-post-btn").show();});return false;});$(".cancel","#edit-slug-buttons").click(function(){$("#view-post-btn").show();e.html(revert_e);b.html(revert_b);real_slug.val(revert_slug);return false;});for(i=0;i<full.length;++i){if("%"==full.charAt(i)){c++;}}slug_value=(c>full.length/4)?"":full;e.html('<input type="text" id="new-post-slug" value="'+slug_value+'" />').children("input").keypress(function(e){var key=e.keyCode||0;if(13==key){b.children(".save").click();return false;}if(27==key){b.children(".cancel").click();return false;}real_slug.val(this.value);}).focus();};makeSlugeditClickable=function(){$("#editable-post-name").click(function(){$("#edit-slug-buttons").children(".edit-slug").click();});};makeSlugeditClickable();}if(typeof(wpWordCount)!="undefined"){$(document).triggerHandler("wpcountwords",[co.val()]);co.keyup(function(e){var k=e.keyCode||e.charCode;if(k==last){return true;}if(13==k||8==last||46==last){$(document).triggerHandler("wpcountwords",[co.val()]);}last=k;return true;});}wptitlehint=function(id){id=id||"title";var title=$("#"+id),titleprompt=$("#"+id+"-prompt-text");if(title.val()==""){titleprompt.css("visibility","");}titleprompt.click(function(){$(this).css("visibility","hidden");title.focus();});title.blur(function(){if(this.value==""){titleprompt.css("visibility","");}}).focus(function(){titleprompt.css("visibility","hidden");}).keydown(function(e){titleprompt.css("visibility","hidden");$(this).unbind(e);});};wptitlehint();}); \ No newline at end of file +var tagBox,commentsBox,editPermalink,makeSlugeditClickable,WPSetThumbnailHTML,WPSetThumbnailID,WPRemoveThumbnail,wptitlehint;function array_unique_noempty(b){var c=[];jQuery.each(b,function(a,d){d=jQuery.trim(d);if(d&&jQuery.inArray(d,c)==-1){c.push(d)}});return c}(function(a){tagBox={clean:function(c){var b=postL10n.comma;if(","!==b){c=c.replace(new RegExp(b,"g"),",")}c=c.replace(/\s*,\s*/g,",").replace(/,+/g,",").replace(/[,\s]+$/,"").replace(/^[,\s]+/,"");if(","!==b){c=c.replace(/,/g,b)}return c},parseTags:function(f){var i=f.id,c=i.split("-check-num-")[1],e=a(f).closest(".tagsdiv"),h=e.find(".the-tags"),b=postL10n.comma,d=h.val().split(b),g=[];delete d[c];a.each(d,function(j,k){k=a.trim(k);if(k){g.push(k)}});h.val(this.clean(g.join(b)));this.quickClicks(e);return false},quickClicks:function(d){var g=a(".the-tags",d),e=a(".tagchecklist",d),f=a(d).attr("id"),b,c;if(!g.length){return}c=g.prop("disabled");b=g.val().split(postL10n.comma);e.empty();a.each(b,function(i,k){var j,h;k=a.trim(k);if(!k){return}j=a("<span />").text(k);if(!c){h=a('<a id="'+f+"-check-num-"+i+'" class="ntdelbutton">X</a>');h.click(function(){tagBox.parseTags(this)});j.prepend(" ").prepend(h)}e.append(j)})},flushTags:function(g,c,h){c=c||false;var d=a(".the-tags",g),j=a("input.newtag",g),b=postL10n.comma,e,i;i=c?a(c).text():j.val();tagsval=d.val();e=tagsval?tagsval+b+i:i;e=this.clean(e);e=array_unique_noempty(e.split(b)).join(b);d.val(e);this.quickClicks(g);if(!c){j.val("")}if("undefined"==typeof(h)){j.focus()}return false},get:function(c){var b=c.substr(c.indexOf("-")+1);a.post(ajaxurl,{action:"get-tagcloud",tax:b},function(e,d){if(0==e||"success"!=d){e=wpAjax.broken}e=a('<p id="tagcloud-'+b+'" class="the-tagcloud">'+e+"</p>");a("a",e).click(function(){tagBox.flushTags(a(this).closest(".inside").children(".tagsdiv"),this);return false});a("#"+c).after(e)})},init:function(){var b=this,c=a("div.ajaxtag");a(".tagsdiv").each(function(){tagBox.quickClicks(this)});a("input.tagadd",c).click(function(){b.flushTags(a(this).closest(".tagsdiv"))});a("div.taghint",c).click(function(){a(this).css("visibility","hidden").parent().siblings(".newtag").focus()});a("input.newtag",c).blur(function(){if(this.value==""){a(this).parent().siblings(".taghint").css("visibility","")}}).focus(function(){a(this).parent().siblings(".taghint").css("visibility","hidden")}).keyup(function(d){if(13==d.which){tagBox.flushTags(a(this).closest(".tagsdiv"));return false}}).keypress(function(d){if(13==d.which){d.preventDefault();return false}}).each(function(){var d=a(this).closest("div.tagsdiv").attr("id");a(this).suggest(ajaxurl+"?action=ajax-tag-search&tax="+d,{delay:500,minchars:2,multiple:true,multipleSep:postL10n.comma+" "})});a("#post").submit(function(){a("div.tagsdiv").each(function(){tagBox.flushTags(this,false,1)})});a("a.tagcloud-link").click(function(){tagBox.get(a(this).attr("id"));a(this).unbind().click(function(){a(this).siblings(".the-tagcloud").toggle();return false});return false})}};commentsBox={st:0,get:function(d,c){var b=this.st,e;if(!c){c=20}this.st+=c;this.total=d;a("#commentsdiv img.waiting").show();e={action:"get-comments",mode:"single",_ajax_nonce:a("#add_comment_nonce").val(),p:a("#post_ID").val(),start:b,number:c};a.post(ajaxurl,e,function(f){f=wpAjax.parseAjaxResponse(f);a("#commentsdiv .widefat").show();a("#commentsdiv img.waiting").hide();if("object"==typeof f&&f.responses[0]){a("#the-comment-list").append(f.responses[0].data);theList=theExtraList=null;a("a[className*=':']").unbind();if(commentsBox.st>commentsBox.total){a("#show-comments").hide()}else{a("#show-comments").show().children("a").html(postL10n.showcomm)}return}else{if(1==f){a("#show-comments").html(postL10n.endcomm);return}}a("#the-comment-list").append('<tr><td colspan="2">'+wpAjax.broken+"</td></tr>")});return false}};WPSetThumbnailHTML=function(b){a(".inside","#postimagediv").html(b)};WPSetThumbnailID=function(c){var b=a('input[value="_thumbnail_id"]',"#list-table");if(b.size()>0){a("#meta\\["+b.attr("id").match(/[0-9]+/)+"\\]\\[value\\]").text(c)}};WPRemoveThumbnail=function(b){a.post(ajaxurl,{action:"set-post-thumbnail",post_id:a("#post_ID").val(),thumbnail_id:-1,_ajax_nonce:b,cookie:encodeURIComponent(document.cookie)},function(c){if(c=="0"){alert(setPostThumbnailL10n.error)}else{WPSetThumbnailHTML(c)}})}})(jQuery);jQuery(document).ready(function(f){var b,a,g="",e=0,h=f("#content");postboxes.add_postbox_toggles(pagenow);if(f("#tagsdiv-post_tag").length){tagBox.init()}else{f("#side-sortables, #normal-sortables, #advanced-sortables").children("div.postbox").each(function(){if(this.id.indexOf("tagsdiv-")===0){tagBox.init();return false}})}f(".categorydiv").each(function(){var n=f(this).attr("id"),j=false,m,o,l,i,k;l=n.split("-");l.shift();i=l.join("-");k=i+"_tab";if(i=="category"){k="cats"}f("a","#"+i+"-tabs").click(function(){var p=f(this).attr("href");f(this).parent().addClass("tabs").siblings("li").removeClass("tabs");f("#"+i+"-tabs").siblings(".tabs-panel").hide();f(p).show();if("#"+i+"-all"==p){deleteUserSetting(k)}else{setUserSetting(k,"pop")}return false});if(getUserSetting(k)){f('a[href="#'+i+'-pop"]',"#"+i+"-tabs").click()}f("#new"+i).one("focus",function(){f(this).val("").removeClass("form-input-tip")});f("#"+i+"-add-submit").click(function(){f("#new"+i).focus()});m=function(){if(j){return}j=true;var p=jQuery(this),r=p.is(":checked"),q=p.val().toString();f("#in-"+i+"-"+q+", #in-"+i+"-category-"+q).prop("checked",r);j=false};catAddBefore=function(p){if(!f("#new"+i).val()){return false}p.data+="&"+f(":checked","#"+i+"checklist").serialize();f("#"+i+"-add-submit").prop("disabled",true);return p};o=function(u,t){var q,p=f("#new"+i+"_parent");f("#"+i+"-add-submit").prop("disabled",false);if("undefined"!=t.parsed.responses[0]&&(q=t.parsed.responses[0].supplemental.newcat_parent)){p.before(q);p.remove()}};f("#"+i+"checklist").wpList({alt:"",response:i+"-ajax-response",addBefore:catAddBefore,addAfter:o});f("#"+i+"-add-toggle").click(function(){f("#"+i+"-adder").toggleClass("wp-hidden-children");f('a[href="#'+i+'-all"]',"#"+i+"-tabs").click();f("#new"+i).focus();return false});f("#"+i+"checklist li.popular-category :checkbox, #"+i+"checklist-pop :checkbox").live("click",function(){var p=f(this),r=p.is(":checked"),q=p.val();if(q&&p.parents("#taxonomy-"+i).length){f("#in-"+i+"-"+q+", #in-popular-"+i+"-"+q).prop("checked",r)}})});if(f("#postcustom").length){f("#the-list").wpList({addAfter:function(i,j){f("table#list-table").show()},addBefore:function(i){i.data+="&post_id="+f("#post_ID").val();return i}})}if(f("#submitdiv").length){b=f("#timestamp").html();a=f("#post-visibility-display").html();function d(){var i=f("#post-visibility-select");if(f("input:radio:checked",i).val()!="public"){f("#sticky").prop("checked",false);f("#sticky-span").hide()}else{f("#sticky-span").show()}if(f("input:radio:checked",i).val()!="password"){f("#password-span").hide()}else{f("#password-span").show()}}function c(){var p,q,j,s,r=f("#post_status"),k=f('option[value="publish"]',r),i=f("#aa").val(),n=f("#mm").val(),o=f("#jj").val(),m=f("#hh").val(),l=f("#mn").val();p=new Date(i,n-1,o,m,l);q=new Date(f("#hidden_aa").val(),f("#hidden_mm").val()-1,f("#hidden_jj").val(),f("#hidden_hh").val(),f("#hidden_mn").val());j=new Date(f("#cur_aa").val(),f("#cur_mm").val()-1,f("#cur_jj").val(),f("#cur_hh").val(),f("#cur_mn").val());if(p.getFullYear()!=i||(1+p.getMonth())!=n||p.getDate()!=o||p.getMinutes()!=l){f(".timestamp-wrap","#timestampdiv").addClass("form-invalid");return false}else{f(".timestamp-wrap","#timestampdiv").removeClass("form-invalid")}if(p>j&&f("#original_post_status").val()!="future"){s=postL10n.publishOnFuture;f("#publish").val(postL10n.schedule)}else{if(p<=j&&f("#original_post_status").val()!="publish"){s=postL10n.publishOn;f("#publish").val(postL10n.publish)}else{s=postL10n.publishOnPast;f("#publish").val(postL10n.update)}}if(q.toUTCString()==p.toUTCString()){f("#timestamp").html(b)}else{f("#timestamp").html(s+" <b>"+f('option[value="'+f("#mm").val()+'"]',"#mm").text()+" "+o+", "+i+" @ "+m+":"+l+"</b> ")}if(f("input:radio:checked","#post-visibility-select").val()=="private"){f("#publish").val(postL10n.update);if(k.length==0){r.append('<option value="publish">'+postL10n.privatelyPublished+"</option>")}else{k.html(postL10n.privatelyPublished)}f('option[value="publish"]',r).prop("selected",true);f(".edit-post-status","#misc-publishing-actions").hide()}else{if(f("#original_post_status").val()=="future"||f("#original_post_status").val()=="draft"){if(k.length){k.remove();r.val(f("#hidden_post_status").val())}}else{k.html(postL10n.published)}if(r.is(":hidden")){f(".edit-post-status","#misc-publishing-actions").show()}}f("#post-status-display").html(f("option:selected",r).text());if(f("option:selected",r).val()=="private"||f("option:selected",r).val()=="publish"){f("#save-post").hide()}else{f("#save-post").show();if(f("option:selected",r).val()=="pending"){f("#save-post").show().val(postL10n.savePending)}else{f("#save-post").show().val(postL10n.saveDraft)}}return true}f(".edit-visibility","#visibility").click(function(){if(f("#post-visibility-select").is(":hidden")){d();f("#post-visibility-select").slideDown("fast");f(this).hide()}return false});f(".cancel-post-visibility","#post-visibility-select").click(function(){f("#post-visibility-select").slideUp("fast");f("#visibility-radio-"+f("#hidden-post-visibility").val()).prop("checked",true);f("#post_password").val(f("#hidden_post_password").val());f("#sticky").prop("checked",f("#hidden-post-sticky").prop("checked"));f("#post-visibility-display").html(a);f(".edit-visibility","#visibility").show();c();return false});f(".save-post-visibility","#post-visibility-select").click(function(){var i=f("#post-visibility-select");i.slideUp("fast");f(".edit-visibility","#visibility").show();c();if(f("input:radio:checked",i).val()!="public"){f("#sticky").prop("checked",false)}if(true==f("#sticky").prop("checked")){g="Sticky"}else{g=""}f("#post-visibility-display").html(postL10n[f("input:radio:checked",i).val()+g]);return false});f("input:radio","#post-visibility-select").change(function(){d()});f("#timestampdiv").siblings("a.edit-timestamp").click(function(){if(f("#timestampdiv").is(":hidden")){f("#timestampdiv").slideDown("fast");f(this).hide()}return false});f(".cancel-timestamp","#timestampdiv").click(function(){f("#timestampdiv").slideUp("fast");f("#mm").val(f("#hidden_mm").val());f("#jj").val(f("#hidden_jj").val());f("#aa").val(f("#hidden_aa").val());f("#hh").val(f("#hidden_hh").val());f("#mn").val(f("#hidden_mn").val());f("#timestampdiv").siblings("a.edit-timestamp").show();c();return false});f(".save-timestamp","#timestampdiv").click(function(){if(c()){f("#timestampdiv").slideUp("fast");f("#timestampdiv").siblings("a.edit-timestamp").show()}return false});f("#post-status-select").siblings("a.edit-post-status").click(function(){if(f("#post-status-select").is(":hidden")){f("#post-status-select").slideDown("fast");f(this).hide()}return false});f(".save-post-status","#post-status-select").click(function(){f("#post-status-select").slideUp("fast");f("#post-status-select").siblings("a.edit-post-status").show();c();return false});f(".cancel-post-status","#post-status-select").click(function(){f("#post-status-select").slideUp("fast");f("#post_status").val(f("#hidden_post_status").val());f("#post-status-select").siblings("a.edit-post-status").show();c();return false})}if(f("#edit-slug-box").length){editPermalink=function(j){var k,n=0,m=f("#editable-post-name"),o=m.html(),r=f("#post_name"),s=r.val(),p=f("#edit-slug-buttons"),q=p.html(),l=f("#editable-post-name-full").html();f("#view-post-btn").hide();p.html('<a href="#" class="save button">'+postL10n.ok+'</a> <a class="cancel" href="#">'+postL10n.cancel+"</a>");p.children(".save").click(function(){var i=m.children("input").val();if(i==f("#editable-post-name-full").text()){return f(".cancel","#edit-slug-buttons").click()}f.post(ajaxurl,{action:"sample-permalink",post_id:j,new_slug:i,new_title:f("#title").val(),samplepermalinknonce:f("#samplepermalinknonce").val()},function(t){f("#edit-slug-box").html(t);p.html(q);r.val(i);makeSlugeditClickable();f("#view-post-btn").show()});return false});f(".cancel","#edit-slug-buttons").click(function(){f("#view-post-btn").show();m.html(o);p.html(q);r.val(s);return false});for(k=0;k<l.length;++k){if("%"==l.charAt(k)){n++}}slug_value=(n>l.length/4)?"":l;m.html('<input type="text" id="new-post-slug" value="'+slug_value+'" />').children("input").keypress(function(t){var i=t.keyCode||0;if(13==i){p.children(".save").click();return false}if(27==i){p.children(".cancel").click();return false}r.val(this.value)}).focus()};makeSlugeditClickable=function(){f("#editable-post-name").click(function(){f("#edit-slug-buttons").children(".edit-slug").click()})};makeSlugeditClickable()}if(typeof(wpWordCount)!="undefined"){f(document).triggerHandler("wpcountwords",[h.val()]);h.keyup(function(j){var i=j.keyCode||j.charCode;if(i==e){return true}if(13==i||8==e||46==e){f(document).triggerHandler("wpcountwords",[h.val()])}e=i;return true})}wptitlehint=function(k){k=k||"title";var i=f("#"+k),j=f("#"+k+"-prompt-text");if(i.val()==""){j.css("visibility","")}j.click(function(){f(this).css("visibility","hidden");i.focus()});i.blur(function(){if(this.value==""){j.css("visibility","")}}).focus(function(){j.css("visibility","hidden")}).keydown(function(l){j.css("visibility","hidden");f(this).unbind(l)})};wptitlehint()}); \ No newline at end of file diff --git a/wp-admin/js/postbox.dev.js b/wp-admin/js/postbox.dev.js index e95b75627..95b0cb30e 100644 --- a/wp-admin/js/postbox.dev.js +++ b/wp-admin/js/postbox.dev.js @@ -1,9 +1,11 @@ -var postboxes, is_iPad = navigator.userAgent.match(/iPad/); +var postboxes; (function($) { postboxes = { add_postbox_toggles : function(page, args) { - this.init(page, args); + var self = this; + + self.init(page, args); $('.postbox h3, .postbox .handlediv').bind('click.postboxes', function() { var p = $(this).parent('.postbox'), id = p.attr('id'); @@ -12,13 +14,15 @@ var postboxes, is_iPad = navigator.userAgent.match(/iPad/); return; p.toggleClass('closed'); - postboxes.save_state(page); + + if ( page != 'press-this' ) + self.save_state(page); if ( id ) { if ( !p.hasClass('closed') && $.isFunction(postboxes.pbshow) ) - postboxes.pbshow(id); + self.pbshow(id); else if ( p.hasClass('closed') && $.isFunction(postboxes.pbhide) ) - postboxes.pbhide(id); + self.pbhide(id); } }); @@ -38,27 +42,29 @@ var postboxes, is_iPad = navigator.userAgent.match(/iPad/); if ( $(this).prop('checked') ) { $('#' + box).show(); if ( $.isFunction( postboxes.pbshow ) ) - postboxes.pbshow( box ); + self.pbshow( box ); } else { $('#' + box).hide(); if ( $.isFunction( postboxes.pbhide ) ) - postboxes.pbhide( box ); + self.pbhide( box ); } - postboxes.save_state(page); - postboxes._mark_area(); + self.save_state(page); + self._mark_area(); }); $('.columns-prefs input[type="radio"]').bind('click.postboxes', function(){ - var n = parseInt($(this).val(), 10), pb = postboxes; + var n = parseInt($(this).val(), 10); if ( n ) { - pb._pb_edit(n); - pb.save_order(page); + self._pb_edit(n); + self.save_order(page); } }); }, init : function(page, args) { + var isMobile = $(document.body).hasClass('mobile'); + $.extend( this, args || {} ); $('#wpbody-content').css('overflow','hidden'); $('.meta-box-sortables').sortable({ @@ -67,6 +73,7 @@ var postboxes, is_iPad = navigator.userAgent.match(/iPad/); items: '.postbox', handle: '.hndle', cursor: 'move', + delay: ( isMobile ? 200 : 0 ), distance: 2, tolerance: 'pointer', forcePlaceholderSize: true, @@ -88,8 +95,8 @@ var postboxes, is_iPad = navigator.userAgent.match(/iPad/); } }); - if ( navigator.userAgent.match(/iPad/) ) { - $(document.body).bind('orientationchange', function(){ postboxes._pb_change(); }); + if ( isMobile ) { + $(document.body).bind('orientationchange.postboxes', function(){ postboxes._pb_change(); }); this._pb_change(); } @@ -124,89 +131,29 @@ var postboxes, is_iPad = navigator.userAgent.match(/iPad/); $.post( ajaxurl, postVars ); }, - _colname : function(n) { - switch (n) { - case 1: - return 'normal'; - break - case 2: - return 'side'; - break - case 3: - return 'column3'; - break - case 4: - return 'column4'; - break - default: - return ''; - } - }, - _mark_area : function() { - $('#side-info-column .meta-box-sortables:visible, #dashboard-widgets .meta-box-sortables:visible').each(function(n, el){ + var visible = $('div.postbox:visible').length, side = $('#post-body #side-sortables'); + + $('#dashboard-widgets .meta-box-sortables:visible').each(function(n, el){ var t = $(this); - if ( !t.children('.postbox:visible').length ) - t.addClass('empty-container'); - else + if ( visible == 1 || t.children('.postbox:visible').length ) t.removeClass('empty-container'); + else + t.addClass('empty-container'); }); + + if ( side.length ) { + if ( side.children('.postbox:visible').length ) + side.removeClass('empty-container'); + else if ( $('#postbox-container-1').css('width') == '280px' ) + side.addClass('empty-container'); + } }, _pb_edit : function(n) { - var ps = $('#poststuff'), i, el, done, pb = postboxes, visible = $('.postbox-container:visible').length; - - if ( n == visible ) - return; - - if ( ps.length ) { - if ( n == 2 ) { - $('.wrap').removeClass('columns-1').addClass('columns-2'); - ps.addClass('has-right-sidebar'); - - if ( !$('#side-info-column #side-sortables').length ) - $('#side-info-column').append( $('#side-sortables') ); - - } else if ( n == 1 ) { - $('.wrap').removeClass('columns-2').addClass('columns-1'); - ps.removeClass('has-right-sidebar'); - - if ( !$('#post-body-content #side-sortables').length ) - $('#normal-sortables').before( $('#side-sortables') ); - } - } else { - for ( i = 4; ( i > n && i > 1 ); i-- ) { - el = $('#' + postboxes._colname(i) + '-sortables'); - $('#' + postboxes._colname(i-1) + '-sortables').append(el.children('.postbox')); - el.parent().hide(); - } - - for ( i = n; i > 0; i-- ) { - el = $('#' + postboxes._colname(i) + '-sortables'); - done = false; - - if ( el.parent().is(':hidden') ) { - switch ( i ) { - case 4: - done = pb._move_one( el, $('.postbox:visible', $('#column3-sortables')) ); - case 3: - if ( !done ) - done = pb._move_one( el, $('.postbox:visible', $('#side-sortables')) ); - case 2: - if ( !done ) - done = pb._move_one( el, $('.postbox:visible', $('#normal-sortables')) ); - default: - if ( !done ) - el.addClass('empty-container') - } - - el.parent().show(); - } - } - - $('.postbox-container:visible').css('width', 100/n + '%'); - } + var el = $('.metabox-holder').get(0); + el.className = el.className.replace(/columns-\d+/, 'columns-' + n); }, _pb_change : function() { @@ -225,14 +172,6 @@ var postboxes, is_iPad = navigator.userAgent.match(/iPad/); } }, - _move_one : function(el, move) { - if ( move.length > 1 ) { - el.append( move.last() ); - return true; - } - return false; - }, - /* Callbacks */ pbshow : false, diff --git a/wp-admin/js/postbox.js b/wp-admin/js/postbox.js index 2c5fe99f9..ba98f497c 100644 --- a/wp-admin/js/postbox.js +++ b/wp-admin/js/postbox.js @@ -1 +1 @@ -var postboxes,is_iPad=navigator.userAgent.match(/iPad/);(function(a){postboxes={add_postbox_toggles:function(c,b){this.init(c,b);a(".postbox h3, .postbox .handlediv").bind("click.postboxes",function(){var d=a(this).parent(".postbox"),e=d.attr("id");if("dashboard_browser_nag"==e){return}d.toggleClass("closed");postboxes.save_state(c);if(e){if(!d.hasClass("closed")&&a.isFunction(postboxes.pbshow)){postboxes.pbshow(e)}else{if(d.hasClass("closed")&&a.isFunction(postboxes.pbhide)){postboxes.pbhide(e)}}}});a(".postbox h3 a").click(function(d){d.stopPropagation()});a(".postbox a.dismiss").bind("click.postboxes",function(f){var d=a(this).parents(".postbox").attr("id")+"-hide";a("#"+d).prop("checked",false).triggerHandler("click");return false});a(".hide-postbox-tog").bind("click.postboxes",function(){var d=a(this).val();if(a(this).prop("checked")){a("#"+d).show();if(a.isFunction(postboxes.pbshow)){postboxes.pbshow(d)}}else{a("#"+d).hide();if(a.isFunction(postboxes.pbhide)){postboxes.pbhide(d)}}postboxes.save_state(c);postboxes._mark_area()});a('.columns-prefs input[type="radio"]').bind("click.postboxes",function(){var e=parseInt(a(this).val(),10),d=postboxes;if(e){d._pb_edit(e);d.save_order(c)}})},init:function(c,b){a.extend(this,b||{});a("#wpbody-content").css("overflow","hidden");a(".meta-box-sortables").sortable({placeholder:"sortable-placeholder",connectWith:".meta-box-sortables",items:".postbox",handle:".hndle",cursor:"move",distance:2,tolerance:"pointer",forcePlaceholderSize:true,helper:"clone",opacity:0.65,stop:function(f,d){if(a(this).find("#dashboard_browser_nag").is(":visible")&&"dashboard_browser_nag"!=this.firstChild.id){a(this).sortable("cancel");return}postboxes.save_order(c)},receive:function(f,d){if("dashboard_browser_nag"==d.item[0].id){a(d.sender).sortable("cancel")}postboxes._mark_area()}});if(navigator.userAgent.match(/iPad/)){a(document.body).bind("orientationchange",function(){postboxes._pb_change()});this._pb_change()}this._mark_area()},save_state:function(d){var b=a(".postbox").filter(".closed").map(function(){return this.id}).get().join(","),c=a(".postbox").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(ajaxurl,{action:"closed-postboxes",closed:b,hidden:c,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:d})},save_order:function(c){var b,d=a(".columns-prefs input:checked").val()||0;b={action:"meta-box-order",_ajax_nonce:a("#meta-box-order-nonce").val(),page_columns:d,page:c};a(".meta-box-sortables").each(function(){b["order["+this.id.split("-")[0]+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b)},_colname:function(b){switch(b){case 1:return"normal";break;case 2:return"side";break;case 3:return"column3";break;case 4:return"column4";break;default:return""}},_mark_area:function(){a("#side-info-column .meta-box-sortables:visible, #dashboard-widgets .meta-box-sortables:visible").each(function(d,c){var b=a(this);if(!b.children(".postbox:visible").length){b.addClass("empty-container")}else{b.removeClass("empty-container")}})},_pb_edit:function(h){var g=a("#poststuff"),d,e,b,c=postboxes,f=a(".postbox-container:visible").length;if(h==f){return}if(g.length){if(h==2){a(".wrap").removeClass("columns-1").addClass("columns-2");g.addClass("has-right-sidebar");if(!a("#side-info-column #side-sortables").length){a("#side-info-column").append(a("#side-sortables"))}}else{if(h==1){a(".wrap").removeClass("columns-2").addClass("columns-1");g.removeClass("has-right-sidebar");if(!a("#post-body-content #side-sortables").length){a("#normal-sortables").before(a("#side-sortables"))}}}}else{for(d=4;(d>h&&d>1);d--){e=a("#"+postboxes._colname(d)+"-sortables");a("#"+postboxes._colname(d-1)+"-sortables").append(e.children(".postbox"));e.parent().hide()}for(d=h;d>0;d--){e=a("#"+postboxes._colname(d)+"-sortables");b=false;if(e.parent().is(":hidden")){switch(d){case 4:b=c._move_one(e,a(".postbox:visible",a("#column3-sortables")));case 3:if(!b){b=c._move_one(e,a(".postbox:visible",a("#side-sortables")))}case 2:if(!b){b=c._move_one(e,a(".postbox:visible",a("#normal-sortables")))}default:if(!b){e.addClass("empty-container")}}e.parent().show()}}a(".postbox-container:visible").css("width",100/h+"%")}},_pb_change:function(){switch(window.orientation){case 90:case -90:this._pb_edit(2);break;case 0:case 180:if(a("#poststuff").length){this._pb_edit(1)}else{this._pb_edit(2)}break}},_move_one:function(c,b){if(b.length>1){c.append(b.last());return true}return false},pbshow:false,pbhide:false}}(jQuery)); \ No newline at end of file +var postboxes;(function(a){postboxes={add_postbox_toggles:function(d,c){var b=this;b.init(d,c);a(".postbox h3, .postbox .handlediv").bind("click.postboxes",function(){var e=a(this).parent(".postbox"),f=e.attr("id");if("dashboard_browser_nag"==f){return}e.toggleClass("closed");if(d!="press-this"){b.save_state(d)}if(f){if(!e.hasClass("closed")&&a.isFunction(postboxes.pbshow)){b.pbshow(f)}else{if(e.hasClass("closed")&&a.isFunction(postboxes.pbhide)){b.pbhide(f)}}}});a(".postbox h3 a").click(function(f){f.stopPropagation()});a(".postbox a.dismiss").bind("click.postboxes",function(g){var f=a(this).parents(".postbox").attr("id")+"-hide";a("#"+f).prop("checked",false).triggerHandler("click");return false});a(".hide-postbox-tog").bind("click.postboxes",function(){var e=a(this).val();if(a(this).prop("checked")){a("#"+e).show();if(a.isFunction(postboxes.pbshow)){b.pbshow(e)}}else{a("#"+e).hide();if(a.isFunction(postboxes.pbhide)){b.pbhide(e)}}b.save_state(d);b._mark_area()});a('.columns-prefs input[type="radio"]').bind("click.postboxes",function(){var e=parseInt(a(this).val(),10);if(e){b._pb_edit(e);b.save_order(d)}})},init:function(d,c){var b=a(document.body).hasClass("mobile");a.extend(this,c||{});a("#wpbody-content").css("overflow","hidden");a(".meta-box-sortables").sortable({placeholder:"sortable-placeholder",connectWith:".meta-box-sortables",items:".postbox",handle:".hndle",cursor:"move",delay:(b?200:0),distance:2,tolerance:"pointer",forcePlaceholderSize:true,helper:"clone",opacity:0.65,stop:function(g,f){if(a(this).find("#dashboard_browser_nag").is(":visible")&&"dashboard_browser_nag"!=this.firstChild.id){a(this).sortable("cancel");return}postboxes.save_order(d)},receive:function(g,f){if("dashboard_browser_nag"==f.item[0].id){a(f.sender).sortable("cancel")}postboxes._mark_area()}});if(b){a(document.body).bind("orientationchange.postboxes",function(){postboxes._pb_change()});this._pb_change()}this._mark_area()},save_state:function(d){var b=a(".postbox").filter(".closed").map(function(){return this.id}).get().join(","),c=a(".postbox").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(ajaxurl,{action:"closed-postboxes",closed:b,hidden:c,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:d})},save_order:function(c){var b,d=a(".columns-prefs input:checked").val()||0;b={action:"meta-box-order",_ajax_nonce:a("#meta-box-order-nonce").val(),page_columns:d,page:c};a(".meta-box-sortables").each(function(){b["order["+this.id.split("-")[0]+"]"]=a(this).sortable("toArray").join(",")});a.post(ajaxurl,b)},_mark_area:function(){var c=a("div.postbox:visible").length,b=a("#post-body #side-sortables");a("#dashboard-widgets .meta-box-sortables:visible").each(function(f,e){var d=a(this);if(c==1||d.children(".postbox:visible").length){d.removeClass("empty-container")}else{d.addClass("empty-container")}});if(b.length){if(b.children(".postbox:visible").length){b.removeClass("empty-container")}else{if(a("#postbox-container-1").css("width")=="280px"){b.addClass("empty-container")}}}},_pb_edit:function(c){var b=a(".metabox-holder").get(0);b.className=b.className.replace(/columns-\d+/,"columns-"+c)},_pb_change:function(){switch(window.orientation){case 90:case -90:this._pb_edit(2);break;case 0:case 180:if(a("#poststuff").length){this._pb_edit(1)}else{this._pb_edit(2)}break}},pbshow:false,pbhide:false}}(jQuery)); \ No newline at end of file diff --git a/wp-admin/js/tags.dev.js b/wp-admin/js/tags.dev.js index 045f2b260..e8ac151a2 100644 --- a/wp-admin/js/tags.dev.js +++ b/wp-admin/js/tags.dev.js @@ -33,9 +33,9 @@ jQuery(document).ready(function($) { return false; $.post(ajaxurl, $('#addtag').serialize(), function(r){ - $('#ajax-response').empty(); + $('#ajax-response').empty(); var res = wpAjax.parseAjaxResponse(r, 'ajax-response'); - if ( ! res ) + if ( ! res || res.errors ) return; var parent = form.find('select#parent').val(); diff --git a/wp-admin/js/tags.js b/wp-admin/js/tags.js index ddcaeb0c8..b14c79ce2 100644 --- a/wp-admin/js/tags.js +++ b/wp-admin/js/tags.js @@ -1 +1 @@ -jQuery(document).ready(function(a){a(".delete-tag").live("click",function(g){var b=a(this),f=b.parents("tr"),c=true,d;if("undefined"!=showNotice){c=showNotice.warn()}if(c){d=b.attr("href").replace(/[^?]*\?/,"").replace(/action=delete/,"action=delete-tag");a.post(ajaxurl,d,function(e){if("1"==e){a("#ajax-response").empty();f.fadeOut("normal",function(){f.remove()});a('select#parent option[value="'+d.match(/tag_ID=(\d+)/)[1]+'"]').remove();a("a.tag-link-"+d.match(/tag_ID=(\d+)/)[1]).remove()}else{if("-1"==e){a("#ajax-response").empty().append('<div class="error"><p>'+tagsl10n.noPerm+"</p></div>");f.children().css("backgroundColor","")}else{a("#ajax-response").empty().append('<div class="error"><p>'+tagsl10n.broken+"</p></div>");f.children().css("backgroundColor","")}}});f.children().css("backgroundColor","#f33")}return false});a("#submit").click(function(){var b=a(this).parents("form");if(!validateForm(b)){return false}a.post(ajaxurl,a("#addtag").serialize(),function(h){a("#ajax-response").empty();var f=wpAjax.parseAjaxResponse(h,"ajax-response");if(!f){return}var g=b.find("select#parent").val();if(g>0&&a("#tag-"+g).length>0){a(".tags #tag-"+g).after(f.responses[0].supplemental.noparents)}else{a(".tags").prepend(f.responses[0].supplemental.parents)}a(".tags .no-items").remove();if(b.find("select#parent")){var e=f.responses[1].supplemental;var c="";for(var d=0;d<f.responses[1].position;d++){c+=" "}b.find("select#parent option:selected").after('<option value="'+e.term_id+'">'+c+e.name+"</option>")}a('input[type="text"]:visible, textarea:visible',b).val("")});return false})}); \ No newline at end of file +jQuery(document).ready(function(a){a(".delete-tag").live("click",function(g){var b=a(this),f=b.parents("tr"),c=true,d;if("undefined"!=showNotice){c=showNotice.warn()}if(c){d=b.attr("href").replace(/[^?]*\?/,"").replace(/action=delete/,"action=delete-tag");a.post(ajaxurl,d,function(e){if("1"==e){a("#ajax-response").empty();f.fadeOut("normal",function(){f.remove()});a('select#parent option[value="'+d.match(/tag_ID=(\d+)/)[1]+'"]').remove();a("a.tag-link-"+d.match(/tag_ID=(\d+)/)[1]).remove()}else{if("-1"==e){a("#ajax-response").empty().append('<div class="error"><p>'+tagsl10n.noPerm+"</p></div>");f.children().css("backgroundColor","")}else{a("#ajax-response").empty().append('<div class="error"><p>'+tagsl10n.broken+"</p></div>");f.children().css("backgroundColor","")}}});f.children().css("backgroundColor","#f33")}return false});a("#submit").click(function(){var b=a(this).parents("form");if(!validateForm(b)){return false}a.post(ajaxurl,a("#addtag").serialize(),function(h){a("#ajax-response").empty();var f=wpAjax.parseAjaxResponse(h,"ajax-response");if(!f||f.errors){return}var g=b.find("select#parent").val();if(g>0&&a("#tag-"+g).length>0){a(".tags #tag-"+g).after(f.responses[0].supplemental.noparents)}else{a(".tags").prepend(f.responses[0].supplemental.parents)}a(".tags .no-items").remove();if(b.find("select#parent")){var e=f.responses[1].supplemental;var c="";for(var d=0;d<f.responses[1].position;d++){c+=" "}b.find("select#parent option:selected").after('<option value="'+e.term_id+'">'+c+e.name+"</option>")}a('input[type="text"]:visible, textarea:visible',b).val("")});return false})}); \ No newline at end of file diff --git a/wp-admin/js/theme-preview.dev.js b/wp-admin/js/theme-preview.dev.js index 6ba654292..b7959c501 100644 --- a/wp-admin/js/theme-preview.dev.js +++ b/wp-admin/js/theme-preview.dev.js @@ -53,12 +53,4 @@ jQuery(document).ready(function($) { return false; } ); - - // Theme details - $('.theme-detail').click(function () { - $(this).siblings('.themedetaildiv').toggle(); - return false; - }); - }); - diff --git a/wp-admin/js/theme-preview.js b/wp-admin/js/theme-preview.js index f942b51fd..782119010 100644 --- a/wp-admin/js/theme-preview.js +++ b/wp-admin/js/theme-preview.js @@ -1 +1 @@ -var thickDims,tbWidth,tbHeight;jQuery(document).ready(function(a){thickDims=function(){var f=a("#TB_window"),d=a(window).height(),b=a(window).width(),c,e;c=(tbWidth&&tbWidth<b-90)?tbWidth:b-90;e=(tbHeight&&tbHeight<d-60)?tbHeight:d-60;if(f.size()){f.width(c).height(e);a("#TB_iframeContent").width(c).height(e-27);f.css({"margin-left":"-"+parseInt((c/2),10)+"px"});if(typeof document.body.style.maxWidth!="undefined"){f.css({top:"30px","margin-top":"0"})}}};thickDims();a(window).resize(function(){thickDims()});a("a.thickbox-preview").click(function(){tb_click.call(this);var d=a(this).parents(".available-theme").find(".activatelink"),e="",b=a(this).attr("href"),c,f;if(tbWidth=b.match(/&tbWidth=[0-9]+/)){tbWidth=parseInt(tbWidth[0].replace(/[^0-9]+/g,""),10)}else{tbWidth=a(window).width()-90}if(tbHeight=b.match(/&tbHeight=[0-9]+/)){tbHeight=parseInt(tbHeight[0].replace(/[^0-9]+/g,""),10)}else{tbHeight=a(window).height()-60}if(d.length){c=d.attr("href")||"";f=d.attr("title")||"";e=' <a href="'+c+'" target="_top" class="tb-theme-preview-link">'+f+"</a>"}else{f=a(this).attr("title")||"";e=' <span class="tb-theme-preview-link">'+f+"</span>"}a("#TB_title").css({"background-color":"#222",color:"#dfdfdf"});a("#TB_closeAjaxWindow").css({"float":"left"});a("#TB_ajaxWindowTitle").css({"float":"right"}).html(e);a("#TB_iframeContent").width("100%");thickDims();return false});a(".theme-detail").click(function(){a(this).siblings(".themedetaildiv").toggle();return false})}); \ No newline at end of file +var thickDims,tbWidth,tbHeight;jQuery(document).ready(function(a){thickDims=function(){var f=a("#TB_window"),d=a(window).height(),b=a(window).width(),c,e;c=(tbWidth&&tbWidth<b-90)?tbWidth:b-90;e=(tbHeight&&tbHeight<d-60)?tbHeight:d-60;if(f.size()){f.width(c).height(e);a("#TB_iframeContent").width(c).height(e-27);f.css({"margin-left":"-"+parseInt((c/2),10)+"px"});if(typeof document.body.style.maxWidth!="undefined"){f.css({top:"30px","margin-top":"0"})}}};thickDims();a(window).resize(function(){thickDims()});a("a.thickbox-preview").click(function(){tb_click.call(this);var d=a(this).parents(".available-theme").find(".activatelink"),e="",b=a(this).attr("href"),c,f;if(tbWidth=b.match(/&tbWidth=[0-9]+/)){tbWidth=parseInt(tbWidth[0].replace(/[^0-9]+/g,""),10)}else{tbWidth=a(window).width()-90}if(tbHeight=b.match(/&tbHeight=[0-9]+/)){tbHeight=parseInt(tbHeight[0].replace(/[^0-9]+/g,""),10)}else{tbHeight=a(window).height()-60}if(d.length){c=d.attr("href")||"";f=d.attr("title")||"";e=' <a href="'+c+'" target="_top" class="tb-theme-preview-link">'+f+"</a>"}else{f=a(this).attr("title")||"";e=' <span class="tb-theme-preview-link">'+f+"</span>"}a("#TB_title").css({"background-color":"#222",color:"#dfdfdf"});a("#TB_closeAjaxWindow").css({"float":"left"});a("#TB_ajaxWindowTitle").css({"float":"right"}).html(e);a("#TB_iframeContent").width("100%");thickDims();return false})}); \ No newline at end of file diff --git a/wp-admin/js/theme.dev.js b/wp-admin/js/theme.dev.js index c57542956..ae779c680 100644 --- a/wp-admin/js/theme.dev.js +++ b/wp-admin/js/theme.dev.js @@ -1,3 +1,63 @@ +/** + * Theme Browsing + * + * Controls visibility of theme details on manage and install themes pages. + */ +jQuery( function($) { + $('#availablethemes').on( 'click', '.theme-detail', function (event) { + var theme = $(this).closest('.available-theme'), + details = theme.find('.themedetaildiv'); + + if ( ! details.length ) { + details = theme.find('.install-theme-info .theme-details'); + details = details.clone().addClass('themedetaildiv').appendTo( theme ).hide(); + } + + details.toggle(); + event.preventDefault(); + }); +}); + +/** + * Theme Install + * + * Displays theme previews on theme install pages. + */ +jQuery( function($) { + if( ! window.postMessage ) + return; + + var preview = $('#theme-installer'), + info = preview.find('.install-theme-info'), + panel = preview.find('.wp-full-overlay-main'), + body = $( document.body ); + + preview.on( 'click', '.close-full-overlay', function( event ) { + preview.fadeOut( 200, function() { + panel.empty(); + body.removeClass('theme-installer-active full-overlay-active'); + }); + event.preventDefault(); + }); + + preview.on( 'click', '.collapse-sidebar', function( event ) { + preview.toggleClass( 'collapsed' ).toggleClass( 'expanded' ); + event.preventDefault(); + }); + + $('#availablethemes').on( 'click', '.install-theme-preview', function( event ) { + var src; + + info.html( $(this).closest('.installable-theme').find('.install-theme-info').html() ); + src = info.find( '.theme-preview-url' ).val(); + panel.html( '<iframe src="' + src + '" />'); + preview.fadeIn( 200, function() { + body.addClass('theme-installer-active full-overlay-active'); + }); + event.preventDefault(); + }); +}); + var ThemeViewer; (function($){ @@ -45,7 +105,7 @@ var ThemeViewer; init: init }; - return api; + return api; } })(jQuery); @@ -53,3 +113,142 @@ jQuery( document ).ready( function($) { theme_viewer = new ThemeViewer(); theme_viewer.init(); }); + + +/** + * Class that provides infinite scroll for Themes admin screens + * + * @since 3.4 + * + * @uses ajaxurl + * @uses list_args + * @uses theme_list_args + * @uses $('#_ajax_fetch_list_nonce').val() +* */ +var ThemeScroller; +(function($){ + ThemeScroller = { + querying: false, + scrollPollingDelay: 500, + failedRetryDelay: 4000, + outListBottomThreshold: 300, + + /** + * Initializer + * + * @since 3.4 + * @access private + */ + init: function() { + var self = this; + + // Get out early if we don't have the required arguments. + if ( typeof ajaxurl === 'undefined' || + typeof list_args === 'undefined' || + typeof theme_list_args === 'undefined' ) { + $('.pagination-links').show(); + return; + } + + // Handle inputs + this.nonce = $('#_ajax_fetch_list_nonce').val(); + this.nextPage = ( theme_list_args.paged + 1 ); + + // Cache jQuery selectors + this.$outList = $('#availablethemes'); + this.$spinner = $('div.tablenav.bottom').children( 'img.ajax-loading' ); + this.$window = $(window); + this.$document = $(document); + + /** + * If there are more pages to query, then start polling to track + * when user hits the bottom of the current page + */ + if ( theme_list_args.total_pages >= this.nextPage ) + this.pollInterval = + setInterval( function() { + return self.poll(); + }, this.scrollPollingDelay ); + }, + + /** + * Checks to see if user has scrolled to bottom of page. + * If so, requests another page of content from self.ajax(). + * + * @since 3.4 + * @access private + */ + poll: function() { + var bottom = this.$document.scrollTop() + this.$window.innerHeight(); + + if ( this.querying || + ( bottom < this.$outList.height() - this.outListBottomThreshold ) ) + return; + + this.ajax(); + }, + + /** + * Applies results passed from this.ajax() to $outList + * + * @since 3.4 + * @access private + * + * @param results Array with results from this.ajax() query. + */ + process: function( results ) { + if ( results === undefined ) { + clearInterval( this.pollInterval ); + return; + } + + if ( this.nextPage > theme_list_args.total_pages ) + clearInterval( this.pollInterval ); + + if ( this.nextPage <= ( theme_list_args.total_pages + 1 ) ) + this.$outList.append( results.rows ); + }, + + /** + * Queries next page of themes + * + * @since 3.4 + * @access private + */ + ajax: function() { + var self = this; + + this.querying = true; + + var query = { + action: 'fetch-list', + paged: this.nextPage, + s: theme_list_args.search, + tab: theme_list_args.tab, + type: theme_list_args.type, + _ajax_fetch_list_nonce: this.nonce, + 'features[]': theme_list_args.features, + 'list_args': list_args + }; + + this.$spinner.css( 'visibility', 'visible' ); + $.getJSON( ajaxurl, query ) + .done( function( response ) { + self.nextPage++; + self.process( response ); + self.$spinner.css( 'visibility', 'hidden' ); + self.querying = false; + }) + .fail( function() { + self.$spinner.css( 'visibility', 'hidden' ); + self.querying = false; + setTimeout( function() { self.ajax(); }, self.failedRetryDelay ); + }); + } + } + + $(document).ready( function($) { + ThemeScroller.init(); + }); + +})(jQuery); diff --git a/wp-admin/js/theme.js b/wp-admin/js/theme.js index bc076f738..fcfd80904 100644 --- a/wp-admin/js/theme.js +++ b/wp-admin/js/theme.js @@ -1 +1 @@ -var ThemeViewer;(function(a){ThemeViewer=function(b){function d(){a("#filter-click, #mini-filter-click").unbind("click").click(function(){a("#filter-click").toggleClass("current");a("#filter-box").slideToggle();a("#current-theme").slideToggle(300);return false});a("#filter-box :checkbox").unbind("click").click(function(){var e=a("#filter-box :checked").length,f=a("#filter-click").text();if(f.indexOf("(")!=-1){f=f.substr(0,f.indexOf("("))}if(e==0){a("#filter-click").text(f)}else{a("#filter-click").text(f+" ("+e+")")}})}var c={init:d};return c}})(jQuery);jQuery(document).ready(function(a){theme_viewer=new ThemeViewer();theme_viewer.init()}); \ No newline at end of file +jQuery(function(a){a("#availablethemes").on("click",".theme-detail",function(c){var d=a(this).closest(".available-theme"),b=d.find(".themedetaildiv");if(!b.length){b=d.find(".install-theme-info .theme-details");b=b.clone().addClass("themedetaildiv").appendTo(d).hide()}b.toggle();c.preventDefault()})});jQuery(function(c){if(!window.postMessage){return}var e=c("#theme-installer"),d=e.find(".install-theme-info"),b=e.find(".wp-full-overlay-main"),a=c(document.body);e.on("click",".close-full-overlay",function(f){e.fadeOut(200,function(){b.empty();a.removeClass("theme-installer-active full-overlay-active")});f.preventDefault()});e.on("click",".collapse-sidebar",function(f){e.toggleClass("collapsed").toggleClass("expanded");f.preventDefault()});c("#availablethemes").on("click",".install-theme-preview",function(f){var g;d.html(c(this).closest(".installable-theme").find(".install-theme-info").html());g=d.find(".theme-preview-url").val();b.html('<iframe src="'+g+'" />');e.fadeIn(200,function(){a.addClass("theme-installer-active full-overlay-active")});f.preventDefault()})});var ThemeViewer;(function(a){ThemeViewer=function(b){function d(){a("#filter-click, #mini-filter-click").unbind("click").click(function(){a("#filter-click").toggleClass("current");a("#filter-box").slideToggle();a("#current-theme").slideToggle(300);return false});a("#filter-box :checkbox").unbind("click").click(function(){var e=a("#filter-box :checked").length,f=a("#filter-click").text();if(f.indexOf("(")!=-1){f=f.substr(0,f.indexOf("("))}if(e==0){a("#filter-click").text(f)}else{a("#filter-click").text(f+" ("+e+")")}})}var c={init:d};return c}})(jQuery);jQuery(document).ready(function(a){theme_viewer=new ThemeViewer();theme_viewer.init()});var ThemeScroller;(function(a){ThemeScroller={querying:false,scrollPollingDelay:500,failedRetryDelay:4000,outListBottomThreshold:300,init:function(){var b=this;if(typeof ajaxurl==="undefined"||typeof list_args==="undefined"||typeof theme_list_args==="undefined"){a(".pagination-links").show();return}this.nonce=a("#_ajax_fetch_list_nonce").val();this.nextPage=(theme_list_args.paged+1);this.$outList=a("#availablethemes");this.$spinner=a("div.tablenav.bottom").children("img.ajax-loading");this.$window=a(window);this.$document=a(document);if(theme_list_args.total_pages>=this.nextPage){this.pollInterval=setInterval(function(){return b.poll()},this.scrollPollingDelay)}},poll:function(){var b=this.$document.scrollTop()+this.$window.innerHeight();if(this.querying||(b<this.$outList.height()-this.outListBottomThreshold)){return}this.ajax()},process:function(b){if(b===undefined){clearInterval(this.pollInterval);return}if(this.nextPage>theme_list_args.total_pages){clearInterval(this.pollInterval)}if(this.nextPage<=(theme_list_args.total_pages+1)){this.$outList.append(b.rows)}},ajax:function(){var b=this;this.querying=true;var c={action:"fetch-list",paged:this.nextPage,s:theme_list_args.search,tab:theme_list_args.tab,type:theme_list_args.type,_ajax_fetch_list_nonce:this.nonce,"features[]":theme_list_args.features,list_args:list_args};this.$spinner.css("visibility","visible");a.getJSON(ajaxurl,c).done(function(d){b.nextPage++;b.process(d);b.$spinner.css("visibility","hidden");b.querying=false}).fail(function(){b.$spinner.css("visibility","hidden");b.querying=false;setTimeout(function(){b.ajax()},b.failedRetryDelay)})}};a(document).ready(function(b){ThemeScroller.init()})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/user-profile.dev.js b/wp-admin/js/user-profile.dev.js index 3c60a4593..bd4885525 100644 --- a/wp-admin/js/user-profile.dev.js +++ b/wp-admin/js/user-profile.dev.js @@ -29,39 +29,50 @@ } } - $(document).ready(function() { + $(document).ready( function() { + var select = $('#display_name'); + $('#pass1').val('').keyup( check_pass_strength ); $('#pass2').val('').keyup( check_pass_strength ); $('#pass-strength-result').show(); - $('.color-palette').click(function(){$(this).siblings('input[name="admin_color"]').prop('checked', true)}); - $('#first_name, #last_name, #nickname').blur(function(){ - var select = $('#display_name'), current = select.find('option:selected').attr('id'), dub = [], - inputs = { - display_nickname : $('#nickname').val(), - display_username : $('#user_login').val(), - display_firstname : $('#first_name').val(), - display_lastname : $('#last_name').val() - }; - - if ( inputs.display_firstname && inputs.display_lastname ) { - inputs['display_firstlast'] = inputs.display_firstname + ' ' + inputs.display_lastname; - inputs['display_lastfirst'] = inputs.display_lastname + ' ' + inputs.display_firstname; - } + $('.color-palette').click( function() { + $(this).siblings('input[name="admin_color"]').prop('checked', true); + }); - $('option', select).remove(); - $.each(inputs, function( id, value ) { - var val = value.replace(/<\/?[a-z][^>]*>/gi, ''); + if ( select.length ) { + $('#first_name, #last_name, #nickname').bind( 'blur.user_profile', function() { + var dub = [], + inputs = { + display_nickname : $('#nickname').val() || '', + display_username : $('#user_login').val() || '', + display_firstname : $('#first_name').val() || '', + display_lastname : $('#last_name').val() || '' + }; - if ( inputs[id].length && $.inArray( val, dub ) == -1 ) { - dub.push(val); - $('<option />', { - 'id': id, - 'text': val, - 'selected': (id == current) - }).appendTo( select ); + if ( inputs.display_firstname && inputs.display_lastname ) { + inputs['display_firstlast'] = inputs.display_firstname + ' ' + inputs.display_lastname; + inputs['display_lastfirst'] = inputs.display_lastname + ' ' + inputs.display_firstname; } + + $.each( $('option', select), function( i, el ){ + dub.push( el.value ); + }); + + $.each(inputs, function( id, value ) { + if ( ! value ) + return; + + var val = value.replace(/<\/?[a-z][^>]*>/gi, ''); + + if ( inputs[id].length && $.inArray( val, dub ) == -1 ) { + dub.push(val); + $('<option />', { + 'text': val + }).appendTo( select ); + } + }); }); - }); + } }); })(jQuery); diff --git a/wp-admin/js/user-profile.js b/wp-admin/js/user-profile.js index 9f36f78fe..9ae96482d 100644 --- a/wp-admin/js/user-profile.js +++ b/wp-admin/js/user-profile.js @@ -1 +1 @@ -(function(a){function b(){var e=a("#pass1").val(),d=a("#user_login").val(),c=a("#pass2").val(),f;a("#pass-strength-result").removeClass("short bad good strong");if(!e){a("#pass-strength-result").html(pwsL10n.empty);return}f=passwordStrength(e,d,c);switch(f){case 2:a("#pass-strength-result").addClass("bad").html(pwsL10n.bad);break;case 3:a("#pass-strength-result").addClass("good").html(pwsL10n.good);break;case 4:a("#pass-strength-result").addClass("strong").html(pwsL10n.strong);break;case 5:a("#pass-strength-result").addClass("short").html(pwsL10n.mismatch);break;default:a("#pass-strength-result").addClass("short").html(pwsL10n["short"])}}a(document).ready(function(){a("#pass1").val("").keyup(b);a("#pass2").val("").keyup(b);a("#pass-strength-result").show();a(".color-palette").click(function(){a(this).siblings('input[name="admin_color"]').prop("checked",true)});a("#first_name, #last_name, #nickname").blur(function(){var c=a("#display_name"),e=c.find("option:selected").attr("id"),f=[],d={display_nickname:a("#nickname").val(),display_username:a("#user_login").val(),display_firstname:a("#first_name").val(),display_lastname:a("#last_name").val()};if(d.display_firstname&&d.display_lastname){d.display_firstlast=d.display_firstname+" "+d.display_lastname;d.display_lastfirst=d.display_lastname+" "+d.display_firstname}a("option",c).remove();a.each(d,function(i,g){var h=g.replace(/<\/?[a-z][^>]*>/gi,"");if(d[i].length&&a.inArray(h,f)==-1){f.push(h);a("<option />",{id:i,text:h,selected:(i==e)}).appendTo(c)}})})})})(jQuery); \ No newline at end of file +(function(a){function b(){var e=a("#pass1").val(),d=a("#user_login").val(),c=a("#pass2").val(),f;a("#pass-strength-result").removeClass("short bad good strong");if(!e){a("#pass-strength-result").html(pwsL10n.empty);return}f=passwordStrength(e,d,c);switch(f){case 2:a("#pass-strength-result").addClass("bad").html(pwsL10n.bad);break;case 3:a("#pass-strength-result").addClass("good").html(pwsL10n.good);break;case 4:a("#pass-strength-result").addClass("strong").html(pwsL10n.strong);break;case 5:a("#pass-strength-result").addClass("short").html(pwsL10n.mismatch);break;default:a("#pass-strength-result").addClass("short").html(pwsL10n["short"])}}a(document).ready(function(){var c=a("#display_name");a("#pass1").val("").keyup(b);a("#pass2").val("").keyup(b);a("#pass-strength-result").show();a(".color-palette").click(function(){a(this).siblings('input[name="admin_color"]').prop("checked",true)});if(c.length){a("#first_name, #last_name, #nickname").bind("blur.user_profile",function(){var e=[],d={display_nickname:a("#nickname").val()||"",display_username:a("#user_login").val()||"",display_firstname:a("#first_name").val()||"",display_lastname:a("#last_name").val()||""};if(d.display_firstname&&d.display_lastname){d.display_firstlast=d.display_firstname+" "+d.display_lastname;d.display_lastfirst=d.display_lastname+" "+d.display_firstname}a.each(a("option",c),function(f,g){e.push(g.value)});a.each(d,function(h,f){if(!f){return}var g=f.replace(/<\/?[a-z][^>]*>/gi,"");if(d[h].length&&a.inArray(g,e)==-1){e.push(g);a("<option />",{text:g}).appendTo(c)}})})}})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/user-suggest.dev.js b/wp-admin/js/user-suggest.dev.js new file mode 100644 index 000000000..0bcfada4b --- /dev/null +++ b/wp-admin/js/user-suggest.dev.js @@ -0,0 +1,13 @@ +(function($) { + var id = 'undefined' !== typeof current_site_id ? '&site_id=' + current_site_id : ''; + $(document).ready( function() { + $( '.wp-suggest-user' ).autocomplete({ + source: ajaxurl + '?action=autocomplete-user&autocomplete_type=add' + id, + delay: 500, + minLength: 2, + position: ( 'undefined' !== typeof isRtl && isRtl ) ? { my: 'right top', at: 'right bottom', offset: '0, -1' } : { offset: '0, -1' }, + open: function() { $(this).addClass('open'); }, + close: function() { $(this).removeClass('open'); } + }); + }); +})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/user-suggest.js b/wp-admin/js/user-suggest.js new file mode 100644 index 000000000..5f17b528d --- /dev/null +++ b/wp-admin/js/user-suggest.js @@ -0,0 +1 @@ +(function(a){var b="undefined"!==typeof current_site_id?"&site_id="+current_site_id:"";a(document).ready(function(){a(".wp-suggest-user").autocomplete({source:ajaxurl+"?action=autocomplete-user&autocomplete_type=add"+b,delay:500,minLength:2,position:("undefined"!==typeof isRtl&&isRtl)?{my:"right top",at:"right bottom",offset:"0, -1"}:{offset:"0, -1"},open:function(){a(this).addClass("open")},close:function(){a(this).removeClass("open")}})})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/utils.dev.js b/wp-admin/js/utils.dev.js index 30446c1de..d7566362a 100644 --- a/wp-admin/js/utils.dev.js +++ b/wp-admin/js/utils.dev.js @@ -3,23 +3,23 @@ var wpCookies = { // The following functions are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL. - each : function(o, cb, s) { + each : function(obj, cb, scope) { var n, l; - if (!o) + if ( !obj ) return 0; - s = s || o; + scope = scope || obj; - if (typeof(o.length) != 'undefined') { - for (n=0, l = o.length; n<l; n++) { - if (cb.call(s, o[n], n, o) === false) + if ( typeof(obj.length) != 'undefined' ) { + for ( n = 0, l = obj.length; n < l; n++ ) { + if ( cb.call(scope, obj[n], n, obj) === false ) return 0; } } else { - for (n in o) { - if (o.hasOwnProperty(n)) { - if (cb.call(s, o[n], n, o) === false) { + for ( n in obj ) { + if ( obj.hasOwnProperty(n) ) { + if ( cb.call(scope, obj[n], n, obj) === false ) { return 0; } } @@ -28,78 +28,108 @@ var wpCookies = { return 1; }, - getHash : function(n) { - var v = this.get(n), h; - - if (v) { - this.each(v.split('&'), function(v) { - v = v.split('='); - h = h || {}; - h[v[0]] = v[1]; + /** + * Get a multi-values cookie. + * Returns a JS object with the name: 'value' pairs. + */ + getHash : function(name) { + var all = this.get(name), ret; + + if ( all ) { + this.each( all.split('&'), function(pair) { + pair = pair.split('='); + ret = ret || {}; + ret[pair[0]] = pair[1]; }); } - return h; + return ret; }, - setHash : function(n, v, e, p, d, s) { - var o = ''; + /** + * Set a multi-values cookie. + * + * 'values_obj' is the JS object that is stored. It is encoded as URI in wpCookies.set(). + */ + setHash : function(name, values_obj, expires, path, domain, secure) { + var str = ''; - this.each(v, function(v, k) { - o += (!o ? '' : '&') + k + '=' + v; + this.each(values_obj, function(val, key) { + str += (!str ? '' : '&') + key + '=' + val; }); - this.set(n, o, e, p, d, s); + this.set(name, str, expires, path, domain, secure); }, - get : function(n) { - var c = document.cookie, e, p = n + "=", b; + /** + * Get a cookie. + */ + get : function(name) { + var cookie = document.cookie, e, p = name + "=", b; - if (!c) + if ( !cookie ) return; - b = c.indexOf("; " + p); + b = cookie.indexOf("; " + p); - if (b == -1) { - b = c.indexOf(p); + if ( b == -1 ) { + b = cookie.indexOf(p); - if (b != 0) + if ( b != 0 ) return null; } else { b += 2; } - e = c.indexOf(";", b); - - if (e == -1) - e = c.length; + e = cookie.indexOf(";", b); - return decodeURIComponent(c.substring(b + p.length, e)); - }, + if ( e == -1 ) + e = cookie.length; - set : function(n, v, e, p, d, s) { - document.cookie = n + "=" + encodeURIComponent(v) + - ((e) ? "; expires=" + e.toGMTString() : "") + - ((p) ? "; path=" + p : "") + - ((d) ? "; domain=" + d : "") + - ((s) ? "; secure" : ""); + return decodeURIComponent( cookie.substring(b + p.length, e) ); }, - remove : function(n, p) { + /** + * Set a cookie. + * + * The 'expires' arg can be either a JS Date() object set to the expiration date (back-compat) + * or the number of seconds until expiration + */ + set : function(name, value, expires, path, domain, secure) { var d = new Date(); - d.setTime(d.getTime() - 1000); + if ( typeof(expires) == 'object' && expires.toGMTString ) { + expires = expires.toGMTString(); + } else if ( parseInt(expires, 10) ) { + d.setTime( d.getTime() + ( parseInt(expires, 10) * 1000 ) ); // time must be in miliseconds + expires = d.toGMTString(); + } else { + expires = ''; + } + + document.cookie = name + "=" + encodeURIComponent(value) + + ((expires) ? "; expires=" + expires : "") + + ((path) ? "; path=" + path : "") + + ((domain) ? "; domain=" + domain : "") + + ((secure) ? "; secure" : ""); + }, - this.set(n, '', d, p, d); + /** + * Remove a cookie. + * + * This is done by setting it to an empty value and setting the expiration time in the past. + */ + remove : function(name, path) { + this.set(name, '', -1000, path); } }; // Returns the value as string. Second arg or empty string is returned when value is not set. function getUserSetting( name, def ) { - var o = getAllUserSettings(); + var obj = getAllUserSettings(); - if ( o.hasOwnProperty(name) ) - return o[name]; + if ( obj.hasOwnProperty(name) ) + return obj[name]; if ( typeof def != 'undefined' ) return def; @@ -109,24 +139,21 @@ function getUserSetting( name, def ) { // Both name and value must be only ASCII letters, numbers or underscore // and the shorter, the better (cookies can store maximum 4KB). Not suitable to store text. -function setUserSetting( name, value, del ) { +function setUserSetting( name, value, _del ) { if ( 'object' !== typeof userSettings ) return false; - var c = 'wp-settings-' + userSettings.uid, o = wpCookies.getHash(c) || {}, d = new Date(), p, + var cookie = 'wp-settings-' + userSettings.uid, all = wpCookies.getHash(cookie) || {}, path = userSettings.url, n = name.toString().replace(/[^A-Za-z0-9_]/, ''), v = value.toString().replace(/[^A-Za-z0-9_]/, ''); - if ( del ) { - delete o[n]; + if ( _del ) { + delete all[n]; } else { - o[n] = v; + all[n] = v; } - d.setTime( d.getTime() + 31536000000 ); - p = userSettings.url; - - wpCookies.setHash(c, o, d, p); - wpCookies.set('wp-settings-time-'+userSettings.uid, userSettings.time, d, p); + wpCookies.setHash(cookie, all, 31536000, path); + wpCookies.set('wp-settings-time-'+userSettings.uid, userSettings.time, 31536000, path); return name; } diff --git a/wp-admin/js/utils.js b/wp-admin/js/utils.js index 598c2db37..941ac2ef6 100644 --- a/wp-admin/js/utils.js +++ b/wp-admin/js/utils.js @@ -1 +1 @@ -var wpCookies={each:function(d,a,c){var e,b;if(!d){return 0}c=c||d;if(typeof(d.length)!="undefined"){for(e=0,b=d.length;e<b;e++){if(a.call(c,d[e],e,d)===false){return 0}}}else{for(e in d){if(d.hasOwnProperty(e)){if(a.call(c,d[e],e,d)===false){return 0}}}}return 1},getHash:function(c){var a=this.get(c),b;if(a){this.each(a.split("&"),function(d){d=d.split("=");b=b||{};b[d[0]]=d[1]})}return b},setHash:function(i,a,f,c,h,b){var g="";this.each(a,function(e,d){g+=(!g?"":"&")+d+"="+e});this.set(i,g,f,c,h,b)},get:function(h){var g=document.cookie,f,d=h+"=",a;if(!g){return}a=g.indexOf("; "+d);if(a==-1){a=g.indexOf(d);if(a!=0){return null}}else{a+=2}f=g.indexOf(";",a);if(f==-1){f=g.length}return decodeURIComponent(g.substring(a+d.length,f))},set:function(h,a,f,c,g,b){document.cookie=h+"="+encodeURIComponent(a)+((f)?"; expires="+f.toGMTString():"")+((c)?"; path="+c:"")+((g)?"; domain="+g:"")+((b)?"; secure":"")},remove:function(c,a){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,a,b)}};function getUserSetting(a,b){var c=getAllUserSettings();if(c.hasOwnProperty(a)){return c[a]}if(typeof b!="undefined"){return b}return""}function setUserSetting(a,i,k){if("object"!==typeof userSettings){return false}var h="wp-settings-"+userSettings.uid,e=wpCookies.getHash(h)||{},g=new Date(),b,f=a.toString().replace(/[^A-Za-z0-9_]/,""),j=i.toString().replace(/[^A-Za-z0-9_]/,"");if(k){delete e[f]}else{e[f]=j}g.setTime(g.getTime()+31536000000);b=userSettings.url;wpCookies.setHash(h,e,g,b);wpCookies.set("wp-settings-time-"+userSettings.uid,userSettings.time,g,b);return a}function deleteUserSetting(a){return setUserSetting(a,"",1)}function getAllUserSettings(){if("object"!==typeof userSettings){return{}}return wpCookies.getHash("wp-settings-"+userSettings.uid)||{}}; \ No newline at end of file +var wpCookies={each:function(d,a,c){var e,b;if(!d){return 0}c=c||d;if(typeof(d.length)!="undefined"){for(e=0,b=d.length;e<b;e++){if(a.call(c,d[e],e,d)===false){return 0}}}else{for(e in d){if(d.hasOwnProperty(e)){if(a.call(c,d[e],e,d)===false){return 0}}}}return 1},getHash:function(b){var c=this.get(b),a;if(c){this.each(c.split("&"),function(d){d=d.split("=");a=a||{};a[d[0]]=d[1]})}return a},setHash:function(b,c,a,f,d,e){var g="";this.each(c,function(i,h){g+=(!g?"":"&")+h+"="+i});this.set(b,g,a,f,d,e)},get:function(c){var d=document.cookie,g,f=c+"=",a;if(!d){return}a=d.indexOf("; "+f);if(a==-1){a=d.indexOf(f);if(a!=0){return null}}else{a+=2}g=d.indexOf(";",a);if(g==-1){g=d.length}return decodeURIComponent(d.substring(a+f.length,g))},set:function(b,e,a,g,c,f){var h=new Date();if(typeof(a)=="object"&&a.toGMTString){a=a.toGMTString()}else{if(parseInt(a,10)){h.setTime(h.getTime()+(parseInt(a,10)*1000));a=h.toGMTString()}else{a=""}}document.cookie=b+"="+encodeURIComponent(e)+((a)?"; expires="+a:"")+((g)?"; path="+g:"")+((c)?"; domain="+c:"")+((f)?"; secure":"")},remove:function(a,b){this.set(a,"",-1000,b)}};function getUserSetting(a,b){var c=getAllUserSettings();if(c.hasOwnProperty(a)){return c[a]}if(typeof b!="undefined"){return b}return""}function setUserSetting(c,f,b){if("object"!==typeof userSettings){return false}var d="wp-settings-"+userSettings.uid,e=wpCookies.getHash(d)||{},g=userSettings.url,h=c.toString().replace(/[^A-Za-z0-9_]/,""),a=f.toString().replace(/[^A-Za-z0-9_]/,"");if(b){delete e[h]}else{e[h]=a}wpCookies.setHash(d,e,31536000,g);wpCookies.set("wp-settings-time-"+userSettings.uid,userSettings.time,31536000,g);return c}function deleteUserSetting(a){return setUserSetting(a,"",1)}function getAllUserSettings(){if("object"!==typeof userSettings){return{}}return wpCookies.getHash("wp-settings-"+userSettings.uid)||{}}; \ No newline at end of file diff --git a/wp-admin/js/widgets.dev.js b/wp-admin/js/widgets.dev.js index 73b7eeb70..8e3a05dd1 100644 --- a/wp-admin/js/widgets.dev.js +++ b/wp-admin/js/widgets.dev.js @@ -248,12 +248,14 @@ wpWidgets = { }, appendTitle : function(widget) { - var title = $('input[id*="-title"]', widget); - if ( title = title.val() ) { - title = title.replace(/<[^<>]+>/g, '').replace(/</g, '<').replace(/>/g, '>'); - $(widget).children('.widget-top').children('.widget-title').children() - .children('.in-widget-title').html(': ' + title); - } + var title = $('input[id*="-title"]', widget).val() || ''; + + if ( title ) + title = ': ' + title.replace(/<[^<>]+>/g, '').replace(/</g, '<').replace(/>/g, '>'); + + $(widget).children('.widget-top').children('.widget-title').children() + .children('.in-widget-title').html(title); + }, resize : function() { diff --git a/wp-admin/js/widgets.js b/wp-admin/js/widgets.js index f88994f1d..5f741f691 100644 --- a/wp-admin/js/widgets.js +++ b/wp-admin/js/widgets.js @@ -1 +1 @@ -var wpWidgets;(function(a){wpWidgets={init:function(){var f,d=a("div.widgets-sortables"),c=!!("undefined"!=typeof isRtl&&isRtl),e=(isRtl?"marginRight":"marginLeft"),b;a("#widgets-right").children(".widgets-holder-wrap").children(".sidebar-name").click(function(){var h=a(this).siblings(".widgets-sortables"),g=a(this).parent();if(!g.hasClass("closed")){h.sortable("disable");g.addClass("closed")}else{g.removeClass("closed");h.sortable("enable").sortable("refresh")}});a("#widgets-left").children(".widgets-holder-wrap").children(".sidebar-name").click(function(){a(this).parent().toggleClass("closed")});d.each(function(){if(a(this).parent().hasClass("inactive")){return true}var i=50,g=a(this).children(".widget").length;i=i+parseInt(g*48,10);a(this).css("minHeight",i+"px")});a("a.widget-action").live("click",function(){var i={},j=a(this).closest("div.widget"),g=j.children(".widget-inside"),h=parseInt(j.find("input.widget-width").val(),10);if(g.is(":hidden")){if(h>250&&g.closest("div.widgets-sortables").length){i.width=h+30+"px";if(g.closest("div.widget-liquid-right").length){i[e]=235-h+"px"}j.css(i)}wpWidgets.fixLabels(j);g.slideDown("fast")}else{g.slideUp("fast",function(){j.css({width:"",margin:""})})}return false});a("input.widget-control-save").live("click",function(){wpWidgets.save(a(this).closest("div.widget"),0,1,0);return false});a("a.widget-control-remove").live("click",function(){wpWidgets.save(a(this).closest("div.widget"),1,1,0);return false});a("a.widget-control-close").live("click",function(){wpWidgets.close(a(this).closest("div.widget"));return false});d.children(".widget").each(function(){wpWidgets.appendTitle(this);if(a("p.widget-error",this).length){a("a.widget-action",this).click()}});a("#widget-list").children(".widget").draggable({connectToSortable:"div.widgets-sortables",handle:"> .widget-top > .widget-title",distance:2,helper:"clone",zIndex:5,containment:"document",start:function(h,g){g.helper.find("div.widget-description").hide();b=this.id},stop:function(h,g){if(f){a(f).hide()}f=""}});d.sortable({placeholder:"widget-placeholder",items:"> .widget",handle:"> .widget-top > .widget-title",cursor:"move",distance:2,containment:"document",start:function(h,g){g.item.children(".widget-inside").hide();g.item.css({margin:"",width:""})},stop:function(i,g){if(g.item.hasClass("ui-draggable")&&g.item.data("draggable")){g.item.draggable("destroy")}if(g.item.hasClass("deleting")){wpWidgets.save(g.item,1,0,1);g.item.remove();return}var h=g.item.find("input.add_new").val(),l=g.item.find("input.multi_number").val(),k=b,j=a(this).attr("id");g.item.css({margin:"",width:""});b="";if(h){if("multi"==h){g.item.html(g.item.html().replace(/<[^<>]+>/g,function(n){return n.replace(/__i__|%i%/g,l)}));g.item.attr("id",k.replace("__i__",l));l++;a("div#"+k).find("input.multi_number").val(l)}else{if("single"==h){g.item.attr("id","new-"+k);f="div#"+k}}wpWidgets.save(g.item,0,0,1);g.item.find("input.add_new").val("");g.item.find("a.widget-action").click();return}wpWidgets.saveOrder(j)},receive:function(i,h){var g=a(h.sender);if(!a(this).is(":visible")||this.id.indexOf("orphaned_widgets")!=-1){g.sortable("cancel")}if(g.attr("id").indexOf("orphaned_widgets")!=-1&&!g.children(".widget").length){g.parents(".orphan-sidebar").slideUp(400,function(){a(this).remove()})}}}).sortable("option","connectWith","div.widgets-sortables").parent().filter(".closed").children(".widgets-sortables").sortable("disable");a("#available-widgets").droppable({tolerance:"pointer",accept:function(g){return a(g).parent().attr("id")!="widget-list"},drop:function(h,g){g.draggable.addClass("deleting");a("#removing-widget").hide().children("span").html("")},over:function(h,g){g.draggable.addClass("deleting");a("div.widget-placeholder").hide();if(g.draggable.hasClass("ui-sortable-helper")){a("#removing-widget").show().children("span").html(g.draggable.find("div.widget-title").children("h4").html())}},out:function(h,g){g.draggable.removeClass("deleting");a("div.widget-placeholder").show();a("#removing-widget").hide().children("span").html("")}})},saveOrder:function(c){if(c){a("#"+c).closest("div.widgets-holder-wrap").find("img.ajax-feedback").css("visibility","visible")}var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a("div.widgets-sortables").each(function(){if(a(this).sortable){b["sidebars["+a(this).attr("id")+"]"]=a(this).sortable("toArray").join(",")}});a.post(ajaxurl,b,function(){a("img.ajax-feedback").css("visibility","hidden")});this.resize()},save:function(g,d,e,b){var h=g.closest("div.widgets-sortables").attr("id"),f=g.find("form").serialize(),c;g=a(g);a(".ajax-feedback",g).css("visibility","visible");c={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:h};if(d){c.delete_widget=1}f+="&"+a.param(c);a.post(ajaxurl,f,function(i){var j;if(d){if(!a("input.widget_number",g).val()){j=a("input.widget-id",g).val();a("#available-widgets").find("input.widget-id").each(function(){if(a(this).val()==j){a(this).closest("div.widget").show()}})}if(e){b=0;g.slideUp("fast",function(){a(this).remove();wpWidgets.saveOrder()})}else{g.remove();wpWidgets.resize()}}else{a(".ajax-feedback").css("visibility","hidden");if(i&&i.length>2){a("div.widget-content",g).html(i);wpWidgets.appendTitle(g);wpWidgets.fixLabels(g)}}if(b){wpWidgets.saveOrder()}})},appendTitle:function(b){var c=a('input[id*="-title"]',b);if(c=c.val()){c=c.replace(/<[^<>]+>/g,"").replace(/</g,"<").replace(/>/g,">");a(b).children(".widget-top").children(".widget-title").children().children(".in-widget-title").html(": "+c)}},resize:function(){a("div.widgets-sortables").each(function(){if(a(this).parent().hasClass("inactive")){return true}var c=50,b=a(this).children(".widget").length;c=c+parseInt(b*48,10);a(this).css("minHeight",c+"px")})},fixLabels:function(b){b.children(".widget-inside").find("label").each(function(){var c=a(this).attr("for");if(c&&c==a("input",this).attr("id")){a(this).removeAttr("for")}})},close:function(b){b.children(".widget-inside").slideUp("fast",function(){b.css({width:"",margin:""})})}};a(document).ready(function(b){wpWidgets.init()})})(jQuery); \ No newline at end of file +var wpWidgets;(function(a){wpWidgets={init:function(){var f,d=a("div.widgets-sortables"),c=!!("undefined"!=typeof isRtl&&isRtl),e=(isRtl?"marginRight":"marginLeft"),b;a("#widgets-right").children(".widgets-holder-wrap").children(".sidebar-name").click(function(){var h=a(this).siblings(".widgets-sortables"),g=a(this).parent();if(!g.hasClass("closed")){h.sortable("disable");g.addClass("closed")}else{g.removeClass("closed");h.sortable("enable").sortable("refresh")}});a("#widgets-left").children(".widgets-holder-wrap").children(".sidebar-name").click(function(){a(this).parent().toggleClass("closed")});d.each(function(){if(a(this).parent().hasClass("inactive")){return true}var i=50,g=a(this).children(".widget").length;i=i+parseInt(g*48,10);a(this).css("minHeight",i+"px")});a("a.widget-action").live("click",function(){var i={},j=a(this).closest("div.widget"),g=j.children(".widget-inside"),h=parseInt(j.find("input.widget-width").val(),10);if(g.is(":hidden")){if(h>250&&g.closest("div.widgets-sortables").length){i.width=h+30+"px";if(g.closest("div.widget-liquid-right").length){i[e]=235-h+"px"}j.css(i)}wpWidgets.fixLabels(j);g.slideDown("fast")}else{g.slideUp("fast",function(){j.css({width:"",margin:""})})}return false});a("input.widget-control-save").live("click",function(){wpWidgets.save(a(this).closest("div.widget"),0,1,0);return false});a("a.widget-control-remove").live("click",function(){wpWidgets.save(a(this).closest("div.widget"),1,1,0);return false});a("a.widget-control-close").live("click",function(){wpWidgets.close(a(this).closest("div.widget"));return false});d.children(".widget").each(function(){wpWidgets.appendTitle(this);if(a("p.widget-error",this).length){a("a.widget-action",this).click()}});a("#widget-list").children(".widget").draggable({connectToSortable:"div.widgets-sortables",handle:"> .widget-top > .widget-title",distance:2,helper:"clone",zIndex:5,containment:"document",start:function(h,g){g.helper.find("div.widget-description").hide();b=this.id},stop:function(h,g){if(f){a(f).hide()}f=""}});d.sortable({placeholder:"widget-placeholder",items:"> .widget",handle:"> .widget-top > .widget-title",cursor:"move",distance:2,containment:"document",start:function(h,g){g.item.children(".widget-inside").hide();g.item.css({margin:"",width:""})},stop:function(i,g){if(g.item.hasClass("ui-draggable")&&g.item.data("draggable")){g.item.draggable("destroy")}if(g.item.hasClass("deleting")){wpWidgets.save(g.item,1,0,1);g.item.remove();return}var h=g.item.find("input.add_new").val(),l=g.item.find("input.multi_number").val(),k=b,j=a(this).attr("id");g.item.css({margin:"",width:""});b="";if(h){if("multi"==h){g.item.html(g.item.html().replace(/<[^<>]+>/g,function(n){return n.replace(/__i__|%i%/g,l)}));g.item.attr("id",k.replace("__i__",l));l++;a("div#"+k).find("input.multi_number").val(l)}else{if("single"==h){g.item.attr("id","new-"+k);f="div#"+k}}wpWidgets.save(g.item,0,0,1);g.item.find("input.add_new").val("");g.item.find("a.widget-action").click();return}wpWidgets.saveOrder(j)},receive:function(i,h){var g=a(h.sender);if(!a(this).is(":visible")||this.id.indexOf("orphaned_widgets")!=-1){g.sortable("cancel")}if(g.attr("id").indexOf("orphaned_widgets")!=-1&&!g.children(".widget").length){g.parents(".orphan-sidebar").slideUp(400,function(){a(this).remove()})}}}).sortable("option","connectWith","div.widgets-sortables").parent().filter(".closed").children(".widgets-sortables").sortable("disable");a("#available-widgets").droppable({tolerance:"pointer",accept:function(g){return a(g).parent().attr("id")!="widget-list"},drop:function(h,g){g.draggable.addClass("deleting");a("#removing-widget").hide().children("span").html("")},over:function(h,g){g.draggable.addClass("deleting");a("div.widget-placeholder").hide();if(g.draggable.hasClass("ui-sortable-helper")){a("#removing-widget").show().children("span").html(g.draggable.find("div.widget-title").children("h4").html())}},out:function(h,g){g.draggable.removeClass("deleting");a("div.widget-placeholder").show();a("#removing-widget").hide().children("span").html("")}})},saveOrder:function(c){if(c){a("#"+c).closest("div.widgets-holder-wrap").find("img.ajax-feedback").css("visibility","visible")}var b={action:"widgets-order",savewidgets:a("#_wpnonce_widgets").val(),sidebars:[]};a("div.widgets-sortables").each(function(){if(a(this).sortable){b["sidebars["+a(this).attr("id")+"]"]=a(this).sortable("toArray").join(",")}});a.post(ajaxurl,b,function(){a("img.ajax-feedback").css("visibility","hidden")});this.resize()},save:function(g,d,e,b){var h=g.closest("div.widgets-sortables").attr("id"),f=g.find("form").serialize(),c;g=a(g);a(".ajax-feedback",g).css("visibility","visible");c={action:"save-widget",savewidgets:a("#_wpnonce_widgets").val(),sidebar:h};if(d){c.delete_widget=1}f+="&"+a.param(c);a.post(ajaxurl,f,function(i){var j;if(d){if(!a("input.widget_number",g).val()){j=a("input.widget-id",g).val();a("#available-widgets").find("input.widget-id").each(function(){if(a(this).val()==j){a(this).closest("div.widget").show()}})}if(e){b=0;g.slideUp("fast",function(){a(this).remove();wpWidgets.saveOrder()})}else{g.remove();wpWidgets.resize()}}else{a(".ajax-feedback").css("visibility","hidden");if(i&&i.length>2){a("div.widget-content",g).html(i);wpWidgets.appendTitle(g);wpWidgets.fixLabels(g)}}if(b){wpWidgets.saveOrder()}})},appendTitle:function(b){var c=a('input[id*="-title"]',b).val()||"";if(c){c=": "+c.replace(/<[^<>]+>/g,"").replace(/</g,"<").replace(/>/g,">")}a(b).children(".widget-top").children(".widget-title").children().children(".in-widget-title").html(c)},resize:function(){a("div.widgets-sortables").each(function(){if(a(this).parent().hasClass("inactive")){return true}var c=50,b=a(this).children(".widget").length;c=c+parseInt(b*48,10);a(this).css("minHeight",c+"px")})},fixLabels:function(b){b.children(".widget-inside").find("label").each(function(){var c=a(this).attr("for");if(c&&c==a("input",this).attr("id")){a(this).removeAttr("for")}})},close:function(b){b.children(".widget-inside").slideUp("fast",function(){b.css({width:"",margin:""})})}};a(document).ready(function(b){wpWidgets.init()})})(jQuery); \ No newline at end of file diff --git a/wp-admin/js/word-count.dev.js b/wp-admin/js/word-count.dev.js index bb987af0a..b42f5c3b4 100644 --- a/wp-admin/js/word-count.dev.js +++ b/wp-admin/js/word-count.dev.js @@ -1,18 +1,23 @@ - -(function($) { +(function($,undefined) { wpWordCount = { settings : { strip : /<[a-zA-Z\/][^<>]*>/g, // strip HTML tags clean : /[0-9.(),;:!?%#$¿'"_+=\\/-]+/g, // regexp to remove punctuation, etc. - count : /\S\s+/g // counting regexp + w : /\S\s+/g, // word-counting regexp + c : /\S/g // char-counting regexp for asian languages }, block : 0, - wc : function(tx) { + wc : function(tx, type) { var t = this, w = $('.word-count'), tc = 0; + if ( type === undefined ) + type = wordCountL10n.type; + if ( type !== 'w' && type !== 'c' ) + type = 'w'; + if ( t.block ) return; @@ -22,7 +27,7 @@ if ( tx ) { tx = tx.replace( t.settings.strip, ' ' ).replace( / | /gi, ' ' ); tx = tx.replace( t.settings.clean, '' ); - tx.replace( t.settings.count, function(){tc++;} ); + tx.replace( t.settings[type], function(){tc++;} ); } w.html(tc.toString()); diff --git a/wp-admin/js/word-count.js b/wp-admin/js/word-count.js index dbd884460..ad5db1bf8 100644 --- a/wp-admin/js/word-count.js +++ b/wp-admin/js/word-count.js @@ -1 +1 @@ -(function(a){wpWordCount={settings:{strip:/<[a-zA-Z\/][^<>]*>/g,clean:/[0-9.(),;:!?%#$¿'"_+=\\/-]+/g,count:/\S\s+/g},block:0,wc:function(d){var e=this,c=a(".word-count"),b=0;if(e.block){return}e.block=1;setTimeout(function(){if(d){d=d.replace(e.settings.strip," ").replace(/ | /gi," ");d=d.replace(e.settings.clean,"");d.replace(e.settings.count,function(){b++})}c.html(b.toString());setTimeout(function(){e.block=0},2000)},1)}};a(document).bind("wpcountwords",function(c,b){wpWordCount.wc(b)})}(jQuery)); \ No newline at end of file +(function(a,b){wpWordCount={settings:{strip:/<[a-zA-Z\/][^<>]*>/g,clean:/[0-9.(),;:!?%#$¿'"_+=\\/-]+/g,w:/\S\s+/g,c:/\S/g},block:0,wc:function(e,g){var f=this,d=a(".word-count"),c=0;if(g===b){g=wordCountL10n.type}if(g!=="w"&&g!=="c"){g="w"}if(f.block){return}f.block=1;setTimeout(function(){if(e){e=e.replace(f.settings.strip," ").replace(/ | /gi," ");e=e.replace(f.settings.clean,"");e.replace(f.settings[g],function(){c++})}d.html(c.toString());setTimeout(function(){f.block=0},2000)},1)}};a(document).bind("wpcountwords",function(d,c){wpWordCount.wc(c)})}(jQuery)); \ No newline at end of file diff --git a/wp-admin/js/wp-fullscreen.dev.js b/wp-admin/js/wp-fullscreen.dev.js index 9ebfb6ae6..4d4d8c487 100644 --- a/wp-admin/js/wp-fullscreen.dev.js +++ b/wp-admin/js/wp-fullscreen.dev.js @@ -138,21 +138,17 @@ PubSub.prototype.publish = function( topic, args ) { return; // Settings can be added or changed by defining "wp_fullscreen_settings" JS object. - // This can be done by defining it as PHP associative array, json encoding it and passing it to JS with: - // wp_add_script_before( 'wp-fullscreen', 'wp_fullscreen_settings = ' . $json_encoded_array . ';' ); if ( typeof(wp_fullscreen_settings) == 'object' ) $.extend( s, wp_fullscreen_settings ); s.editor_id = wpActiveEditor || 'content'; - if ( !s.title_id ) { - if ( $('input#title').length && s.editor_id == 'content' ) - s.title_id = 'title'; - else if ( $('input#' + s.editor_id + '-title').length ) // the title input field should have [editor_id]-title HTML ID to be auto detected - s.title_id = s.editor_id + '-title'; - else - $('#wp-fullscreen-title, #wp-fullscreen-title-prompt-text').hide(); - } + if ( $('input#title').length && s.editor_id == 'content' ) + s.title_id = 'title'; + else if ( $('input#' + s.editor_id + '-title').length ) // the title input field should have [editor_id]-title HTML ID to be auto detected + s.title_id = s.editor_id + '-title'; + else + $('#wp-fullscreen-title, #wp-fullscreen-title-prompt-text').hide(); s.mode = $('#' + s.editor_id).is(':hidden') ? 'tinymce' : 'html'; s.qt_canvas = $('#' + s.editor_id).get(0); @@ -708,7 +704,6 @@ PubSub.prototype.publish = function( topic, args ) { })() }; - /** * Resize API * diff --git a/wp-admin/js/wp-fullscreen.js b/wp-admin/js/wp-fullscreen.js index 6ac49b93b..ac7fb17a9 100644 --- a/wp-admin/js/wp-fullscreen.js +++ b/wp-admin/js/wp-fullscreen.js @@ -1 +1 @@ -var PubSub,fullscreen,wptitlehint;PubSub=function(){this.topics={}};PubSub.prototype.subscribe=function(a,b){if(!this.topics[a]){this.topics[a]=[]}this.topics[a].push(b);return b};PubSub.prototype.unsubscribe=function(b,e){var c,a,d=this.topics[b];if(!d){return e||[]}if(e){for(c=0,a=d.length;c<a;c++){if(e==d[c]){d.splice(c,1)}}return e}else{this.topics[b]=[];return d}};PubSub.prototype.publish=function(c,b){var d,a,e,f=this.topics[c];if(!f){return}b=b||[];for(d=0,a=f.length;d<a;d++){e=(f[d].apply(null,b)===false||e)}return !e};(function(c){var b,e,d,a;fullscreen=b={};e=b.pubsub=new PubSub();timer=0;block=false;a=b.settings={visible:false,mode:"tinymce",editor_id:"content",title_id:"",timer:0,toolbar_shown:false};d=b.bounder=function(l,h,g,j){var k,i;g=g||1250;if(j){k=j.pageY||j.clientY||j.offsetY;i=c(document).scrollTop();if(!j.isDefaultPrevented){k=135+k}if(k-i>120){return}}if(block){return}block=true;setTimeout(function(){block=false},400);if(a.timer){clearTimeout(a.timer)}else{e.publish(l)}function f(){e.publish(h);a.timer=0}a.timer=setTimeout(f,g)};b.on=function(){if(a.visible){return}if(typeof(wp_fullscreen_settings)=="object"){c.extend(a,wp_fullscreen_settings)}a.editor_id=wpActiveEditor||"content";if(!a.title_id){if(c("input#title").length&&a.editor_id=="content"){a.title_id="title"}else{if(c("input#"+a.editor_id+"-title").length){a.title_id=a.editor_id+"-title"}else{c("#wp-fullscreen-title, #wp-fullscreen-title-prompt-text").hide()}}}a.mode=c("#"+a.editor_id).is(":hidden")?"tinymce":"html";a.qt_canvas=c("#"+a.editor_id).get(0);if(!a.element){b.ui.init()}a.is_mce_on=a.has_tinymce&&typeof(tinyMCE.get(a.editor_id))!="undefined";b.ui.fade("show","showing","shown")};b.off=function(){if(!a.visible){return}b.ui.fade("hide","hiding","hidden")};b.switchmode=function(g){var f=a.mode;if(!g||!a.visible||!a.has_tinymce){return f}if(f==g){return f}e.publish("switchMode",[f,g]);a.mode=g;e.publish("switchedMode",[f,g]);return g};b.save=function(){var h=c("#hiddenaction"),f=h.val(),i=c("#wp-fullscreen-save img"),g=c("#wp-fullscreen-save span");i.show();b.savecontent();h.val("wp-fullscreen-save-post");c.post(ajaxurl,c("form#post").serialize(),function(j){i.hide();g.show();setTimeout(function(){g.fadeOut(1000)},3000);if(j.last_edited){c("#wp-fullscreen-save input").attr("title",j.last_edited)}},"json");h.val(f)};b.savecontent=function(){var f,g;if(a.title_id){c("#"+a.title_id).val(c("#wp-fullscreen-title").val())}if(a.mode==="tinymce"&&(f=tinyMCE.get("wp_mce_fullscreen"))){g=f.save()}else{g=c("#wp_mce_fullscreen").val()}c("#"+a.editor_id).val(g);c(document).triggerHandler("wpcountwords",[g])};set_title_hint=function(f){if(!f.val().length){f.siblings("label").css("visibility","")}else{f.siblings("label").css("visibility","hidden")}};b.dfw_width=function(h){var g=c("#wp-fullscreen-wrap"),f=g.width();if(!h){g.width(c("#wp-fullscreen-central-toolbar").width());deleteUserSetting("dfw_width");return}f=h+f;if(f<200||f>1200){return}g.width(f);setUserSetting("dfw_width",f)};e.subscribe("showToolbar",function(){a.toolbars.removeClass("fade-1000").addClass("fade-300");b.fade.In(a.toolbars,300,function(){e.publish("toolbarShown")},true);c("#wp-fullscreen-body").addClass("wp-fullscreen-focus");a.toolbar_shown=true});e.subscribe("hideToolbar",function(){a.toolbars.removeClass("fade-300").addClass("fade-1000");b.fade.Out(a.toolbars,1000,function(){e.publish("toolbarHidden")},true);c("#wp-fullscreen-body").removeClass("wp-fullscreen-focus")});e.subscribe("toolbarShown",function(){a.toolbars.removeClass("fade-300")});e.subscribe("toolbarHidden",function(){a.toolbars.removeClass("fade-1000");a.toolbar_shown=false});e.subscribe("show",function(){var f;if(a.title_id){f=c("#wp-fullscreen-title").val(c("#"+a.title_id).val());set_title_hint(f)}c("#wp-fullscreen-save input").attr("title",c("#last-edit").text());a.textarea_obj.value=a.qt_canvas.value;if(a.has_tinymce&&a.mode==="tinymce"){tinyMCE.execCommand("wpFullScreenInit")}a.orig_y=c(window).scrollTop()});e.subscribe("showing",function(){c(document.body).addClass("fullscreen-active");b.refresh_buttons();c(document).bind("mousemove.fullscreen",function(f){d("showToolbar","hideToolbar",2000,f)});d("showToolbar","hideToolbar",2000);b.bind_resize();setTimeout(b.resize_textarea,200);scrollTo(0,0);c("#wpadminbar").hide()});e.subscribe("shown",function(){var f;a.visible=true;if(a.has_tinymce&&!a.is_mce_on){f=function(g,h){var k=h.getElement(),i=k.value,j=tinyMCEPreInit.mceInit[a.editor_id];if(j&&j.wpautop&&typeof(switchEditors)!="undefined"){k.value=switchEditors.wpautop(k.value)}h.onInit.add(function(l){l.hide();l.getElement().value=i;tinymce.onAddEditor.remove(f)})};tinymce.onAddEditor.add(f);tinyMCE.init(tinyMCEPreInit.mceInit[a.editor_id]);a.is_mce_on=true}wpActiveEditor="wp_mce_fullscreen"});e.subscribe("hide",function(){var f=c("#"+a.editor_id).is(":hidden");if(a.has_tinymce&&a.mode==="tinymce"&&!f){switchEditors.go(a.editor_id,"tmce")}else{if(a.mode==="html"&&f){switchEditors.go(a.editor_id,"html")}}b.savecontent();c(document).unbind(".fullscreen");c(a.textarea_obj).unbind(".grow");if(a.has_tinymce&&a.mode==="tinymce"){tinyMCE.execCommand("wpFullScreenSave")}if(a.title_id){set_title_hint(c("#"+a.title_id))}a.qt_canvas.value=a.textarea_obj.value});e.subscribe("hiding",function(){c(document.body).removeClass("fullscreen-active");scrollTo(0,a.orig_y);c("#wpadminbar").show()});e.subscribe("hidden",function(){a.visible=false;c("#wp_mce_fullscreen, #wp-fullscreen-title").removeAttr("style");if(a.has_tinymce&&a.is_mce_on){tinyMCE.execCommand("wpFullScreenClose")}a.textarea_obj.value="";b.oldheight=0;wpActiveEditor=a.editor_id});e.subscribe("switchMode",function(h,g){var f;if(!a.has_tinymce||!a.is_mce_on){return}f=tinyMCE.get("wp_mce_fullscreen");if(h==="html"&&g==="tinymce"){if(tinyMCE.get(a.editor_id).getParam("wpautop")&&typeof(switchEditors)!="undefined"){a.textarea_obj.value=switchEditors.wpautop(a.textarea_obj.value)}if("undefined"==typeof(f)){tinyMCE.execCommand("wpFullScreenInit")}else{f.show()}}else{if(h==="tinymce"&&g==="html"){if(f){f.hide()}}}});e.subscribe("switchedMode",function(g,f){b.refresh_buttons(true);if(f==="html"){setTimeout(b.resize_textarea,200)}});b.b=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("Bold")}};b.i=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("Italic")}};b.ul=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("InsertUnorderedList")}};b.ol=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("InsertOrderedList")}};b.link=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("WP_Link")}else{wpLink.open()}};b.unlink=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("unlink")}};b.atd=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("mceWritingImprovementTool")}};b.help=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("WP_Help")}};b.blockquote=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("mceBlockQuote")}};b.medialib=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("WP_Medialib")}else{var f=c("#wp-"+a.editor_id+"-media-buttons a.thickbox").attr("href")||"";if(f){tb_show("",f)}}};b.refresh_buttons=function(f){f=f||false;if(a.mode==="html"){c("#wp-fullscreen-mode-bar").removeClass("wp-tmce-mode").addClass("wp-html-mode");if(f){c("#wp-fullscreen-button-bar").fadeOut(150,function(){c(this).addClass("wp-html-mode").fadeIn(150)})}else{c("#wp-fullscreen-button-bar").addClass("wp-html-mode")}}else{if(a.mode==="tinymce"){c("#wp-fullscreen-mode-bar").removeClass("wp-html-mode").addClass("wp-tmce-mode");if(f){c("#wp-fullscreen-button-bar").fadeOut(150,function(){c(this).removeClass("wp-html-mode").fadeIn(150)})}else{c("#wp-fullscreen-button-bar").removeClass("wp-html-mode")}}}};b.ui={init:function(){var f=c("#fullscreen-topbar"),h=c("#wp_mce_fullscreen"),g=0;a.toolbars=f.add(c("#wp-fullscreen-status"));a.element=c("#fullscreen-fader");a.textarea_obj=h[0];a.has_tinymce=typeof(tinymce)!="undefined";if(!a.has_tinymce){c("#wp-fullscreen-mode-bar").hide()}if(wptitlehint&&c("#wp-fullscreen-title").length){wptitlehint("wp-fullscreen-title")}c(document).keyup(function(k){var l=k.keyCode||k.charCode,i,j;if(!fullscreen.settings.visible){return true}if(navigator.platform&&navigator.platform.indexOf("Mac")!=-1){i=k.ctrlKey}else{i=k.altKey}if(27==l){j={event:k,what:"dfw",cb:fullscreen.off,condition:function(){if(c("#TB_window").is(":visible")||c(".wp-dialog").is(":visible")){return false}return true}};if(!jQuery(document).triggerHandler("wp_CloseOnEscape",[j])){fullscreen.off()}}if(i&&(61==l||107==l||187==l)){b.dfw_width(25)}if(i&&(45==l||109==l||189==l)){b.dfw_width(-25)}if(i&&48==l){b.dfw_width(0)}return false});if(typeof(wpWordCount)!="undefined"){h.keyup(function(j){var i=j.keyCode||j.charCode;if(i==g){return true}if(13==i||8==g||46==g){c(document).triggerHandler("wpcountwords",[h.val()])}g=i;return true})}f.mouseenter(function(i){a.toolbars.addClass("fullscreen-make-sticky");c(document).unbind(".fullscreen");clearTimeout(a.timer);a.timer=0}).mouseleave(function(i){a.toolbars.removeClass("fullscreen-make-sticky");if(a.visible){c(document).bind("mousemove.fullscreen",function(j){d("showToolbar","hideToolbar",2000,j)})}})},fade:function(g,f,h){if(!a.element){b.ui.init()}if(g&&!e.publish(g)){return}b.fade.In(a.element,600,function(){if(f){e.publish(f)}b.fade.Out(a.element,600,function(){if(h){e.publish(h)}})})}};b.fade={transitionend:"transitionend webkitTransitionEnd oTransitionEnd",sensitivity:100,In:function(g,h,i,f){i=i||c.noop;h=h||400;f=f||false;if(b.fade.transitions){if(g.is(":visible")){g.addClass("fade-trigger");return g}g.show();g.first().one(this.transitionend,function(){i()});setTimeout(function(){g.addClass("fade-trigger")},this.sensitivity)}else{if(f){g.stop()}g.css("opacity",1);g.first().fadeIn(h,i);if(g.length>1){g.not(":first").fadeIn(h)}}return g},Out:function(g,h,i,f){i=i||c.noop;h=h||400;f=f||false;if(!g.is(":visible")){return g}if(b.fade.transitions){g.first().one(b.fade.transitionend,function(){if(g.hasClass("fade-trigger")){return}g.hide();i()});setTimeout(function(){g.removeClass("fade-trigger")},this.sensitivity)}else{if(f){g.stop()}g.first().fadeOut(h,i);if(g.length>1){g.not(":first").fadeOut(h)}}return g},transitions:(function(){var f=document.documentElement.style;return(typeof(f.WebkitTransition)=="string"||typeof(f.MozTransition)=="string"||typeof(f.OTransition)=="string"||typeof(f.transition)=="string")})()};b.bind_resize=function(){c(a.textarea_obj).bind("keypress.grow click.grow paste.grow",function(){setTimeout(b.resize_textarea,200)})};b.oldheight=0;b.resize_textarea=function(){var f=a.textarea_obj,g;g=f.scrollHeight>300?f.scrollHeight:300;if(g!=b.oldheight){f.style.height=g+"px";b.oldheight=g}}})(jQuery); \ No newline at end of file +var PubSub,fullscreen,wptitlehint;PubSub=function(){this.topics={}};PubSub.prototype.subscribe=function(a,b){if(!this.topics[a]){this.topics[a]=[]}this.topics[a].push(b);return b};PubSub.prototype.unsubscribe=function(b,e){var c,a,d=this.topics[b];if(!d){return e||[]}if(e){for(c=0,a=d.length;c<a;c++){if(e==d[c]){d.splice(c,1)}}return e}else{this.topics[b]=[];return d}};PubSub.prototype.publish=function(c,b){var d,a,e,f=this.topics[c];if(!f){return}b=b||[];for(d=0,a=f.length;d<a;d++){e=(f[d].apply(null,b)===false||e)}return !e};(function(c){var b,e,d,a;fullscreen=b={};e=b.pubsub=new PubSub();timer=0;block=false;a=b.settings={visible:false,mode:"tinymce",editor_id:"content",title_id:"",timer:0,toolbar_shown:false};d=b.bounder=function(l,h,g,j){var k,i;g=g||1250;if(j){k=j.pageY||j.clientY||j.offsetY;i=c(document).scrollTop();if(!j.isDefaultPrevented){k=135+k}if(k-i>120){return}}if(block){return}block=true;setTimeout(function(){block=false},400);if(a.timer){clearTimeout(a.timer)}else{e.publish(l)}function f(){e.publish(h);a.timer=0}a.timer=setTimeout(f,g)};b.on=function(){if(a.visible){return}if(typeof(wp_fullscreen_settings)=="object"){c.extend(a,wp_fullscreen_settings)}a.editor_id=wpActiveEditor||"content";if(c("input#title").length&&a.editor_id=="content"){a.title_id="title"}else{if(c("input#"+a.editor_id+"-title").length){a.title_id=a.editor_id+"-title"}else{c("#wp-fullscreen-title, #wp-fullscreen-title-prompt-text").hide()}}a.mode=c("#"+a.editor_id).is(":hidden")?"tinymce":"html";a.qt_canvas=c("#"+a.editor_id).get(0);if(!a.element){b.ui.init()}a.is_mce_on=a.has_tinymce&&typeof(tinyMCE.get(a.editor_id))!="undefined";b.ui.fade("show","showing","shown")};b.off=function(){if(!a.visible){return}b.ui.fade("hide","hiding","hidden")};b.switchmode=function(g){var f=a.mode;if(!g||!a.visible||!a.has_tinymce){return f}if(f==g){return f}e.publish("switchMode",[f,g]);a.mode=g;e.publish("switchedMode",[f,g]);return g};b.save=function(){var h=c("#hiddenaction"),f=h.val(),i=c("#wp-fullscreen-save img"),g=c("#wp-fullscreen-save span");i.show();b.savecontent();h.val("wp-fullscreen-save-post");c.post(ajaxurl,c("form#post").serialize(),function(j){i.hide();g.show();setTimeout(function(){g.fadeOut(1000)},3000);if(j.last_edited){c("#wp-fullscreen-save input").attr("title",j.last_edited)}},"json");h.val(f)};b.savecontent=function(){var f,g;if(a.title_id){c("#"+a.title_id).val(c("#wp-fullscreen-title").val())}if(a.mode==="tinymce"&&(f=tinyMCE.get("wp_mce_fullscreen"))){g=f.save()}else{g=c("#wp_mce_fullscreen").val()}c("#"+a.editor_id).val(g);c(document).triggerHandler("wpcountwords",[g])};set_title_hint=function(f){if(!f.val().length){f.siblings("label").css("visibility","")}else{f.siblings("label").css("visibility","hidden")}};b.dfw_width=function(h){var g=c("#wp-fullscreen-wrap"),f=g.width();if(!h){g.width(c("#wp-fullscreen-central-toolbar").width());deleteUserSetting("dfw_width");return}f=h+f;if(f<200||f>1200){return}g.width(f);setUserSetting("dfw_width",f)};e.subscribe("showToolbar",function(){a.toolbars.removeClass("fade-1000").addClass("fade-300");b.fade.In(a.toolbars,300,function(){e.publish("toolbarShown")},true);c("#wp-fullscreen-body").addClass("wp-fullscreen-focus");a.toolbar_shown=true});e.subscribe("hideToolbar",function(){a.toolbars.removeClass("fade-300").addClass("fade-1000");b.fade.Out(a.toolbars,1000,function(){e.publish("toolbarHidden")},true);c("#wp-fullscreen-body").removeClass("wp-fullscreen-focus")});e.subscribe("toolbarShown",function(){a.toolbars.removeClass("fade-300")});e.subscribe("toolbarHidden",function(){a.toolbars.removeClass("fade-1000");a.toolbar_shown=false});e.subscribe("show",function(){var f;if(a.title_id){f=c("#wp-fullscreen-title").val(c("#"+a.title_id).val());set_title_hint(f)}c("#wp-fullscreen-save input").attr("title",c("#last-edit").text());a.textarea_obj.value=a.qt_canvas.value;if(a.has_tinymce&&a.mode==="tinymce"){tinyMCE.execCommand("wpFullScreenInit")}a.orig_y=c(window).scrollTop()});e.subscribe("showing",function(){c(document.body).addClass("fullscreen-active");b.refresh_buttons();c(document).bind("mousemove.fullscreen",function(f){d("showToolbar","hideToolbar",2000,f)});d("showToolbar","hideToolbar",2000);b.bind_resize();setTimeout(b.resize_textarea,200);scrollTo(0,0);c("#wpadminbar").hide()});e.subscribe("shown",function(){var f;a.visible=true;if(a.has_tinymce&&!a.is_mce_on){f=function(g,h){var k=h.getElement(),i=k.value,j=tinyMCEPreInit.mceInit[a.editor_id];if(j&&j.wpautop&&typeof(switchEditors)!="undefined"){k.value=switchEditors.wpautop(k.value)}h.onInit.add(function(l){l.hide();l.getElement().value=i;tinymce.onAddEditor.remove(f)})};tinymce.onAddEditor.add(f);tinyMCE.init(tinyMCEPreInit.mceInit[a.editor_id]);a.is_mce_on=true}wpActiveEditor="wp_mce_fullscreen"});e.subscribe("hide",function(){var f=c("#"+a.editor_id).is(":hidden");if(a.has_tinymce&&a.mode==="tinymce"&&!f){switchEditors.go(a.editor_id,"tmce")}else{if(a.mode==="html"&&f){switchEditors.go(a.editor_id,"html")}}b.savecontent();c(document).unbind(".fullscreen");c(a.textarea_obj).unbind(".grow");if(a.has_tinymce&&a.mode==="tinymce"){tinyMCE.execCommand("wpFullScreenSave")}if(a.title_id){set_title_hint(c("#"+a.title_id))}a.qt_canvas.value=a.textarea_obj.value});e.subscribe("hiding",function(){c(document.body).removeClass("fullscreen-active");scrollTo(0,a.orig_y);c("#wpadminbar").show()});e.subscribe("hidden",function(){a.visible=false;c("#wp_mce_fullscreen, #wp-fullscreen-title").removeAttr("style");if(a.has_tinymce&&a.is_mce_on){tinyMCE.execCommand("wpFullScreenClose")}a.textarea_obj.value="";b.oldheight=0;wpActiveEditor=a.editor_id});e.subscribe("switchMode",function(h,g){var f;if(!a.has_tinymce||!a.is_mce_on){return}f=tinyMCE.get("wp_mce_fullscreen");if(h==="html"&&g==="tinymce"){if(tinyMCE.get(a.editor_id).getParam("wpautop")&&typeof(switchEditors)!="undefined"){a.textarea_obj.value=switchEditors.wpautop(a.textarea_obj.value)}if("undefined"==typeof(f)){tinyMCE.execCommand("wpFullScreenInit")}else{f.show()}}else{if(h==="tinymce"&&g==="html"){if(f){f.hide()}}}});e.subscribe("switchedMode",function(g,f){b.refresh_buttons(true);if(f==="html"){setTimeout(b.resize_textarea,200)}});b.b=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("Bold")}};b.i=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("Italic")}};b.ul=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("InsertUnorderedList")}};b.ol=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("InsertOrderedList")}};b.link=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("WP_Link")}else{wpLink.open()}};b.unlink=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("unlink")}};b.atd=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("mceWritingImprovementTool")}};b.help=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("WP_Help")}};b.blockquote=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("mceBlockQuote")}};b.medialib=function(){if(a.has_tinymce&&"tinymce"===a.mode){tinyMCE.execCommand("WP_Medialib")}else{var f=c("#wp-"+a.editor_id+"-media-buttons a.thickbox").attr("href")||"";if(f){tb_show("",f)}}};b.refresh_buttons=function(f){f=f||false;if(a.mode==="html"){c("#wp-fullscreen-mode-bar").removeClass("wp-tmce-mode").addClass("wp-html-mode");if(f){c("#wp-fullscreen-button-bar").fadeOut(150,function(){c(this).addClass("wp-html-mode").fadeIn(150)})}else{c("#wp-fullscreen-button-bar").addClass("wp-html-mode")}}else{if(a.mode==="tinymce"){c("#wp-fullscreen-mode-bar").removeClass("wp-html-mode").addClass("wp-tmce-mode");if(f){c("#wp-fullscreen-button-bar").fadeOut(150,function(){c(this).removeClass("wp-html-mode").fadeIn(150)})}else{c("#wp-fullscreen-button-bar").removeClass("wp-html-mode")}}}};b.ui={init:function(){var f=c("#fullscreen-topbar"),h=c("#wp_mce_fullscreen"),g=0;a.toolbars=f.add(c("#wp-fullscreen-status"));a.element=c("#fullscreen-fader");a.textarea_obj=h[0];a.has_tinymce=typeof(tinymce)!="undefined";if(!a.has_tinymce){c("#wp-fullscreen-mode-bar").hide()}if(wptitlehint&&c("#wp-fullscreen-title").length){wptitlehint("wp-fullscreen-title")}c(document).keyup(function(k){var l=k.keyCode||k.charCode,i,j;if(!fullscreen.settings.visible){return true}if(navigator.platform&&navigator.platform.indexOf("Mac")!=-1){i=k.ctrlKey}else{i=k.altKey}if(27==l){j={event:k,what:"dfw",cb:fullscreen.off,condition:function(){if(c("#TB_window").is(":visible")||c(".wp-dialog").is(":visible")){return false}return true}};if(!jQuery(document).triggerHandler("wp_CloseOnEscape",[j])){fullscreen.off()}}if(i&&(61==l||107==l||187==l)){b.dfw_width(25)}if(i&&(45==l||109==l||189==l)){b.dfw_width(-25)}if(i&&48==l){b.dfw_width(0)}return false});if(typeof(wpWordCount)!="undefined"){h.keyup(function(j){var i=j.keyCode||j.charCode;if(i==g){return true}if(13==i||8==g||46==g){c(document).triggerHandler("wpcountwords",[h.val()])}g=i;return true})}f.mouseenter(function(i){a.toolbars.addClass("fullscreen-make-sticky");c(document).unbind(".fullscreen");clearTimeout(a.timer);a.timer=0}).mouseleave(function(i){a.toolbars.removeClass("fullscreen-make-sticky");if(a.visible){c(document).bind("mousemove.fullscreen",function(j){d("showToolbar","hideToolbar",2000,j)})}})},fade:function(g,f,h){if(!a.element){b.ui.init()}if(g&&!e.publish(g)){return}b.fade.In(a.element,600,function(){if(f){e.publish(f)}b.fade.Out(a.element,600,function(){if(h){e.publish(h)}})})}};b.fade={transitionend:"transitionend webkitTransitionEnd oTransitionEnd",sensitivity:100,In:function(g,h,i,f){i=i||c.noop;h=h||400;f=f||false;if(b.fade.transitions){if(g.is(":visible")){g.addClass("fade-trigger");return g}g.show();g.first().one(this.transitionend,function(){i()});setTimeout(function(){g.addClass("fade-trigger")},this.sensitivity)}else{if(f){g.stop()}g.css("opacity",1);g.first().fadeIn(h,i);if(g.length>1){g.not(":first").fadeIn(h)}}return g},Out:function(g,h,i,f){i=i||c.noop;h=h||400;f=f||false;if(!g.is(":visible")){return g}if(b.fade.transitions){g.first().one(b.fade.transitionend,function(){if(g.hasClass("fade-trigger")){return}g.hide();i()});setTimeout(function(){g.removeClass("fade-trigger")},this.sensitivity)}else{if(f){g.stop()}g.first().fadeOut(h,i);if(g.length>1){g.not(":first").fadeOut(h)}}return g},transitions:(function(){var f=document.documentElement.style;return(typeof(f.WebkitTransition)=="string"||typeof(f.MozTransition)=="string"||typeof(f.OTransition)=="string"||typeof(f.transition)=="string")})()};b.bind_resize=function(){c(a.textarea_obj).bind("keypress.grow click.grow paste.grow",function(){setTimeout(b.resize_textarea,200)})};b.oldheight=0;b.resize_textarea=function(){var f=a.textarea_obj,g;g=f.scrollHeight>300?f.scrollHeight:300;if(g!=b.oldheight){f.style.height=g+"px";b.oldheight=g}}})(jQuery); \ No newline at end of file diff --git a/wp-admin/link-add.php b/wp-admin/link-add.php index 9b1cae7c1..2abd79952 100644 --- a/wp-admin/link-add.php +++ b/wp-admin/link-add.php @@ -23,8 +23,10 @@ wp_reset_vars(array('action', 'cat_id', 'linkurl', 'name', 'image', wp_enqueue_script('link'); wp_enqueue_script('xfn'); +if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); + $link = get_default_link_to_edit(); include('./edit-link-form.php'); require('./admin-footer.php'); -?> diff --git a/wp-admin/link-parse-opml.php b/wp-admin/link-parse-opml.php index e0d9ffaba..f24f420d8 100644 --- a/wp-admin/link-parse-opml.php +++ b/wp-admin/link-parse-opml.php @@ -11,7 +11,7 @@ if ( ! defined('ABSPATH') ) global $opml, $map; -// columns we wish to find are: link_url, link_name, link_target, link_description +// columns we wish to find are: link_url, link_name, link_target, link_description // we need to map XML attribute names to our columns $opml_map = array('URL' => 'link_url', 'HTMLURL' => 'link_url', @@ -94,4 +94,3 @@ if (!xml_parse($xml_parser, $opml, true)) { // Free up memory used by the XML parser xml_parser_free($xml_parser); -?> diff --git a/wp-admin/link.php b/wp-admin/link.php index 922f96ccc..9e2d6a86a 100644 --- a/wp-admin/link.php +++ b/wp-admin/link.php @@ -99,6 +99,9 @@ switch ($action) { wp_enqueue_script('link'); wp_enqueue_script('xfn'); + if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); + $parent_file = 'link-manager.php'; $submenu_file = 'link-manager.php'; $title = __('Edit Link'); @@ -115,4 +118,3 @@ switch ($action) { default : break; } -?> diff --git a/wp-admin/load-scripts.php b/wp-admin/load-scripts.php index 833677c2d..065ea9c9a 100644 --- a/wp-admin/load-scripts.php +++ b/wp-admin/load-scripts.php @@ -21,7 +21,6 @@ function __() {} */ function _x() {} - /** * @ignore */ diff --git a/wp-admin/load-styles.php b/wp-admin/load-styles.php index 4adc3677f..bdacc21ce 100644 --- a/wp-admin/load-styles.php +++ b/wp-admin/load-styles.php @@ -21,7 +21,6 @@ function __() {} */ function _x() {} - /** * @ignore */ diff --git a/wp-admin/maint/repair.php b/wp-admin/maint/repair.php index 3f5718876..e0c594e6a 100644 --- a/wp-admin/maint/repair.php +++ b/wp-admin/maint/repair.php @@ -1,5 +1,10 @@ <?php - +/** + * Database Repair and Optimization Script. + * + * @package WordPress + * @subpackage Database + */ define('WP_REPAIRING', true); require_once('../../wp-load.php'); @@ -10,24 +15,18 @@ header( 'Content-Type: text/html; charset=utf-8' ); <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title><?php _e('WordPress › Database Repair'); ?></title> + <title><?php _e( 'WordPress › Database Repair' ); ?></title> <?php wp_admin_css( 'install', true ); ?> </head> <body> -<h1 id="logo"><img alt="WordPress" src="../images/wordpress-logo.png" /></h1> +<h1 id="logo"><img alt="WordPress" src="../images/wordpress-logo.png?ver=20120216" /></h1> <?php -if ( !defined('WP_ALLOW_REPAIR') ) { - echo '<p>'.__('To allow use of this page to automatically repair database problems, please add the following line to your wp-config.php file. Once this line is added to your config, reload this page.')."</p><code>define('WP_ALLOW_REPAIR', true);</code>"; -} elseif ( isset($_GET['repair']) ) { - check_admin_referer('repair_db'); - - if ( 2 == $_GET['repair'] ) - $optimize = true; - else - $optimize = false; - +if ( ! defined( 'WP_ALLOW_REPAIR' ) ) { + echo '<p>' . __( 'To allow use of this page to automatically repair database problems, please add the following line to your <code>wp-config.php</code> file. Once this line is added to your config, reload this page.' ) . "</p><code>define('WP_ALLOW_REPAIR', true);</code>"; +} elseif ( isset( $_GET['repair'] ) ) { + $optimize = 2 == $_GET['repair']; $okay = true; $problems = array(); @@ -41,71 +40,71 @@ if ( !defined('WP_ALLOW_REPAIR') ) { // Loop over the tables, checking and repairing as needed. foreach ( $tables as $table ) { - $check = $wpdb->get_row("CHECK TABLE $table"); + $check = $wpdb->get_row( "CHECK TABLE $table" ); echo '<p>'; if ( 'OK' == $check->Msg_text ) { /* translators: %s: table name */ - printf( __( 'The %s table is okay.' ), $table ); + printf( __( 'The %s table is okay.' ), "<code>$table</code>" ); } else { /* translators: 1: table name, 2: error message, */ - printf( __( 'The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table…' ) , $table, "<code>$check->Msg_text</code>" ); + printf( __( 'The %1$s table is not okay. It is reporting the following error: %2$s. WordPress will attempt to repair this table…' ) , "<code>$table</code>", "<code>$check->Msg_text</code>" ); - $repair = $wpdb->get_row("REPAIR TABLE $table"); + $repair = $wpdb->get_row( "REPAIR TABLE $table" ); echo '<br /> '; if ( 'OK' == $check->Msg_text ) { /* translators: %s: table name */ - printf( __( 'Successfully repaired the %s table.' ), $table ); + printf( __( 'Successfully repaired the %s table.' ), "<code>$table</code>" ); } else { /* translators: 1: table name, 2: error message, */ - echo sprintf( __( 'Failed to repair the %1$s table. Error: %2$s' ), $table, "<code>$check->Msg_text</code>" ) . '<br />'; + echo sprintf( __( 'Failed to repair the %1$s table. Error: %2$s' ), "<code>$table</code>", "<code>$check->Msg_text</code>" ) . '<br />'; $problems[$table] = $check->Msg_text; $okay = false; } } if ( $okay && $optimize ) { - $check = $wpdb->get_row("ANALYZE TABLE $table"); + $check = $wpdb->get_row( "ANALYZE TABLE $table" ); - echo '<br />  '; + echo '<br /> '; if ( 'Table is already up to date' == $check->Msg_text ) { /* translators: %s: table name */ - printf( __( 'The %s table is already optimized.' ), $table ); + printf( __( 'The %s table is already optimized.' ), "<code>$table</code>" ); } else { - $check = $wpdb->get_row("OPTIMIZE TABLE $table"); + $check = $wpdb->get_row( "OPTIMIZE TABLE $table" ); - echo '<br />  '; + echo '<br /> '; if ( 'OK' == $check->Msg_text || 'Table is already up to date' == $check->Msg_text ) { /* translators: %s: table name */ - printf( __( 'Successfully optimized the %s table.' ), $table ); + printf( __( 'Successfully optimized the %s table.' ), "<code>$table</code>" ); } else { /* translators: 1: table name, 2: error message, */ - printf( __( 'Failed to optimize the %1$s table. Error: %2$s' ), $table, "<code>$check->Msg_text</code>" ); + printf( __( 'Failed to optimize the %1$s table. Error: %2$s' ), "<code>$table</code>", "<code>$check->Msg_text</code>" ); } } } echo '</p>'; } - if ( !empty($problems) ) { - printf('<p>'.__('Some database problems could not be repaired. Please copy-and-paste the following list of errors to the <a href="%s">WordPress support forums</a> to get additional assistance.').'</p>', 'http://wordpress.org/support/forum/3'); - $problem_output = array(); + if ( $problems ) { + printf( '<p>' . __('Some database problems could not be repaired. Please copy-and-paste the following list of errors to the <a href="%s">WordPress support forums</a> to get additional assistance.') . '</p>', __( 'http://wordpress.org/support/forum/how-to-and-troubleshooting' ) ); + $problem_output = ''; foreach ( $problems as $table => $problem ) - $problem_output[] = "$table: $problem"; - echo '<textarea name="errors" id="errors" rows="20" cols="60">' . esc_textarea( implode("\n", $problem_output) ) . '</textarea>'; + $problem_output .= "$table: $problem\n"; + echo '<p><textarea name="errors" id="errors" rows="20" cols="60">' . esc_textarea( $problem_output ) . '</textarea></p>'; } else { - echo '<p>'.__('Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users.')."</p><code>define('WP_ALLOW_REPAIR', true);</code>"; + echo '<p>' . __( 'Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users.' ) . "</p><code>define('WP_ALLOW_REPAIR', true);</code>"; } } else { - if ( isset($_GET['referrer']) && 'is_blog_installed' == $_GET['referrer'] ) - _e('One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the “Repair Database” button. Repairing can take a while, so please be patient.'); + if ( isset( $_GET['referrer'] ) && 'is_blog_installed' == $_GET['referrer'] ) + echo '<p>' . __( 'One or more database tables are unavailable. To allow WordPress to attempt to repair these tables, press the “Repair Database” button. Repairing can take a while, so please be patient.' ) . '</p>'; else - _e('WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient.') + echo '<p>' . __( 'WordPress can automatically look for some common database problems and repair them. Repairing can take a while, so please be patient.' ) . '</p>'; ?> - <p class="step"><a class="button" href="<?php echo wp_nonce_url('repair.php?repair=1', 'repair_db') ?>"><?php _e( 'Repair Database' ); ?></a></p> - <?php _e('WordPress can also attempt to optimize the database. This improves performance in some situations. Repairing and optimizing the database can take a long time and the database will be locked while optimizing.'); ?> - <p class="step"><a class="button" href="<?php echo wp_nonce_url('repair.php?repair=2', 'repair_db') ?>"><?php _e( 'Repair and Optimize Database' ); ?></a></p> + <p class="step"><a class="button" href="repair.php?repair=1"><?php _e( 'Repair Database' ); ?></a></p> + <p><?php _e( 'WordPress can also attempt to optimize the database. This improves performance in some situations. Repairing and optimizing the database can take a long time and the database will be locked while optimizing.' ); ?></p> + <p class="step"><a class="button" href="repair.php?repair=2"><?php _e( 'Repair and Optimize Database' ); ?></a></p> <?php } ?> diff --git a/wp-admin/media-new.php b/wp-admin/media-new.php index a257f9458..4b4f622d9 100644 --- a/wp-admin/media-new.php +++ b/wp-admin/media-new.php @@ -6,14 +6,7 @@ * @subpackage Administration */ -global $is_iphone; - -if ( $is_iphone ) // cannot upload files from iPhone/iPad - return; - $_GET['inline'] = 'true'; /** Administration bootstrap */ require_once('./admin.php'); require_once('./media-upload.php'); - -?> diff --git a/wp-admin/media-upload.php b/wp-admin/media-upload.php index 666c3f37e..6246176b8 100644 --- a/wp-admin/media-upload.php +++ b/wp-admin/media-upload.php @@ -22,6 +22,7 @@ wp_enqueue_script('plupload-handlers'); wp_enqueue_script('image-edit'); wp_enqueue_script('set-post-thumbnail' ); wp_enqueue_style('imgareaselect'); +wp_enqueue_script( 'media-gallery' ); @header('Content-Type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset')); @@ -31,11 +32,14 @@ $post_id = isset($post_id)? (int) $post_id : 0; // Require an ID for the edit screen if ( isset($action) && $action == 'edit' && !$ID ) - wp_die(__("You are not allowed to be here")); + wp_die( __( 'Cheatin’ uh?' ) ); if ( isset($_GET['inline']) ) { $errors = array(); + if ( ! empty( $_REQUEST['post_id'] ) && ! current_user_can( 'edit_post' , $_REQUEST['post_id'] ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + if ( isset($_POST['html-upload']) && !empty($_FILES) ) { check_admin_referer('media-form'); // Upload File button was clicked @@ -58,6 +62,9 @@ if ( isset($_GET['inline']) ) { exit; } + if ( isset( $_REQUEST['post_id'] ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + $title = __('Upload New Media'); $parent_file = 'upload.php'; get_current_screen()->add_help_tab( array( @@ -67,8 +74,8 @@ if ( isset($_GET['inline']) ) { '<p>' . __('You can upload media files here without creating a post first. This allows you to upload files to use with posts and pages later and/or to get a web link for a particular file that you can share. There are three options for uploading files:') . '</p>' . '<ul>' . '<li>' . __('<strong>Drag and drop</strong> your files into the area below. Multiple files are allowed.') . '</li>' . - '<li>' . __('<strong>Select Files</strong> will open the multi-file uploader, or you can use the <strong>Browser Uploader</strong>.') . '</li>' . '<li>' . __('Clicking <strong>Select Files</strong> opens a navigation window showing you files in your operating system. Selecting <strong>Open</strong> after clicking on the file you want activates a progress bar on the uploader screen.') . '</li>' . + '<li>' . __('Revert to the <strong>Browser Uploader</strong> by clicking the link below the drag and drop box.') . '</li>' . '</ul>' . '<p>' . __('Basic image editing is available after upload is complete. Make sure you click Save before leaving this screen.') . '</p>' ) ); @@ -115,6 +122,8 @@ if ( isset($_GET['inline']) ) { include('./admin-footer.php'); } else { + if ( ! empty( $_REQUEST['post_id'] ) && ! current_user_can( 'edit_post' , $_REQUEST['post_id'] ) ) + wp_die( __( 'Cheatin’ uh?' ) ); // upload type: image, video, file, ..? if ( isset($_GET['type']) ) @@ -136,4 +145,3 @@ if ( isset($_GET['inline']) ) { else do_action("media_upload_$tab"); } -?> diff --git a/wp-admin/media.php b/wp-admin/media.php index 1b750d585..15d432387 100644 --- a/wp-admin/media.php +++ b/wp-admin/media.php @@ -59,6 +59,7 @@ case 'edit' : $att = get_post($att_id); if ( empty($att->ID) ) wp_die( __('You attempted to edit an attachment that doesn’t exist. Perhaps it was deleted?') ); + if ( 'attachment' !== $att->post_type ) wp_die( __('You attempted to edit an item that isn’t an attachment. Please go back and try again.') ); if ( $att->post_status == 'trash' ) wp_die( __('You can’t edit this attachment because it is in the Trash. Please move it out of the Trash and try again.') ); add_filter('attachment_fields_to_edit', 'media_single_attachment_fields_to_edit', 10, 2); @@ -144,6 +145,3 @@ default: exit; endswitch; - - -?> diff --git a/wp-admin/menu-header.php b/wp-admin/menu-header.php index cdd81b2ad..017f676ac 100644 --- a/wp-admin/menu-header.php +++ b/wp-admin/menu-header.php @@ -73,6 +73,7 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) { $arrow = '<div class="wp-menu-arrow"><div></div></div>'; $title = wptexturize( $item[0] ); + $aria_label = esc_attr( strip_tags( $item[0] ) ); // strip the comment/plugins/updates bubbles spans but keep the pending number if any echo "\n\t<li$class$id>"; @@ -86,9 +87,9 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) { $menu_file = substr( $menu_file, 0, $pos ); if ( ! empty( $menu_hook ) || ( ('index.php' != $submenu_items[0][2]) && file_exists( WP_PLUGIN_DIR . "/$menu_file" ) ) ) { $admin_is_parent = true; - echo "<div class='wp-menu-image'><a href='admin.php?page={$submenu_items[0][2]}'>$img</a></div>$arrow<a href='admin.php?page={$submenu_items[0][2]}'$class $aria_attributes>$title</a>"; + echo "<div class='wp-menu-image'><a href='admin.php?page={$submenu_items[0][2]}' aria-label='$aria_label'>$img</a></div>$arrow<a href='admin.php?page={$submenu_items[0][2]}'$class $aria_attributes>$title</a>"; } else { - echo "\n\t<div class='wp-menu-image'><a href='{$submenu_items[0][2]}'>$img</a></div>$arrow<a href='{$submenu_items[0][2]}'$class $aria_attributes>$title</a>"; + echo "\n\t<div class='wp-menu-image'><a href='{$submenu_items[0][2]}' aria-label='$aria_label'>$img</a></div>$arrow<a href='{$submenu_items[0][2]}'$class $aria_attributes>$title</a>"; } } elseif ( ! empty( $item[2] ) && current_user_can( $item[1] ) ) { $menu_hook = get_plugin_page_hook( $item[2], 'admin.php' ); @@ -97,9 +98,9 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) { $menu_file = substr( $menu_file, 0, $pos ); if ( ! empty( $menu_hook ) || ( ('index.php' != $item[2]) && file_exists( WP_PLUGIN_DIR . "/$menu_file" ) ) ) { $admin_is_parent = true; - echo "\n\t<div class='wp-menu-image'><a href='admin.php?page={$item[2]}'>$img</a></div>$arrow<a href='admin.php?page={$item[2]}'$class $aria_attributes>{$item[0]}</a>"; + echo "\n\t<div class='wp-menu-image'><a href='admin.php?page={$item[2]}' aria-label='$aria_label'>$img</a></div>$arrow<a href='admin.php?page={$item[2]}'$class $aria_attributes>{$item[0]}</a>"; } else { - echo "\n\t<div class='wp-menu-image'><a href='{$item[2]}'>$img</a></div>$arrow<a href='{$item[2]}'$class $aria_attributes>{$item[0]}</a>"; + echo "\n\t<div class='wp-menu-image'><a href='{$item[2]}' aria-label='$aria_label'>$img</a></div>$arrow<a href='{$item[2]}'$class $aria_attributes>{$item[0]}</a>"; } } diff --git a/wp-admin/menu.php b/wp-admin/menu.php index 050bbd166..81947af5a 100644 --- a/wp-admin/menu.php +++ b/wp-admin/menu.php @@ -56,8 +56,7 @@ $menu[5] = array( __('Posts'), 'edit_posts', 'edit.php', '', 'open-if-no-js menu $menu[10] = array( __('Media'), 'upload_files', 'upload.php', '', 'menu-top menu-icon-media', 'menu-media', 'div' ); $submenu['upload.php'][5] = array( __('Library'), 'upload_files', 'upload.php'); /* translators: add new file */ - if ( !$is_iphone ) - $submenu['upload.php'][10] = array( _x('Add New', 'file'), 'upload_files', 'media-new.php'); + $submenu['upload.php'][10] = array( _x('Add New', 'file'), 'upload_files', 'media-new.php'); $menu[15] = array( __('Links'), 'manage_links', 'link-manager.php', '', 'menu-top menu-icon-links', 'menu-links', 'div' ); $submenu['link-manager.php'][5] = array( _x('All Links', 'admin menu'), 'manage_links', 'link-manager.php' ); @@ -232,5 +231,3 @@ $compat = array( ); require_once(ABSPATH . 'wp-admin/includes/menu.php'); - -?> diff --git a/wp-admin/moderation.php b/wp-admin/moderation.php index d3c9afc55..9129795de 100644 --- a/wp-admin/moderation.php +++ b/wp-admin/moderation.php @@ -10,4 +10,3 @@ require_once('../wp-load.php'); wp_redirect( admin_url('edit-comments.php?comment_status=moderated') ); exit; -?> diff --git a/wp-admin/ms-admin.php b/wp-admin/ms-admin.php index 5ebb14c24..fe5e19bc8 100644 --- a/wp-admin/ms-admin.php +++ b/wp-admin/ms-admin.php @@ -11,4 +11,3 @@ require_once( './admin.php' ); wp_redirect( network_admin_url() ); exit; -?> diff --git a/wp-admin/ms-delete-site.php b/wp-admin/ms-delete-site.php index 2ae22339b..95f0aa091 100644 --- a/wp-admin/ms-delete-site.php +++ b/wp-admin/ms-delete-site.php @@ -80,4 +80,3 @@ Webmaster echo '</div>'; include( './admin-footer.php' ); -?> diff --git a/wp-admin/ms-edit.php b/wp-admin/ms-edit.php index 6c0e04fe5..6e56e026a 100644 --- a/wp-admin/ms-edit.php +++ b/wp-admin/ms-edit.php @@ -11,4 +11,3 @@ require_once( './admin.php' ); wp_redirect( network_admin_url() ); exit; -?> diff --git a/wp-admin/ms-sites.php b/wp-admin/ms-sites.php index 9b788e3c9..00502c915 100644 --- a/wp-admin/ms-sites.php +++ b/wp-admin/ms-sites.php @@ -11,5 +11,3 @@ require_once( './admin.php' ); wp_redirect( network_admin_url('sites.php') ); exit; - -?> diff --git a/wp-admin/ms-themes.php b/wp-admin/ms-themes.php index ad54efe2e..ad873babb 100644 --- a/wp-admin/ms-themes.php +++ b/wp-admin/ms-themes.php @@ -11,4 +11,3 @@ require_once( './admin.php' ); wp_redirect( network_admin_url('themes.php') ); exit; -?> diff --git a/wp-admin/ms-upgrade-network.php b/wp-admin/ms-upgrade-network.php index 0a4ea56ab..3d36a2cc5 100644 --- a/wp-admin/ms-upgrade-network.php +++ b/wp-admin/ms-upgrade-network.php @@ -11,5 +11,3 @@ require_once('admin.php'); wp_redirect( network_admin_url('upgrade.php') ); exit; - -?> diff --git a/wp-admin/ms-users.php b/wp-admin/ms-users.php index 5b4f1c52b..a3be929ac 100644 --- a/wp-admin/ms-users.php +++ b/wp-admin/ms-users.php @@ -11,4 +11,3 @@ require_once( './admin.php' ); wp_redirect( network_admin_url('users.php') ); exit; -?> diff --git a/wp-admin/my-sites.php b/wp-admin/my-sites.php index 873b03cf9..2ef4ca77e 100644 --- a/wp-admin/my-sites.php +++ b/wp-admin/my-sites.php @@ -118,4 +118,3 @@ else : </div> <?php include( './admin-footer.php' ); -?> diff --git a/wp-admin/nav-menus.php b/wp-admin/nav-menus.php index 90a1e873a..6b4b03238 100644 --- a/wp-admin/nav-menus.php +++ b/wp-admin/nav-menus.php @@ -35,6 +35,9 @@ wp_enqueue_script( 'common' ); wp_enqueue_script( 'wp-lists' ); wp_enqueue_script( 'postbox' ); +if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); + // Container for any messages displayed to the user $messages = array(); @@ -117,7 +120,6 @@ switch ( $action ) { wp_update_post($next_item_data); } - // the item is last but still has a parent, so bubble up } elseif ( ! empty( $menu_item_data['menu_item_parent'] ) && @@ -152,7 +154,6 @@ switch ( $action ) { } } - // if this menu item is not first if ( ! empty( $dbids_to_orders[$menu_item_id] ) && ! empty( $orders_to_dbids[$dbids_to_orders[$menu_item_id] - 1] ) ) { @@ -228,7 +229,6 @@ switch ( $action ) { check_admin_referer( 'delete-menu_item_' . $menu_item_id ); - if ( is_nav_menu_item( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) ) $messages[] = '<div id="message" class="updated"><p>' . __('The menu item has been successfully deleted.') . '</p></div>'; break; @@ -430,7 +430,7 @@ $_wp_nav_menu_max_depth = 0; // Calling wp_get_nav_menu_to_edit generates $_wp_nav_menu_max_depth if ( is_nav_menu( $nav_menu_selected_id ) ) - $edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id ); + $edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id ); function wp_nav_menu_max_depth($classes) { global $_wp_nav_menu_max_depth; @@ -545,7 +545,7 @@ require_once( './admin-header.php' ); <div class="major-publishing-actions"> <label class="menu-name-label howto open-label" for="menu-name"> <span><?php _e('Menu Name'); ?></span> - <input name="menu-name" id="menu-name" type="text" class="menu-name regular-text menu-item-textbox input-with-default-title" title="<?php esc_attr_e('Enter menu name here'); ?>" value="<?php echo esc_attr( $nav_menu_selected_title ); ?>" /> + <input name="menu-name" id="menu-name" type="text" class="menu-name regular-text menu-item-textbox input-with-default-title" title="<?php esc_attr_e('Enter menu name here'); ?>" value="<?php echo esc_attr( $nav_menu_selected_title ); ?>" /> </label> <?php if ( !empty( $nav_menu_selected_id ) ) : if ( ! isset( $auto_add ) ) { @@ -615,5 +615,4 @@ require_once( './admin-header.php' ); </div><!-- /#nav-menus-frame --> </div><!-- /.wrap--> - <?php include( './admin-footer.php' ); ?> diff --git a/wp-admin/network.php b/wp-admin/network.php index a3b09e818..2931cbbc8 100644 --- a/wp-admin/network.php +++ b/wp-admin/network.php @@ -367,13 +367,13 @@ function network_step2( $errors = false ) { ?></p></li> <li><p><?php printf( __( 'Add the following to your <code>wp-config.php</code> file in <code>%s</code> <strong>above</strong> the line reading <code>/* That’s all, stop editing! Happy blogging. */</code>:' ), ABSPATH ); ?></p> <textarea class="code" readonly="readonly" cols="100" rows="7"> -define( 'MULTISITE', true ); -define( 'SUBDOMAIN_INSTALL', <?php echo $subdomain_install ? 'true' : 'false'; ?> ); +define('MULTISITE', true); +define('SUBDOMAIN_INSTALL', <?php echo $subdomain_install ? 'true' : 'false'; ?>); $base = '<?php echo $base; ?>'; -define( 'DOMAIN_CURRENT_SITE', '<?php echo $hostname; ?>' ); -define( 'PATH_CURRENT_SITE', '<?php echo $base; ?>' ); -define( 'SITE_ID_CURRENT_SITE', 1 ); -define( 'BLOG_ID_CURRENT_SITE', 1 );</textarea> +define('DOMAIN_CURRENT_SITE', '<?php echo $hostname; ?>'); +define('PATH_CURRENT_SITE', '<?php echo $base; ?>'); +define('SITE_ID_CURRENT_SITE', 1); +define('BLOG_ID_CURRENT_SITE', 1);</textarea> <?php $keys_salts = array( 'AUTH_KEY' => '', 'SECURE_AUTH_KEY' => '', 'LOGGED_IN_KEY' => '', 'NONCE_KEY' => '', 'AUTH_SALT' => '', 'SECURE_AUTH_SALT' => '', 'LOGGED_IN_SALT' => '', 'NONCE_SALT' => '' ); foreach ( $keys_salts as $c => $v ) { diff --git a/wp-admin/network/about.php b/wp-admin/network/about.php new file mode 100644 index 000000000..e8bbe999d --- /dev/null +++ b/wp-admin/network/about.php @@ -0,0 +1,16 @@ +<?php +/** + * Network About administration panel. + * + * @package WordPress + * @subpackage Multisite + * @since 3.4.0 + */ + +/** Load WordPress Administration Bootstrap */ +require_once( './admin.php' ); + +if ( ! is_multisite() ) + wp_die( __( 'Multisite support is not enabled.' ) ); + +require( '../about.php' ); \ No newline at end of file diff --git a/wp-admin/network/admin.php b/wp-admin/network/admin.php index d6de38d13..01e6ea70c 100644 --- a/wp-admin/network/admin.php +++ b/wp-admin/network/admin.php @@ -7,7 +7,7 @@ * @since 3.1.0 */ -define( 'WP_NETWORK_ADMIN', TRUE ); +define( 'WP_NETWORK_ADMIN', true ); /** Load WordPress Administration Bootstrap */ require_once( dirname( dirname( __FILE__ ) ) . '/admin.php' ); @@ -22,4 +22,3 @@ if ( $redirect_network_admin_request ) { exit; } unset( $redirect_network_admin_request ); -?> diff --git a/wp-admin/network/credits.php b/wp-admin/network/credits.php new file mode 100644 index 000000000..82caa3ad0 --- /dev/null +++ b/wp-admin/network/credits.php @@ -0,0 +1,16 @@ +<?php +/** + * Network Credits administration panel. + * + * @package WordPress + * @subpackage Multisite + * @since 3.4.0 + */ + +/** Load WordPress Administration Bootstrap */ +require_once( './admin.php' ); + +if ( ! is_multisite() ) + wp_die( __( 'Multisite support is not enabled.' ) ); + +require( '../credits.php' ); \ No newline at end of file diff --git a/wp-admin/network/edit.php b/wp-admin/network/edit.php index 5ccba2a0c..e76f25878 100644 --- a/wp-admin/network/edit.php +++ b/wp-admin/network/edit.php @@ -25,5 +25,3 @@ do_action( 'network_admin_edit_' . $_GET['action'] ); wp_redirect( network_admin_url() ); exit(); - -?> diff --git a/wp-admin/network/freedoms.php b/wp-admin/network/freedoms.php new file mode 100644 index 000000000..a15a4c3fd --- /dev/null +++ b/wp-admin/network/freedoms.php @@ -0,0 +1,16 @@ +<?php +/** + * Network Freedoms administration panel. + * + * @package WordPress + * @subpackage Multisite + * @since 3.4.0 + */ + +/** Load WordPress Administration Bootstrap */ +require_once( './admin.php' ); + +if ( ! is_multisite() ) + wp_die( __( 'Multisite support is not enabled.' ) ); + +require( '../freedoms.php' ); \ No newline at end of file diff --git a/wp-admin/network/menu.php b/wp-admin/network/menu.php index 449e1b37a..a35a2802e 100644 --- a/wp-admin/network/menu.php +++ b/wp-admin/network/menu.php @@ -41,7 +41,6 @@ $submenu['plugins.php'][5] = array( __('Installed Plugins'), 'manage_network_pl $submenu['plugins.php'][10] = array( _x('Add New', 'plugin editor'), 'install_plugins', 'plugin-install.php' ); $submenu['plugins.php'][15] = array( _x('Editor', 'plugin editor'), 'edit_plugins', 'plugin-editor.php' ); - $menu[25] = array(__('Settings'), 'manage_network_options', 'settings.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'div'); if ( defined( 'MULTISITE' ) && defined( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) { $submenu['settings.php'][5] = array( __('Network Settings'), 'manage_network_options', 'settings.php' ); @@ -56,11 +55,9 @@ if ( $update_data['counts']['total'] ) { unset($update_data); -$submenu[ 'upgrade.php' ][10] = array( __( 'Available Updates' ), 'update_core', 'update-core.php' ); +$submenu[ 'upgrade.php' ][10] = array( __( 'Available Updates' ), 'update_core', 'update-core.php' ); $submenu[ 'upgrade.php' ][15] = array( __( 'Update Network' ), 'manage_network', 'upgrade.php' ); $menu[99] = array( '', 'read', 'separator-last', '', 'wp-menu-separator-last' ); require_once(ABSPATH . 'wp-admin/includes/menu.php'); - -?> diff --git a/wp-admin/network/settings.php b/wp-admin/network/settings.php index 7f04e1a5a..e75d95fc7 100644 --- a/wp-admin/network/settings.php +++ b/wp-admin/network/settings.php @@ -29,7 +29,6 @@ get_current_screen()->add_help_tab( array( '<p>' . __('Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network.') . '</p>' . '<p>' . __('New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what᾿s put in the first post, page, comment, comment author, and comment URL.') . '</p>' . '<p>' . __('Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only).') . '</p>' . - '<p>' . __('Checkboxes for media upload buttons set which are shown in the visual editor. If unchecked, a generic upload button is still visible; other media types can still be uploaded if on the allowed file types list.') . '</p>' . '<p>' . __('Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins.') . '</p>' . '<p>' . __('Super admins can no longer be added on the Options screen. You must now go to the list of existing users on Network Admin > Users and click on Username or the Edit action link below that name. This goes to an Edit User page where you can check a box to grant super admin privileges.') . '</p>' ) ); @@ -51,17 +50,17 @@ if ( $_POST ) { if ( is_email( $_POST['admin_email'] ) ) update_site_option( 'admin_email', $_POST['admin_email'] ); - $illegal_names = split( ' ', $_POST['illegal_names'] ); + $illegal_names = explode( ' ', $_POST['illegal_names'] ); foreach ( (array) $illegal_names as $name ) { $name = trim( $name ); if ( $name != '' ) $names[] = trim( $name ); - } + } update_site_option( 'illegal_names', $names ); if ( $_POST['limited_email_domains'] != '' ) { $limited_email_domains = str_replace( ' ', "\n", $_POST['limited_email_domains'] ); - $limited_email_domains = split( "\n", stripslashes( $limited_email_domains ) ); + $limited_email_domains = explode( "\n", stripslashes( $limited_email_domains ) ); $limited_email = array(); foreach ( (array) $limited_email_domains as $domain ) { $domain = trim( $domain ); @@ -70,11 +69,11 @@ if ( $_POST ) { } update_site_option( 'limited_email_domains', $limited_email ); } else { - update_site_option( 'limited_email_domains', '' ); + update_site_option( 'limited_email_domains', '' ); } if ( $_POST['banned_email_domains'] != '' ) { - $banned_email_domains = split( "\n", stripslashes( $_POST['banned_email_domains'] ) ); + $banned_email_domains = explode( "\n", stripslashes( $_POST['banned_email_domains'] ) ); $banned = array(); foreach ( (array) $banned_email_domains as $domain ) { $domain = trim( $domain ); @@ -125,7 +124,7 @@ if ( isset( $_GET['updated'] ) ) { <td> <input name="site_name" type="text" id="site_name" class="regular-text" value="<?php echo esc_attr( $current_site->site_name ) ?>" /> <br /> - <?php _e( 'What you would like to call this website.' ) ?> + <?php _e( 'What you would like to call this network.' ) ?> </td> </tr> @@ -278,7 +277,7 @@ if ( isset( $_GET['updated'] ) ) { <tr valign="top"> <th scope="row"><?php _e( 'Site upload space' ) ?></th> <td> - <label><input type="checkbox" id="upload_space_check_disabled" name="upload_space_check_disabled" value="0"<?php checked( get_site_option( 'upload_space_check_disabled' ), 0 ) ?>/> <?php printf( __( 'Limit total size of files uploaded to %s MB' ), '</label><label><input name="blog_upload_space" type="text" id="blog_upload_space" value="' . esc_attr( get_site_option('blog_upload_space', 10) ) . '" size="3" />' ); ?></label><br /> + <label><input type="checkbox" id="upload_space_check_disabled" name="upload_space_check_disabled" value="0"<?php checked( get_site_option( 'upload_space_check_disabled' ), 0 ) ?>/> <?php printf( __( 'Limit total size of files uploaded to %s MB' ), '</label><label><input name="blog_upload_space" type="number" min="0" style="width: 100px" id="blog_upload_space" value="' . esc_attr( get_site_option('blog_upload_space', 100) ) . '" />' ); ?></label><br /> </td> </tr> @@ -289,7 +288,7 @@ if ( isset( $_GET['updated'] ) ) { <tr valign="top"> <th scope="row"><label for="fileupload_maxk"><?php _e( 'Max upload file size' ) ?></label></th> - <td><?php printf( _x( '%s KB', 'File size in kilobytes' ), '<input name="fileupload_maxk" type="text" id="fileupload_maxk" value="' . esc_attr( get_site_option( 'fileupload_maxk', 300 ) ) . '" size="5" />' ); ?></td> + <td><?php printf( _x( '%s KB', 'File size in kilobytes' ), '<input name="fileupload_maxk" type="number" min="0" style="width: 100px" id="fileupload_maxk" value="' . esc_attr( get_site_option( 'fileupload_maxk', 300 ) ) . '" />' ); ?></td> </tr> </table> @@ -322,7 +321,7 @@ if ( isset( $_GET['updated'] ) ) { $menu_perms = get_site_option( 'menu_items' ); $menu_items = apply_filters( 'mu_menu_items', array( 'plugins' => __( 'Plugins' ) ) ); foreach ( (array) $menu_items as $key => $val ) { - echo "<label><input type='checkbox' name='menu_items[" . $key . "]' value='1'" . ( isset( $menu_perms[$key] ) ? checked( $menu_perms[$key], '1', false ) : '' ) . " /> " . esc_html( $val ) . "</label><br/>"; + echo "<label><input type='checkbox' name='menu_items[" . $key . "]' value='1'" . ( isset( $menu_perms[$key] ) ? checked( $menu_perms[$key], '1', false ) : '' ) . " /> " . esc_html( $val ) . "</label><br/>"; } ?> </td> diff --git a/wp-admin/network/site-info.php b/wp-admin/network/site-info.php index 8cf9a5ee6..ff78e83bb 100644 --- a/wp-admin/network/site-info.php +++ b/wp-admin/network/site-info.php @@ -29,7 +29,7 @@ if ( ! current_user_can( 'manage_sites' ) ) get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . - '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screens" target="_blank">Documentation on Site Management</a>') . '</p>' . + '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>') . '</p>' . '<p>' . __('<a href="http://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>') . '</p>' ); @@ -108,7 +108,7 @@ $tabs = array( ); foreach ( $tabs as $tab_id => $tab ) { $class = ( $tab['url'] == $pagenow ) ? ' nav-tab-active' : ''; - echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; + echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; } ?> </h3> diff --git a/wp-admin/network/site-new.php b/wp-admin/network/site-new.php index 3abcca1a4..b3cc84e50 100644 --- a/wp-admin/network/site-new.php +++ b/wp-admin/network/site-new.php @@ -26,7 +26,7 @@ if ( ! current_user_can( 'manage_sites' ) ) get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . - '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screens" target="_blank">Documentation on Site Management</a>') . '</p>' . + '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>') . '</p>' . '<p>' . __('<a href="http://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>') . '</p>' ); @@ -123,7 +123,7 @@ if ( ! empty( $messages ) ) { <th scope="row"><?php _e( 'Site Address' ) ?></th> <td> <?php if ( is_subdomain_install() ) { ?> - <input name="blog[domain]" type="text" class="regular-text" title="<?php esc_attr_e( 'Domain' ) ?>"/>.<?php echo preg_replace( '|^www\.|', '', $current_site->domain );?> + <input name="blog[domain]" type="text" class="regular-text" title="<?php esc_attr_e( 'Domain' ) ?>"/><span class="no-break">.<?php echo preg_replace( '|^www\.|', '', $current_site->domain ); ?></span> <?php } else { echo $current_site->domain . $current_site->path ?><input name="blog[domain]" class="regular-text" type="text" title="<?php esc_attr_e( 'Domain' ) ?>"/> <?php } @@ -148,4 +148,3 @@ if ( ! empty( $messages ) ) { </div> <?php require('../admin-footer.php'); -?> diff --git a/wp-admin/network/site-settings.php b/wp-admin/network/site-settings.php index 09ebeaad7..f807fcf2c 100644 --- a/wp-admin/network/site-settings.php +++ b/wp-admin/network/site-settings.php @@ -29,7 +29,7 @@ get_current_screen()->add_help_tab( array( get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . - '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screens" target="_blank">Documentation on Site Management</a>') . '</p>' . + '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>') . '</p>' . '<p>' . __('<a href="http://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>') . '</p>' ); @@ -98,7 +98,7 @@ $tabs = array( ); foreach ( $tabs as $tab_id => $tab ) { $class = ( $tab['url'] == $pagenow ) ? ' nav-tab-active' : ''; - echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; + echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; } ?> </h3> diff --git a/wp-admin/network/site-themes.php b/wp-admin/network/site-themes.php index 0ff479acb..279456936 100644 --- a/wp-admin/network/site-themes.php +++ b/wp-admin/network/site-themes.php @@ -34,7 +34,7 @@ get_current_screen()->add_help_tab( array( get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . - '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screens" target="_blank">Documentation on Site Management</a>') . '</p>' . + '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>') . '</p>' . '<p>' . __('<a href="http://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>') . '</p>' ); @@ -152,7 +152,7 @@ $tabs = array( ); foreach ( $tabs as $tab_id => $tab ) { $class = ( $tab['url'] == $pagenow ) ? ' nav-tab-active' : ''; - echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; + echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; } ?> </h3><?php diff --git a/wp-admin/network/site-users.php b/wp-admin/network/site-users.php index 743e9053e..58796b258 100644 --- a/wp-admin/network/site-users.php +++ b/wp-admin/network/site-users.php @@ -32,7 +32,7 @@ get_current_screen()->add_help_tab( array( get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . - '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screens" target="_blank">Documentation on Site Management</a>') . '</p>' . + '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>') . '</p>' . '<p>' . __('<a href="http://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>') . '</p>' ); @@ -171,8 +171,18 @@ $title = sprintf( __('Edit Site: %s'), $site_url_no_http ); $parent_file = 'sites.php'; $submenu_file = 'sites.php'; +if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) + wp_enqueue_script( 'user-suggest' ); + require('../admin-header.php'); ?> +<script type='text/javascript'> +/* <![CDATA[ */ +var current_site_id = <?php echo $id; ?>; +/* ]]> */ +</script> + + <div class="wrap"> <?php screen_icon('ms-admin'); ?> <h2 id="edit-site"><?php echo $title_site_url_linked ?></h2> @@ -186,7 +196,7 @@ $tabs = array( ); foreach ( $tabs as $tab_id => $tab ) { $class = ( $tab['url'] == $pagenow ) ? ' nav-tab-active' : ''; - echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; + echo '<a href="' . $tab['url'] . '?id=' . $id .'" class="nav-tab' . $class . '">' . esc_html( $tab['label'] ) . '</a>'; } ?> </h3><?php @@ -257,7 +267,7 @@ endif; ?> <table class="form-table"> <tr> <th scope="row"><?php _e( 'Username' ); ?></th> - <td><input type="text" class="regular-text" name="newuser" id="newuser" /></td> + <td><input type="text" class="regular-text wp-suggest-user" name="newuser" id="newuser" /></td> </tr> <tr> <th scope="row"><?php _e( 'Role'); ?></th> diff --git a/wp-admin/network/sites.php b/wp-admin/network/sites.php index 95902ebbd..4bee9e1af 100644 --- a/wp-admin/network/sites.php +++ b/wp-admin/network/sites.php @@ -42,7 +42,7 @@ get_current_screen()->add_help_tab( array( get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . - '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screens" target="_blank">Documentation on Site Management</a>') . '</p>' . + '<p>' . __('<a href="http://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>') . '</p>' . '<p>' . __('<a href="http://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>') . '</p>' ); @@ -78,9 +78,7 @@ if ( isset( $_GET['action'] ) ) { if ( ! current_user_can( 'manage_sites' ) ) wp_die( __( 'You do not have permission to access this page.' ) ); - if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) - $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; - + $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; $blogfunction = ''; foreach ( (array) $_POST['allblogs'] as $key => $val ) { @@ -210,7 +208,7 @@ if ( isset( $_GET['action'] ) ) { wp_die( __( 'You are not allowed to change the current site.' ) ); ?> <!DOCTYPE html> - <html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>> + <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> <head> <title><?php _e( 'WordPress › Confirm your action' ); ?></title> @@ -221,7 +219,7 @@ if ( isset( $_GET['action'] ) ) { ?> </head> <body> - <h1 id="logo"><img alt="WordPress" src="<?php echo esc_attr( admin_url( 'images/wordpress-logo.png' ) ); ?>" /></h1> + <h1 id="logo"><img alt="WordPress" src="<?php echo esc_attr( admin_url( 'images/wordpress-logo.png?ver=20120216' ) ); ?>" /></h1> <form action="sites.php?action=<?php echo esc_attr( $_GET['action2'] ) ?>" method="post"> <input type="hidden" name="action" value="<?php echo esc_attr( $_GET['action2'] ) ?>" /> <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" /> diff --git a/wp-admin/network/themes.php b/wp-admin/network/themes.php index 611c0957f..ba56a4a48 100644 --- a/wp-admin/network/themes.php +++ b/wp-admin/network/themes.php @@ -40,7 +40,10 @@ if ( $action ) { check_admin_referer('enable-theme_' . $_GET['theme']); $allowed_themes[ $_GET['theme'] ] = true; update_site_option( 'allowedthemes', $allowed_themes ); - wp_redirect( network_admin_url( 'themes.php?enabled=1' ) ); + if ( false === strpos( $referer, '/network/themes.php' ) ) + wp_redirect( network_admin_url( 'themes.php?enabled=1' ) ); + else + wp_safe_redirect( add_query_arg( 'enabled', 1, $referer ) ); exit; break; case 'disable': @@ -95,7 +98,6 @@ if ( $action ) { screen_icon(); echo '<h2>' . esc_html( $title ) . '</h2>'; - $url = self_admin_url('update.php?action=update-selected-themes&themes=' . urlencode( join(',', $themes) )); $url = wp_nonce_url($url, 'bulk-update-themes'); @@ -111,26 +113,17 @@ if ( $action ) { $themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array(); - if ( isset( $themes[ get_option( 'template' ) ] ) ) - unset( $themes[ get_option( 'template' ) ] ); - if ( isset( $themes[ get_option( 'stylesheet' ) ] ) ) - unset( $themes[ get_option( 'stylesheet' ) ] ); + unset( $themes[ get_option( 'stylesheet' ) ], $themes[ get_option( 'template' ) ] ); if ( empty( $themes ) ) { wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); exit; } - $main_theme = get_current_theme(); $files_to_delete = $theme_info = array(); foreach ( $themes as $key => $theme ) { - $data = get_theme_data( WP_CONTENT_DIR . '/themes/' . $theme . '/style.css' ); - if ( $data['Name'] == $main_theme ) { - unset( $themes[$key] ); - } else { - $files_to_delete = array_merge( $files_to_delete, list_files( WP_CONTENT_DIR . "/themes/$theme" ) ); - $theme_info[ $theme ] = $data; - } + $theme_info[ $theme ] = wp_get_theme( $theme ); + $files_to_delete = array_merge( $files_to_delete, list_files( $theme_info[ $theme ]->get_stylesheet_directory() ) ); } if ( empty( $themes ) ) { @@ -156,7 +149,7 @@ if ( $action ) { <p><?php echo _n( 'You are about to remove the following theme:', 'You are about to remove the following themes:', $themes_to_delete ); ?></p> <ul class="ul-disc"> <?php foreach ( $theme_info as $theme ) - echo '<li>', sprintf( __('<strong>%1$s</strong> by <em>%2$s</em>' ), esc_html( $theme['Name'] ), esc_html( $theme['AuthorName'] ) ), '</li>'; /* translators: 1: theme name, 2: theme author */ ?> + echo '<li>', sprintf( __('<strong>%1$s</strong> by <em>%2$s</em>' ), $theme->display('Name'), $theme->display('Author') ), '</li>'; /* translators: 1: theme name, 2: theme author */ ?> </ul> <p><?php _e('Are you sure you wish to delete these themes?'); ?></p> <form method="post" action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" style="display:inline;"> @@ -254,7 +247,12 @@ if ( isset( $_GET['enabled'] ) ) { <?php $wp_list_table->search_box( __( 'Search Installed Themes' ), 'theme' ); ?> </form> -<?php $wp_list_table->views(); ?> +<?php +$wp_list_table->views(); + +if ( 'broken' == $status ) + echo '<p class="clear">' . __('The following themes are installed but incomplete. Themes must have a stylesheet and a template.') . '</p>'; +?> <form method="post" action=""> <input type="hidden" name="theme_status" value="<?php echo esc_attr($status) ?>" /> diff --git a/wp-admin/network/user-new.php b/wp-admin/network/user-new.php index 03dadce8c..204491451 100644 --- a/wp-admin/network/user-new.php +++ b/wp-admin/network/user-new.php @@ -16,7 +16,6 @@ if ( ! is_multisite() ) if ( ! current_user_can('create_users') ) wp_die(__('You do not have sufficient permissions to add users to this network.')); - get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __('Overview'), @@ -106,4 +105,3 @@ if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) { ?> </div> <?php require('../admin-footer.php'); -?> diff --git a/wp-admin/network/users.php b/wp-admin/network/users.php index 25d853d9f..98246c3fb 100644 --- a/wp-admin/network/users.php +++ b/wp-admin/network/users.php @@ -40,7 +40,7 @@ function confirm_delete_users( $users ) { wp_die( sprintf( __( 'Warning! User %s cannot be deleted.' ), $delete_user->user_login ) ); if ( in_array( $delete_user->user_login, $site_admins ) ) - wp_die( sprintf( __( 'Warning! User cannot be deleted. The user %s is a network admnistrator.' ), $delete_user->user_login ) ); + wp_die( sprintf( __( 'Warning! User cannot be deleted. The user %s is a network administrator.' ), $delete_user->user_login ) ); echo "<input type='hidden' name='user[]' value='{$val}'/>\n"; $blogs = get_blogs_of_user( $val, true ); @@ -119,9 +119,7 @@ if ( isset( $_GET['action'] ) ) { if ( ( isset( $_POST['action']) || isset($_POST['action2'] ) ) && isset( $_POST['allusers'] ) ) { check_admin_referer( 'bulk-users-network' ); - if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) - $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; - + $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; $userfunction = ''; foreach ( (array) $_POST['allusers'] as $key => $val ) { @@ -136,9 +134,9 @@ if ( isset( $_GET['action'] ) ) { echo '<div class="wrap">'; confirm_delete_users( $_POST['allusers'] ); echo '</div>'; - require_once( '../admin-footer.php' ); - exit(); - break; + require_once( '../admin-footer.php' ); + exit(); + break; case 'spam': $user = new WP_User( $val ); @@ -290,7 +288,7 @@ if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( <?php $wp_list_table->views(); ?> <form action="" method="get" class="search-form"> - <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?> + <?php $wp_list_table->search_box( __( 'Search Users' ), 'all-user' ); ?> </form> <form id="form-user-list" action='users.php?action=allusers' method='post'> diff --git a/wp-admin/options-discussion.php b/wp-admin/options-discussion.php index 6270f99f9..22039fd42 100644 --- a/wp-admin/options-discussion.php +++ b/wp-admin/options-discussion.php @@ -71,7 +71,7 @@ include('./admin-header.php'); <label for="close_comments_for_old_posts"> <input name="close_comments_for_old_posts" type="checkbox" id="close_comments_for_old_posts" value="1" <?php checked('1', get_option('close_comments_for_old_posts')); ?> /> -<?php printf( __('Automatically close comments on articles older than %s days'), '</label><input name="close_comments_days_old" type="text" id="close_comments_days_old" value="' . esc_attr(get_option('close_comments_days_old')) . '" class="small-text" />'); ?> +<?php printf( __('Automatically close comments on articles older than %s days'), '</label><input name="close_comments_days_old" type="number" min="0" step="1" id="close_comments_days_old" value="' . esc_attr(get_option('close_comments_days_old')) . '" class="small-text" />'); ?> <br /> <label for="thread_comments"> <input name="thread_comments" type="checkbox" id="thread_comments" value="1" <?php checked('1', get_option('thread_comments')); ?> /> @@ -100,7 +100,7 @@ $default_comments_page .= '>' . __('last') . '</option><option value="oldest"'; if ( 'oldest' == get_option('default_comments_page') ) $default_comments_page .= ' selected="selected"'; $default_comments_page .= '>' . __('first') . '</option></select>'; -printf( __('Break comments into pages with %1$s top level comments per page and the %2$s page displayed by default'), '</label><label for="comments_per_page"><input name="comments_per_page" type="text" id="comments_per_page" value="' . esc_attr(get_option('comments_per_page')) . '" class="small-text" />', $default_comments_page ); +printf( __('Break comments into pages with %1$s top level comments per page and the %2$s page displayed by default'), '</label><label for="comments_per_page"><input name="comments_per_page" type="number" step="1" min="0" id="comments_per_page" value="' . esc_attr(get_option('comments_per_page')) . '" class="small-text" />', $default_comments_page ); ?></label> <br /> @@ -142,7 +142,7 @@ printf( __('Comments should be displayed with the %s comments at the top of each <tr valign="top"> <th scope="row"><?php _e('Comment Moderation'); ?></th> <td><fieldset><legend class="screen-reader-text"><span><?php _e('Comment Moderation'); ?></span></legend> -<p><label for="comment_max_links"><?php printf(__('Hold a comment in the queue if it contains %s or more links. (A common characteristic of comment spam is a large number of hyperlinks.)'), '<input name="comment_max_links" type="text" id="comment_max_links" value="' . esc_attr(get_option('comment_max_links')) . '" class="small-text" />' ); ?></label></p> +<p><label for="comment_max_links"><?php printf(__('Hold a comment in the queue if it contains %s or more links. (A common characteristic of comment spam is a large number of hyperlinks.)'), '<input name="comment_max_links" type="number" step="1" min="0" id="comment_max_links" value="' . esc_attr(get_option('comment_max_links')) . '" class="small-text" />' ); ?></label></p> <p><label for="moderation_keys"><?php _e('When a comment contains any of these words in its content, name, URL, e-mail, or IP, it will be held in the <a href="edit-comments.php?comment_status=moderated">moderation queue</a>. One word or IP per line. It will match inside words, so “press” will match “WordPress”.'); ?></label></p> <p> @@ -164,7 +164,7 @@ printf( __('Comments should be displayed with the %s comments at the top of each <h3><?php _e('Avatars'); ?></h3> -<p><?php _e('An avatar is an image that follows you from weblog to weblog appearing beside your name when you comment on avatar enabled sites. Here you can enable the display of avatars for people who comment on your site.'); ?></p> +<p><?php _e('An avatar is an image that follows you from weblog to weblog appearing beside your name when you comment on avatar enabled sites. Here you can enable the display of avatars for people who comment on your site.'); ?></p> <?php // the above would be a good place to link to codex documentation on the gravatar functions, for putting it in themes. anything like that? ?> @@ -228,7 +228,7 @@ $size = 32; $avatar_list = ''; foreach ( $avatar_defaults as $default_key => $default_name ) { $selected = ($default == $default_key) ? 'checked="checked" ' : ''; - $avatar_list .= "\n\t<label><input type='radio' name='avatar_default' id='avatar_{$default_key}' value='" . esc_attr($default_key) . "' {$selected}/> "; + $avatar_list .= "\n\t<label><input type='radio' name='avatar_default' id='avatar_{$default_key}' value='" . esc_attr($default_key) . "' {$selected}/> "; $avatar = get_avatar( $user_email, $size, $default_key ); $avatar_list .= preg_replace("/src='(.+?)'/", "src='\$1&forcedefault=1'", $avatar); diff --git a/wp-admin/options-general.php b/wp-admin/options-general.php index fff360c62..d8a8b805f 100644 --- a/wp-admin/options-general.php +++ b/wp-admin/options-general.php @@ -98,8 +98,8 @@ include('./admin-header.php'); </tr> <tr valign="top"> <th scope="row"><label for="blogdescription"><?php _e('Tagline') ?></label></th> -<td><input name="blogdescription" type="text" id="blogdescription" value="<?php form_option('blogdescription'); ?>" class="regular-text" /> -<span class="description"><?php _e('In a few words, explain what this site is about.') ?></span></td> +<td><input name="blogdescription" type="text" id="blogdescription" value="<?php form_option('blogdescription'); ?>" class="regular-text" /> +<p class="description"><?php _e('In a few words, explain what this site is about.') ?></p></td> </tr> <?php if ( !is_multisite() ) { ?> <tr valign="top"> @@ -109,12 +109,12 @@ include('./admin-header.php'); <tr valign="top"> <th scope="row"><label for="home"><?php _e('Site Address (URL)') ?></label></th> <td><input name="home" type="text" id="home" value="<?php form_option('home'); ?>"<?php disabled( defined( 'WP_HOME' ) ); ?> class="regular-text code<?php if ( defined( 'WP_HOME' ) ) echo ' disabled' ?>" /> -<span class="description"><?php _e('Enter the address here if you want your site homepage <a href="http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory">to be different from the directory</a> you installed WordPress.'); ?></span></td> +<p class="description"><?php _e('Enter the address here if you want your site homepage <a href="http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory">to be different from the directory</a> you installed WordPress.'); ?></p></td> </tr> <tr valign="top"> <th scope="row"><label for="admin_email"><?php _e('E-mail Address') ?> </label></th> -<td><input name="admin_email" type="text" id="admin_email" value="<?php form_option('admin_email'); ?>" class="regular-text" /> -<span class="description"><?php _e('This address is used for admin purposes, like new user notification.') ?></span></td> +<td><input name="admin_email" type="text" id="admin_email" value="<?php form_option('admin_email'); ?>" class="regular-text ltr" /> +<p class="description"><?php _e('This address is used for admin purposes, like new user notification.') ?></p></td> </tr> <tr valign="top"> <th scope="row"><?php _e('Membership') ?></th> @@ -132,8 +132,8 @@ include('./admin-header.php'); <?php } else { ?> <tr valign="top"> <th scope="row"><label for="new_admin_email"><?php _e('E-mail Address') ?> </label></th> -<td><input name="new_admin_email" type="text" id="new_admin_email" value="<?php form_option('admin_email'); ?>" class="regular-text code" /> -<span class="description"><?php _e('This address is used for admin purposes. If you change this we will send you an e-mail at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>') ?></span> +<td><input name="new_admin_email" type="text" id="new_admin_email" value="<?php form_option('admin_email'); ?>" class="regular-text ltr" /> +<p class="description"><?php _e('This address is used for admin purposes. If you change this we will send you an e-mail at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>') ?></p> <?php $new_admin_email = get_option( 'new_admin_email' ); if ( $new_admin_email && $new_admin_email != get_option('admin_email') ) : ?> @@ -151,7 +151,7 @@ $tzstring = get_option('timezone_string'); $check_zone_info = true; -// Remove old Etc mappings. Fallback to gmt_offset. +// Remove old Etc mappings. Fallback to gmt_offset. if ( false !== strpos($tzstring,'Etc/GMT') ) $tzstring = ''; @@ -177,8 +177,7 @@ if ( empty($tzstring) ) { // Create a UTC+- zone if no timezone string exists <?php if ( get_option('timezone_string') || !empty($current_offset) ) : ?> <span id="local-time"><?php printf(__('Local time is <code>%1$s</code>'), date_i18n($timezone_format)); ?></span> <?php endif; ?> -<br /> -<span class="description"><?php _e('Choose a city in the same timezone as you.'); ?></span> +<p class="description"><?php _e('Choose a city in the same timezone as you.'); ?></p> <?php if ($check_zone_info && $tzstring) : ?> <br /> <span> @@ -211,7 +210,7 @@ if ( empty($tzstring) ) { // Create a UTC+- zone if no timezone string exists echo ' '; $message = $tr['isdst'] ? __('Daylight saving time begins on: <code>%s</code>.') : - __('Standard time begins on: <code>%s</code>.'); + __('Standard time begins on: <code>%s</code>.'); // Add the difference between the current offset and the new offset to ts to get the correct transition time from date_i18n(). printf( $message, date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $tr['ts'] + ($tz_offset - $tr['offset']) ) ); } else { diff --git a/wp-admin/options-head.php b/wp-admin/options-head.php index 7f2cc74d0..066caafbb 100644 --- a/wp-admin/options-head.php +++ b/wp-admin/options-head.php @@ -17,5 +17,3 @@ if ( isset( $_GET['updated'] ) && isset( $_GET['page'] ) ) { } settings_errors(); - -?> \ No newline at end of file diff --git a/wp-admin/options-media.php b/wp-admin/options-media.php index 83eacabed..ee3240107 100644 --- a/wp-admin/options-media.php +++ b/wp-admin/options-media.php @@ -60,9 +60,9 @@ include('./admin-header.php'); <th scope="row"><?php _e('Thumbnail size') ?></th> <td> <label for="thumbnail_size_w"><?php _e('Width'); ?></label> -<input name="thumbnail_size_w" type="text" id="thumbnail_size_w" value="<?php form_option('thumbnail_size_w'); ?>" class="small-text" /> +<input name="thumbnail_size_w" type="number" step="1" min="0" id="thumbnail_size_w" value="<?php form_option('thumbnail_size_w'); ?>" class="small-text" /> <label for="thumbnail_size_h"><?php _e('Height'); ?></label> -<input name="thumbnail_size_h" type="text" id="thumbnail_size_h" value="<?php form_option('thumbnail_size_h'); ?>" class="small-text" /><br /> +<input name="thumbnail_size_h" type="number" step="1" min="0" id="thumbnail_size_h" value="<?php form_option('thumbnail_size_h'); ?>" class="small-text" /><br /> <input name="thumbnail_crop" type="checkbox" id="thumbnail_crop" value="1" <?php checked('1', get_option('thumbnail_crop')); ?>/> <label for="thumbnail_crop"><?php _e('Crop thumbnail to exact dimensions (normally thumbnails are proportional)'); ?></label> </td> @@ -72,9 +72,9 @@ include('./admin-header.php'); <th scope="row"><?php _e('Medium size') ?></th> <td><fieldset><legend class="screen-reader-text"><span><?php _e('Medium size'); ?></span></legend> <label for="medium_size_w"><?php _e('Max Width'); ?></label> -<input name="medium_size_w" type="text" id="medium_size_w" value="<?php form_option('medium_size_w'); ?>" class="small-text" /> +<input name="medium_size_w" type="number" step="1" min="0" id="medium_size_w" value="<?php form_option('medium_size_w'); ?>" class="small-text" /> <label for="medium_size_h"><?php _e('Max Height'); ?></label> -<input name="medium_size_h" type="text" id="medium_size_h" value="<?php form_option('medium_size_h'); ?>" class="small-text" /> +<input name="medium_size_h" type="number" step="1" min="0" id="medium_size_h" value="<?php form_option('medium_size_h'); ?>" class="small-text" /> </fieldset></td> </tr> @@ -82,9 +82,9 @@ include('./admin-header.php'); <th scope="row"><?php _e('Large size') ?></th> <td><fieldset><legend class="screen-reader-text"><span><?php _e('Large size'); ?></span></legend> <label for="large_size_w"><?php _e('Max Width'); ?></label> -<input name="large_size_w" type="text" id="large_size_w" value="<?php form_option('large_size_w'); ?>" class="small-text" /> +<input name="large_size_w" type="number" step="1" min="0" id="large_size_w" value="<?php form_option('large_size_w'); ?>" class="small-text" /> <label for="large_size_h"><?php _e('Max Height'); ?></label> -<input name="large_size_h" type="text" id="large_size_h" value="<?php form_option('large_size_h'); ?>" class="small-text" /> +<input name="large_size_h" type="number" step="1" min="0" id="large_size_h" value="<?php form_option('large_size_h'); ?>" class="small-text" /> </fieldset></td> </tr> @@ -106,10 +106,12 @@ include('./admin-header.php'); <th scope="row"><?php _e('Maximum embed size') ?></th> <td> <label for="embed_size_w"><?php _e('Width'); ?></label> -<input name="embed_size_w" type="text" id="embed_size_w" value="<?php form_option('embed_size_w'); ?>" class="small-text" /> +<input name="embed_size_w" type="number" step="1" min="0" id="embed_size_w" value="<?php form_option('embed_size_w'); ?>" class="small-text" /> <label for="embed_size_h"><?php _e('Height'); ?></label> -<input name="embed_size_h" type="text" id="embed_size_h" value="<?php form_option('embed_size_h'); ?>" class="small-text" /> -<?php if ( !empty($content_width) ) echo '<br />' . __("If the width value is left blank, embeds will default to the max width of your theme."); ?> +<input name="embed_size_h" type="number" step="1" min="0" id="embed_size_h" value="<?php form_option('embed_size_h'); ?>" class="small-text" /> +<?php if ( ! empty( $content_width ) ) + echo '<p class="description">' . __( 'If the width value is left blank, embeds will default to the max width of your theme.' ) . '</p>'; +?> </td> </tr> @@ -122,14 +124,14 @@ include('./admin-header.php'); <tr valign="top"> <th scope="row"><label for="upload_path"><?php _e('Store uploads in this folder'); ?></label></th> <td><input name="upload_path" type="text" id="upload_path" value="<?php echo esc_attr(get_option('upload_path')); ?>" class="regular-text code" /> -<span class="description"><?php _e('Default is <code>wp-content/uploads</code>'); ?></span> +<p class="description"><?php _e('Default is <code>wp-content/uploads</code>'); ?></p> </td> </tr> <tr valign="top"> <th scope="row"><label for="upload_url_path"><?php _e('Full URL path to files'); ?></label></th> <td><input name="upload_url_path" type="text" id="upload_url_path" value="<?php echo esc_attr( get_option('upload_url_path')); ?>" class="regular-text code" /> -<span class="description"><?php _e('Configuring this is optional. By default, it should be blank.'); ?></span> +<p class="description"><?php _e('Configuring this is optional. By default, it should be blank.'); ?></p> </td> </tr> diff --git a/wp-admin/options-permalink.php b/wp-admin/options-permalink.php index 7db14487f..9ccb62f26 100644 --- a/wp-admin/options-permalink.php +++ b/wp-admin/options-permalink.php @@ -140,19 +140,18 @@ if ( $wp_rewrite->using_index_permalinks() ) else $usingpi = false; -$wp_rewrite->flush_rules(); - +flush_rewrite_rules(); if (isset($_POST['submit'])) : ?> <div id="message" class="updated"><p><?php if ( ! is_multisite() ) { if ( $iis7_permalinks ) { if ( $permalink_structure && ! $usingpi && ! $writable ) - _e('You should update your web.config now'); + _e('You should update your web.config now.'); else if ( $permalink_structure && ! $usingpi && $writable ) _e('Permalink structure updated. Remove write access on web.config file now!'); else - _e('Permalink structure updated'); + _e('Permalink structure updated.'); } else { if ( $permalink_structure && ! $usingpi && ! $writable ) _e('You should update your .htaccess now.'); @@ -226,11 +225,14 @@ $structures = array( </table> <h3><?php _e('Optional'); ?></h3> -<?php if ( $is_apache || $iis7_permalinks ) : ?> - <p><?php _e('If you like, you may enter custom structures for your category and tag <abbr title="Universal Resource Locator">URL</abbr>s here. For example, using <kbd>topics</kbd> as your category base would make your category links like <code>http://example.org/topics/uncategorized/</code>. If you leave these blank the defaults will be used.') ?></p> -<?php else : ?> - <p><?php _e('If you like, you may enter custom structures for your category and tag <abbr title="Universal Resource Locator">URL</abbr>s here. For example, using <code>topics</code> as your category base would make your category links like <code>http://example.org/index.php/topics/uncategorized/</code>. If you leave these blank the defaults will be used.') ?></p> -<?php endif; ?> +<?php +$suffix = ''; +if ( ! $is_apache && ! $iis7_permalinks ) + $suffix = 'index.php/'; +?> +<p><?php +/* translators: %s is a placeholder that must come at the start of the URL path. */ +printf( __('If you like, you may enter custom structures for your category and tag <abbr title="Universal Resource Locator">URL</abbr>s here. For example, using <code>topics</code> as your category base would make your category links like <code>http://example.org/%stopics/uncategorized/</code>. If you leave these blank the defaults will be used.'), $suffix ); ?></p> <table class="form-table"> <tr> @@ -257,14 +259,14 @@ $structures = array( <?php wp_nonce_field('update-permalink') ?> <p><textarea rows="9" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_textarea( $wp_rewrite->iis7_url_rewrite_rules() ); ?></textarea></p> </form> -<p><?php _e('If you temporarily make your <code>web.config</code> file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved.') ?></p> +<p><?php _e('If you temporarily make your <code>web.config</code> file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved.') ?></p> <?php else : ?> <p><?php _e('If the root directory of your site were <a href="http://codex.wordpress.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your <code>web.config</code> file. Create a new file, called <code>web.config</code> in the root directory of your site. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this code into the <code>web.config</code> file.') ?></p> <form action="options-permalink.php" method="post"> <?php wp_nonce_field('update-permalink') ?> <p><textarea rows="18" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_textarea( $wp_rewrite->iis7_url_rewrite_rules(true) ); ?></textarea></p> </form> -<p><?php _e('If you temporarily make your site’s root directory writable for us to generate the <code>web.config</code> file automatically, do not forget to revert the permissions after the file has been created.') ?></p> +<p><?php _e('If you temporarily make your site’s root directory writable for us to generate the <code>web.config</code> file automatically, do not forget to revert the permissions after the file has been created.') ?></p> <?php endif; ?> <?php endif; ?> <?php else : diff --git a/wp-admin/options-reading.php b/wp-admin/options-reading.php index e87348095..28897c18d 100644 --- a/wp-admin/options-reading.php +++ b/wp-admin/options-reading.php @@ -105,17 +105,17 @@ else : <tr valign="top"> <th scope="row"><label for="posts_per_page"><?php _e( 'Blog pages show at most' ); ?></label></th> <td> -<input name="posts_per_page" type="text" id="posts_per_page" value="<?php form_option( 'posts_per_page' ); ?>" class="small-text" /> <?php _e( 'posts' ); ?> +<input name="posts_per_page" type="number" step="1" min="1" id="posts_per_page" value="<?php form_option( 'posts_per_page' ); ?>" class="small-text" /> <?php _e( 'posts' ); ?> </td> </tr> <tr valign="top"> <th scope="row"><label for="posts_per_rss"><?php _e( 'Syndication feeds show the most recent' ); ?></label></th> -<td><input name="posts_per_rss" type="text" id="posts_per_rss" value="<?php form_option( 'posts_per_rss' ); ?>" class="small-text" /> <?php _e( 'items' ); ?></td> +<td><input name="posts_per_rss" type="number" step="1" min="1" id="posts_per_rss" value="<?php form_option( 'posts_per_rss' ); ?>" class="small-text" /> <?php _e( 'items' ); ?></td> </tr> <tr valign="top"> <th scope="row"><?php _e( 'For each article in a feed, show' ); ?> </th> <td><fieldset><legend class="screen-reader-text"><span><?php _e( 'For each article in a feed, show' ); ?> </span></legend> -<p><label><input name="rss_use_excerpt" type="radio" value="0" <?php checked( 0, get_option( 'rss_use_excerpt' ) ); ?> /> <?php _e( 'Full text' ); ?></label><br /> +<p><label><input name="rss_use_excerpt" type="radio" value="0" <?php checked( 0, get_option( 'rss_use_excerpt' ) ); ?> /> <?php _e( 'Full text' ); ?></label><br /> <label><input name="rss_use_excerpt" type="radio" value="1" <?php checked( 1, get_option( 'rss_use_excerpt' ) ); ?> /> <?php _e( 'Summary' ); ?></label></p> </fieldset></td> </tr> @@ -123,7 +123,7 @@ else : <tr valign="top"> <th scope="row"><label for="blog_charset"><?php _e( 'Encoding for pages and feeds' ); ?></label></th> <td><input name="blog_charset" type="text" id="blog_charset" value="<?php form_option( 'blog_charset' ); ?>" class="regular-text" /> -<span class="description"><?php _e( 'The <a href="http://codex.wordpress.org/Glossary#Character_set">character encoding</a> of your site (UTF-8 is recommended, if you are adventurous there are some <a href="http://en.wikipedia.org/wiki/Character_set">other encodings</a>)' ); ?></span></td> +<p class="description"><?php _e( 'The <a href="http://codex.wordpress.org/Glossary#Character_set">character encoding</a> of your site (UTF-8 is recommended, if you are adventurous there are some <a href="http://en.wikipedia.org/wiki/Character_set">other encodings</a>)' ); ?></p></td> </tr> <?php do_settings_fields( 'reading', 'default' ); ?> </table> diff --git a/wp-admin/options-writing.php b/wp-admin/options-writing.php index 15fd1d111..fdf3a08f7 100644 --- a/wp-admin/options-writing.php +++ b/wp-admin/options-writing.php @@ -28,11 +28,10 @@ get_current_screen()->add_help_tab( array( 'content' => '<p>' . __('Press This is a bookmarklet that makes it easy to blog about something you come across on the web. You can use it to just grab a link, or to post an excerpt. Press This will even allow you to choose from images included on the page and use them in your post. Just drag the Press This link on this screen to your bookmarks bar in your browser, and you’ll be on your way to easier content creation. Clicking on it while on another website opens a popup window with all these options.') . '</p>', ) ); - if ( is_multisite() ) { $post_email_help = '<p>' . __('Due to security issues, you cannot use Post By Email on Multisite Installs.') . '</p>'; } else { - $post_email_help = '<p>' . __('Post via email settings allow you to send your WordPress install an email with the content of your post. You must set up a secret e-mail account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret.') . '</p>'; + $post_email_help = '<p>' . __('Post via email settings allow you to send your WordPress install an email with the content of your post. You must set up a secret e-mail account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret.') . '</p>'; } get_current_screen()->add_help_tab( array( @@ -120,7 +119,6 @@ wp_dropdown_categories(array('hide_empty' => 0, 'name' => 'default_link_category <?php do_settings_fields('writing', 'default'); ?> </table> - <h3 class="title"><?php _e('Press This') ?></h3> <p><?php _e('Press This is a bookmarklet: a little app that runs in your browser and lets you grab bits of the web.');?></p> <p><?php _e('Use Press This to clip text, images and videos from any web page. Then edit and add more straight from Press This before you save or publish it in a post on your site.'); ?></p> @@ -145,12 +143,12 @@ wp_dropdown_categories(array('hide_empty' => 0, 'name' => 'default_link_category </tr> <tr valign="top"> <th scope="row"><label for="mailserver_login"><?php _e('Login Name') ?></label></th> -<td><input name="mailserver_login" type="text" id="mailserver_login" value="<?php form_option('mailserver_login'); ?>" class="regular-text" /></td> +<td><input name="mailserver_login" type="text" id="mailserver_login" value="<?php form_option('mailserver_login'); ?>" class="regular-text ltr" /></td> </tr> <tr valign="top"> <th scope="row"><label for="mailserver_pass"><?php _e('Password') ?></label></th> <td> -<input name="mailserver_pass" type="text" id="mailserver_pass" value="<?php form_option('mailserver_pass'); ?>" class="regular-text" /> +<input name="mailserver_pass" type="text" id="mailserver_pass" value="<?php form_option('mailserver_pass'); ?>" class="regular-text ltr" /> </td> </tr> <tr valign="top"> diff --git a/wp-admin/options.php b/wp-admin/options.php index 8eb283a84..e141995ce 100644 --- a/wp-admin/options.php +++ b/wp-admin/options.php @@ -151,7 +151,7 @@ if ( 'update' == $action ) { } /** - * Handle settings errors and return to options page + * Handle settings errors and return to options page */ // If no settings errors were registered add a general 'updated' message. if ( !count( get_settings_errors() ) ) @@ -221,7 +221,5 @@ endforeach; </form> </div> - <?php include('./admin-footer.php'); -?> diff --git a/wp-admin/plugin-editor.php b/wp-admin/plugin-editor.php index ef2c64101..b7758d225 100644 --- a/wp-admin/plugin-editor.php +++ b/wp-admin/plugin-editor.php @@ -65,7 +65,8 @@ case 'update': if ( is_plugin_active($file) ) deactivate_plugins($file, true); - update_option('recently_activated', array($file => time()) + (array)get_option('recently_activated')); + if ( ! is_network_admin() ) + update_option( 'recently_activated', array( $file => time() ) + (array) get_option( 'recently_activated' ) ); wp_redirect(add_query_arg('_wpnonce', wp_create_nonce('edit-plugin-test_' . $file), "plugin-editor.php?file=$file&liveupdate=1&scrollto=$scrollto&networkwide=" . $network_wide)); exit; @@ -236,7 +237,7 @@ foreach ( $plugin_files as $plugin_file ) : <?php endif; ?> <?php if ( is_writeable($real_file) ) : ?> <?php if ( in_array( $file, (array) get_option( 'active_plugins', array() ) ) ) { ?> - <p><?php _e('<strong>Warning:</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?></p> + <p><?php _e('<strong>Warning:</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?></p> <?php } ?> <p class="submit"> <?php diff --git a/wp-admin/plugin-install.php b/wp-admin/plugin-install.php index 87f563b09..d341541ce 100644 --- a/wp-admin/plugin-install.php +++ b/wp-admin/plugin-install.php @@ -46,7 +46,7 @@ get_current_screen()->add_help_tab( array( 'title' => __('Adding Plugins'), 'content' => '<p>' . __('If you know what you’re looking for, Search is your best bet. The Search screen has options to search the WordPress.org Plugin Directory for a particular Term, Author, or Tag. You can also search the directory by selecting a popular tags. Tags in larger type mean more plugins have been labeled with that tag.') . '</p>' . - '<p>' . __('If you just want to get an idea of what’s available, you can browse Featured, Popular, Newest, and Recently Updated plugins by using the links in the upper left of the screen. These sections rotate regularly.') . '</p>' . + '<p>' . __('If you just want to get an idea of what’s available, you can browse Featured, Popular, and Newest plugins by using the links in the upper left of the screen. These sections rotate regularly.') . '</p>' . '<p>' . __('If you want to install a plugin that you’ve downloaded elsewhere, click the Upload in the upper left. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin.') . '</p>' ) ); @@ -69,4 +69,3 @@ include(ABSPATH . 'wp-admin/admin-header.php'); </div> <?php include(ABSPATH . 'wp-admin/admin-footer.php'); - diff --git a/wp-admin/plugins.php b/wp-admin/plugins.php index d339899bb..1acad9cf4 100644 --- a/wp-admin/plugins.php +++ b/wp-admin/plugins.php @@ -12,7 +12,7 @@ require_once('./admin.php'); if ( is_multisite() ) { $menu_perms = get_site_option( 'menu_items', array() ); - if ( empty( $menu_perms['plugins'] ) && ! is_super_admin() ) + if ( empty( $menu_perms['plugins'] ) && ! current_user_can( 'manage_network_plugins' ) ) wp_die( __( 'Cheatin’ uh?' ) ); } @@ -31,9 +31,6 @@ $s = isset($_REQUEST['s']) ? urlencode($_REQUEST['s']) : ''; $_SERVER['REQUEST_URI'] = remove_query_arg(array('error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', '_error_nonce'), $_SERVER['REQUEST_URI']); if ( $action ) { - $network_wide = false; - if ( ( isset( $_GET['networkwide'] ) || 'network-activate-selected' == $action ) && is_multisite() && current_user_can( 'manage_network_plugins' ) ) - $network_wide = true; switch ( $action ) { case 'activate': @@ -42,7 +39,7 @@ if ( $action ) { check_admin_referer('activate-plugin_' . $plugin); - $result = activate_plugin($plugin, self_admin_url('plugins.php?error=true&plugin=' . $plugin), $network_wide); + $result = activate_plugin($plugin, self_admin_url('plugins.php?error=true&plugin=' . $plugin), is_network_admin() ); if ( is_wp_error( $result ) ) { if ( 'unexpected_output' == $result->get_error_code() ) { $redirect = self_admin_url('plugins.php?error=true&charsout=' . strlen($result->get_error_data()) . '&plugin=' . $plugin . "&plugin_status=$status&paged=$page&s=$s"); @@ -53,11 +50,12 @@ if ( $action ) { } } - $recent = (array)get_option('recently_activated'); - if ( isset($recent[ $plugin ]) ) { - unset($recent[ $plugin ]); - update_option('recently_activated', $recent); + if ( ! is_network_admin() ) { + $recent = (array) get_option( 'recently_activated' ); + unset( $recent[ $plugin ] ); + update_option( 'recently_activated', $recent ); } + if ( isset($_GET['from']) && 'import' == $_GET['from'] ) { wp_redirect( self_admin_url("import.php?import=" . str_replace('-importer', '', dirname($plugin))) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix } else { @@ -66,7 +64,6 @@ if ( $action ) { exit; break; case 'activate-selected': - case 'network-activate-selected': if ( ! current_user_can('activate_plugins') ) wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); @@ -75,7 +72,7 @@ if ( $action ) { $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); // Only activate plugins which are not already active. - $check = $network_wide ? 'is_plugin_active_for_network' : 'is_plugin_active'; + $check = is_network_admin() ? 'is_plugin_active_for_network' : 'is_plugin_active'; foreach ( $plugins as $i => $plugin ) if ( $check( $plugin ) ) unset( $plugins[ $i ] ); @@ -85,14 +82,14 @@ if ( $action ) { exit; } - activate_plugins($plugins, self_admin_url('plugins.php?error=true'), $network_wide); - - $recent = (array)get_option('recently_activated'); - foreach ( $plugins as $plugin => $time) - if ( isset($recent[ $plugin ]) ) - unset($recent[ $plugin ]); + activate_plugins($plugins, self_admin_url('plugins.php?error=true'), is_network_admin() ); - update_option('recently_activated', $recent); + if ( ! is_network_admin() ) { + $recent = (array) get_option('recently_activated' ); + foreach ( $plugins as $plugin ) + unset( $recent[ $plugin ] ); + update_option( 'recently_activated', $recent ); + } wp_redirect( self_admin_url("plugins.php?activate-multi=true&plugin_status=$status&paged=$page&s=$s") ); exit; @@ -117,7 +114,6 @@ if ( $action ) { screen_icon(); echo '<h2>' . esc_html( $title ) . '</h2>'; - $url = self_admin_url('update.php?action=update-selected&plugins=' . urlencode( join(',', $plugins) )); $url = wp_nonce_url($url, 'bulk-update-plugins'); @@ -154,12 +150,15 @@ if ( $action ) { wp_die(__('You do not have sufficient permissions to deactivate plugins for this site.')); check_admin_referer('deactivate-plugin_' . $plugin); + if ( ! is_network_admin() && is_plugin_active_for_network( $plugin ) ) { wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); exit; } - deactivate_plugins($plugin); - update_option('recently_activated', array($plugin => time()) + (array)get_option('recently_activated')); + + deactivate_plugins( $plugin, false, is_network_admin() ); + if ( ! is_network_admin() ) + update_option( 'recently_activated', array( $plugin => time() ) + (array) get_option( 'recently_activated' ) ); if ( headers_sent() ) echo "<meta http-equiv='refresh' content='" . esc_attr( "0;url=plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s" ) . "' />"; else @@ -185,13 +184,15 @@ if ( $action ) { exit; } - deactivate_plugins($plugins); + deactivate_plugins( $plugins, false, is_network_admin() ); - $deactivated = array(); - foreach ( $plugins as $plugin ) - $deactivated[ $plugin ] = time(); + if ( ! is_network_admin() ) { + $deactivated = array(); + foreach ( $plugins as $plugin ) + $deactivated[ $plugin ] = time(); + update_option( 'recently_activated', $deactivated + (array) get_option( 'recently_activated' ) ); + } - update_option('recently_activated', $deactivated + (array)get_option('recently_activated')); wp_redirect( self_admin_url("plugins.php?deactivate-multi=true&plugin_status=$status&paged=$page&s=$s") ); exit; break; @@ -316,7 +317,8 @@ if ( $action ) { exit; break; case 'clear-recent-list': - update_option('recently_activated', array()); + if ( ! is_network_admin() ) + update_option( 'recently_activated', array() ); break; } } @@ -365,7 +367,7 @@ if ( !empty($invalid) ) if ( isset( $_GET['main'] ) ) $errmsg = __( 'You cannot delete a plugin while it is active on the main site.' ); elseif ( isset($_GET['charsout']) ) - $errmsg = sprintf(__('The plugin generated %d characters of <strong>unexpected output</strong> during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'), $_GET['charsout']); + $errmsg = sprintf(__('The plugin generated %d characters of <strong>unexpected output</strong> during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.'), $_GET['charsout']); else $errmsg = __('Plugin could not be activated because it triggered a <strong>fatal error</strong>.'); ?> @@ -402,7 +404,7 @@ if ( !empty($invalid) ) <?php screen_icon(); ?> <h2><?php echo esc_html( $title ); if ( ( ! is_multisite() || is_network_admin() ) && current_user_can('install_plugins') ) { ?> -<a href="<?php echo self_admin_url( 'plugin-install.php' ); ?>" class="add-new-h2"><?php echo esc_html_x('Add New', 'plugin'); ?></a> + <a href="<?php echo self_admin_url( 'plugin-install.php' ); ?>" class="add-new-h2"><?php echo esc_html_x('Add New', 'plugin'); ?></a> <?php } if ( $s ) printf( '<span class="subtitle">' . __('Search results for “%s”') . '</span>', esc_html( $s ) ); ?> diff --git a/wp-admin/post-new.php b/wp-admin/post-new.php index a5d74e8b5..deb41907e 100644 --- a/wp-admin/post-new.php +++ b/wp-admin/post-new.php @@ -39,6 +39,10 @@ $editing = true; if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) wp_die( __( 'Cheatin’ uh?' ) ); +// Schedule auto-draft cleanup +if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) + wp_schedule_event( time(), 'daily', 'wp_scheduled_auto_draft_delete' ); + wp_enqueue_script('autosave'); // Show post form. @@ -46,4 +50,3 @@ $post = get_default_post_to_edit( $post_type, true ); $post_ID = $post->ID; include('edit-form-advanced.php'); include('./admin-footer.php'); -?> diff --git a/wp-admin/post.php b/wp-admin/post.php index c3bca7020..035a18554 100644 --- a/wp-admin/post.php +++ b/wp-admin/post.php @@ -134,15 +134,15 @@ case 'edit': if ( empty($post->ID) ) wp_die( __('You attempted to edit an item that doesn’t exist. Perhaps it was deleted?') ); + if ( null == $post_type_object ) + wp_die( __('Unknown post type.') ); + if ( !current_user_can($post_type_object->cap->edit_post, $post_id) ) wp_die( __('You are not allowed to edit this item.') ); if ( 'trash' == $post->post_status ) wp_die( __('You can’t edit this item because it is in the Trash. Please restore it and try again.') ); - if ( null == $post_type_object ) - wp_die( __('Unknown post type.') ); - $post_type = $post->post_type; if ( 'post' == $post_type ) { $parent_file = "edit.php"; @@ -262,4 +262,3 @@ default: break; } // end switch include('./admin-footer.php'); -?> diff --git a/wp-admin/press-this.php b/wp-admin/press-this.php index b84025290..facae8a86 100644 --- a/wp-admin/press-this.php +++ b/wp-admin/press-this.php @@ -304,7 +304,7 @@ die; //<![CDATA[ addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}}; var userSettings = {'url':'<?php echo SITECOOKIEPATH; ?>','uid':'<?php if ( ! isset($current_user) ) $current_user = wp_get_current_user(); echo $current_user->ID; ?>','time':'<?php echo time() ?>'}; -var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>', pagenow = 'press-this', isRtl = <?php echo (int) is_rtl(); ?>; +var ajaxurl = '<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>', pagenow = 'press-this', isRtl = <?php echo (int) is_rtl(); ?>; var photostorage = false; //]]> </script> @@ -314,20 +314,6 @@ var photostorage = false; do_action('admin_print_scripts'); do_action('admin_head'); ?> - <style type="text/css"> - #message { - margin: 10px 0; - } - #title, - .press-this #wphead { - margin-left: 0; - margin-right: 0; - } - .rtl.press-this #header-logo, - .rtl.press-this #wphead h1 { - float: right; - } - </style> <script type="text/javascript"> var wpActiveEditor = 'content'; @@ -365,12 +351,12 @@ var photostorage = false; <?php $content = ''; if ( preg_match("/youtube\.com\/watch/i", $url) ) { - list($domain, $video_id) = split("v=", $url); + list($domain, $video_id) = explode("v=", $url); $video_id = esc_attr($video_id); $content = '<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/' . $video_id . '"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/' . $video_id . '" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>'; } elseif ( preg_match("/vimeo\.com\/[0-9]+/i", $url) ) { - list($domain, $video_id) = split(".com/", $url); + list($domain, $video_id) = explode(".com/", $url); $video_id = esc_attr($video_id); $content = '<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=' . $video_id . '&server=www.vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" /> <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=' . $video_id . '&server=www.vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object>'; @@ -437,7 +423,7 @@ var photostorage = false; show('video'); <?php } elseif ( preg_match("/vimeo\.com\/[0-9]+/i", $url) ) { ?> show('video'); - <?php } elseif ( preg_match("/flickr\.com/i", $url) ) { ?> + <?php } elseif ( preg_match("/flickr\.com/i", $url) ) { ?> show('photo'); <?php } ?> jQuery('#title').unbind(); @@ -449,7 +435,11 @@ var photostorage = false; }); </script> </head> -<body class="press-this wp-admin<?php if ( is_rtl() ) echo ' rtl'; ?>"> +<?php +$admin_body_class = ( is_rtl() ) ? 'rtl' : ''; +$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) ); +?> +<body class="press-this wp-admin <?php echo $admin_body_class; ?>"> <form action="press-this.php?action=post" method="post"> <div id="poststuff" class="metabox-holder"> <div id="side-sortables" class="press-this-sidebar"> @@ -538,7 +528,7 @@ var photostorage = false; <?php echo $tax->labels->parent_item_colon; ?> </label> <?php wp_dropdown_categories( array( 'taxonomy' => 'category', 'hide_empty' => 0, 'name' => 'newcategory_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $tax->labels->parent_item . ' —', 'tab_index' => 3 ) ); ?> - <input type="button" id="category-add-submit" class="add:categorychecklist:category-add button category-add-sumbit" value="<?php echo esc_attr( $tax->labels->add_new_item ); ?>" tabindex="3" /> + <input type="button" id="category-add-submit" class="add:categorychecklist:category-add button category-add-submit" value="<?php echo esc_attr( $tax->labels->add_new_item ); ?>" tabindex="3" /> <?php wp_nonce_field( 'add-category', '_ajax_nonce-add-category', false ); ?> <span id="category-ajax-response"></span> </p> @@ -610,7 +600,7 @@ var photostorage = false; $content = ''; if ( $selection ) - $content .= $selection; + $content .= $selection; if ( $url ) { $content .= '<p>'; diff --git a/wp-admin/profile.php b/wp-admin/profile.php index 71a1b0466..c5021f169 100644 --- a/wp-admin/profile.php +++ b/wp-admin/profile.php @@ -16,4 +16,3 @@ define('IS_PROFILE_PAGE', true); /** Load User Editing Page */ require_once('./user-edit.php'); -?> diff --git a/wp-admin/setup-config.php b/wp-admin/setup-config.php index e3067ac7a..6201b0045 100644 --- a/wp-admin/setup-config.php +++ b/wp-admin/setup-config.php @@ -41,34 +41,39 @@ define('WP_CONTENT_DIR', ABSPATH . 'wp-content'); define('WP_DEBUG', false); /**#@-*/ -require_once(ABSPATH . WPINC . '/load.php'); -require_once(ABSPATH . WPINC . '/version.php'); +require(ABSPATH . WPINC . '/load.php'); +require(ABSPATH . WPINC . '/version.php'); + +// Also loads functions.php, plugin.php, l10n.php, pomo/mo.php (all required by setup-config.php) +wp_load_translations_early(); + +// Check for the required PHP version and for the MySQL extension or a database drop-in. wp_check_php_mysql_versions(); + +// Turn register_globals off. wp_unregister_GLOBALS(); require_once(ABSPATH . WPINC . '/compat.php'); -require_once(ABSPATH . WPINC . '/functions.php'); require_once(ABSPATH . WPINC . '/class-wp-error.php'); require_once(ABSPATH . WPINC . '/formatting.php'); + +// Add magic quotes and set up $_REQUEST ( $_GET + $_POST ) wp_magic_quotes(); -if (!file_exists(ABSPATH . 'wp-config-sample.php')) - wp_die('Sorry, I need a wp-config-sample.php file to work from. Please re-upload this file from your WordPress installation.'); +if ( ! file_exists( ABSPATH . 'wp-config-sample.php' ) ) + wp_die( __( 'Sorry, I need a wp-config-sample.php file to work from. Please re-upload this file from your WordPress installation.' ) ); -$configFile = file(ABSPATH . 'wp-config-sample.php'); +$config_file = file(ABSPATH . 'wp-config-sample.php'); // Check if wp-config.php has been created -if (file_exists(ABSPATH . 'wp-config.php')) - wp_die("<p>The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='install.php'>installing now</a>.</p>"); +if ( file_exists( ABSPATH . 'wp-config.php' ) ) + wp_die( '<p>' . sprintf( __( "The file 'wp-config.php' already exists. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='%s'>installing now</a>." ), 'install.php' ) . '</p>' ); // Check if wp-config.php exists above the root directory but is not part of another install -if (file_exists(ABSPATH . '../wp-config.php') && ! file_exists(ABSPATH . '../wp-settings.php')) - wp_die("<p>The file 'wp-config.php' already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='install.php'>installing now</a>.</p>"); +if ( file_exists(ABSPATH . '../wp-config.php' ) && ! file_exists( ABSPATH . '../wp-settings.php' ) ) + wp_die( '<p>' . sprintf( __( "The file 'wp-config.php' already exists one level above your WordPress installation. If you need to reset any of the configuration items in this file, please delete it first. You may try <a href='install.php'>installing now</a>."), 'install.php' ) . '</p>' ); -if (isset($_GET['step'])) - $step = $_GET['step']; -else - $step = 0; +$step = isset( $_GET['step'] ) ? (int) $_GET['step'] : 0; /** * Display setup wp-config.php file header. @@ -79,18 +84,20 @@ else * @subpackage Installer_WP_Config */ function display_header() { + global $wp_version; + header( 'Content-Type: text/html; charset=utf-8' ); ?> <!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml"> +<html xmlns="http://www.w3.org/1999/xhtml"<?php if ( is_rtl() ) echo ' dir="rtl"'; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<title>WordPress › Setup Configuration File</title> -<link rel="stylesheet" href="css/install.css" type="text/css" /> +<title><?php _e( 'WordPress › Setup Configuration File' ); ?></title> +<link rel="stylesheet" href="css/install.css?ver=<?php echo preg_replace( '/[^0-9a-z\.-]/i', '', $wp_version ); ?>" type="text/css" /> </head> -<body> -<h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png" /></h1> +<body<?php if ( is_rtl() ) echo ' class="rtl"'; ?>> +<h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png?ver=20120216" /></h1> <?php }//end function display_header(); @@ -99,18 +106,18 @@ switch($step) { display_header(); ?> -<p>Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.</p> +<p><?php _e( 'Welcome to WordPress. Before getting started, we need some information on the database. You will need to know the following items before proceeding.' ) ?></p> <ol> - <li>Database name</li> - <li>Database username</li> - <li>Database password</li> - <li>Database host</li> - <li>Table prefix (if you want to run more than one WordPress in a single database) </li> + <li><?php _e( 'Database name' ); ?></li> + <li><?php _e( 'Database username' ); ?></li> + <li><?php _e( 'Database password' ); ?></li> + <li><?php _e( 'Database host' ); ?></li> + <li><?php _e( 'Table prefix (if you want to run more than one WordPress in a single database)' ); ?></li> </ol> -<p><strong>If for any reason this automatic file creation doesn't work, don't worry. All this does is fill in the database information to a configuration file. You may also simply open <code>wp-config-sample.php</code> in a text editor, fill in your information, and save it as <code>wp-config.php</code>. </strong></p> -<p>In all likelihood, these items were supplied to you by your Web Host. If you do not have this information, then you will need to contact them before you can continue. If you’re all ready…</p> +<p><strong><?php _e( "If for any reason this automatic file creation doesn't work, don't worry. All this does is fill in the database information to a configuration file. You may also simply open <code>wp-config-sample.php</code> in a text editor, fill in your information, and save it as <code>wp-config.php</code>." ); ?></strong></p> +<p><?php _e( "In all likelihood, these items were supplied to you by your Web Host. If you do not have this information, then you will need to contact them before you can continue. If you’re all ready…" ); ?></p> -<p class="step"><a href="setup-config.php?step=1<?php if ( isset( $_GET['noapi'] ) ) echo '&noapi'; ?>" class="button">Let’s go!</a></p> +<p class="step"><a href="setup-config.php?step=1<?php if ( isset( $_GET['noapi'] ) ) echo '&noapi'; ?>" class="button"><?php _e( 'Let’s go!' ); ?></a></p> <?php break; @@ -118,52 +125,52 @@ switch($step) { display_header(); ?> <form method="post" action="setup-config.php?step=2"> - <p>Below you should enter your database connection details. If you're not sure about these, contact your host. </p> + <p><?php _e( "Below you should enter your database connection details. If you're not sure about these, contact your host." ); ?></p> <table class="form-table"> <tr> - <th scope="row"><label for="dbname">Database Name</label></th> + <th scope="row"><label for="dbname"><?php _e( 'Database Name' ); ?></label></th> <td><input name="dbname" id="dbname" type="text" size="25" value="wordpress" /></td> - <td>The name of the database you want to run WP in. </td> + <td><?php _e( 'The name of the database you want to run WP in.' ); ?></td> </tr> <tr> - <th scope="row"><label for="uname">User Name</label></th> - <td><input name="uname" id="uname" type="text" size="25" value="username" /></td> - <td>Your MySQL username</td> + <th scope="row"><label for="uname"><?php _e( 'User Name' ); ?></label></th> + <td><input name="uname" id="uname" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'username', 'example username' ), ENT_QUOTES ); ?>" /></td> + <td><?php _e( 'Your MySQL username' ); ?></td> </tr> <tr> - <th scope="row"><label for="pwd">Password</label></th> - <td><input name="pwd" id="pwd" type="text" size="25" value="password" /></td> - <td>...and your MySQL password.</td> + <th scope="row"><label for="pwd"><?php _e( 'Password' ); ?></label></th> + <td><input name="pwd" id="pwd" type="text" size="25" value="<?php echo htmlspecialchars( _x( 'password', 'example password' ), ENT_QUOTES ); ?>" /></td> + <td><?php _e( '…and your MySQL password.' ); ?></td> </tr> <tr> - <th scope="row"><label for="dbhost">Database Host</label></th> + <th scope="row"><label for="dbhost"><?php _e( 'Database Host' ); ?></label></th> <td><input name="dbhost" id="dbhost" type="text" size="25" value="localhost" /></td> - <td>You should be able to get this info from your web host, if <code>localhost</code> does not work.</td> + <td><?php _e( 'You should be able to get this info from your web host, if <code>localhost</code> does not work.' ); ?></td> </tr> <tr> - <th scope="row"><label for="prefix">Table Prefix</label></th> + <th scope="row"><label for="prefix"><?php _e( 'Table Prefix' ); ?></label></th> <td><input name="prefix" id="prefix" type="text" value="wp_" size="25" /></td> - <td>If you want to run multiple WordPress installations in a single database, change this.</td> + <td><?php _e( 'If you want to run multiple WordPress installations in a single database, change this.' ); ?></td> </tr> </table> - <?php if ( isset( $_GET['noapi'] ) ) { ?><input name="noapi" type="hidden" value="true" /><?php } ?> - <p class="step"><input name="submit" type="submit" value="Submit" class="button" /></p> + <?php if ( isset( $_GET['noapi'] ) ) { ?><input name="noapi" type="hidden" value="1" /><?php } ?> + <p class="step"><input name="submit" type="submit" value="<?php echo htmlspecialchars( __( 'Submit' ), ENT_QUOTES ); ?>" class="button" /></p> </form> <?php break; case 2: - $dbname = trim($_POST['dbname']); - $uname = trim($_POST['uname']); - $passwrd = trim($_POST['pwd']); - $dbhost = trim($_POST['dbhost']); - $prefix = trim($_POST['prefix']); - if ( empty($prefix) ) - $prefix = 'wp_'; - - // Validate $prefix: it can only contain letters, numbers and underscores + foreach ( array( 'dbname', 'uname', 'pwd', 'dbhost', 'prefix' ) as $key ) + $$key = trim( stripslashes( $_POST[ $key ] ) ); + + $tryagain_link = '</p><p class="step"><a href="setup-config.php?step=1" onclick="javascript:history.go(-1);return false;" class="button">' . __( 'Try Again' ) . '</a>'; + + if ( empty( $prefix ) ) + wp_die( __( '<strong>ERROR</strong>: "Table Prefix" must not be empty.' . $tryagain_link ) ); + + // Validate $prefix: it can only contain letters, numbers and underscores. if ( preg_match( '|[^a-z0-9_]|i', $prefix ) ) - wp_die( /*WP_I18N_BAD_PREFIX*/'<strong>ERROR</strong>: "Table Prefix" can only contain numbers, letters, and underscores.'/*/WP_I18N_BAD_PREFIX*/ ); + wp_die( __( '<strong>ERROR</strong>: "Table Prefix" can only contain numbers, letters, and underscores.' . $tryagain_link ) ); // Test the db connection. /**#@+ @@ -171,22 +178,17 @@ switch($step) { */ define('DB_NAME', $dbname); define('DB_USER', $uname); - define('DB_PASSWORD', $passwrd); + define('DB_PASSWORD', $pwd); define('DB_HOST', $dbhost); /**#@-*/ // We'll fail here if the values are no good. require_wp_db(); - if ( ! empty( $wpdb->error ) ) { - $back = '<p class="step"><a href="setup-config.php?step=1" onclick="javascript:history.go(-1);return false;" class="button">Try Again</a></p>'; - wp_die( $wpdb->error->get_error_message() . $back ); - } + if ( ! empty( $wpdb->error ) ) + wp_die( $wpdb->error->get_error_message() . $tryagain_link ); // Fetch or generate keys and salts. $no_api = isset( $_POST['noapi'] ); - require_once( ABSPATH . WPINC . '/plugin.php' ); - require_once( ABSPATH . WPINC . '/l10n.php' ); - require_once( ABSPATH . WPINC . '/pomo/translations.php' ); if ( ! $no_api ) { require_once( ABSPATH . WPINC . '/class-http.php' ); require_once( ABSPATH . WPINC . '/http.php' ); @@ -213,62 +215,66 @@ switch($step) { $secret_keys[$k] = substr( $v, 28, 64 ); } } + $key = 0; + foreach ( $config_file as &$line ) { + if ( '$table_prefix =' == substr( $line, 0, 16 ) ) { + $line = '$table_prefix = \'' . addcslashes( $prefix, "\\'" ) . "';\r\n"; + continue; + } - foreach ($configFile as $line_num => $line) { - switch (substr($line,0,16)) { - case "define('DB_NAME'": - $configFile[$line_num] = str_replace("database_name_here", $dbname, $line); - break; - case "define('DB_USER'": - $configFile[$line_num] = str_replace("'username_here'", "'$uname'", $line); - break; - case "define('DB_PASSW": - $configFile[$line_num] = str_replace("'password_here'", "'$passwrd'", $line); - break; - case "define('DB_HOST'": - $configFile[$line_num] = str_replace("localhost", $dbhost, $line); - break; - case '$table_prefix =': - $configFile[$line_num] = str_replace('wp_', $prefix, $line); + if ( ! preg_match( '/^define\(\'([A-Z_]+)\',([ ]+)/', $line, $match ) ) + continue; + + $constant = $match[1]; + $padding = $match[2]; + + switch ( $constant ) { + case 'DB_NAME' : + case 'DB_USER' : + case 'DB_PASSWORD' : + case 'DB_HOST' : + $line = "define('" . $constant . "'," . $padding . "'" . addcslashes( constant( $constant ), "\\'" ) . "');\r\n"; break; - case "define('AUTH_KEY": - case "define('SECURE_A": - case "define('LOGGED_I": - case "define('NONCE_KE": - case "define('AUTH_SAL": - case "define('SECURE_A": - case "define('LOGGED_I": - case "define('NONCE_SA": - $configFile[$line_num] = str_replace('put your unique phrase here', $secret_keys[$key++], $line ); + case 'AUTH_KEY' : + case 'SECURE_AUTH_KEY' : + case 'LOGGED_IN_KEY' : + case 'NONCE_KEY' : + case 'AUTH_SALT' : + case 'SECURE_AUTH_SALT' : + case 'LOGGED_IN_SALT' : + case 'NONCE_SALT' : + $line = "define('" . $constant . "'," . $padding . "'" . $secret_keys[$key++] . "');\r\n"; break; } } + unset( $line ); + if ( ! is_writable(ABSPATH) ) : display_header(); ?> -<p>Sorry, but I can't write the <code>wp-config.php</code> file.</p> -<p>You can create the <code>wp-config.php</code> manually and paste the following text into it.</p> +<p><?php _e( "Sorry, but I can't write the <code>wp-config.php</code> file." ); ?></p> +<p><?php _e( 'You can create the <code>wp-config.php</code> manually and paste the following text into it.' ); ?></p> <textarea cols="98" rows="15" class="code"><?php - foreach( $configFile as $line ) { + foreach( $config_file as $line ) { echo htmlentities($line, ENT_COMPAT, 'UTF-8'); } ?></textarea> -<p>After you've done that, click "Run the install."</p> -<p class="step"><a href="install.php" class="button">Run the install</a></p> +<p><?php _e( 'After you\'ve done that, click "Run the install."' ); ?></p> +<p class="step"><a href="install.php" class="button"><?php _e( 'Run the install' ); ?></a></p> <?php else : $handle = fopen(ABSPATH . 'wp-config.php', 'w'); - foreach( $configFile as $line ) { + foreach( $config_file as $line ) { fwrite($handle, $line); } fclose($handle); chmod(ABSPATH . 'wp-config.php', 0666); display_header(); ?> -<p>All right sparky! You've made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to…</p> +<p><?php _e( "All right sparky! You've made it through this part of the installation. WordPress can now communicate with your database. If you are ready, time now to…" ); ?></p> -<p class="step"><a href="install.php" class="button">Run the install</a></p> +<p class="step"><a href="install.php" class="button"><?php _e( 'Run the install' ); ?></a></p> <?php endif; break; diff --git a/wp-admin/theme-editor.php b/wp-admin/theme-editor.php index 7b31745b4..8eab0751d 100644 --- a/wp-admin/theme-editor.php +++ b/wp-admin/theme-editor.php @@ -42,80 +42,68 @@ get_current_screen()->set_help_sidebar( '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>' ); -wp_reset_vars(array('action', 'redirect', 'profile', 'error', 'warning', 'a', 'file', 'theme', 'dir')); +wp_reset_vars( array( 'action', 'error', 'file', 'theme' ) ); -$themes = get_themes(); +if ( $theme ) + $stylesheet = urldecode( $theme ); +else + $stylesheet = get_stylesheet(); -if (empty($theme)) { - $theme = get_current_theme(); -} else { - $theme = stripslashes($theme); -} +$theme = wp_get_theme( $stylesheet ); -if ( ! isset($themes[$theme]) ) - wp_die(__('The requested theme does not exist.')); +if ( ! $theme->exists() ) + wp_die( __( 'The requested theme does not exist.' ) ); -$allowed_files = array_merge( $themes[$theme]['Stylesheet Files'], $themes[$theme]['Template Files'] ); +if ( $theme->errors() && 'theme_no_stylesheet' == $theme->errors()->get_error_code() ) + wp_die( __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() ); + +$allowed_files = $theme->get_files( 'php', 1 ); +$has_templates = ! empty( $allowed_files ); +$style_files = $theme->get_files( 'css' ); +$allowed_files['style.css'] = $style_files['style.css']; +$allowed_files += $style_files; if ( empty( $file ) ) { - if ( false !== array_search( $themes[$theme]['Stylesheet Dir'] . '/style.css', $allowed_files ) ) - $file = $themes[$theme]['Stylesheet Dir'] . '/style.css'; - else - $file = $allowed_files[0]; + $relative_file = 'style.css'; + $file = $allowed_files['style.css']; } else { - $file = stripslashes($file); - if ( 'theme' == $dir ) { - $file = dirname(dirname($themes[$theme]['Template Dir'])) . $file ; - } else if ( 'style' == $dir) { - $file = dirname(dirname($themes[$theme]['Stylesheet Dir'])) . $file ; - } + $relative_file = urldecode( stripslashes( $file ) ); + $file = $theme->get_stylesheet_directory() . '/' . $relative_file; } -validate_file_to_edit($file, $allowed_files); -$scrollto = isset($_REQUEST['scrollto']) ? (int) $_REQUEST['scrollto'] : 0; -$file_show = basename( $file ); - -switch($action) { +validate_file_to_edit( $file, $allowed_files ); +$scrollto = isset( $_REQUEST['scrollto'] ) ? (int) $_REQUEST['scrollto'] : 0; +switch( $action ) { case 'update': - - check_admin_referer('edit-theme_' . $file . $theme); - - $newcontent = stripslashes($_POST['newcontent']); - $theme = urlencode($theme); - if (is_writeable($file)) { + check_admin_referer( 'edit-theme_' . $file . $stylesheet ); + $newcontent = stripslashes( $_POST['newcontent'] ); + $location = 'theme-editor.php?file=' . urlencode( $relative_file ) . '&theme=' . urlencode( $stylesheet ) . '&scrollto=' . $scrollto; + if ( is_writeable( $file ) ) { //is_writable() not always reliable, check return value. see comments @ http://uk.php.net/is_writable - $f = fopen($file, 'w+'); - if ($f !== FALSE) { - fwrite($f, $newcontent); - fclose($f); - $location = "theme-editor.php?file=$file&theme=$theme&a=te&scrollto=$scrollto"; - } else { - $location = "theme-editor.php?file=$file&theme=$theme&scrollto=$scrollto"; + $f = fopen( $file, 'w+' ); + if ( $f !== false ) { + fwrite( $f, $newcontent ); + fclose( $f ); + $location .= '&updated=true'; + $theme->cache_delete(); } - } else { - $location = "theme-editor.php?file=$file&theme=$theme&scrollto=$scrollto"; } - - $location = wp_kses_no_null($location); - $strip = array('%0d', '%0a', '%0D', '%0A'); - $location = _deep_replace($strip, $location); - header("Location: $location"); - exit(); - + wp_redirect( $location ); + exit; break; default: - require_once(ABSPATH . 'wp-admin/admin-header.php'); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); - update_recently_edited($file); + update_recently_edited( $file ); - if ( !is_file($file) ) - $error = 1; + if ( ! is_file( $file ) ) + $error = true; $content = ''; - if ( !$error && filesize($file) > 0 ) { + if ( ! $error && filesize( $file ) > 0 ) { $f = fopen($file, 'r'); $content = fread($f, filesize($file)); @@ -134,14 +122,14 @@ default: } ?> -<?php if (isset($_GET['a'])) : ?> - <div id="message" class="updated"><p><?php _e('File edited successfully.') ?></p></div> +<?php if ( isset( $_GET['updated'] ) ) : ?> + <div id="message" class="updated"><p><?php _e( 'File edited successfully.' ) ?></p></div> <?php endif; -$description = get_file_description($file); -$desc_header = ( $description != $file_show ) ? "$description <span>($file_show)</span>" : $file_show; - -$is_child_theme = $themes[$theme]['Template'] != $themes[$theme]['Stylesheet']; +$description = get_file_description( $file ); +$file_show = array_search( $file, array_filter( $allowed_files ) ); +if ( $description != $file_show ) + $description .= ' <span>(' . $file_show . ')</span>'; ?> <div class="wrap"> <?php screen_icon(); ?> @@ -149,19 +137,19 @@ $is_child_theme = $themes[$theme]['Template'] != $themes[$theme]['Stylesheet']; <div class="fileedit-sub"> <div class="alignleft"> -<h3><?php echo $themes[$theme]['Name'] . ': ' . $desc_header; ?></h3> +<h3><?php echo $theme->display('Name'); if ( $description ) echo ': ' . $description; ?></h3> </div> <div class="alignright"> <form action="theme-editor.php" method="post"> <strong><label for="theme"><?php _e('Select theme to edit:'); ?> </label></strong> <select name="theme" id="theme"> <?php - foreach ($themes as $a_theme) { - $theme_name = $a_theme['Name']; - if ($theme_name == $theme) $selected = " selected='selected'"; - else $selected = ''; - $theme_name = esc_attr($theme_name); - echo "\n\t<option value=\"$theme_name\" $selected>$theme_name</option>"; +foreach ( wp_get_themes( array( 'errors' => null ) ) as $a_stylesheet => $a_theme ) { + if ( $a_theme->errors() && 'theme_no_stylesheet' == $a_theme->errors()->get_error_code() ) + continue; + + $selected = $a_stylesheet == $stylesheet ? ' selected="selected"' : ''; + echo "\n\t" . '<option value="' . esc_attr( $a_stylesheet ) . '"' . $selected . '>' . $a_theme->display('Name') . '</option>'; } ?> </select> @@ -170,78 +158,62 @@ $is_child_theme = $themes[$theme]['Template'] != $themes[$theme]['Stylesheet']; </div> <br class="clear" /> </div> +<?php +if ( $theme->errors() ) + echo '<div class="error"><p><strong>' . __( 'This theme is broken.' ) . '</strong> ' . $theme->errors()->get_error_message() . '</p></div>'; +?> <div id="templateside"> <?php -if ($allowed_files) : +if ( $allowed_files ) : + if ( $has_templates || $theme->parent() ) : ?> <h3><?php _e('Templates'); ?></h3> - <?php if ( $is_child_theme ) : ?> - <p class="howto"><?php printf( __( 'This child theme inherits templates from a parent theme, %s.' ), $themes[$theme]['Parent Theme'] ); ?></p> + <?php if ( $theme->parent() ) : ?> + <p class="howto"><?php printf( __( 'This child theme inherits templates from a parent theme, %s.' ), '<a href="' . self_admin_url('theme-editor.php?theme=' . urlencode( $theme->get_template() ) ) . '">' . $theme->parent()->display('Name') . '</a>' ); ?></p> <?php endif; ?> <ul> <?php - $template_mapping = array(); - $template_dir = $themes[$theme]['Template Dir']; - foreach ( $themes[$theme]['Template Files'] as $template_file ) { - // Don't show parent templates. - if ( $is_child_theme && strpos( $template_file, trailingslashit( $template_dir ) ) === 0 ) - continue; - - $description = trim( get_file_description($template_file) ); - $template_show = basename($template_file); - $filedesc = ( $description != $template_file ) ? "$description<br /><span class='nonessential'>($template_show)</span>" : "$description"; - $filedesc = ( $template_file == $file ) ? "<span class='highlight'>$description<br /><span class='nonessential'>($template_show)</span></span>" : $filedesc; - $template_mapping[ $description ] = array( _get_template_edit_filename($template_file, $template_dir), $filedesc ); - } - ksort( $template_mapping ); - while ( list( $template_sorted_key, list( $template_file, $filedesc ) ) = each( $template_mapping ) ) : - ?> - <li><a href="theme-editor.php?file=<?php echo urlencode( $template_file ) ?>&theme=<?php echo urlencode( $theme ) ?>&dir=theme"><?php echo $filedesc ?></a></li> -<?php endwhile; ?> - </ul> - <h3><?php /* translators: Theme stylesheets in theme editor */ _ex('Styles', 'Theme stylesheets in theme editor'); ?></h3> - <ul> + endif; + + foreach ( $allowed_files as $filename => $absolute_filename ) : + if ( 'style.css' == $filename ) + echo "\t</ul>\n\t<h3>" . _x( 'Styles', 'Theme stylesheets in theme editor' ) . "</h3>\n\t<ul>\n"; + + $file_description = get_file_description( $absolute_filename ); + if ( $file_description != basename( $filename ) ) + $file_description .= '<br /><span class="nonessential">(' . $filename . ')</span>'; + + if ( $absolute_filename == $file ) + $file_description = '<span class="highlight">' . $file_description . '</span>'; +?> + <li><a href="theme-editor.php?file=<?php echo urlencode( $filename ) ?>&theme=<?php echo urlencode( $stylesheet ) ?>"><?php echo $file_description; ?></a></li> <?php - $template_mapping = array(); - $stylesheet_dir = $themes[$theme]['Stylesheet Dir']; - foreach ( $themes[$theme]['Stylesheet Files'] as $style_file ) { - // Don't show parent styles. - if ( $is_child_theme && strpos( $style_file, trailingslashit( $template_dir ) ) === 0 ) - continue; - - $description = trim( get_file_description($style_file) ); - $style_show = basename($style_file); - $filedesc = ( $description != $style_file ) ? "$description<br /><span class='nonessential'>($style_show)</span>" : "$description"; - $filedesc = ( $style_file == $file ) ? "<span class='highlight'>$description<br /><span class='nonessential'>($style_show)</span></span>" : $filedesc; - $template_mapping[ $description ] = array( _get_template_edit_filename($style_file, $stylesheet_dir), $filedesc ); - } - ksort( $template_mapping ); - while ( list( $template_sorted_key, list( $style_file, $filedesc ) ) = each( $template_mapping ) ) : - ?> - <li><a href="theme-editor.php?file=<?php echo urlencode( $style_file ) ?>&theme=<?php echo urlencode($theme) ?>&dir=style"><?php echo $filedesc ?></a></li> -<?php endwhile; ?> - </ul> + endforeach; +?> +</ul> <?php endif; ?> </div> -<?php if (!$error) { ?> +<?php if ( $error ) : + echo '<div class="error"><p>' . __('Oops, no such file exists! Double check the name and try again, merci.') . '</p></div>'; +else : ?> <form name="template" id="template" action="theme-editor.php" method="post"> - <?php wp_nonce_field('edit-theme_' . $file . $theme) ?> - <div><textarea cols="70" rows="25" name="newcontent" id="newcontent" tabindex="1"><?php echo $content ?></textarea> + <?php wp_nonce_field( 'edit-theme_' . $file . $stylesheet ); ?> + <div><textarea cols="70" rows="30" name="newcontent" id="newcontent" tabindex="1"><?php echo $content ?></textarea> <input type="hidden" name="action" value="update" /> - <input type="hidden" name="file" value="<?php echo esc_attr($file) ?>" /> - <input type="hidden" name="theme" value="<?php echo esc_attr($theme) ?>" /> + <input type="hidden" name="file" value="<?php echo esc_attr( $relative_file ); ?>" /> + <input type="hidden" name="theme" value="<?php echo esc_attr( $theme->get_stylesheet() ); ?>" /> <input type="hidden" name="scrollto" id="scrollto" value="<?php echo $scrollto; ?>" /> </div> - <?php if ( isset($functions ) && count($functions) ) { ?> + <?php if ( ! empty( $functions ) ) : ?> <div id="documentation" class="hide-if-no-js"> <label for="docs-list"><?php _e('Documentation:') ?></label> <?php echo $docs_select; ?> <input type="button" class="button" value=" <?php esc_attr_e( 'Lookup' ); ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'http://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&locale=<?php echo urlencode( get_locale() ) ?>&version=<?php echo urlencode( $wp_version ) ?>&redirect=true'); }" /> </div> - <?php } ?> + <?php endif; ?> <div> - <?php if ( is_child_theme() && ! $is_child_theme && $themes[$theme]['Template'] == get_option('template') ) : ?> + <?php if ( is_child_theme() && $theme->get_stylesheet() == get_template() ) : ?> <p><?php if ( is_writeable( $file ) ) { ?><strong><?php _e( 'Caution:' ); ?></strong><?php } ?> <?php _e( 'This is a file in your current parent theme.' ); ?></p> <?php endif; ?> @@ -254,9 +226,7 @@ if ($allowed_files) : </div> </form> <?php - } else { - echo '<div class="error"><p>' . __('Oops, no such file exists! Double check the name and try again, merci.') . '</p></div>'; - } +endif; // $error ?> <br class="clear" /> </div> @@ -272,4 +242,4 @@ jQuery(document).ready(function($){ break; } -include(ABSPATH . "wp-admin/admin-footer.php"); +include(ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/theme-install.php b/wp-admin/theme-install.php index 333ac44f0..8680a5466 100644 --- a/wp-admin/theme-install.php +++ b/wp-admin/theme-install.php @@ -30,22 +30,31 @@ if ( !is_network_admin() ) $submenu_file = 'themes.php'; wp_enqueue_script( 'theme-install' ); - -add_thickbox(); -wp_enqueue_script( 'theme-preview' ); +wp_enqueue_script( 'theme' ); $body_id = $tab; do_action('install_themes_pre_' . $tab); //Used to override the general interface, Eg, install or theme information. -$help = '<p>' . sprintf(__('You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the <a href="%s" target="_blank">WordPress.org Theme Directory</a>. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses.'), 'http://wordpress.org/extend/themes/') . '</p>'; -$help .= '<p>' . __('You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter. Alternately, you can browse the themes that are Featured, Newest, or Recently Updated. When you find a theme you like, you can preview it or install it.') . '</p>'; -$help .= '<p>' . __('You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme’s folder via FTP into your <code>/wp-content/themes</code> directory.') . '</p>'; +$help_overview = + '<p>' . sprintf(__('You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the <a href="%s" target="_blank">WordPress.org Theme Directory</a>. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses.'), 'http://wordpress.org/extend/themes/') . '</p>' . + '<p>' . __('You can Search for themes by keyword, author, or tag, or can get more specific and search by criteria listed in the feature filter. Alternately, you can browse the themes that are Featured, Newest, or Recently Updated. When you find a theme you like, you can preview it or install it.') . '</p>' . + '<p>' . __('You can Upload a theme manually if you have already downloaded its ZIP archive onto your computer (make sure it is from a trusted and original source). You can also do it the old-fashioned way and copy a downloaded theme’s folder via FTP into your <code>/wp-content/themes</code> directory.') . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __('Overview'), - 'content' => $help + 'content' => $help_overview +) ); + +$help_installing = + '<p>' . __('Once you have generated a list of themes, you can preview and install any of them. Click on the thumbnail of the theme you’re interested in previewing. It will open up in a full-screen Preview page to give you a better idea of how that theme will look.') . '</p>' . + '<p>' . __('To install the theme so you can preview it with your site’s content and customize its theme options, click the "Install" button at the top of the left-hand pane. The theme files will be downloaded to your website automatically. When this is complete, the theme is now available for activation, which you can do by clicking the "Activate" link, or by navigating to your Installed Themes page and clicking the "Live Preview" link under any installed theme’s thumbnail image.') . '</p>'; + +get_current_screen()->add_help_tab( array( + 'id' => 'installing', + 'title' => __('Previewing and Installing'), + 'content' => $help_installing ) ); get_current_screen()->set_help_sidebar( @@ -75,4 +84,3 @@ $wp_list_table->views(); ?> </div> <?php include(ABSPATH . 'wp-admin/admin-footer.php'); - diff --git a/wp-admin/themes.php b/wp-admin/themes.php index bb84ca114..c892705ee 100644 --- a/wp-admin/themes.php +++ b/wp-admin/themes.php @@ -16,15 +16,19 @@ $wp_list_table = _get_list_table('WP_Themes_List_Table'); if ( current_user_can( 'switch_themes' ) && isset($_GET['action'] ) ) { if ( 'activate' == $_GET['action'] ) { - check_admin_referer('switch-theme_' . $_GET['template']); + check_admin_referer('switch-theme_' . $_GET['stylesheet']); + $theme = wp_get_theme( $_GET['stylesheet'] ); + if ( ! $theme->exists() || ! $theme->is_allowed() ) + wp_die( __( 'Cheatin’ uh?' ) ); switch_theme($_GET['template'], $_GET['stylesheet']); wp_redirect( admin_url('themes.php?activated=true') ); exit; } elseif ( 'delete' == $_GET['action'] ) { - check_admin_referer('delete-theme_' . $_GET['template']); - if ( !current_user_can('delete_themes') ) + check_admin_referer('delete-theme_' . $_GET['stylesheet']); + $theme = wp_get_theme( $_GET['stylesheet'] ); + if ( !current_user_can('delete_themes') || ! $theme->exists() ) wp_die( __( 'Cheatin’ uh?' ) ); - delete_theme($_GET['template']); + delete_theme($_GET['stylesheet']); wp_redirect( admin_url('themes.php?deleted=true') ); exit; } @@ -38,12 +42,12 @@ $parent_file = 'themes.php'; if ( current_user_can( 'switch_themes' ) ) : $help_manage = '<p>' . __('Aside from the default theme included with your WordPress installation, themes are designed and developed by third parties.') . '</p>' . - '<p>' . __('You can see your active theme at the top of the screen. Below are the other themes you have installed that are not currently in use. You can see what your site would look like with one of these themes by clicking the Preview link. To change themes, click the Activate link.') . '</p>'; + '<p>' . __('You can see your active theme at the top of the screen. Below are the other themes you have installed that are not currently in use. You can see what your site would look like with one of these themes by clicking the Live Preview link (see "Previewing and Customizing" help tab). To change themes, click the Activate link.') . '</p>'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __('Overview'), - 'content' => $help_manage, + 'content' => $help_manage ) ); if ( current_user_can( 'install_themes' ) ) { @@ -56,7 +60,23 @@ if ( current_user_can( 'install_themes' ) ) { get_current_screen()->add_help_tab( array( 'id' => 'adding-themes', 'title' => __('Adding Themes'), - 'content' => $help_install, + 'content' => $help_install + ) ); +} + +endif; // switch_themes + +if ( current_user_can( 'edit_theme_options' ) ) { + $help_customize = + '<p>' . __('Click on the "Live Preview" link under any theme to preview that theme and change theme options in a separate, full-screen view. Any installed theme can be previewed and customized in this way.') . '</p>'. + '<p>' . __('The theme being previewed is fully interactive — navigate to different pages to see how the theme handles posts, archives, and other page templates.') . '</p>' . + '<p>' . __('In the left-hand pane you can edit the theme settings. The settings will differ, depending on what theme features the theme being previewed supports. To accept the new settings and activate the theme all in one step, click the "Save & Activate" button at the top of the left-hand pane.') . '</p>' . + '<p>' . __('When previewing on smaller monitors, you can use the "Collapse" icon at the bottom of the left-hand pane. This will hide the pane, giving you more room to preview your site in the new theme. To bring the pane back, click on the Collapse icon again.') . '</p>'; + + get_current_screen()->add_help_tab( array( + 'id' => 'customize-preview-themes', + 'title' => __('Previewing and Customizing'), + 'content' => $help_customize ) ); } @@ -66,27 +86,12 @@ get_current_screen()->set_help_sidebar( '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>' ); -add_thickbox(); -wp_enqueue_script( 'theme-preview' ); wp_enqueue_script( 'theme' ); - -endif; +wp_enqueue_script( 'customize-loader' ); require_once('./admin-header.php'); ?> -<?php if ( ! validate_current_theme() ) : ?> -<div id="message1" class="updated"><p><?php _e('The active theme is broken. Reverting to the default theme.'); ?></p></div> -<?php elseif ( isset($_GET['activated']) ) : - if ( isset($wp_registered_sidebars) && count( (array) $wp_registered_sidebars ) && current_user_can('edit_theme_options') ) { ?> -<div id="message2" class="updated"><p><?php printf( __('New theme activated. This theme supports widgets, please visit the <a href="%s">widgets settings</a> screen to configure them.'), admin_url( 'widgets.php' ) ); ?></p></div><?php - } else { ?> -<div id="message2" class="updated"><p><?php printf( __( 'New theme activated. <a href="%s">Visit site</a>' ), home_url( '/' ) ); ?></p></div><?php - } - elseif ( isset($_GET['deleted']) ) : ?> -<div id="message3" class="updated"><p><?php _e('Theme deleted.') ?></p></div> -<?php endif; ?> - <div class="wrap"><?php screen_icon(); if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?> @@ -96,18 +101,53 @@ if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?> <h2><?php echo esc_html( $title ); ?> <?php endif; ?> </h2> +<?php +if ( ! validate_current_theme() || isset( $_GET['broken'] ) ) : ?> +<div id="message1" class="updated"><p><?php _e('The active theme is broken. Reverting to the default theme.'); ?></p></div> +<?php elseif ( isset($_GET['activated']) ) : + if ( isset( $_GET['previewed'] ) ) { ?> + <div id="message2" class="updated"><p><?php printf( __( 'Settings saved and theme activated. <a href="%s">Visit site</a>.' ), home_url( '/' ) ); ?></p></div> + <?php } elseif ( isset($wp_registered_sidebars) && count( (array) $wp_registered_sidebars ) && current_user_can('edit_theme_options') ) { ?> +<div id="message2" class="updated"><p><?php printf( __('New theme activated. This theme supports widgets, please visit the <a href="%s">widgets settings</a> screen to configure them.'), admin_url( 'widgets.php' ) ); ?></p></div><?php + } else { ?> +<div id="message2" class="updated"><p><?php printf( __( 'New theme activated. <a href="%s">Visit site</a>' ), home_url( '/' ) ); ?></p></div><?php + } + elseif ( isset($_GET['deleted']) ) : ?> +<div id="message3" class="updated"><p><?php _e('Theme deleted.') ?></p></div> +<?php +endif; + +$ct = wp_get_theme(); +$screenshot = $ct->get_screenshot(); +$class = $screenshot ? 'has-screenshot' : ''; + +$customize_title = sprintf( __( 'Customize “%s”' ), $ct->display('Name') ); + +?> +<div id="current-theme" class="<?php echo esc_attr( $class ); ?>"> + <?php if ( $screenshot ) : ?> + <?php if ( current_user_can( 'edit_theme_options' ) ) : ?> + <a href="<?php echo wp_customize_url(); ?>" class="load-customize hide-if-no-customize" title="<?php echo esc_attr( $customize_title ); ?>"> + <img src="<?php echo esc_url( $screenshot ); ?>" alt="<?php esc_attr_e( 'Current theme preview' ); ?>" /> + </a> + <?php endif; ?> + <img class="hide-if-customize" src="<?php echo esc_url( $screenshot ); ?>" alt="<?php esc_attr_e( 'Current theme preview' ); ?>" /> + <?php endif; ?> + + <h3><?php _e('Current Theme'); ?></h3> + <h4> + <?php echo $ct->display('Name'); ?> + </h4> + + <div> + <ul class="theme-info"> + <li><?php printf( __('By %s'), $ct->display('Author') ); ?></li> + <li><?php printf( __('Version %s'), $ct->display('Version') ); ?></li> + </ul> + <p class="theme-description"><?php echo $ct->display('Description'); ?></p> + <?php theme_update_available( $ct ); ?> + </div> -<h3><?php _e('Current Theme'); ?></h3> -<div id="current-theme"> -<?php if ( $ct->screenshot ) : ?> -<img src="<?php echo $ct->theme_root_uri . '/' . $ct->stylesheet . '/' . $ct->screenshot; ?>" alt="<?php esc_attr_e('Current theme preview'); ?>" /> -<?php endif; ?> -<h4><?php - /* translators: 1: theme title, 2: theme version, 3: theme author */ - printf(__('%1$s %2$s by %3$s'), $ct->title, $ct->version, $ct->author) ; ?></h4> -<p class="theme-description"><?php echo $ct->description; ?></p> -<div class="theme-options"> - <span><?php _e( 'Options:' )?></span> <?php // Pretend you didn't see this. $options = array(); @@ -117,10 +157,10 @@ if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?> if ( 'themes.php' == $item[2] || 'theme-editor.php' == $item[2] ) continue; // 0 = name, 1 = capability, 2 = file - if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) ) $class = ' class="current"'; - + if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) ) + $class = ' class="current"'; if ( !empty($submenu[$item[2]]) ) { - $submenu[$item[2]] = array_values($submenu[$item[2]]); // Re-index. + $submenu[$item[2]] = array_values($submenu[$item[2]]); // Re-index. $menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]); if ( file_exists(WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook)) $options[] = "<a href='admin.php?page={$submenu[$item[2]][0][2]}'$class>{$item[0]}</a>"; @@ -135,13 +175,27 @@ if ( ! is_multisite() && current_user_can( 'install_themes' ) ) : ?> } } } - echo implode ( ' | ', $options ); - if ( $ct->tags ) : ?> - <p><?php _e('Tags:'); ?> <?php echo join(', ', $ct->tags); ?></p> - <?php endif; ?> -</div> -<?php theme_update_available($ct); ?> + if ( $options || current_user_can( 'edit_theme_options' ) ) : + ?> + <div class="theme-options"> + <?php if ( current_user_can( 'edit_theme_options' ) ) : ?> + <a id="customize-current-theme-link" href="<?php echo wp_customize_url(); ?>" class="load-customize hide-if-no-customize" title="<?php echo esc_attr( $customize_title ); ?>"><?php _e( 'Customize' ); ?></a> + <?php + endif; // edit_theme_options + if ( $options ) : + ?> + <span><?php _e( 'Options:' )?></span> + <ul> + <?php foreach ( $options as $option ) : ?> + <li><?php echo $option; ?></li> + <?php endforeach; ?> + </ul> + </div> + <?php + endif; // options + endif; // options || edit_theme_options + ?> </div> @@ -154,21 +208,19 @@ if ( ! current_user_can( 'switch_themes' ) ) { } ?> -<h3><?php _e('Available Themes'); ?></h3> +<form class="search-form filter-form" action="" method="get"> -<?php if ( !empty( $_REQUEST['s'] ) || !empty( $_REQUEST['filter'] ) || $wp_list_table->has_items() ) : ?> +<h3 class="available-themes"><?php _e('Available Themes'); ?></h3> -<form class="search-form filter-form" action="" method="get"> +<?php if ( !empty( $_REQUEST['s'] ) || !empty( $_REQUEST['features'] ) || $wp_list_table->has_items() ) : ?> <p class="search-box"> <label class="screen-reader-text" for="theme-search-input"><?php _e('Search Installed Themes'); ?>:</label> - <input type="text" id="theme-search-input" name="s" value="<?php _admin_search_query(); ?>" /> + <input type="search" id="theme-search-input" name="s" value="<?php _admin_search_query(); ?>" /> <?php submit_button( __( 'Search Installed Themes' ), 'button', false, false, array( 'id' => 'search-submit' ) ); ?> <a id="filter-click" href="?filter=1"><?php _e( 'Feature Filter' ); ?></a> </p> -<br class="clear"/> - <div id="filter-box" style="<?php if ( empty($_REQUEST['filter']) ) echo 'display: none;'; ?>"> <?php $feature_list = get_theme_feature_list(); ?> <div class="feature-filter"> @@ -198,19 +250,19 @@ if ( ! current_user_can( 'switch_themes' ) ) { <?php endforeach; ?> <div class="feature-container"> - <?php submit_button( __( 'Apply Filters' ), 'button-secondary submitter', false, false, array( 'style' => 'margin-left: 120px', 'id' => 'filter-submit' ) ); ?> + <?php submit_button( __( 'Apply Filters' ), 'button-secondary submitter', false, false, array( 'id' => 'filter-submit' ) ); ?> - <small><a id="mini-filter-click" href="<?php echo esc_url( remove_query_arg( array('filter', 'features', 'submit') ) ); ?>"><?php _e( 'Close filters' )?></a></small> + <a id="mini-filter-click" href="<?php echo esc_url( remove_query_arg( array('filter', 'features', 'submit') ) ); ?>"><?php _e( 'Close filters' )?></a> </div> <br/> </div> <br class="clear"/> </div> -<br class="clear" /> - <?php endif; ?> +<br class="clear" /> + <?php $wp_list_table->display(); ?> </form> @@ -218,8 +270,7 @@ if ( ! current_user_can( 'switch_themes' ) ) { <?php // List broken themes, if any. -$broken_themes = get_broken_themes(); -if ( current_user_can('edit_themes') && count( $broken_themes ) ) { +if ( ! is_multisite() && current_user_can('edit_themes') && $broken_themes = wp_get_themes( array( 'errors' => true ) ) ) { ?> <h3><?php _e('Broken Themes'); ?></h3> @@ -231,20 +282,13 @@ if ( current_user_can('edit_themes') && count( $broken_themes ) ) { <th><?php _e('Description'); ?></th> </tr> <?php - $theme = ''; - - $theme_names = array_keys($broken_themes); - natcasesort($theme_names); - - foreach ($theme_names as $theme_name) { - $title = $broken_themes[$theme_name]['Title']; - $description = $broken_themes[$theme_name]['Description']; - - $theme = ('class="alternate"' == $theme) ? '' : 'class="alternate"'; + $alt = ''; + foreach ( $broken_themes as $broken_theme ) { + $alt = ('class="alternate"' == $alt) ? '' : 'class="alternate"'; echo " - <tr $theme> - <td>$title</td> - <td>$description</td> + <tr $alt> + <td>" . $broken_theme->get('Name') ."</td> + <td>" . $broken_theme->errors()->get_error_message() . "</td> </tr>"; } ?> diff --git a/wp-admin/tools.php b/wp-admin/tools.php index 788972775..a036f2855 100644 --- a/wp-admin/tools.php +++ b/wp-admin/tools.php @@ -19,8 +19,8 @@ get_current_screen()->add_help_tab( array( get_current_screen()->add_help_tab( array( 'id' => 'converter', 'title' => __('Categories and Tags Converter'), - 'content' => '<p>' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierachy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' . - '<p>' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, return to this screen and the link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '</p>', + 'content' => '<p>' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' . + '<p>' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '</p>', ) ); get_current_screen()->set_help_sidebar( @@ -69,4 +69,3 @@ do_action( 'tool_box' ); </div> <?php include('./admin-footer.php'); -?> diff --git a/wp-admin/update-core.php b/wp-admin/update-core.php index c071dc238..360bb91ad 100644 --- a/wp-admin/update-core.php +++ b/wp-admin/update-core.php @@ -36,7 +36,7 @@ function list_core_update( $update ) { $mysql_version = $wpdb->db_version(); $show_buttons = true; if ( 'development' == $update->response ) { - $message = __('You are using a development version of WordPress. You can update to the latest nightly build automatically or download the nightly build and install it manually:'); + $message = __('You are using a development version of WordPress. You can update to the latest nightly build automatically or download the nightly build and install it manually:'); $download = __('Download nightly build'); } else { if ( $current ) { @@ -180,7 +180,7 @@ function core_upgrade_preamble() { echo '<p>' . __( 'While your site is being updated, it will be in maintenance mode. As soon as your updates are complete, your site will return to normal.' ) . '</p>'; } else { list( $normalized_version ) = explode( '-', $wp_version ); - echo '<p>' . sprintf( __( '<a href="%s">Learn more about WordPress %s</a>.' ), esc_url( admin_url( 'about.php' ) ), $normalized_version ) . '</p>'; + echo '<p>' . sprintf( __( '<a href="%s">Learn more about WordPress %s</a>.' ), esc_url( self_admin_url( 'about.php' ) ), $normalized_version ) . '</p>'; } dismissed_updates(); @@ -260,7 +260,7 @@ function list_plugin_updates() { $upgrade_notice = ''; } - $details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $plugin_data->update->slug . '&TB_iframe=true&width=640&height=662'); + $details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $plugin_data->update->slug . '§ion=changelog&TB_iframe=true&width=640&height=662'); $details_text = sprintf(__('View version %1$s details'), $plugin_data->update->new_version); $details = sprintf('<a href="%1$s" class="thickbox" title="%2$s">%3$s</a>.', esc_url($details_url), esc_attr($plugin_data->Name), $details_text); @@ -311,13 +311,11 @@ function list_theme_updates() { </tfoot> <tbody class="plugins"> <?php - foreach ( (array) $themes as $stylesheet => $theme_data) { - $screenshot = $theme_data->{'Theme Root URI'} . '/' . $stylesheet . '/' . $theme_data->Screenshot; - + foreach ( $themes as $stylesheet => $theme ) { echo " <tr class='active'> - <th scope='row' class='check-column'><input type='checkbox' name='checked[]' value='" . esc_attr($stylesheet) . "' /></th> - <td class='plugin-title'><img src='$screenshot' width='64' height='64' style='float:left; padding: 0 5px 5px' /><strong>{$theme_data->Name}</strong>" . sprintf(__('You have version %1$s installed. Update to %2$s.'), $theme_data->Version, $theme_data->update['new_version']) . "</td> + <th scope='row' class='check-column'><input type='checkbox' name='checked[]' value='" . esc_attr( $stylesheet ) . "' /></th> + <td class='plugin-title'><img src='" . esc_url( $theme->get_screenshot() ) . "' width='64' height='64' style='float:left; padding: 0 5px 5px' /><strong>" . $theme->display('Name') . '</strong> ' . sprintf( __( 'You have version %1$s installed. Update to %2$s.' ), $theme->display('Version'), $theme->update['new_version'] ) . "</td> </tr>"; } ?> @@ -352,7 +350,6 @@ function do_core_upgrade( $reinstall = false ) { if ( !$update ) return; - if ( ! WP_Filesystem($credentials, ABSPATH) ) { request_filesystem_credentials($url, '', true, ABSPATH); //Failed to connect, Error and request again return; @@ -383,12 +380,12 @@ function do_core_upgrade( $reinstall = false ) { } show_message( __('WordPress updated successfully') ); - show_message( '<span class="hide-if-no-js">' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%s">here</a>.' ), $result, esc_url( admin_url( 'about.php?updated' ) ) ) . '</span>' ); - show_message( '<span class="hide-if-js">' . sprintf( __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $result, esc_url( admin_url( 'about.php?updated' ) ) ) . '</span>' ); + show_message( '<span class="hide-if-no-js">' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%s">here</a>.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' ); + show_message( '<span class="hide-if-js">' . sprintf( __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' ); ?> </div> <script type="text/javascript"> - window.location = '<?php echo admin_url( 'about.php?upgraded' ); ?>'; + window.location = '<?php echo self_admin_url( 'about.php?updated' ); ?>'; </script> <?php } @@ -447,7 +444,6 @@ get_current_screen()->add_help_tab( array( '<p>' . __('To update themes or plugins from this screen, use the checkboxes to make your selection and click on the appropriate Update button. Check the box at the top of the Themes or Plugins section to select all and update them all at once.') . '</p>' ) ); - get_current_screen()->set_help_sidebar( '<p><strong>' . __('For more information:') . '</strong></p>' . '<p>' . __('<a href="http://codex.wordpress.org/Dashboard_Updates_Screen" target="_blank">Documentation on Updating WordPress</a>') . '</p>' . diff --git a/wp-admin/update.php b/wp-admin/update.php index 71708d044..4fdf2064c 100644 --- a/wp-admin/update.php +++ b/wp-admin/update.php @@ -152,8 +152,8 @@ if ( isset($_GET['action']) ) { check_admin_referer('upgrade-theme_' . $theme); - add_thickbox(); - wp_enqueue_script('theme-preview'); + wp_enqueue_script( 'customize-loader' ); + $title = __('Update Theme'); $parent_file = 'themes.php'; $submenu_file = 'themes.php'; @@ -199,13 +199,13 @@ if ( isset($_GET['action']) ) { include_once ABSPATH . 'wp-admin/includes/theme-install.php'; //for themes_api.. check_admin_referer('install-theme_' . $theme); - $api = themes_api('theme_information', array('slug' => $theme, 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth. + $api = themes_api('theme_information', array('slug' => $theme, 'fields' => array('sections' => false, 'tags' => false) ) ); //Save on a bit of bandwidth. if ( is_wp_error($api) ) wp_die($api); - add_thickbox(); - wp_enqueue_script('theme-preview'); + wp_enqueue_script( 'customize-loader' ); + $title = __('Install Themes'); $parent_file = 'themes.php'; $submenu_file = 'themes.php'; @@ -230,11 +230,12 @@ if ( isset($_GET['action']) ) { $file_upload = new File_Upload_Upgrader('themezip', 'package'); + wp_enqueue_script( 'customize-loader' ); + $title = __('Upload Theme'); $parent_file = 'themes.php'; $submenu_file = 'theme-install.php'; - add_thickbox(); - wp_enqueue_script('theme-preview'); + require_once(ABSPATH . 'wp-admin/admin-header.php'); $title = sprintf( __('Installing Theme from uploaded file: %s'), basename( $file_upload->filename ) ); diff --git a/wp-admin/upgrade-functions.php b/wp-admin/upgrade-functions.php index ca14a59c8..080d74d7c 100644 --- a/wp-admin/upgrade-functions.php +++ b/wp-admin/upgrade-functions.php @@ -10,4 +10,3 @@ _deprecated_file( basename(__FILE__), '2.5', 'wp-admin/includes/upgrade.php' ); require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); -?> diff --git a/wp-admin/upgrade.php b/wp-admin/upgrade.php index 4a2a0f425..6e5d3b811 100644 --- a/wp-admin/upgrade.php +++ b/wp-admin/upgrade.php @@ -27,7 +27,7 @@ if ( isset( $_GET['step'] ) ) else $step = 0; -// Do it. No output. +// Do it. No output. if ( 'upgrade_db' === $step ) { wp_upgrade(); die( '0' ); @@ -56,7 +56,7 @@ else ?> </head> <body> -<h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png" /></h1> +<h1 id="logo"><img alt="WordPress" src="images/wordpress-logo.png?ver=20120216" /></h1> <?php if ( get_option( 'db_version' ) == $wp_db_version || !is_blog_installed() ) : ?> @@ -88,7 +88,7 @@ switch ( $step ) : case 1: wp_upgrade(); - $backto = !empty($_GET['backto']) ? stripslashes( urldecode( $_GET['backto'] ) ) : __get_option( 'home' ) . '/'; + $backto = !empty($_GET['backto']) ? stripslashes( urldecode( $_GET['backto'] ) ) : __get_option( 'home' ) . '/'; $backto = esc_url( $backto ); $backto = wp_validate_redirect($backto, __get_option( 'home' ) . '/'); ?> diff --git a/wp-admin/upload.php b/wp-admin/upload.php index 63771a83a..d17232747 100644 --- a/wp-admin/upload.php +++ b/wp-admin/upload.php @@ -176,7 +176,12 @@ require_once('./admin-header.php'); <div class="wrap"> <?php screen_icon(); ?> -<h2><?php echo esc_html( $title ); ?> <a href="media-new.php" class="add-new-h2"><?php echo esc_html_x('Add New', 'file'); ?></a> <?php +<h2> +<?php +echo esc_html( $title ); +if ( current_user_can( 'upload_files' ) ) { ?> + <a href="media-new.php" class="add-new-h2"><?php echo esc_html_x('Add New', 'file'); ?></a><?php +} if ( ! empty( $_REQUEST['s'] ) ) printf( '<span class="subtitle">' . __('Search results for “%s”') . '</span>', get_search_query() ); ?> </h2> diff --git a/wp-admin/user-edit.php b/wp-admin/user-edit.php index 5f3d07e0f..dfc878dd9 100644 --- a/wp-admin/user-edit.php +++ b/wp-admin/user-edit.php @@ -36,7 +36,6 @@ if ( current_user_can('edit_users') && !is_user_admin() ) else $parent_file = 'profile.php'; - $profile_help = '<p>' . __('Your profile contains information about you (your “account”) as well as some personal options related to using WordPress.') . '</p>' . '<p>' . __('You can change your password, turn on keyboard shortcuts, change the color scheme of your WordPress administration screens, and turn off the WYSIWYG (Visual) editor, among other things. You can hide the Toolbar (formerly called the Admin Bar) from the front end of your site, however it cannot be disabled on the admin screens.') . '</p>' . '<p>' . __('Your username cannot be changed, but you can use other fields to enter your real name or a nickname, and change which name to display on your posts.') . '</p>' . @@ -75,7 +74,6 @@ function use_ssl_preference($user) { <?php } - // Only allow super admins on multisite to edit every user. if ( is_multisite() && ! current_user_can( 'manage_network_users' ) && $user_id != $current_user->ID && ! apply_filters( 'enable_edit_any_user_configuration', true ) ) wp_die( __( 'You do not have permission to edit this user.' ) ); @@ -321,7 +319,7 @@ if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_c foreach ( $public_display as $id => $item ) { ?> - <option id="<?php echo $id; ?>"<?php selected( $profileuser->display_name, $item ); ?>><?php echo $item; ?></option> + <option <?php selected( $profileuser->display_name, $item ); ?>><?php echo $item; ?></option> <?php } ?> @@ -432,4 +430,3 @@ break; </script> <?php include( ABSPATH . 'wp-admin/admin-footer.php'); -?> diff --git a/wp-admin/user-new.php b/wp-admin/user-new.php index 43c37033e..3119eb572 100644 --- a/wp-admin/user-new.php +++ b/wp-admin/user-new.php @@ -26,7 +26,7 @@ If you do not want to join this site please ignore this email. This invitation will expire in a few days. Please click the following link to activate your user account: -%%s' ), get_bloginfo('name'), site_url(), esc_html( $_REQUEST[ 'role' ] ) ); +%%s' ), get_bloginfo('name'), home_url(), esc_html( $_REQUEST[ 'role' ] ) ); } add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' ); @@ -80,7 +80,7 @@ You\'ve been invited to join \'%1$s\' at Please click the following link to confirm the invite: %4$s' ); - wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), get_option( 'blogname' ) ), sprintf($message, get_option('blogname'), site_url(), $_REQUEST[ 'role' ], site_url("/newbloguser/$newuser_key/"))); + wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), get_option( 'blogname' ) ), sprintf($message, get_option('blogname'), home_url(), $_REQUEST[ 'role' ], home_url("/newbloguser/$newuser_key/"))); $redirect = add_query_arg( array('update' => 'add'), 'user-new.php' ); } } @@ -92,18 +92,16 @@ Please click the following link to confirm the invite: if ( ! current_user_can('create_users') ) wp_die(__('Cheatin’ uh?')); - if ( !is_multisite() ) { - $user_id = add_user(); + if ( ! is_multisite() ) { + $user_id = edit_user(); if ( is_wp_error( $user_id ) ) { $add_user_errors = $user_id; } else { - if ( current_user_can('edit_users') ) { - $new_user_login = apply_filters('pre_user_login', sanitize_user(stripslashes($_REQUEST['user_login']), true)); - $redirect = 'users.php?usersearch='. urlencode($new_user_login) . '&update=add' . '#user-' . $user_id; - } else { + if ( current_user_can( 'list_users' ) ) + $redirect = 'users.php?update=add&id=' . $user_id; + else $redirect = add_query_arg( 'update', 'add', 'user-new.php' ); - } wp_redirect( $redirect ); die(); } @@ -143,7 +141,7 @@ $help = '<p>' . __('To add a new user to your site, fill in the form on this scr if ( is_multisite() ) { $help .= '<p>' . __('Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users.') . '</p>' . - '<p>' . __('New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you don’t want the user to recieve a welcome email.') . '</p>'; + '<p>' . __('New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you don’t want the user to receive a welcome email.') . '</p>'; } else { $help .= '<p>' . __('You must assign a password to the new user, which they can change after logging in. The username, however, cannot be changed.') . '</p>' . '<p>' . __('New users will receive an email letting them know they’ve been added as a user for your site. By default, this email will also contain their password. Uncheck the box if you don’t want the password to be included in the welcome email.') . '</p>'; @@ -163,7 +161,7 @@ get_current_screen()->add_help_tab( array( 'content' => '<p>' . __('Here is a basic overview of the different user roles and the permissions associated with each one:') . '</p>' . '<ul>' . '<li>' . __('Administrators have access to all the administration features.') . '</li>' . - '<li>' . __('Editors can publish posts, manage posts as well as manage other people’s posts, etc.') . '</li>' . + '<li>' . __('Editors can publish posts, manage posts as well as manage other people’s posts, etc.') . '</li>' . '<li>' . __('Authors can publish and manage their own posts, and are able to upload files.') . '</li>' . '<li>' . __('Contributors can write and manage their posts but not publish posts or upload media files.') . '</li>' . '<li>' . __('Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content.') . '</li>' . @@ -179,7 +177,13 @@ get_current_screen()->set_help_sidebar( wp_enqueue_script('wp-ajax-response'); wp_enqueue_script('user-profile'); -require_once ('admin-header.php'); +if ( is_multisite() && current_user_can( 'promote_users' ) && ! wp_is_large_network( 'users' ) + && ( is_super_admin() || apply_filters( 'autocomplete_users_for_site_admins', false ) ) +) { + wp_enqueue_script( 'user-suggest' ); +} + +require_once( 'admin-header.php' ); if ( isset($_GET['update']) ) { $messages = array(); @@ -251,10 +255,10 @@ if ( is_multisite() ) { if ( $do_both ) echo '<h3 id="add-existing-user">' . __('Add Existing User') . '</h3>'; if ( !is_super_admin() ) { - _e( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ); + _e( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ); $label = __('E-mail'); } else { - _e( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ); + _e( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ); $label = __('E-mail or Username'); } ?> @@ -265,7 +269,7 @@ if ( is_multisite() ) { <table class="form-table"> <tr class="form-field form-required"> <th scope="row"><label for="adduser-email"><?php echo $label; ?></label></th> - <td><input name="email" type="text" id="adduser-email" value="" /></td> + <td><input name="email" type="text" id="adduser-email" class="wp-suggest-user" value="" /></td> </tr> <tr class="form-field"> <th scope="row"><label for="adduser-role"><?php _e('Role'); ?></label></th> @@ -361,7 +365,7 @@ foreach ( array( 'user_login' => 'login', 'first_name' => 'firstname', 'last_nam <?php if ( is_multisite() && is_super_admin() ) { ?> <tr> <th scope="row"><label for="noconfirmation"><?php _e('Skip Confirmation Email') ?></label></th> - <td><label for="noconfirmation"><input type="checkbox" name="noconfirmation" id="noconfirmation" value="1" <?php checked( $new_user_ignore_pass ); ?> /> <?php _e( 'Add the user without sending them a confirmation email.' ); ?></label></td> + <td><label for="noconfirmation"><input type="checkbox" name="noconfirmation" id="noconfirmation" value="1" <?php checked( $new_user_ignore_pass ); ?> /> <?php _e( 'Add the user without sending them a confirmation email.' ); ?></label></td> </tr> <?php } ?> </table> @@ -373,4 +377,3 @@ foreach ( array( 'user_login' => 'login', 'first_name' => 'firstname', 'last_nam </div> <?php include('./admin-footer.php'); -?> diff --git a/wp-admin/user/about.php b/wp-admin/user/about.php new file mode 100644 index 000000000..a5dbc9899 --- /dev/null +++ b/wp-admin/user/about.php @@ -0,0 +1,13 @@ +<?php +/** + * User Dashboard About administration panel. + * + * @package WordPress + * @subpackage Administration + * @since 3.4.0 + */ + +/** Load WordPress Administration Bootstrap */ +require_once( './admin.php' ); + +require( '../about.php' ); \ No newline at end of file diff --git a/wp-admin/user/admin.php b/wp-admin/user/admin.php index 6aebd88cc..25691c866 100644 --- a/wp-admin/user/admin.php +++ b/wp-admin/user/admin.php @@ -7,7 +7,7 @@ * @since 3.1.0 */ -define('WP_USER_ADMIN', TRUE); +define('WP_USER_ADMIN', true); require_once( dirname(dirname(__FILE__)) . '/admin.php'); @@ -23,5 +23,3 @@ if ( $redirect_user_admin_request ) { exit; } unset( $redirect_user_admin_request ); - -?> diff --git a/wp-admin/user/credits.php b/wp-admin/user/credits.php new file mode 100644 index 000000000..faba84d01 --- /dev/null +++ b/wp-admin/user/credits.php @@ -0,0 +1,13 @@ +<?php +/** + * User Dashboard Credits administration panel. + * + * @package WordPress + * @subpackage Administration + * @since 3.4.0 + */ + +/** Load WordPress Administration Bootstrap */ +require_once( './admin.php' ); + +require( '../credits.php' ); \ No newline at end of file diff --git a/wp-admin/user/freedoms.php b/wp-admin/user/freedoms.php new file mode 100644 index 000000000..3d04407ad --- /dev/null +++ b/wp-admin/user/freedoms.php @@ -0,0 +1,13 @@ +<?php +/** + * User Dashboard Freedoms administration panel. + * + * @package WordPress + * @subpackage Administration + * @since 3.4.0 + */ + +/** Load WordPress Administration Bootstrap */ +require_once( './admin.php' ); + +require( '../freedoms.php' ); \ No newline at end of file diff --git a/wp-admin/user/menu.php b/wp-admin/user/menu.php index 5f9e4f648..9f30076bd 100644 --- a/wp-admin/user/menu.php +++ b/wp-admin/user/menu.php @@ -20,5 +20,3 @@ $compat = array(); $submenu = array(); require_once(ABSPATH . 'wp-admin/includes/menu.php'); - -?> diff --git a/wp-admin/users.php b/wp-admin/users.php index 5fefb4276..f26255fca 100644 --- a/wp-admin/users.php +++ b/wp-admin/users.php @@ -33,7 +33,7 @@ get_current_screen()->add_help_tab( array( 'content' => '<p>' . __('You can customize the display of this screen in a number of ways:') . '</p>' . '<ul>' . '<li>' . __('You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.') . '</li>' . - '<li>' . __('You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.') . '</li>' . + '<li>' . __('You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.') . '</li>' . '<li>' . __('You can view all posts made by a user by clicking on the number under the Posts column.') . '</li>' . '</ul>' ) ); @@ -338,6 +338,7 @@ default: wp_redirect( add_query_arg( 'paged', $total_pages ) ); exit; } + include('./admin-header.php'); $messages = array(); @@ -346,10 +347,16 @@ default: case 'del': case 'del_many': $delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0; - $messages[] = '<div id="message" class="updated"><p>' . sprintf(_n('%s user deleted', '%s users deleted', $delete_count), $delete_count) . '</p></div>'; + $messages[] = '<div id="message" class="updated"><p>' . sprintf( _n( 'User deleted.', '%s users deleted.', $delete_count ), number_format_i18n( $delete_count ) ) . '</p></div>'; break; case 'add': - $messages[] = '<div id="message" class="updated"><p>' . __('New user created.') . '</p></div>'; + if ( isset( $_GET['id'] ) && ( $user_id = $_GET['id'] ) && current_user_can( 'edit_user', $user_id ) ) { + $messages[] = '<div id="message" class="updated"><p>' . sprintf( __( 'New user created. <a href="%s">Edit user</a>' ), + esc_url( add_query_arg( 'wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), + self_admin_url( 'user-edit.php?user_id=' . $user_id ) ) ) ) . '</p></div>'; + } else { + $messages[] = '<div id="message" class="updated"><p>' . __( 'New user created.' ) . '</p></div>'; + } break; case 'promote': $messages[] = '<div id="message" class="updated"><p>' . __('Changed roles.') . '</p></div>'; diff --git a/wp-admin/widgets.php b/wp-admin/widgets.php index 6c05e5330..9df98fbe2 100644 --- a/wp-admin/widgets.php +++ b/wp-admin/widgets.php @@ -25,11 +25,15 @@ function wp_widgets_access_body_class($classes) { return "$classes widgets_access "; } -if ( 'on' == $widgets_access ) +if ( 'on' == $widgets_access ) { add_filter( 'admin_body_class', 'wp_widgets_access_body_class' ); -else +} else { wp_enqueue_script('admin-widgets'); + if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); +} + do_action( 'sidebar_admin_setup' ); $title = __( 'Widgets' ); diff --git a/wp-app.php b/wp-app.php index 323f832a8..217ee7b6a 100644 --- a/wp-app.php +++ b/wp-app.php @@ -18,1595 +18,36 @@ require_once('./wp-load.php'); /** Atom Publishing Protocol Class */ require_once(ABSPATH . WPINC . '/atomlib.php'); +/** Atom Server **/ +require_once(ABSPATH . WPINC . '/class-wp-atom-server.php'); + /** Admin Image API for metadata updating */ require_once(ABSPATH . '/wp-admin/includes/image.php'); $_SERVER['PATH_INFO'] = preg_replace( '/.*\/wp-app\.php/', '', $_SERVER['REQUEST_URI'] ); -/** - * Whether to enable Atom Publishing Protocol Logging. - * - * @name app_logging - * @var int|bool - */ -$app_logging = 0; +// Allow for a plugin to insert a different class to handle requests. +$wp_atom_server_class = apply_filters('wp_atom_server_class', 'wp_atom_server'); +$wp_atom_server = new $wp_atom_server_class; -/** - * Whether to always authenticate user. Permanently set to true. - * - * @name always_authenticate - * @var int|bool - * @todo Should be an option somewhere - */ -$always_authenticate = 1; +// Handle the request +$wp_atom_server->handle_request(); + +exit; /** * Writes logging info to a file. * * @since 2.2.0 - * @uses $app_logging - * @package WordPress - * @subpackage Logging + * @deprecated 3.4.0 + * @deprecated Use error_log() + * @link http://www.php.net/manual/en/function.error-log.php * * @param string $label Type of logging * @param string $msg Information describing logging reason. */ -function log_app($label,$msg) { - global $app_logging; - if ($app_logging) { - $fp = fopen( 'wp-app.log', 'a+'); - $date = gmdate( 'Y-m-d H:i:s' ); - fwrite($fp, "\n\n$date - $label\n$msg\n"); - fclose($fp); - } -} - -/** - * Filter to add more post statuses. - * - * @since 2.2.0 - * - * @param string $where SQL statement to filter. - * @return string Filtered SQL statement with added post_status for where clause. - */ -function wa_posts_where_include_drafts_filter($where) { - $where = str_replace("post_status = 'publish'","post_status = 'publish' OR post_status = 'future' OR post_status = 'draft' OR post_status = 'inherit'", $where); - return $where; - +function log_app( $label, $msg ) { + _deprecated_function( __FUNCTION__, '3.4', 'error_log()' ); + if ( ! empty( $GLOBALS['app_logging'] ) ) + error_log( $label . ' - ' . $msg ); } -add_filter('posts_where', 'wa_posts_where_include_drafts_filter'); - -/** - * WordPress AtomPub API implementation. - * - * @package WordPress - * @subpackage Publishing - * @since 2.2.0 - */ -class AtomServer { - - /** - * ATOM content type. - * - * @since 2.2.0 - * @var string - */ - var $ATOM_CONTENT_TYPE = 'application/atom+xml'; - - /** - * Categories ATOM content type. - * - * @since 2.2.0 - * @var string - */ - var $CATEGORIES_CONTENT_TYPE = 'application/atomcat+xml'; - - /** - * Service ATOM content type. - * - * @since 2.3.0 - * @var string - */ - var $SERVICE_CONTENT_TYPE = 'application/atomsvc+xml'; - - /** - * ATOM XML namespace. - * - * @since 2.3.0 - * @var string - */ - var $ATOM_NS = 'http://www.w3.org/2005/Atom'; - - /** - * ATOMPUB XML namespace. - * - * @since 2.3.0 - * @var string - */ - var $ATOMPUB_NS = 'http://www.w3.org/2007/app'; - - /** - * Entries path. - * - * @since 2.2.0 - * @var string - */ - var $ENTRIES_PATH = "posts"; - - /** - * Categories path. - * - * @since 2.2.0 - * @var string - */ - var $CATEGORIES_PATH = "categories"; - - /** - * Media path. - * - * @since 2.2.0 - * @var string - */ - var $MEDIA_PATH = "attachments"; - - /** - * Entry path. - * - * @since 2.2.0 - * @var string - */ - var $ENTRY_PATH = "post"; - - /** - * Service path. - * - * @since 2.2.0 - * @var string - */ - var $SERVICE_PATH = "service"; - - /** - * Media single path. - * - * @since 2.2.0 - * @var string - */ - var $MEDIA_SINGLE_PATH = "attachment"; - - /** - * ATOMPUB parameters. - * - * @since 2.2.0 - * @var array - */ - var $params = array(); - - /** - * Supported ATOMPUB media types. - * - * @since 2.3.0 - * @var array - */ - var $media_content_types = array('image/*','audio/*','video/*'); - - /** - * ATOMPUB content type(s). - * - * @since 2.2.0 - * @var array - */ - var $atom_content_types = array('application/atom+xml'); - - /** - * ATOMPUB methods. - * - * @since 2.2.0 - * @var unknown_type - */ - var $selectors = array(); - - /** - * Whether to do output. - * - * Support for head. - * - * @since 2.2.0 - * @var bool - */ - var $do_output = true; - - /** - * Constructor - Sets up object properties. - * - * @since 2.2.0 - * @return AtomServer - */ - function __construct() { - - $var_by_ref = explode( '/', $_SERVER['SCRIPT_NAME'] ); - $this->script_name = array_pop( $var_by_ref ); - $this->app_base = site_url( $this->script_name . '/' ); - - $this->selectors = array( - '@/service$@' => - array('GET' => 'get_service'), - '@/categories$@' => - array('GET' => 'get_categories_xml'), - '@/post/(\d+)$@' => - array('GET' => 'get_post', - 'PUT' => 'put_post', - 'DELETE' => 'delete_post'), - '@/posts/?(\d+)?$@' => - array('GET' => 'get_posts', - 'POST' => 'create_post'), - '@/attachments/?(\d+)?$@' => - array('GET' => 'get_attachment', - 'POST' => 'create_attachment'), - '@/attachment/file/(\d+)$@' => - array('GET' => 'get_file', - 'PUT' => 'put_file', - 'DELETE' => 'delete_file'), - '@/attachment/(\d+)$@' => - array('GET' => 'get_attachment', - 'PUT' => 'put_attachment', - 'DELETE' => 'delete_attachment'), - ); - } - - /** - * Handle ATOMPUB request. - * - * @since 2.2.0 - */ - function handle_request() { - global $always_authenticate; - - if ( !empty( $_SERVER['ORIG_PATH_INFO'] ) ) - $path = $_SERVER['ORIG_PATH_INFO']; - else - $path = $_SERVER['PATH_INFO']; - - $method = $_SERVER['REQUEST_METHOD']; - - log_app('REQUEST',"$method $path\n================"); - - $this->process_conditionals(); - //$this->process_conditionals(); - - // exception case for HEAD (treat exactly as GET, but don't output) - if ($method == 'HEAD') { - $this->do_output = false; - $method = 'GET'; - } - - // redirect to /service in case no path is found. - if (strlen($path) == 0 || $path == '/') - $this->redirect($this->get_service_url()); - - // check to see if AtomPub is enabled - if ( !get_option( 'enable_app' ) ) - $this->forbidden( sprintf( __( 'AtomPub services are disabled on this site. An admin user can enable them at %s' ), admin_url('options-writing.php') ) ); - - // dispatch - foreach ( $this->selectors as $regex => $funcs ) { - if ( preg_match($regex, $path, $matches) ) { - if ( isset($funcs[$method]) ) { - - // authenticate regardless of the operation and set the current - // user. each handler will decide if auth is required or not. - if ( !$this->authenticate() ) { - if ( $always_authenticate ) - $this->auth_required('Credentials required.'); - } - - array_shift($matches); - call_user_func_array(array(&$this,$funcs[$method]), $matches); - exit(); - } else { - // only allow what we have handlers for... - $this->not_allowed(array_keys($funcs)); - } - } - } - - // oops, nothing found - $this->not_found(); - } - - /** - * Retrieve XML for ATOMPUB service. - * - * @since 2.2.0 - */ - function get_service() { - log_app('function','get_service()'); - - if ( !current_user_can( 'edit_posts' ) ) - $this->auth_required( __( 'Sorry, you do not have the right to access this site.' ) ); - - $entries_url = esc_attr($this->get_entries_url()); - $categories_url = esc_attr($this->get_categories_url()); - $media_url = esc_attr($this->get_attachments_url()); - $accepted_media_types = ''; - foreach ($this->media_content_types as $med) { - $accepted_media_types = $accepted_media_types . "<accept>" . $med . "</accept>"; - } - $atom_prefix="atom"; - $atom_blogname = get_bloginfo('name'); - $service_doc = <<<EOD -<service xmlns="$this->ATOMPUB_NS" xmlns:$atom_prefix="$this->ATOM_NS"> - <workspace> - <$atom_prefix:title>$atom_blogname Workspace</$atom_prefix:title> - <collection href="$entries_url"> - <$atom_prefix:title>$atom_blogname Posts</$atom_prefix:title> - <accept>$this->ATOM_CONTENT_TYPE;type=entry</accept> - <categories href="$categories_url" /> - </collection> - <collection href="$media_url"> - <$atom_prefix:title>$atom_blogname Media</$atom_prefix:title> - $accepted_media_types - </collection> - </workspace> -</service> - -EOD; - - $this->output($service_doc, $this->SERVICE_CONTENT_TYPE); - } - - /** - * Retrieve categories list in XML format. - * - * @since 2.2.0 - */ - function get_categories_xml() { - log_app('function','get_categories_xml()'); - - if ( !current_user_can( 'edit_posts' ) ) - $this->auth_required( __( 'Sorry, you do not have the right to access this site.' ) ); - - $home = esc_attr(get_bloginfo_rss('url')); - - $categories = ""; - $cats = get_categories(array('hierarchical' => 0, 'hide_empty' => 0)); - foreach ( (array) $cats as $cat ) { - $categories .= " <category term=\"" . esc_attr($cat->name) . "\" />\n"; - } - $output = <<<EOD -<app:categories xmlns:app="$this->ATOMPUB_NS" - xmlns="$this->ATOM_NS" - fixed="yes" scheme="$home"> - $categories -</app:categories> -EOD; - $this->output($output, $this->CATEGORIES_CONTENT_TYPE); - } - - /** - * Create new post. - * - * @since 2.2.0 - */ - function create_post() { - global $user_ID; - $this->get_accepted_content_type($this->atom_content_types); - - $parser = new AtomParser(); - if ( !$parser->parse() ) - $this->client_error(); - - $entry = array_pop($parser->feed->entries); - - log_app('Received entry:', print_r($entry,true)); - - $catnames = array(); - foreach ( $entry->categories as $cat ) { - array_push($catnames, $cat["term"]); - } - - $wp_cats = get_categories(array('hide_empty' => false)); - - $post_category = array(); - - foreach ( $wp_cats as $cat ) { - if ( in_array($cat->name, $catnames) ) - array_push($post_category, $cat->term_id); - } - - $publish = ! ( isset( $entry->draft ) && 'yes' == trim( $entry->draft ) ); - - $cap = ($publish) ? 'publish_posts' : 'edit_posts'; - - if ( !current_user_can($cap) ) - $this->auth_required(__('Sorry, you do not have the right to edit/publish new posts.')); - - $blog_ID = get_current_blog_id(); - $post_status = ($publish) ? 'publish' : 'draft'; - $post_author = (int) $user_ID; - $post_title = $entry->title[1]; - $post_content = $entry->content[1]; - $post_excerpt = $entry->summary[1]; - $pubtimes = $this->get_publish_time($entry->published); - $post_date = $pubtimes[0]; - $post_date_gmt = $pubtimes[1]; - - if ( isset( $_SERVER['HTTP_SLUG'] ) ) - $post_name = $_SERVER['HTTP_SLUG']; - - $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_name'); - - $this->escape($post_data); - log_app('Inserting Post. Data:', print_r($post_data,true)); - - $postID = wp_insert_post($post_data); - if ( is_wp_error( $postID ) ) - $this->internal_error($postID->get_error_message()); - - if ( !$postID ) - $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); - - // getting warning here about unable to set headers - // because something in the cache is printing to the buffer - // could we clean up wp_set_post_categories or cache to not print - // this could affect our ability to send back the right headers - @wp_set_post_categories($postID, $post_category); - - do_action( 'atompub_create_post', $postID, $entry ); - - $output = $this->get_entry($postID); - - log_app('function',"create_post($postID)"); - $this->created($postID, $output); - } - - /** - * Retrieve post. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function get_post($postID) { - global $entry; - - if ( !current_user_can( 'edit_post', $postID ) ) - $this->auth_required( __( 'Sorry, you do not have the right to access this post.' ) ); - - $this->set_current_entry($postID); - $output = $this->get_entry($postID); - log_app('function',"get_post($postID)"); - $this->output($output); - - } - - /** - * Update post. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function put_post($postID) { - // checked for valid content-types (atom+xml) - // quick check and exit - $this->get_accepted_content_type($this->atom_content_types); - - $parser = new AtomParser(); - if ( !$parser->parse() ) - $this->bad_request(); - - $parsed = array_pop($parser->feed->entries); - - log_app('Received UPDATED entry:', print_r($parsed,true)); - - // check for not found - global $entry; - $this->set_current_entry($postID); - - if ( !current_user_can('edit_post', $entry['ID']) ) - $this->auth_required(__('Sorry, you do not have the right to edit this post.')); - - $publish = ! ( isset($parsed->draft) && 'yes' == trim($parsed->draft) ); - $post_status = ($publish) ? 'publish' : 'draft'; - - extract($entry); - - $post_title = $parsed->title[1]; - $post_content = $parsed->content[1]; - $post_excerpt = $parsed->summary[1]; - $pubtimes = $this->get_publish_time($entry->published); - $post_date = $pubtimes[0]; - $post_date_gmt = $pubtimes[1]; - $pubtimes = $this->get_publish_time($parsed->updated); - $post_modified = $pubtimes[0]; - $post_modified_gmt = $pubtimes[1]; - - $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt'); - $this->escape($postdata); - - $result = wp_update_post($postdata); - - if ( !$result ) - $this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.')); - - do_action( 'atompub_put_post', $ID, $parsed ); - - log_app('function',"put_post($postID)"); - $this->ok(); - } - - /** - * Remove post. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function delete_post($postID) { - - // check for not found - global $entry; - $this->set_current_entry($postID); - - if ( !current_user_can('edit_post', $postID) ) - $this->auth_required(__('Sorry, you do not have the right to delete this post.')); - - if ( $entry['post_type'] == 'attachment' ) { - $this->delete_attachment($postID); - } else { - $result = wp_delete_post($postID); - - if ( !$result ) { - $this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.')); - } - - log_app('function',"delete_post($postID)"); - $this->ok(); - } - - } - - /** - * Retrieve attachment. - * - * @since 2.2.0 - * - * @param int $postID Optional. Post ID. - */ - function get_attachment($postID = null) { - if ( !current_user_can( 'upload_files' ) ) - $this->auth_required( __( 'Sorry, you do not have permission to upload files.' ) ); - - if ( !isset($postID) ) { - $this->get_attachments(); - } else { - $this->set_current_entry($postID); - $output = $this->get_entry($postID, 'attachment'); - log_app('function',"get_attachment($postID)"); - $this->output($output); - } - } - - /** - * Create new attachment. - * - * @since 2.2.0 - */ - function create_attachment() { - - $type = $this->get_accepted_content_type(); - - if ( !current_user_can('upload_files') ) - $this->auth_required(__('You do not have permission to upload files.')); - - $fp = fopen("php://input", "rb"); - $bits = null; - while ( !feof($fp) ) { - $bits .= fread($fp, 4096); - } - fclose($fp); - - $slug = ''; - if ( isset( $_SERVER['HTTP_SLUG'] ) ) - $slug = $_SERVER['HTTP_SLUG']; - elseif ( isset( $_SERVER['HTTP_TITLE'] ) ) - $slug = $_SERVER['HTTP_TITLE']; - elseif ( empty( $slug ) ) // just make a random name - $slug = substr( md5( uniqid( microtime() ) ), 0, 7); - $ext = preg_replace( '|.*/([a-z0-9]+)|', '$1', $_SERVER['CONTENT_TYPE'] ); - $slug = sanitize_file_name( "$slug.$ext" ); - $file = wp_upload_bits( $slug, NULL, $bits); - - log_app('wp_upload_bits returns:',print_r($file,true)); - - $url = $file['url']; - $file = $file['file']; - - do_action('wp_create_file_in_uploads', $file); // replicate - - // Construct the attachment array - $attachment = array( - 'post_title' => $slug, - 'post_content' => $slug, - 'post_status' => 'attachment', - 'post_parent' => 0, - 'post_mime_type' => $type, - 'guid' => $url - ); - - // Save the data - $postID = wp_insert_attachment($attachment, $file); - - if (!$postID) - $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); - - $output = $this->get_entry($postID, 'attachment'); - - $this->created($postID, $output, 'attachment'); - log_app('function',"create_attachment($postID)"); - } - - /** - * Update attachment. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function put_attachment($postID) { - // checked for valid content-types (atom+xml) - // quick check and exit - $this->get_accepted_content_type($this->atom_content_types); - - $parser = new AtomParser(); - if (!$parser->parse()) { - $this->bad_request(); - } - - $parsed = array_pop($parser->feed->entries); - - // check for not found - global $entry; - $this->set_current_entry($postID); - - if ( !current_user_can('edit_post', $entry['ID']) ) - $this->auth_required(__('Sorry, you do not have the right to edit this post.')); - - extract($entry); - - $post_title = $parsed->title[1]; - $post_content = $parsed->summary[1]; - $pubtimes = $this->get_publish_time($parsed->updated); - $post_modified = $pubtimes[0]; - $post_modified_gmt = $pubtimes[1]; - - $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_modified', 'post_modified_gmt'); - $this->escape($postdata); - - $result = wp_update_post($postdata); - - if ( !$result ) - $this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.')); - - log_app('function',"put_attachment($postID)"); - $this->ok(); - } - - /** - * Remove attachment. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function delete_attachment($postID) { - log_app('function',"delete_attachment($postID). File '$location' deleted."); - - // check for not found - global $entry; - $this->set_current_entry($postID); - - if ( !current_user_can('edit_post', $postID) ) - $this->auth_required(__('Sorry, you do not have the right to delete this post.')); - - $location = get_post_meta($entry['ID'], '_wp_attached_file', true); - $filetype = wp_check_filetype($location); - - if ( !isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext']) ) - $this->internal_error(__('Error occurred while accessing post metadata for file location.')); - - // delete file - @unlink($location); - - // delete attachment - $result = wp_delete_post($postID); - - if ( !$result ) - $this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.')); - - log_app('function',"delete_attachment($postID). File '$location' deleted."); - $this->ok(); - } - - /** - * Retrieve attachment from post. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function get_file($postID) { - - // check for not found - global $entry; - $this->set_current_entry($postID); - - // then whether user can edit the specific post - if ( !current_user_can('edit_post', $postID) ) - $this->auth_required(__('Sorry, you do not have the right to edit this post.')); - - $location = get_post_meta($entry['ID'], '_wp_attached_file', true); - $location = get_option ('upload_path') . '/' . $location; - $filetype = wp_check_filetype($location); - - if ( !isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext']) ) - $this->internal_error(__('Error occurred while accessing post metadata for file location.')); - - status_header('200'); - header('Content-Type: ' . $entry['post_mime_type']); - header('Connection: close'); - - if ( $fp = fopen($location, "rb") ) { - status_header('200'); - header('Content-Type: ' . $entry['post_mime_type']); - header('Connection: close'); - - while ( !feof($fp) ) { - echo fread($fp, 4096); - } - - fclose($fp); - } else { - status_header ('404'); - } - - log_app('function',"get_file($postID)"); - exit; - } - - /** - * Upload file to blog and add attachment to post. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function put_file($postID) { - - // first check if user can upload - if ( !current_user_can('upload_files') ) - $this->auth_required(__('You do not have permission to upload files.')); - - // check for not found - global $entry; - $this->set_current_entry($postID); - - // then whether user can edit the specific post - if ( !current_user_can('edit_post', $postID) ) - $this->auth_required(__('Sorry, you do not have the right to edit this post.')); - - $upload_dir = wp_upload_dir( ); - $location = get_post_meta($entry['ID'], '_wp_attached_file', true); - $filetype = wp_check_filetype($location); - - $location = "{$upload_dir['basedir']}/{$location}"; - - if (!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext'])) - $this->internal_error(__('Error occurred while accessing post metadata for file location.')); - - $fp = fopen("php://input", "rb"); - $localfp = fopen($location, "w+"); - while ( !feof($fp) ) { - fwrite($localfp,fread($fp, 4096)); - } - fclose($fp); - fclose($localfp); - - $ID = $entry['ID']; - $pubtimes = $this->get_publish_time($entry->published); - $post_date = $pubtimes[0]; - $post_date_gmt = $pubtimes[1]; - $pubtimes = $this->get_publish_time($parsed->updated); - $post_modified = $pubtimes[0]; - $post_modified_gmt = $pubtimes[1]; - - $post_data = compact('ID', 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt'); - $result = wp_update_post($post_data); - - if ( !$result ) - $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); - - wp_update_attachment_metadata( $postID, wp_generate_attachment_metadata( $postID, $location ) ); - - log_app('function',"put_file($postID)"); - $this->ok(); - } - - /** - * Retrieve entries URL. - * - * @since 2.2.0 - * - * @param int $page Page ID. - * @return string - */ - function get_entries_url($page = null) { - if ( isset($GLOBALS['post_type']) && ( $GLOBALS['post_type'] == 'attachment' ) ) - $path = $this->MEDIA_PATH; - else - $path = $this->ENTRIES_PATH; - $url = $this->app_base . $path; - if ( isset($page) && is_int($page) ) - $url .= "/$page"; - return $url; - } - - /** - * Display entries URL. - * - * @since 2.2.0 - * - * @param int $page Page ID. - */ - function the_entries_url($page = null) { - echo $this->get_entries_url($page); - } - - /** - * Retrieve categories URL. - * - * @since 2.2.0 - * - * @param mixed $deprecated Not used. - * @return string - */ - function get_categories_url($deprecated = '') { - if ( !empty( $deprecated ) ) - _deprecated_argument( __FUNCTION__, '2.5' ); - return $this->app_base . $this->CATEGORIES_PATH; - } - - /** - * Display category URL. - * - * @since 2.2.0 - */ - function the_categories_url() { - echo $this->get_categories_url(); - } - - /** - * Retrieve attachment URL. - * - * @since 2.2.0 - * - * @param int $page Page ID. - * @return string - */ - function get_attachments_url($page = null) { - $url = $this->app_base . $this->MEDIA_PATH; - if (isset($page) && is_int($page)) { - $url .= "/$page"; - } - return $url; - } - - /** - * Display attachment URL. - * - * @since 2.2.0 - * - * @param int $page Page ID. - */ - function the_attachments_url($page = null) { - echo $this->get_attachments_url($page); - } - - /** - * Retrieve service URL. - * - * @since 2.3.0 - * - * @return string - */ - function get_service_url() { - return $this->app_base . $this->SERVICE_PATH; - } - - /** - * Retrieve entry URL. - * - * @since 2.7.0 - * - * @param int $postID Post ID. - * @return string - */ - function get_entry_url($postID = null) { - if (!isset($postID)) { - global $post; - $postID = (int) $post->ID; - } - - $url = $this->app_base . $this->ENTRY_PATH . "/$postID"; - - log_app('function',"get_entry_url() = $url"); - return $url; - } - - /** - * Display entry URL. - * - * @since 2.7.0 - * - * @param int $postID Post ID. - */ - function the_entry_url($postID = null) { - echo $this->get_entry_url($postID); - } - - /** - * Retrieve media URL. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - * @return string - */ - function get_media_url($postID = null) { - if (!isset($postID)) { - global $post; - $postID = (int) $post->ID; - } - - $url = $this->app_base . $this->MEDIA_SINGLE_PATH ."/file/$postID"; - - log_app('function',"get_media_url() = $url"); - return $url; - } - - /** - * Display the media URL. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function the_media_url($postID = null) { - echo $this->get_media_url($postID); - } - - /** - * Set the current entry to post ID. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - */ - function set_current_entry($postID) { - global $entry; - log_app('function',"set_current_entry($postID)"); - - if (!isset($postID)) { - // $this->bad_request(); - $this->not_found(); - } - - $entry = wp_get_single_post($postID,ARRAY_A); - - if (!isset($entry) || !isset($entry['ID'])) - $this->not_found(); - - return; - } - - /** - * Display posts XML. - * - * @since 2.2.0 - * - * @param int $page Optional. Page ID. - * @param string $post_type Optional, default is 'post'. Post Type. - */ - function get_posts($page = 1, $post_type = 'post') { - log_app('function',"get_posts($page, '$post_type')"); - $feed = $this->get_feed($page, $post_type); - $this->output($feed); - } - - /** - * Display attachment XML. - * - * @since 2.2.0 - * - * @param int $page Page ID. - * @param string $post_type Optional, default is 'attachment'. Post type. - */ - function get_attachments($page = 1, $post_type = 'attachment') { - log_app('function',"get_attachments($page, '$post_type')"); - $GLOBALS['post_type'] = $post_type; - $feed = $this->get_feed($page, $post_type); - $this->output($feed); - } - - /** - * Retrieve feed XML. - * - * @since 2.2.0 - * - * @param int $page Page ID. - * @param string $post_type Optional, default is post. Post type. - * @return string - */ - function get_feed($page = 1, $post_type = 'post') { - global $post, $wp, $wp_query, $posts, $wpdb, $blog_id; - log_app('function',"get_feed($page, '$post_type')"); - ob_start(); - - $this->ENTRY_PATH = $post_type; - - if (!isset($page)) { - $page = 1; - } - $page = (int) $page; - - $count = get_option('posts_per_rss'); - - wp('posts_per_page=' . $count . '&offset=' . ($count * ($page-1) . '&orderby=modified')); - - $post = $GLOBALS['post']; - $posts = $GLOBALS['posts']; - $wp = $GLOBALS['wp']; - $wp_query = $GLOBALS['wp_query']; - $wpdb = $GLOBALS['wpdb']; - $blog_id = (int) $GLOBALS['blog_id']; - log_app('function',"query_posts(# " . print_r($wp_query, true) . "#)"); - - log_app('function',"total_count(# $wp_query->max_num_pages #)"); - $last_page = $wp_query->max_num_pages; - $next_page = (($page + 1) > $last_page) ? NULL : $page + 1; - $prev_page = ($page - 1) < 1 ? NULL : $page - 1; - $last_page = ((int)$last_page == 1 || (int)$last_page == 0) ? NULL : (int) $last_page; - $self_page = $page > 1 ? $page : NULL; -?><feed xmlns="<?php echo $this->ATOM_NS ?>" xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php echo get_option('rss_language'); ?>" <?php do_action('app_ns'); ?> > -<id><?php $this->the_entries_url() ?></id> -<updated><?php echo mysql2date('Y-m-d\TH:i:s\Z', get_lastpostmodified('GMT'), false); ?></updated> -<title type="text"><?php bloginfo_rss('name') ?></title> -<subtitle type="text"><?php bloginfo_rss("description") ?></subtitle> -<link rel="first" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url() ?>" /> -<?php if (isset($prev_page)): ?> -<link rel="previous" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($prev_page) ?>" /> -<?php endif; ?> -<?php if (isset($next_page)): ?> -<link rel="next" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($next_page) ?>" /> -<?php endif; ?> -<link rel="last" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($last_page) ?>" /> -<link rel="self" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($self_page) ?>" /> -<rights type="text">Copyright <?php echo date('Y'); ?></rights> -<?php do_action('app_head'); ?> -<?php if ( have_posts() ) { - while ( have_posts() ) { - the_post(); - $this->echo_entry(); - } - } -?></feed> -<?php - $feed = ob_get_contents(); - ob_end_clean(); - return $feed; - } - - /** - * Display entry XML. - * - * @since 2.2.0 - * - * @param int $postID Post ID. - * @param string $post_type Optional, default is post. Post type. - * @return string. - */ - function get_entry($postID, $post_type = 'post') { - log_app('function',"get_entry($postID, '$post_type')"); - ob_start(); - switch($post_type) { - case 'post': - $varname = 'p'; - break; - case 'attachment': - $this->ENTRY_PATH = 'attachment'; - $varname = 'attachment_id'; - break; - } - query_posts($varname . '=' . $postID); - if ( have_posts() ) { - while ( have_posts() ) { - the_post(); - $this->echo_entry(); - log_app('$post',print_r($GLOBALS['post'],true)); - $entry = ob_get_contents(); - break; - } - } - ob_end_clean(); - - log_app('get_entry returning:',$entry); - return $entry; - } - - /** - * Display post content XML. - * - * @since 2.3.0 - */ - function echo_entry() { ?> -<entry xmlns="<?php echo $this->ATOM_NS ?>" - xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php echo get_option('rss_language'); ?>"> - <id><?php the_guid( $GLOBALS['post']->ID ); ?></id> -<?php list($content_type, $content) = prep_atom_text_construct(get_the_title()); ?> - <title type="<?php echo $content_type ?>"><?php echo $content ?></title> - <updated><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></updated> - <published><?php echo get_post_time('Y-m-d\TH:i:s\Z', true); ?></published> - <app:edited><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></app:edited> - <app:control> - <app:draft><?php echo ($GLOBALS['post']->post_status == 'draft' ? 'yes' : 'no') ?></app:draft> - </app:control> - <author> - <name><?php the_author()?></name> -<?php if ( get_the_author_meta('url') && get_the_author_meta('url') != 'http://' ) { ?> - <uri><?php the_author_meta('url') ?></uri> -<?php } ?> - </author> -<?php if ($GLOBALS['post']->post_type == 'attachment') { ?> - <link rel="edit-media" href="<?php $this->the_media_url() ?>" /> - <content type="<?php echo $GLOBALS['post']->post_mime_type ?>" src="<?php the_guid() ; ?>"/> -<?php } else { ?> - <link href="<?php the_permalink_rss() ?>" /> -<?php if ( strlen( $GLOBALS['post']->post_content ) ) : -list($content_type, $content) = prep_atom_text_construct(get_the_content()); ?> - <content type="<?php echo $content_type ?>"><?php echo $content ?></content> -<?php endif; ?> -<?php } ?> - <link rel="edit" href="<?php $this->the_entry_url() ?>" /> - <?php the_category_rss( 'atom' ); ?> -<?php list($content_type, $content) = prep_atom_text_construct(get_the_excerpt()); ?> - <summary type="<?php echo $content_type ?>"><?php echo $content ?></summary> - <?php do_action('app_entry'); ?> -</entry> -<?php } - - /** - * Set 'OK' (200) status header. - * - * @since 2.2.0 - */ - function ok() { - log_app('Status','200: OK'); - header('Content-Type: text/plain'); - status_header('200'); - exit; - } - - /** - * Set 'No Content' (204) status header. - * - * @since 2.2.0 - */ - function no_content() { - log_app('Status','204: No Content'); - header('Content-Type: text/plain'); - status_header('204'); - echo "Moved to Trash."; - exit; - } - - /** - * Display 'Internal Server Error' (500) status header. - * - * @since 2.2.0 - * - * @param string $msg Optional. Status string. - */ - function internal_error($msg = 'Internal Server Error') { - log_app('Status','500: Server Error'); - header('Content-Type: text/plain'); - status_header('500'); - echo $msg; - exit; - } - - /** - * Set 'Bad Request' (400) status header. - * - * @since 2.2.0 - */ - function bad_request() { - log_app('Status','400: Bad Request'); - header('Content-Type: text/plain'); - status_header('400'); - exit; - } - - /** - * Set 'Length Required' (411) status header. - * - * @since 2.2.0 - */ - function length_required() { - log_app('Status','411: Length Required'); - header("HTTP/1.1 411 Length Required"); - header('Content-Type: text/plain'); - status_header('411'); - exit; - } - - /** - * Set 'Unsupported Media Type' (415) status header. - * - * @since 2.2.0 - */ - function invalid_media() { - log_app('Status','415: Unsupported Media Type'); - header("HTTP/1.1 415 Unsupported Media Type"); - header('Content-Type: text/plain'); - exit; - } - - /** - * Set 'Forbidden' (403) status header. - * - * @since 2.6.0 - */ - function forbidden($reason='') { - log_app('Status','403: Forbidden'); - header('Content-Type: text/plain'); - status_header('403'); - echo $reason; - exit; - } - - /** - * Set 'Not Found' (404) status header. - * - * @since 2.2.0 - */ - function not_found() { - log_app('Status','404: Not Found'); - header('Content-Type: text/plain'); - status_header('404'); - exit; - } - - /** - * Set 'Not Allowed' (405) status header. - * - * @since 2.2.0 - */ - function not_allowed($allow) { - log_app('Status','405: Not Allowed'); - header('Allow: ' . join(',', $allow)); - status_header('405'); - exit; - } - - /** - * Display Redirect (302) content and set status headers. - * - * @since 2.3.0 - */ - function redirect($url) { - - log_app('Status','302: Redirect'); - $escaped_url = esc_attr($url); - $content = <<<EOD -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> -<html> - <head> - <title>302 Found</title> - </head> -<body> - <h1>Found</h1> - <p>The document has moved <a href="$escaped_url">here</a>.</p> - </body> -</html> - -EOD; - header('HTTP/1.1 302 Moved'); - header('Content-Type: text/html'); - header('Location: ' . $url); - echo $content; - exit; - - } - - /** - * Set 'Client Error' (400) status header. - * - * @since 2.2.0 - */ - function client_error($msg = 'Client Error') { - log_app('Status','400: Client Error'); - header('Content-Type: text/plain'); - status_header('400'); - exit; - } - - /** - * Set created status headers (201). - * - * Sets the 'content-type', 'content-location', and 'location'. - * - * @since 2.2.0 - */ - function created($post_ID, $content, $post_type = 'post') { - log_app('created()::$post_ID',"$post_ID, $post_type"); - $edit = $this->get_entry_url($post_ID); - switch($post_type) { - case 'post': - $ctloc = $this->get_entry_url($post_ID); - break; - case 'attachment': - $edit = $this->app_base . "attachments/$post_ID"; - break; - } - header("Content-Type: $this->ATOM_CONTENT_TYPE"); - if (isset($ctloc)) - header('Content-Location: ' . $ctloc); - header('Location: ' . $edit); - status_header('201'); - echo $content; - exit; - } - - /** - * Set 'Auth Required' (401) headers. - * - * @since 2.2.0 - * - * @param string $msg Status header content and HTML content. - */ - function auth_required($msg) { - log_app('Status','401: Auth Required'); - nocache_headers(); - header('WWW-Authenticate: Basic realm="WordPress Atom Protocol"'); - header("HTTP/1.1 401 $msg"); - header('Status: 401 ' . $msg); - header('Content-Type: text/html'); - $content = <<<EOD -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> -<html> - <head> - <title>401 Unauthorized</title> - </head> -<body> - <h1>401 Unauthorized</h1> - <p>$msg</p> - </body> -</html> - -EOD; - echo $content; - exit; - } - - /** - * Display XML and set headers with content type. - * - * @since 2.2.0 - * - * @param string $xml Display feed content. - * @param string $ctype Optional, default is 'atom+xml'. Feed content type. - */ - function output($xml, $ctype = 'application/atom+xml') { - status_header('200'); - $xml = '<?xml version="1.0" encoding="' . strtolower(get_option('blog_charset')) . '"?>'."\n".$xml; - header('Connection: close'); - header('Content-Length: '. strlen($xml)); - header('Content-Type: ' . $ctype); - header('Content-Disposition: attachment; filename=atom.xml'); - header('Date: '. date('r')); - if ($this->do_output) - echo $xml; - log_app('function', "output:\n$xml"); - exit; - } - - /** - * Sanitize content for database usage. - * - * @since 2.2.0 - * - * @param array $array Sanitize array and multi-dimension array. - */ - function escape(&$array) { - global $wpdb; - - foreach ($array as $k => $v) { - if (is_array($v)) { - $this->escape($array[$k]); - } else if (is_object($v)) { - //skip - } else { - $array[$k] = $wpdb->escape($v); - } - } - } - - /** - * Access credential through various methods and perform login. - * - * @since 2.2.0 - * - * @return bool - */ - function authenticate() { - log_app("authenticate()",print_r($_ENV, true)); - - // if using mod_rewrite/ENV hack - // http://www.besthostratings.com/articles/http-auth-php-cgi.html - if (isset($_SERVER['HTTP_AUTHORIZATION'])) { - list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = - explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); - } else if (isset($_SERVER['REDIRECT_REMOTE_USER'])) { - // Workaround for setups that do not forward HTTP_AUTHORIZATION - // See http://trac.wordpress.org/ticket/7361 - list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = - explode(':', base64_decode(substr($_SERVER['REDIRECT_REMOTE_USER'], 6))); - } - - // If Basic Auth is working... - if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { - log_app("Basic Auth",$_SERVER['PHP_AUTH_USER']); - - $user = wp_authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); - if ( $user && !is_wp_error($user) ) { - wp_set_current_user($user->ID); - log_app("authenticate()", $user->user_login); - return true; - } - } - - return false; - } - - /** - * Retrieve accepted content types. - * - * @since 2.2.0 - * - * @param array $types Optional. Content Types. - * @return string - */ - function get_accepted_content_type($types = null) { - - if (!isset($types)) { - $types = $this->media_content_types; - } - - if (!isset($_SERVER['CONTENT_LENGTH']) || !isset($_SERVER['CONTENT_TYPE'])) { - $this->length_required(); - } - - $type = $_SERVER['CONTENT_TYPE']; - list($type,$subtype) = explode('/',$type); - list($subtype) = explode(";",$subtype); // strip MIME parameters - log_app("get_accepted_content_type", "type=$type, subtype=$subtype"); - - foreach($types as $t) { - list($acceptedType,$acceptedSubtype) = explode('/',$t); - if ($acceptedType == '*' || $acceptedType == $type) { - if ($acceptedSubtype == '*' || $acceptedSubtype == $subtype) - return $type . "/" . $subtype; - } - } - - $this->invalid_media(); - } - - /** - * Process conditionals for posts. - * - * @since 2.2.0 - */ - function process_conditionals() { - - if (empty($this->params)) return; - if ($_SERVER['REQUEST_METHOD'] == 'DELETE') return; - - switch($this->params[0]) { - case $this->ENTRY_PATH: - global $post; - $post = wp_get_single_post($this->params[1]); - $wp_last_modified = get_post_modified_time('D, d M Y H:i:s', true); - $post = NULL; - break; - case $this->ENTRIES_PATH: - $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT'; - break; - default: - return; - } - $wp_etag = md5($wp_last_modified); - @header("Last-Modified: $wp_last_modified"); - @header("ETag: $wp_etag"); - - // Support for Conditional GET - if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) - $client_etag = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']); - else - $client_etag = false; - - $client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE']); - // If string is empty, return 0. If not, attempt to parse into a timestamp - $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0; - - // Make a timestamp for our most recent modification... - $wp_modified_timestamp = strtotime($wp_last_modified); - - if ( ($client_last_modified && $client_etag) ? - (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) : - (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) { - status_header( 304 ); - exit; - } - } - - /** - * Convert RFC3339 time string to timestamp. - * - * @since 2.3.0 - * - * @param string $str String to time. - * @return bool|int false if format is incorrect. - */ - function rfc3339_str2time($str) { - - $match = false; - if (!preg_match("/(\d{4}-\d{2}-\d{2})T(\d{2}\:\d{2}\:\d{2})\.?\d{0,3}(Z|[+-]+\d{2}\:\d{2})/", $str, $match)) - return false; - - if ($match[3] == 'Z') - $match[3] = '+0000'; - - return strtotime($match[1] . " " . $match[2] . " " . $match[3]); - } - - /** - * Retrieve published time to display in XML. - * - * @since 2.3.0 - * - * @param string $published Time string. - * @return string - */ - function get_publish_time($published) { - - $pubtime = $this->rfc3339_str2time($published); - - if (!$pubtime) { - return array(current_time('mysql'),current_time('mysql',1)); - } else { - return array(date("Y-m-d H:i:s", $pubtime), gmdate("Y-m-d H:i:s", $pubtime)); - } - } - -} - -/** - * AtomServer - * @var AtomServer - * @global object $server - */ -$server = new AtomServer(); -$server->handle_request(); - -?> diff --git a/wp-blog-header.php b/wp-blog-header.php index 0f7118f3c..3e1b8ef56 100644 --- a/wp-blog-header.php +++ b/wp-blog-header.php @@ -16,5 +16,3 @@ if ( !isset($wp_did_header) ) { require_once( ABSPATH . WPINC . '/template-loader.php' ); } - -?> \ No newline at end of file diff --git a/wp-comments-post.php b/wp-comments-post.php index 9f1dc724c..194e00f54 100644 --- a/wp-comments-post.php +++ b/wp-comments-post.php @@ -54,7 +54,7 @@ $comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : // If the user is logged in $user = wp_get_current_user(); -if ( $user->ID ) { +if ( $user->exists() ) { if ( empty( $user->display_name ) ) $user->display_name=$user->user_login; $comment_author = $wpdb->escape($user->display_name); @@ -73,7 +73,7 @@ if ( $user->ID ) { $comment_type = ''; -if ( get_option('require_name_email') && !$user->ID ) { +if ( get_option('require_name_email') && !$user->exists() ) { if ( 6 > strlen($comment_author_email) || '' == $comment_author ) wp_die( __('<strong>ERROR</strong>: please fill the required fields (name, email).') ); elseif ( !is_email($comment_author_email)) @@ -90,16 +90,10 @@ $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_emai $comment_id = wp_new_comment( $commentdata ); $comment = get_comment($comment_id); -if ( !$user->ID ) { - $comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000); - setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); - setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); - setcookie('comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); -} +do_action('set_comment_cookies', $comment, $user); $location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id; $location = apply_filters('comment_post_redirect', $location, $comment); wp_safe_redirect( $location ); exit; -?> diff --git a/wp-content/index.php b/wp-content/index.php index 4e6c07c7e..62200328f 100644 --- a/wp-content/index.php +++ b/wp-content/index.php @@ -1,3 +1,2 @@ <?php // Silence is golden. -?> \ No newline at end of file diff --git a/wp-content/plugins/akismet/admin.php b/wp-content/plugins/akismet/admin.php index 91cedb29d..aa30cde75 100644 --- a/wp-content/plugins/akismet/admin.php +++ b/wp-content/plugins/akismet/admin.php @@ -1,6 +1,6 @@ <?php -add_action( 'admin_menu', 'akismet_config_page' ); -add_action( 'admin_menu', 'akismet_stats_page' ); +add_action( 'admin_menu', 'akismet_admin_menu' ); + akismet_admin_warnings(); function akismet_admin_init() { @@ -25,24 +25,38 @@ function akismet_admin_init() { $hook = 'dashboard_page_akismet-stats-display'; add_action('admin_head-'.$hook, 'akismet_stats_script'); add_meta_box('akismet-status', __('Comment History'), 'akismet_comment_status_meta_box', 'comment', 'normal'); - wp_register_style('akismet.css', AKISMET_PLUGIN_URL . 'akismet.css'); - wp_enqueue_style('akismet.css'); - wp_register_script('akismet.js', AKISMET_PLUGIN_URL . 'akismet.js', array('jquery')); - wp_enqueue_script('akismet.js'); } add_action('admin_init', 'akismet_admin_init'); +add_action( 'admin_enqueue_scripts', 'akismet_load_js_and_css' ); +function akismet_load_js_and_css() { + global $hook_suffix; + + if ( + $hook_suffix == 'index.php' # dashboard + || $hook_suffix == 'edit-comments.php' + || $hook_suffix == 'comment.php' + || $hook_suffix == 'post.php' + || $hook_suffix == 'plugins_page_akismet-key-config' + ) { + wp_register_style( 'akismet.css', AKISMET_PLUGIN_URL . 'akismet.css', array(), '2.5.4.4' ); + wp_enqueue_style( 'akismet.css'); + + wp_register_script( 'akismet.js', AKISMET_PLUGIN_URL . 'akismet.js', array('jquery'), '2.5.4.6' ); + wp_enqueue_script( 'akismet.js' ); + wp_localize_script( 'akismet.js', 'WPAkismet', array( + 'comment_author_url_nonce' => wp_create_nonce( 'comment_author_url_nonce' ) + ) ); + } +} + + function akismet_nonce_field($action = -1) { return wp_nonce_field($action); } $akismet_nonce = 'akismet-update-key'; -function akismet_config_page() { - if ( function_exists('add_submenu_page') ) - add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf'); -} - function akismet_plugin_action_links( $links, $file ) { if ( $file == plugin_basename( dirname(__FILE__).'/akismet.php' ) ) { - $links[] = '<a href="plugins.php?page=akismet-key-config">'.__('Settings').'</a>'; + $links[] = '<a href="admin.php?page=akismet-key-config">'.__('Settings').'</a>'; } return $links; @@ -111,8 +125,7 @@ function akismet_conf() { if ( $key_status == 'valid' ) { $ms[] = 'key_valid'; } else if ( $key_status == 'invalid' ) { - delete_option('wordpress_api_key'); - $ms[] = 'key_empty'; + $ms[] = 'key_invalid'; } else if ( !empty($key) && $key_status == 'failed' ) { $ms[] = 'key_failed'; } @@ -124,8 +137,9 @@ function akismet_conf() { 'new_key_invalid' => array('color' => '888', 'text' => __('The key you entered is invalid. Please double-check it.')), 'new_key_failed' => array('color' => '888', 'text' => __('The key you entered could not be verified because a connection to akismet.com could not be established. Please check your server configuration.')), 'no_connection' => array('color' => '888', 'text' => __('There was a problem connecting to the Akismet server. Please check your server configuration.')), - 'key_empty' => array('color' => 'aa0', 'text' => sprintf(__('Please enter an API key. (<a href="%s" style="color:#fff">Get your key.</a>)'), 'http://akismet.com/get/')), + 'key_empty' => array('color' => 'aa0', 'text' => sprintf(__('Please enter an API key. (<a href="%s" style="color:#fff">Get your key.</a>)'), 'http://akismet.com/get/?return=true')), 'key_valid' => array('color' => '4AB915', 'text' => __('This key is valid.')), + 'key_invalid' => array('color' => '888', 'text' => __('This key is invalid.')), 'key_failed' => array('color' => 'aa0', 'text' => __('The key below was previously validated but a connection to akismet.com can not be established at this time. Please check your server configuration.')), 'bad_home_url' => array('color' => '888', 'text' => sprintf( __('Your WordPress home URL %s is invalid. Please fix the <a href="%s">home option</a>.'), esc_html( get_bloginfo('url') ), admin_url('options.php#home') ) ), ); @@ -141,13 +155,13 @@ function akismet_conf() { <div class="narrow"> <form action="" method="post" id="akismet-conf" style="margin: auto; width: 400px; "> <?php if ( !$wpcom_api_key ) { ?> - <p><?php printf(__('For many people, <a href="%1$s">Akismet</a> will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as "spam" on the moderation screen and Akismet will learn from the mistakes. If you don\'t have an API key yet, you can get one at <a href="%2$s">Akismet.com</a>.'), 'http://akismet.com/', 'http://akismet.com/get/'); ?></p> + <p><?php printf(__('For many people, <a href="%1$s">Akismet</a> will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as "spam" on the moderation screen and Akismet will learn from the mistakes. If you don\'t have an API key yet, you can get one at <a href="%2$s">Akismet.com</a>.'), 'http://akismet.com/?return=true', 'http://akismet.com/get/?return=true'); ?></p> <h3><label for="key"><?php _e('Akismet API Key'); ?></label></h3> <?php foreach ( $ms as $m ) : ?> <p style="padding: .5em; background-color: #<?php echo $messages[$m]['color']; ?>; color: #fff; font-weight: bold;"><?php echo $messages[$m]['text']; ?></p> <?php endforeach; ?> -<p><input id="key" name="key" type="text" size="15" maxlength="12" value="<?php echo get_option('wordpress_api_key'); ?>" style="font-family: 'Courier New', Courier, mono; font-size: 1.5em;" /> (<?php _e('<a href="http://akismet.com/get/">What is this?</a>'); ?>)</p> +<p><input id="key" name="key" type="text" size="15" maxlength="12" value="<?php echo get_option('wordpress_api_key'); ?>" style="font-family: 'Courier New', Courier, mono; font-size: 1.5em;" /> (<?php _e('<a href="http://akismet.com/get/?return=true">What is this?</a>'); ?>)</p> <?php if ( isset( $invalid_key) && $invalid_key ) { ?> <h3><?php _e('Why might my key be invalid?'); ?></h3> <p><?php _e('This can mean one of two things, either you copied the key wrong or that the plugin is unable to reach the Akismet servers, which is most often caused by an issue with your web host around firewalls or similar.'); ?></p> @@ -226,12 +240,6 @@ function akismet_conf() { <?php } -function akismet_stats_page() { - if ( function_exists('add_submenu_page') ) - add_submenu_page('index.php', __('Akismet Stats'), __('Akismet Stats'), 'manage_options', 'akismet-stats-display', 'akismet_stats_display'); - -} - function akismet_stats_script() { ?> <script type="text/javascript"> @@ -278,16 +286,41 @@ function akismet_stats() { $link = 'edit-comments.php'; else $link = 'edit.php'; - echo '<p>'.sprintf( _n( '<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.', '<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.', $count ), 'http://akismet.com/', clean_url("$link?page=akismet-admin"), number_format_i18n($count) ).'</p>'; + echo '<p>'.sprintf( _n( '<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.', '<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.', $count ), 'http://akismet.com/?return=true', clean_url("$link?page=akismet-admin"), number_format_i18n($count) ).'</p>'; } add_action('activity_box_end', 'akismet_stats'); function akismet_admin_warnings() { - global $wpcom_api_key; + global $wpcom_api_key, $pagenow; + + if ( + $pagenow == 'edit-comments.php' + || ( !empty( $_GET['page'] ) && $_GET['page'] == 'akismet-key-config' ) + || ( !empty( $_GET['page'] ) && $_GET['page'] == 'akismet-stats-display' ) + ) { + if ( get_option( 'akismet_alert_code' ) ) { + function akismet_alert() { + $alert = array( + 'code' => (int) get_option( 'akismet_alert_code' ), + 'msg' => get_option( 'akismet_alert_msg' ) + ); + ?> + <div class='error'> + <p><strong>Akismet Error Code: <?php echo $alert['code']; ?></strong></p> + <p><?php esc_html_e( $alert['msg'] ); ?></p> + <p>More information is available at <a href="https://akismet.com/errors/<?php echo $alert['code']; ?>">https://akismet.com/errors/<?php echo $alert['code']; ?></a></p> + </div> + <?php + } + + add_action( 'admin_notices', 'akismet_alert' ); + } + } + if ( !get_option('wordpress_api_key') && !$wpcom_api_key && !isset($_POST['submit']) ) { function akismet_warning() { echo " - <div id='akismet-warning' class='updated fade'><p><strong>".__('Akismet is almost ready.')."</strong> ".sprintf(__('You must <a href="%1$s">enter your Akismet API key</a> for it to work.'), "plugins.php?page=akismet-key-config")."</p></div> + <div id='akismet-warning' class='updated fade'><p><strong>".__('Akismet is almost ready.')."</strong> ".sprintf(__('You must <a href="%1$s">enter your Akismet API key</a> for it to work.'), "admin.php?page=akismet-key-config")."</p></div> "; } add_action('admin_notices', 'akismet_warning'); @@ -295,11 +328,12 @@ function akismet_admin_warnings() { } elseif ( ( empty($_SERVER['SCRIPT_FILENAME']) || basename($_SERVER['SCRIPT_FILENAME']) == 'edit-comments.php' ) && wp_next_scheduled('akismet_schedule_cron_recheck') ) { function akismet_warning() { global $wpdb; + akismet_fix_scheduled_recheck(); $waiting = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->commentmeta WHERE meta_key = 'akismet_error'" ) ); - $next_check = human_time_diff( wp_next_scheduled('akismet_schedule_cron_recheck') ); - if ( $waiting > 0 ) + $next_check = wp_next_scheduled('akismet_schedule_cron_recheck'); + if ( $waiting > 0 && $next_check > time() ) echo " - <div id='akismet-warning' class='updated fade'><p><strong>".__('Akismet has detected a problem.')."</strong> ".sprintf(_n('A server or network problem prevented Akismet from checking %d comment. It has been temporarily held for moderation and will be automatically re-checked in %s.', 'A server or network problem prevented Akismet from checking %d comments. They have been temporarily held for moderation and will be automatically re-checked in %s.', $waiting), number_format_i18n( $waiting ), $next_check)."</p></div> + <div id='akismet-warning' class='updated fade'><p><strong>".__('Akismet has detected a problem.')."</strong> ".sprintf(__('Some comments have not yet been checked for spam by Akismet. They have been temporarily held for moderation. Please check your <a href="%s">Akismet configuration</a> and contact your web host if problems persist.'), 'admin.php?page=akismet-key-config')."</p></div> "; } add_action('admin_notices', 'akismet_warning'); @@ -316,10 +350,13 @@ function akismet_comment_row_action( $a, $comment ) { return $a; $akismet_result = get_comment_meta( $comment->comment_ID, 'akismet_result', true ); + $akismet_error = get_comment_meta( $comment->comment_ID, 'akismet_error', true ); $user_result = get_comment_meta( $comment->comment_ID, 'akismet_user_result', true); $comment_status = wp_get_comment_status( $comment->comment_ID ); $desc = null; - if ( !$user_result || $user_result == $akismet_result ) { + if ( $akismet_error ) { + $desc = __( 'Awaiting spam check' ); + } elseif ( !$user_result || $user_result == $akismet_result ) { // Show the original Akismet result if the user hasn't overridden it, or if their decision was the same if ( $akismet_result == 'true' && $comment_status != 'spam' && $comment_status != 'trash' ) $desc = __( 'Flagged as spam by Akismet' ); @@ -338,8 +375,12 @@ function akismet_comment_row_action( $a, $comment ) { $b = array(); foreach ( $a as $k => $item ) { $b[ $k ] = $item; - if ( $k == 'edit' ) + if ( + $k == 'edit' + || ( $k == 'unspam' && $GLOBALS['wp_version'] >= 3.4 ) + ) { $b['history'] = '<a href="comment.php?action=editcomment&c='.$comment->comment_ID.'#akismet-status" title="'. esc_attr__( 'View comment history' ) . '"> '. __('History') . '</a>'; + } } $a = $b; @@ -428,11 +469,6 @@ add_filter('comment_text', 'akismet_text_add_link_class'); function akismet_rightnow() { global $submenu, $wp_db_version; - // clean_url was deprecated in WP 3.0 - $esc_url = 'clean_url'; - if ( function_exists( 'esc_url' ) ) - $esc_url = 'esc_url'; - if ( 8645 < $wp_db_version ) // 2.7 $link = 'edit-comments.php?comment_status=spam'; elseif ( isset( $submenu['edit-comments.php'] ) ) @@ -445,19 +481,20 @@ function akismet_rightnow() { '<a href="%1$s">Akismet</a> has protected your site from %2$s spam comment already. ', '<a href="%1$s">Akismet</a> has protected your site from %2$s spam comments already. ', $count - ), 'http://akismet.com/', number_format_i18n( $count ) ); + ), 'http://akismet.com/?return=true', number_format_i18n( $count ) ); } else { - $intro = sprintf( __('<a href="%1$s">Akismet</a> blocks spam from getting to your blog. '), 'http://akismet.com/' ); + $intro = sprintf( __('<a href="%1$s">Akismet</a> blocks spam from getting to your blog. '), 'http://akismet.com/?return=true' ); } + $link = function_exists( 'esc_url' ) ? esc_url( $link ) : clean_url( $link ); if ( $queue_count = akismet_spam_count() ) { $queue_text = sprintf( _n( 'There\'s <a href="%2$s">%1$s comment</a> in your spam queue right now.', 'There are <a href="%2$s">%1$s comments</a> in your spam queue right now.', $queue_count - ), number_format_i18n( $queue_count ), $esc_url($link) ); + ), number_format_i18n( $queue_count ), $link ); } else { - $queue_text = sprintf( __( "There's nothing in your <a href='%1\$s'>spam queue</a> at the moment." ), $esc_url($link) ); + $queue_text = sprintf( __( "There's nothing in your <a href='%1\$s'>spam queue</a> at the moment." ), $link ); } $text = $intro . '<br />' . $queue_text; @@ -512,6 +549,9 @@ function akismet_submit_nonspam_comment ( $comment_id ) { if ( akismet_test_mode() ) $comment->is_test = 'true'; + $post = get_post( $comment->comment_post_ID ); + $comment->comment_post_modified_gmt = $post->post_modified_gmt; + $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; @@ -561,6 +601,9 @@ function akismet_submit_spam_comment ( $comment_id ) { if ( akismet_test_mode() ) $comment->is_test = 'true'; + $post = get_post( $comment->comment_post_ID ); + $comment->comment_post_modified_gmt = $post->post_modified_gmt; + $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; @@ -591,6 +634,10 @@ function akismet_transition_comment_status( $new_status, $old_status, $comment ) if ( defined('WP_IMPORTING') && WP_IMPORTING == true ) return; + + // if this is present, it means the status has been changed by a re-check, not an explicit user action + if ( get_comment_meta( $comment->comment_ID, 'akismet_rechecking' ) ) + return; global $current_user; $reporter = ''; @@ -611,8 +658,7 @@ function akismet_transition_comment_status( $new_status, $old_status, $comment ) } } - if ( !get_comment_meta( $comment->comment_ID, 'akismet_rechecking' ) ) - akismet_update_comment_history( $comment->comment_ID, sprintf( __('%s changed the comment status to %s'), $reporter, $new_status ), 'status-' . $new_status ); + akismet_update_comment_history( $comment->comment_ID, sprintf( __('%s changed the comment status to %s'), $reporter, $new_status ), 'status-' . $new_status ); } add_action( 'transition_comment_status', 'akismet_transition_comment_status', 10, 3 ); @@ -647,6 +693,8 @@ function akismet_spam_count( $type = false ) { function akismet_recheck_queue() { global $wpdb, $akismet_api_host, $akismet_api_port; + akismet_fix_scheduled_recheck(); + if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) ) return; @@ -673,28 +721,63 @@ function akismet_recheck_queue() { foreach ( $c as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; + add_comment_meta( $c['comment_ID'], 'akismet_rechecking', true ); $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); if ( 'true' == $response[1] ) { wp_set_comment_status($c['comment_ID'], 'spam'); update_comment_meta( $c['comment_ID'], 'akismet_result', 'true' ); + delete_comment_meta( $c['comment_ID'], 'akismet_error' ); akismet_update_comment_history( $c['comment_ID'], __('Akismet re-checked and caught this comment as spam'), 'check-spam' ); } elseif ( 'false' == $response[1] ) { update_comment_meta( $c['comment_ID'], 'akismet_result', 'false' ); + delete_comment_meta( $c['comment_ID'], 'akismet_error' ); akismet_update_comment_history( $c['comment_ID'], __('Akismet re-checked and cleared this comment'), 'check-ham' ); // abnormal result: error } else { update_comment_meta( $c['comment_ID'], 'akismet_result', 'error' ); - akismet_update_comment_history( $c['comment_ID'], sprintf( __('Akismet was unable to re-check this comment (response: %s)'), $response[1]), 'check-error' ); + akismet_update_comment_history( $c['comment_ID'], sprintf( __('Akismet was unable to re-check this comment (response: %s)'), substr($response[1], 0, 50)), 'check-error' ); } + delete_comment_meta( $c['comment_ID'], 'akismet_rechecking' ); } - wp_redirect( $_SERVER['HTTP_REFERER'] ); + wp_safe_redirect( $_SERVER['HTTP_REFERER'] ); exit; } add_action('admin_action_akismet_recheck_queue', 'akismet_recheck_queue'); +// Adds an 'x' link next to author URLs, clicking will remove the author URL and show an undo link +function akismet_remove_comment_author_url() { + if ( !empty($_POST['id'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) { + global $wpdb; + $comment = get_comment( intval($_POST['id']), ARRAY_A ); + if (current_user_can('edit_comment', $comment['comment_ID'])) { + $comment['comment_author_url'] = ''; + do_action( 'comment_remove_author_url' ); + print(wp_update_comment( $comment )); + die(); + } + } +} + +add_action('wp_ajax_comment_author_deurl', 'akismet_remove_comment_author_url'); + +function akismet_add_comment_author_url() { + if ( !empty( $_POST['id'] ) && !empty( $_POST['url'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) { + global $wpdb; + $comment = get_comment( intval($_POST['id']), ARRAY_A ); + if (current_user_can('edit_comment', $comment['comment_ID'])) { + $comment['comment_author_url'] = esc_url($_POST['url']); + do_action( 'comment_add_author_url' ); + print(wp_update_comment( $comment )); + die(); + } + } +} + +add_action('wp_ajax_comment_author_reurl', 'akismet_add_comment_author_url'); + // Check connectivity between the WordPress blog and Akismet's servers. // Returns an associative array of server IP addresses, where the key is the IP address, and value is true (available) or false (unable to connect). function akismet_check_server_connectivity() { @@ -748,3 +831,20 @@ function akismet_server_connectivity_ok() { return !( empty($servers) || !count($servers) || count( array_filter($servers) ) < count($servers) ); } +function akismet_admin_menu() { + if ( class_exists( 'Jetpack' ) ) { + add_action( 'jetpack_admin_menu', 'akismet_load_menu' ); + } else { + akismet_load_menu(); + } +} + +function akismet_load_menu() { + if ( class_exists( 'Jetpack' ) ) { + add_submenu_page( 'jetpack', __( 'Akismet Configuration' ), __( 'Akismet Configuration' ), 'manage_options', 'akismet-key-config', 'akismet_conf' ); + add_submenu_page( 'jetpack', __( 'Akismet Stats' ), __( 'Akismet Stats' ), 'manage_options', 'akismet-stats-display', 'akismet_stats_display' ); + } else { + add_submenu_page('plugins.php', __('Akismet Configuration'), __('Akismet Configuration'), 'manage_options', 'akismet-key-config', 'akismet_conf'); + add_submenu_page('index.php', __('Akismet Stats'), __('Akismet Stats'), 'manage_options', 'akismet-stats-display', 'akismet_stats_display'); + } +} diff --git a/wp-content/plugins/akismet/akismet.css b/wp-content/plugins/akismet/akismet.css index 6bc845872..dccc9c493 100644 --- a/wp-content/plugins/akismet/akismet.css +++ b/wp-content/plugins/akismet/akismet.css @@ -1,7 +1,12 @@ #submitted-on { position: relative; } #the-comment-list .author .akismet-user-comment-count { display: inline; } +#the-comment-list .author a span { text-decoration: none; color: #999; } +#the-comment-list .remove_url { margin-left: 3px; color: #999; padding: 2px 3px 2px 0; } +#the-comment-list .remove_url:hover { color: #A7301F; font-weight: bold; padding: 2px 2px 2px 0; } #dashboard_recent_comments .akismet-status { display: none; } /* never show the flagged by text on the dashboard */ .akismet-status { float: right; } .akismet-status a { color: #AAA; font-style: italic; } span.comment-link a { text-decoration: underline; } span.comment-link:after { content: " " attr(title) " "; color: #aaa; text-decoration: none; } +.mshot-arrow { width: 0; height: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; border-right:10px solid #5C5C5C; position: absolute; left: -6px; top: 91px; } +.mshot-container { background: #5C5C5C; position: absolute; top: -94px; padding: 7px; width: 450px; height: 338px; z-index: 20000; -moz-border-radius:6px; border-radius:6px; -webkit-border-radius:6px; } \ No newline at end of file diff --git a/wp-content/plugins/akismet/akismet.js b/wp-content/plugins/akismet/akismet.js index 39089351e..839fe6bc2 100644 --- a/wp-content/plugins/akismet/akismet.js +++ b/wp-content/plugins/akismet/akismet.js @@ -7,4 +7,106 @@ jQuery(document).ready(function () { var thisId = jQuery(this).attr('commentid'); jQuery(this).insertAfter('#comment-' + thisId + ' .author strong:first').show(); }); + jQuery('#the-comment-list tr.comment .column-author a[title ^= "http://"]').each(function () { + var thisTitle = jQuery(this).attr('title'); + thisCommentId = jQuery(this).parents('tr:first').attr('id').split("-"); + + jQuery(this).attr("id", "author_comment_url_"+ thisCommentId[1]); + + if (thisTitle) { + jQuery(this).after(' <a href="#" class="remove_url" commentid="'+ thisCommentId[1] +'" title="Remove this URL">x</a>'); + } + }); + jQuery('.remove_url').live('click', function () { + var thisId = jQuery(this).attr('commentid'); + var data = { + action: 'comment_author_deurl', + _wpnonce: WPAkismet.comment_author_url_nonce, + id: thisId + }; + jQuery.ajax({ + url: ajaxurl, + type: 'POST', + data: data, + beforeSend: function () { + // Removes "x" link + jQuery("a[commentid='"+ thisId +"']").hide(); + // Show temp status + jQuery("#author_comment_url_"+ thisId).html('<span>Removing...</span>'); + }, + success: function (response) { + if (response) { + // Show status/undo link + jQuery("#author_comment_url_"+ thisId).attr('cid', thisId).addClass('akismet_undo_link_removal').html('<span>URL removed (</span>undo<span>)</span>'); + } + } + }); + + return false; + }); + jQuery('.akismet_undo_link_removal').live('click', function () { + var thisId = jQuery(this).attr('cid'); + var thisUrl = jQuery(this).attr('href').replace("http://www.", "").replace("http://", ""); + var data = { + action: 'comment_author_reurl', + _wpnonce: WPAkismet.comment_author_url_nonce, + id: thisId, + url: thisUrl + }; + jQuery.ajax({ + url: ajaxurl, + type: 'POST', + data: data, + beforeSend: function () { + // Show temp status + jQuery("#author_comment_url_"+ thisId).html('<span>Re-adding…</span>'); + }, + success: function (response) { + if (response) { + // Add "x" link + jQuery("a[commentid='"+ thisId +"']").show(); + // Show link + jQuery("#author_comment_url_"+ thisId).removeClass('akismet_undo_link_removal').html(thisUrl); + } + } + }); + + return false; + }); + jQuery('a[id^="author_comment_url"]').mouseover(function () { + // Need to determine size of author column + var thisParentWidth = jQuery(this).parent().width(); + // It changes based on if there is a gravatar present + thisParentWidth = (jQuery(this).parent().find('.grav-hijack').length) ? thisParentWidth - 42 + 'px' : thisParentWidth + 'px'; + if (jQuery(this).find('.mShot').length == 0 && !jQuery(this).hasClass('akismet_undo_link_removal')) { + var thisId = jQuery(this).attr('id').replace('author_comment_url_', ''); + jQuery('.widefat td').css('overflow', 'visible'); + jQuery(this).css('position', 'relative'); + var thisHref = jQuery.URLEncode(jQuery(this).attr('href')); + jQuery(this).append('<div class="mShot mshot-container" style="left: '+thisParentWidth+'"><div class="mshot-arrow"></div><img src="http://s.wordpress.com/mshots/v1/'+thisHref+'?w=450" width="450" class="mshot-image_'+thisId+'" style="margin: 0;" /></div>'); + setTimeout(function () { + jQuery('.mshot-image_'+thisId).attr('src', 'http://s.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=2'); + }, 6000); + setTimeout(function () { + jQuery('.mshot-image_'+thisId).attr('src', 'http://s.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=3'); + }, 12000); + } else { + jQuery(this).find('.mShot').css('left', thisParentWidth).show(); + } + }).mouseout(function () { + jQuery(this).find('.mShot').hide(); + }); +}); +// URL encode plugin +jQuery.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/; + while(x<c.length){var m=r.exec(c.substr(x)); + if(m!=null && m.length>1 && m[1]!=''){o+=m[1];x+=m[1].length; + }else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16); + o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;} }); +// Preload mshot images after everything else has loaded +jQuery(window).load(function() { + jQuery('a[id^="author_comment_url"]').each(function () { + jQuery.get('http://s.wordpress.com/mshots/v1/'+jQuery.URLEncode(jQuery(this).attr('href'))+'?w=450'); + }); +}); \ No newline at end of file diff --git a/wp-content/plugins/akismet/akismet.php b/wp-content/plugins/akismet/akismet.php index f45374500..0c5928c6a 100644 --- a/wp-content/plugins/akismet/akismet.php +++ b/wp-content/plugins/akismet/akismet.php @@ -4,9 +4,9 @@ */ /* Plugin Name: Akismet -Plugin URI: http://akismet.com/ -Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/?return=true">Sign up for an Akismet API key</a>, and 3) Go to your <a href="plugins.php?page=akismet-key-config">Akismet configuration</a> page, and save your API key. -Version: 2.5.3 +Plugin URI: http://akismet.com/?return=true +Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/?return=true">Sign up for an Akismet API key</a>, and 3) Go to your <a href="admin.php?page=akismet-key-config">Akismet configuration</a> page, and save your API key. +Version: 2.5.6 Author: Automattic Author URI: http://automattic.com/wordpress-plugins/ License: GPLv2 or later @@ -28,7 +28,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -define('AKISMET_VERSION', '2.5.3'); +define('AKISMET_VERSION', '2.5.6'); define('AKISMET_PLUGIN_URL', plugin_dir_url( __FILE__ )); /** If you hardcode a WP.com API key here, all key config screens will be hidden */ @@ -70,12 +70,33 @@ function akismet_get_key() { return get_option('wordpress_api_key'); } -function akismet_verify_key( $key, $ip = null ) { +function akismet_check_key_status( $key, $ip = null ) { global $akismet_api_host, $akismet_api_port, $wpcom_api_key; $blog = urlencode( get_option('home') ); if ( $wpcom_api_key ) $key = $wpcom_api_key; $response = akismet_http_post("key=$key&blog=$blog", 'rest.akismet.com', '/1.1/verify-key', $akismet_api_port, $ip); + return $response; +} + +// given a response from an API call like akismet_check_key_status(), update the alert code options if an alert is present. +function akismet_update_alert( $response ) { + $code = $msg = null; + if ( isset($response[0]['x-akismet-alert-code']) ) { + $code = $response[0]['x-akismet-alert-code']; + $msg = $response[0]['x-akismet-alert-msg']; + } + + // only call update_option() if the value has changed + if ( $code != get_option( 'akismet_alert_code' ) ) { + update_option( 'akismet_alert_code', $code ); + update_option( 'akismet_alert_msg', $msg ); + } +} + +function akismet_verify_key( $key, $ip = null ) { + $response = akismet_check_key_status( $key, $ip ); + akismet_update_alert( $response ); if ( !is_array($response) || !isset($response[1]) || $response[1] != 'valid' && $response[1] != 'invalid' ) return 'failed'; return $response[1]; @@ -120,6 +141,8 @@ function akismet_http_post($request, $host, $path, $port = 80, $ip=null) { $akismet_ua = "WordPress/{$wp_version} | "; $akismet_ua .= 'Akismet/' . constant( 'AKISMET_VERSION' ); + $akismet_ua = apply_filters( 'akismet_ua', $akismet_ua ); + $content_length = strlen( $request ); $http_host = $host; @@ -278,7 +301,7 @@ function akismet_auto_check_update_meta( $id, $comment ) { // abnormal result: error } else { update_comment_meta( $comment->comment_ID, 'akismet_error', time() ); - akismet_update_comment_history( $comment->comment_ID, sprintf( __('Akismet was unable to check this comment (response: %s), will automatically retry again later.'), $akismet_last_comment['akismet_result']), 'check-error' ); + akismet_update_comment_history( $comment->comment_ID, sprintf( __('Akismet was unable to check this comment (response: %s), will automatically retry again later.'), substr($akismet_last_comment['akismet_result'], 0, 50)), 'check-error' ); } // record the complete original data as submitted for checking @@ -303,7 +326,9 @@ function akismet_auto_check_comment( $commentdata ) { $comment['blog_charset'] = get_option('blog_charset'); $comment['permalink'] = get_permalink($comment['comment_post_ID']); - $comment['user_role'] = akismet_get_user_roles($comment['user_ID']); + if ( !empty( $comment['user_ID'] ) ) { + $comment['user_role'] = akismet_get_user_roles($comment['user_ID']); + } $akismet_nonce_option = apply_filters( 'akismet_comment_nonce', get_option( 'akismet_comment_nonce' ) ); $comment['akismet_comment_nonce'] = 'inactive'; @@ -335,6 +360,9 @@ function akismet_auto_check_comment( $commentdata ) { $comment["$key"] = ''; } + $post = get_post( $comment['comment_post_ID'] ); + $comment[ 'comment_post_modified_gmt' ] = $post->post_modified_gmt; + $query_string = ''; foreach ( $comment as $key => $data ) $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&'; @@ -342,6 +370,7 @@ function akismet_auto_check_comment( $commentdata ) { $commentdata['comment_as_submitted'] = $comment; $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port); + akismet_update_alert( $response ); $commentdata['akismet_result'] = $response[1]; if ( 'true' == $response[1] ) { // akismet_spam_count will be incremented later by akismet_result_spam() @@ -349,7 +378,6 @@ function akismet_auto_check_comment( $commentdata ) { do_action( 'akismet_spam_caught' ); - $post = get_post( $comment['comment_post_ID'] ); $last_updated = strtotime( $post->post_modified_gmt ); $diff = time() - $last_updated; $diff = $diff / 86400; @@ -358,15 +386,19 @@ function akismet_auto_check_comment( $commentdata ) { // akismet_result_spam() won't be called so bump the counter here if ( $incr = apply_filters('akismet_spam_count_incr', 1) ) update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr ); - wp_redirect( $_SERVER['HTTP_REFERER'] ); + wp_safe_redirect( $_SERVER['HTTP_REFERER'] ); die(); } } // if the response is neither true nor false, hold the comment for moderation and schedule a recheck if ( 'true' != $response[1] && 'false' != $response[1] ) { - add_filter('pre_comment_approved', 'akismet_result_hold'); - wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + if ( !current_user_can('moderate_comments') ) { + add_filter('pre_comment_approved', 'akismet_result_hold'); + } + if ( !wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) { + wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + } } if ( function_exists('wp_next_scheduled') && function_exists('wp_schedule_event') ) { @@ -378,6 +410,8 @@ function akismet_auto_check_comment( $commentdata ) { akismet_delete_old(); } $akismet_last_comment = $commentdata; + + akismet_fix_scheduled_recheck(); return $commentdata; } @@ -402,7 +436,42 @@ function akismet_delete_old() { } +function akismet_delete_old_metadata() { + global $wpdb; + + $now_gmt = current_time( 'mysql', 1 ); + $interval = apply_filters( 'akismet_delete_commentmeta_interval', 15 ); + + # enfore a minimum of 1 day + $interval = absint( $interval ); + if ( $interval < 1 ) { + return; + } + + // akismet_as_submitted meta values are large, so expire them + // after $interval days regardless of the comment status + while ( TRUE ) { + $comment_ids = $wpdb->get_col( "SELECT $wpdb->comments.comment_id FROM $wpdb->commentmeta INNER JOIN $wpdb->comments USING(comment_id) WHERE meta_key = 'akismet_as_submitted' AND DATE_SUB('$now_gmt', INTERVAL {$interval} DAY) > comment_date_gmt LIMIT 10000" ); + + if ( empty( $comment_ids ) ) { + return; + } + + foreach ( $comment_ids as $comment_id ) { + delete_comment_meta( $comment_id, 'akismet_as_submitted' ); + } + } + + /* + $n = mt_rand( 1, 5000 ); + if ( apply_filters( 'akismet_optimize_table', ( $n == 11 ), 'commentmeta' ) ) { // lucky number + $wpdb->query( "OPTIMIZE TABLE $wpdb->commentmeta" ); + } + */ +} + add_action('akismet_scheduled_delete', 'akismet_delete_old'); +add_action('akismet_scheduled_delete', 'akismet_delete_old_metadata'); function akismet_check_db_comment( $id, $recheck_reason = 'recheck_queue' ) { global $wpdb, $akismet_api_host, $akismet_api_port; @@ -435,6 +504,13 @@ function akismet_check_db_comment( $id, $recheck_reason = 'recheck_queue' ) { function akismet_cron_recheck() { global $wpdb; + $status = akismet_verify_key( akismet_get_key() ); + if ( get_option( 'akismet_alert_code' ) || $status == 'invalid' ) { + // since there is currently a problem with the key, reschedule a check for 6 hours hence + wp_schedule_single_event( time() + 21600, 'akismet_schedule_cron_recheck' ); + return false; + } + delete_option('akismet_available_servers'); $comment_errors = $wpdb->get_col( " @@ -445,8 +521,9 @@ function akismet_cron_recheck() { " ); foreach ( (array) $comment_errors as $comment_id ) { - // if the comment no longer exists, remove the meta entry from the queue to avoid getting stuck - if ( !get_comment( $comment_id ) ) { + // if the comment no longer exists, or is too old, remove the meta entry from the queue to avoid getting stuck + $comment = get_comment( $comment_id ); + if ( !$comment || strtotime( $comment->comment_date_gmt ) < strtotime( "-15 days" ) ) { delete_comment_meta( $comment_id, 'akismet_error' ); continue; } @@ -485,6 +562,7 @@ function akismet_cron_recheck() { wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); return; } + delete_comment_meta( $comment_id, 'akismet_rechecking' ); } $remaining = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->commentmeta WHERE meta_key = 'akismet_error'" ) ); @@ -505,8 +583,26 @@ $akismet_comment_nonce_option = apply_filters( 'akismet_comment_nonce', get_opti if ( $akismet_comment_nonce_option == 'true' || $akismet_comment_nonce_option == '' ) add_action( 'comment_form', 'akismet_add_comment_nonce' ); +global $wp_version; if ( '3.0.5' == $wp_version ) { remove_filter( 'comment_text', 'wp_kses_data' ); if ( is_admin() ) add_filter( 'comment_text', 'wp_kses_post' ); } + +function akismet_fix_scheduled_recheck() { + $future_check = wp_next_scheduled( 'akismet_schedule_cron_recheck' ); + if ( !$future_check ) { + return; + } + + if ( get_option( 'akismet_alert_code' ) > 0 ) { + return; + } + + $check_range = time() + 1200; + if ( $future_check > $check_range ) { + wp_clear_scheduled_hook( 'akismet_schedule_cron_recheck' ); + wp_schedule_single_event( time() + 300, 'akismet_schedule_cron_recheck' ); + } +} diff --git a/wp-content/plugins/akismet/index.php b/wp-content/plugins/akismet/index.php new file mode 100644 index 000000000..a6ce9c89c --- /dev/null +++ b/wp-content/plugins/akismet/index.php @@ -0,0 +1,2 @@ +<?php +# Silence is golden. diff --git a/wp-content/plugins/akismet/legacy.php b/wp-content/plugins/akismet/legacy.php index d5d53b088..e6de8cb31 100644 --- a/wp-content/plugins/akismet/legacy.php +++ b/wp-content/plugins/akismet/legacy.php @@ -71,7 +71,7 @@ function akismet_caught() { ++$i; endforeach; $to = add_query_arg( 'recovered', $i, $_SERVER['HTTP_REFERER'] ); - wp_redirect( $to ); + wp_safe_redirect( $to ); exit; } if ('delete' == $_POST['action']) { @@ -87,7 +87,7 @@ function akismet_caught() { wp_cache_delete( 'akismet_spam_count', 'widget' ); } $to = add_query_arg( 'deleted', 'all', $_SERVER['HTTP_REFERER'] ); - wp_redirect( $to ); + wp_safe_redirect( $to ); exit; } @@ -366,7 +366,7 @@ function redirect_old_akismet_urls( ) { // 2.7 redirect for people who might have bookmarked the old page if ( 8204 < $wp_db_version && ( 'edit-comments.php' == $script_name || 'edit.php' == $script_name ) && 'akismet-admin' == $page ) { $new_url = esc_url( 'edit-comments.php?comment_status=spam' ); - wp_redirect( $new_url, 301 ); + wp_safe_redirect( $new_url, 301 ); exit; } } diff --git a/wp-content/plugins/akismet/readme.txt b/wp-content/plugins/akismet/readme.txt index fbd3513b5..227fad959 100644 --- a/wp-content/plugins/akismet/readme.txt +++ b/wp-content/plugins/akismet/readme.txt @@ -2,8 +2,8 @@ Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, automattic Tags: akismet, comments, spam Requires at least: 3.0 -Tested up to: 3.1 -Stable tag: 2.5.3 +Tested up to: 3.4 +Stable tag: 2.5.6 License: GPLv2 or later Akismet checks your comments against the Akismet web service to see if they look like spam or not. @@ -31,6 +31,29 @@ Upload the Akismet plugin to your blog, Activate it, then enter your [Akismet.co == Changelog == += 2.5.6 = +* Prevent retry scheduling problems on sites where wp_cron is misbehaving +* Preload mshot previews +* Modernize the widget code +* Fix a bug where comments were not held for moderation during an error condition +* Improve the UX and display when comments are temporarily held due to an error +* Make the Check For Spam button force a retry when comments are held due to an error +* Handle errors caused by an invalid key +* Don't retry comments that are too old +* Improve error messages when verifying an API key + += 2.5.5 = +* Add nonce check for comment author URL remove action +* Fix the settings link + += 2.5.4 = +* Limit Akismet CSS and Javascript loading in wp-admin to just the pages that need it +* Added author URL quick removal functionality +* Added mShot preview on Author URL hover +* Added empty index.php to prevent directory listing +* Move wp-admin menu items under Jetpack, if it is installed +* Purge old Akismet comment meta data, default of 15 days + = 2.5.3 = * Specify the license is GPL v2 or later * Fix a bug that could result in orphaned commentmeta entries diff --git a/wp-content/plugins/akismet/widget.php b/wp-content/plugins/akismet/widget.php index e9a3f626e..8c5a120f5 100644 --- a/wp-content/plugins/akismet/widget.php +++ b/wp-content/plugins/akismet/widget.php @@ -2,89 +2,107 @@ /** * @package Akismet */ -// Widget stuff -function widget_akismet_register() { - if ( function_exists('register_sidebar_widget') ) : - function widget_akismet($args) { - extract($args); - $options = get_option('widget_akismet'); - $count = get_option('akismet_spam_count'); - ?> - <?php echo $before_widget; ?> - <?php echo $before_title . $options['title'] . $after_title; ?> - <div id="akismetwrap"><div id="akismetstats"><a id="aka" href="http://akismet.com" title=""><?php printf( _n( '%1$s%2$s%3$s %4$sspam comment%5$s %6$sblocked by%7$s<br />%8$sAkismet%9$s', '%1$s%2$s%3$s %4$sspam comments%5$s %6$sblocked by%7$s<br />%8$sAkismet%9$s', $count ), '<span id="akismet1"><span id="akismetcount">', number_format_i18n( $count ), '</span>', '<span id="akismetsc">', '</span></span>', '<span id="akismet2"><span id="akismetbb">', '</span>', '<span id="akismeta">', '</span></span>' ); ?></a></div></div> - <?php echo $after_widget; ?> - <?php +class Akismet_Widget extends WP_Widget { + + function __construct() { + parent::__construct( + 'akismet_widget', + __( 'Akismet Widget' ), + array( 'description' => __( 'Display the number of spam comments Akismet has caught' ) ) + ); + + if ( is_active_widget( false, false, $this->id_base ) ) { + add_action( 'wp_head', array( $this, 'css' ) ); + } } - function widget_akismet_style() { - $plugin_dir = '/wp-content/plugins'; - if ( defined( 'PLUGINDIR' ) ) - $plugin_dir = '/' . PLUGINDIR; + function css() { +?> - ?> <style type="text/css"> -#aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none} -#aka:hover{border:none;text-decoration:none} -#aka:hover #akismet1{display:none} -#aka:hover #akismet2,#akismet1{display:block} -#akismet2{display:none;padding-top:2px} -#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none} -#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none} -#akismetwrap #akismetstats{background:url(<?php echo get_option('siteurl'), $plugin_dir; ?>/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px} +.a-stats { + width: auto; +} +.a-stats a { + background: #7CA821; + background-image:-moz-linear-gradient(0% 100% 90deg,#5F8E14,#7CA821); + background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#7CA821),to(#5F8E14)); + border: 1px solid #5F8E14; + border-radius:3px; + color: #CFEA93; + cursor: pointer; + display: block; + font-weight: normal; + height: 100%; + -moz-border-radius:3px; + padding: 7px 0 8px; + text-align: center; + text-decoration: none; + -webkit-border-radius:3px; + width: 100%; +} +.a-stats a:hover { + text-decoration: none; + background-image:-moz-linear-gradient(0% 100% 90deg,#6F9C1B,#659417); + background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#659417),to(#6F9C1B)); +} +.a-stats .count { + color: #FFF; + display: block; + font-size: 15px; + line-height: 16px; + padding: 0 13px; + white-space: nowrap; +} </style> - <?php + +<?php } - function widget_akismet_control() { - $options = $newoptions = get_option('widget_akismet'); - if ( isset( $_POST['akismet-submit'] ) && $_POST["akismet-submit"] ) { - $newoptions['title'] = strip_tags(stripslashes($_POST["akismet-title"])); - if ( empty($newoptions['title']) ) $newoptions['title'] = __('Spam Blocked'); + function form( $instance ) { + if ( $instance ) { + $title = esc_attr( $instance['title'] ); } - if ( $options != $newoptions ) { - $options = $newoptions; - update_option('widget_akismet', $options); + else { + $title = __( 'Spam Blocked' ); } - $title = htmlspecialchars($options['title'], ENT_QUOTES); - ?> - <p><label for="akismet-title"><?php _e('Title:'); ?> <input style="width: 250px;" id="akismet-title" name="akismet-title" type="text" value="<?php echo $title; ?>" /></label></p> - <input type="hidden" id="akismet-submit" name="akismet-submit" value="1" /> - <?php - } +?> - if ( function_exists( 'wp_register_sidebar_widget' ) ) { - wp_register_sidebar_widget( 'akismet', 'Akismet', 'widget_akismet', null, 'akismet'); - wp_register_widget_control( 'akismet', 'Akismet', 'widget_akismet_control', null, 75, 'akismet'); - } else { - register_sidebar_widget('Akismet', 'widget_akismet', null, 'akismet'); - register_widget_control('Akismet', 'widget_akismet_control', null, 75, 'akismet'); + <p> + <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> + <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /> + </p> + +<?php } - if ( is_active_widget('widget_akismet') ) - add_action('wp_head', 'widget_akismet_style'); - endif; -} -add_action('init', 'widget_akismet_register'); + function update( $new_instance, $old_instance ) { + $instance['title'] = strip_tags( $new_instance['title'] ); + return $instance; + } -// Counter for non-widget users -function akismet_counter() { - $plugin_dir = '/wp-content/plugins'; - if ( defined( 'PLUGINDIR' ) ) - $plugin_dir = '/' . PLUGINDIR; + function widget( $args, $instance ) { + $count = get_option( 'akismet_spam_count' ); + echo $args['before_widget']; + if ( ! empty( $instance['title'] ) ) { + echo $args['before_title']; + echo esc_html( $instance['title'] ); + echo $args['after_title']; + } ?> -<style type="text/css"> -#akismetwrap #aka,#aka:link,#aka:hover,#aka:visited,#aka:active{color:#fff;text-decoration:none} -#aka:hover{border:none;text-decoration:none} -#aka:hover #akismet1{display:none} -#aka:hover #akismet2,#akismet1{display:block} -#akismet2{display:none;padding-top:2px} -#akismeta{font-size:16px;font-weight:bold;line-height:18px;text-decoration:none} -#akismetcount{display:block;font:15px Verdana,Arial,Sans-Serif;font-weight:bold;text-decoration:none} -#akismetwrap #akismetstats{background:url(<?php echo get_option('siteurl'), $plugin_dir; ?>/akismet/akismet.gif) no-repeat top left;border:none;color:#fff;font:11px 'Trebuchet MS','Myriad Pro',sans-serif;height:40px;line-height:100%;overflow:hidden;padding:8px 0 0;text-align:center;width:120px} -</style> + + <div class="a-stats"> + <a href="http://akismet.com" target="_blank" title=""><?php printf( _n( '<strong class="count">%1$s spam</strong> blocked by <strong>Akismet</strong>', '<strong class="count">%1$s spam</strong> blocked by <strong>Akismet</strong>', $count ), number_format_i18n( $count ) ); ?></a> + </div> + <?php -$count = get_option('akismet_spam_count'); -printf( _n( '<div id="akismetwrap"><div id="akismetstats"><a id="aka" href="http://akismet.com" title=""><div id="akismet1"><span id="akismetcount">%1$s</span> <span id="akismetsc">spam comment</span></div> <div id="akismet2"><span id="akismetbb">blocked by</span><br /><span id="akismeta">Akismet</span></div></a></div></div>', '<div id="akismetwrap"><div id="akismetstats"><a id="aka" href="http://akismet.com" title=""><div id="akismet1"><span id="akismetcount">%1$s</span> <span id="akismetsc">spam comments</span></div> <div id="akismet2"><span id="akismetbb">blocked by</span><br /><span id="akismeta">Akismet</span></div></a></div></div>', $count ), number_format_i18n( $count ) ); + echo $args['after_widget']; + } } + +function akismet_register_widgets() { + register_widget( 'Akismet_Widget' ); +} + +add_action( 'widgets_init', 'akismet_register_widgets' ); diff --git a/wp-content/themes/twentyeleven/author.php b/wp-content/themes/twentyeleven/author.php index f9a2bfdca..472cb133d 100644 --- a/wp-content/themes/twentyeleven/author.php +++ b/wp-content/themes/twentyeleven/author.php @@ -49,7 +49,7 @@ get_header(); ?> <h2><?php printf( __( 'About %s', 'twentyeleven' ), get_the_author() ); ?></h2> <?php the_author_meta( 'description' ); ?> </div><!-- #author-description --> - </div><!-- #entry-author-info --> + </div><!-- #author-info --> <?php endif; ?> <?php /* Start the Loop */ ?> diff --git a/wp-content/themes/twentyeleven/content-single.php b/wp-content/themes/twentyeleven/content-single.php index 4cd26adc4..8c2837159 100644 --- a/wp-content/themes/twentyeleven/content-single.php +++ b/wp-content/themes/twentyeleven/content-single.php @@ -65,7 +65,7 @@ </a> </div><!-- #author-link --> </div><!-- #author-description --> - </div><!-- #entry-author-info --> + </div><!-- #author-info --> <?php endif; ?> </footer><!-- .entry-meta --> </article><!-- #post-<?php the_ID(); ?> --> diff --git a/wp-content/themes/twentyeleven/editor-style.css b/wp-content/themes/twentyeleven/editor-style.css index 2641a077a..e866925a9 100644 --- a/wp-content/themes/twentyeleven/editor-style.css +++ b/wp-content/themes/twentyeleven/editor-style.css @@ -125,7 +125,7 @@ pre { margin-bottom: 1.625em; padding: 0.75em 1.625em; } -code, kbd, code var { +code, kbd, samp, var { font: 13px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; } abbr, acronym, dfn { diff --git a/wp-content/themes/twentyeleven/functions.php b/wp-content/themes/twentyeleven/functions.php index 9858126b6..e9d97ed27 100644 --- a/wp-content/themes/twentyeleven/functions.php +++ b/wp-content/themes/twentyeleven/functions.php @@ -62,10 +62,9 @@ if ( ! function_exists( 'twentyeleven_setup' ) ): * * @uses load_theme_textdomain() For translation/localization support. * @uses add_editor_style() To style the visual editor. - * @uses add_theme_support() To add support for post thumbnails, automatic feed links, and Post Formats. + * @uses add_theme_support() To add support for post thumbnails, automatic feed links, custom headers + * and backgrounds, and post formats. * @uses register_nav_menus() To add support for navigation menus. - * @uses add_custom_background() To add support for a custom background. - * @uses add_custom_image_header() To add support for a custom header. * @uses register_default_headers() To register the default custom header images provided with the theme. * @uses set_post_thumbnail_size() To set a custom post thumbnail size. * @@ -80,11 +79,6 @@ function twentyeleven_setup() { */ load_theme_textdomain( 'twentyeleven', get_template_directory() . '/languages' ); - $locale = get_locale(); - $locale_file = get_template_directory() . "/languages/$locale.php"; - if ( is_readable( $locale_file ) ) - require_once( $locale_file ); - // This theme styles the visual editor with editor-style.css to match the theme style. add_editor_style(); @@ -103,42 +97,63 @@ function twentyeleven_setup() { // Add support for a variety of post formats add_theme_support( 'post-formats', array( 'aside', 'link', 'gallery', 'status', 'quote', 'image' ) ); - // Add support for custom backgrounds - add_custom_background(); + $theme_options = twentyeleven_get_theme_options(); + if ( 'dark' == $theme_options['color_scheme'] ) + $default_background_color = '1d1d1d'; + else + $default_background_color = 'f1f1f1'; + + // Add support for custom backgrounds. + add_theme_support( 'custom-background', array( + // Let WordPress know what our default background color is. + // This is dependent on our current color scheme. + 'default-color' => $default_background_color, + ) ); // This theme uses Featured Images (also known as post thumbnails) for per-post/per-page Custom Header images add_theme_support( 'post-thumbnails' ); - // The next four constants set how Twenty Eleven supports custom headers. - - // The default header text color - define( 'HEADER_TEXTCOLOR', '000' ); - - // By leaving empty, we allow for random image rotation. - define( 'HEADER_IMAGE', '' ); - - // The height and width of your custom header. - // Add a filter to twentyeleven_header_image_width and twentyeleven_header_image_height to change these values. - define( 'HEADER_IMAGE_WIDTH', apply_filters( 'twentyeleven_header_image_width', 1000 ) ); - define( 'HEADER_IMAGE_HEIGHT', apply_filters( 'twentyeleven_header_image_height', 288 ) ); + // Add support for custom headers. + $custom_header_support = array( + // The default header text color. + 'default-text-color' => '000', + // The height and width of our custom header. + 'width' => apply_filters( 'twentyeleven_header_image_width', 1000 ), + 'height' => apply_filters( 'twentyeleven_header_image_height', 288 ), + // Support flexible heights. + 'flex-height' => true, + // Random image rotation by default. + 'random-default' => true, + // Callback for styling the header. + 'wp-head-callback' => 'twentyeleven_header_style', + // Callback for styling the header preview in the admin. + 'admin-head-callback' => 'twentyeleven_admin_header_style', + // Callback used to display the header preview in the admin. + 'admin-preview-callback' => 'twentyeleven_admin_header_image', + ); + + add_theme_support( 'custom-header', $custom_header_support ); + + if ( ! function_exists( 'get_custom_header' ) ) { + // This is all for compatibility with versions of WordPress prior to 3.4. + define( 'HEADER_TEXTCOLOR', $custom_header_support['default-text-color'] ); + define( 'HEADER_IMAGE', '' ); + define( 'HEADER_IMAGE_WIDTH', $custom_header_support['width'] ); + define( 'HEADER_IMAGE_HEIGHT', $custom_header_support['height'] ); + add_custom_image_header( $custom_header_support['wp-head-callback'], $custom_header_support['admin-head-callback'], $custom_header_support['admin-preview-callback'] ); + add_custom_background(); + } // We'll be using post thumbnails for custom header images on posts and pages. // We want them to be the size of the header image that we just defined // Larger images will be auto-cropped to fit, smaller ones will be ignored. See header.php. - set_post_thumbnail_size( HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT, true ); - - // Add Twenty Eleven's custom image sizes - add_image_size( 'large-feature', HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT, true ); // Used for large feature (header) images - add_image_size( 'small-feature', 500, 300 ); // Used for featured posts if a large-feature doesn't exist - - // Turn on random header image rotation by default. - add_theme_support( 'custom-header', array( 'random-default' => true ) ); - - // Add a way for the custom header to be styled in the admin panel that controls - // custom headers. See twentyeleven_admin_header_style(), below. - add_custom_image_header( 'twentyeleven_header_style', 'twentyeleven_admin_header_style', 'twentyeleven_admin_header_image' ); + set_post_thumbnail_size( $custom_header_support['width'], $custom_header_support['height'], true ); - // ... and thus ends the changeable header business. + // Add Twenty Eleven's custom image sizes. + // Used for large feature (header) images. + add_image_size( 'large-feature', $custom_header_support['width'], $custom_header_support['height'], true ); + // Used for featured posts if a large-feature doesn't exist. + add_image_size( 'small-feature', 500, 300 ); // Default custom headers packaged with the theme. %s is a placeholder for the theme template directory URI. register_default_headers( array( @@ -201,17 +216,18 @@ if ( ! function_exists( 'twentyeleven_header_style' ) ) : * @since Twenty Eleven 1.0 */ function twentyeleven_header_style() { + $text_color = get_header_textcolor(); - // If no custom options for text are set, let's bail - // get_header_textcolor() options: HEADER_TEXTCOLOR is default, hide text (returns 'blank') or any hex value - if ( HEADER_TEXTCOLOR == get_header_textcolor() ) + // If no custom options for text are set, let's bail. + if ( $text_color == HEADER_TEXTCOLOR ) return; + // If we get this far, we have custom styles. Let's do this. ?> <style type="text/css"> <?php // Has the text been hidden? - if ( 'blank' == get_header_textcolor() ) : + if ( 'blank' == $text_color ) : ?> #site-title, #site-description { @@ -225,7 +241,7 @@ function twentyeleven_header_style() { ?> #site-title a, #site-description { - color: #<?php echo get_header_textcolor(); ?> !important; + color: #<?php echo $text_color; ?> !important; } <?php endif; ?> </style> @@ -237,7 +253,7 @@ if ( ! function_exists( 'twentyeleven_admin_header_style' ) ) : /** * Styles the header image displayed on the Appearance > Header admin panel. * - * Referenced via add_custom_image_header() in twentyeleven_setup(). + * Referenced via add_theme_support('custom-header') in twentyeleven_setup(). * * @since Twenty Eleven 1.0 */ @@ -287,23 +303,24 @@ if ( ! function_exists( 'twentyeleven_admin_header_image' ) ) : /** * Custom header image markup displayed on the Appearance > Header admin panel. * - * Referenced via add_custom_image_header() in twentyeleven_setup(). + * Referenced via add_theme_support('custom-header') in twentyeleven_setup(). * * @since Twenty Eleven 1.0 */ function twentyeleven_admin_header_image() { ?> <div id="headimg"> <?php - if ( 'blank' == get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) || '' == get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) ) - $style = ' style="display:none;"'; + $color = get_header_textcolor(); + $image = get_header_image(); + if ( $color && $color != 'blank' ) + $style = ' style="color:#' . $color . '"'; else - $style = ' style="color:#' . get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) . ';"'; + $style = ' style="display:none"'; ?> <h1><a id="name"<?php echo $style; ?> onclick="return false;" href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php bloginfo( 'name' ); ?></a></h1> <div id="desc"<?php echo $style; ?>><?php bloginfo( 'description' ); ?></div> - <?php $header_image = get_header_image(); - if ( ! empty( $header_image ) ) : ?> - <img src="<?php echo esc_url( $header_image ); ?>" alt="" /> + <?php if ( $image ) : ?> + <img src="<?php echo esc_url( $image ); ?>" alt="" /> <?php endif; ?> </div> <?php } diff --git a/wp-content/themes/twentyeleven/header.php b/wp-content/themes/twentyeleven/header.php index b1be094ad..59b6d3b14 100644 --- a/wp-content/themes/twentyeleven/header.php +++ b/wp-content/themes/twentyeleven/header.php @@ -78,20 +78,36 @@ <?php // Check to see if the header image has been removed $header_image = get_header_image(); - if ( ! empty( $header_image ) ) : - ?> + if ( $header_image ) : + // Compatibility with versions of WordPress prior to 3.4. + if ( function_exists( 'get_custom_header' ) ) { + // We need to figure out what the minimum width should be for our featured image. + // This result would be the suggested width if the theme were to implement flexible widths. + $header_image_width = get_theme_support( 'custom-header', 'width' ); + } else { + $header_image_width = HEADER_IMAGE_WIDTH; + } + ?> <a href="<?php echo esc_url( home_url( '/' ) ); ?>"> <?php // The header image // Check if this is a post or page, if it has a thumbnail, and if it's a big one - if ( is_singular() && - has_post_thumbnail( $post->ID ) && - ( /* $src, $width, $height */ $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array( HEADER_IMAGE_WIDTH, HEADER_IMAGE_WIDTH ) ) ) && - $image[1] >= HEADER_IMAGE_WIDTH ) : + if ( is_singular() && has_post_thumbnail( $post->ID ) && + ( /* $src, $width, $height */ $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array( $header_image_width, $header_image_width ) ) ) && + $image[1] >= $header_image_width ) : // Houston, we have a new header image! echo get_the_post_thumbnail( $post->ID, 'post-thumbnail' ); - else : ?> - <img src="<?php header_image(); ?>" width="<?php echo HEADER_IMAGE_WIDTH; ?>" height="<?php echo HEADER_IMAGE_HEIGHT; ?>" alt="" /> + else : + // Compatibility with versions of WordPress prior to 3.4. + if ( function_exists( 'get_custom_header' ) ) { + $header_image_width = get_custom_header()->width; + $header_image_height = get_custom_header()->height; + } else { + $header_image_width = HEADER_IMAGE_WIDTH; + $header_image_height = HEADER_IMAGE_HEIGHT; + } + ?> + <img src="<?php header_image(); ?>" width="<?php echo $header_image_width; ?>" height="<?php echo $header_image_height; ?>" alt="" /> <?php endif; // end check for featured image or standard header ?> </a> <?php endif; // end check for removed header image ?> @@ -100,7 +116,7 @@ // Has the text been hidden? if ( 'blank' == get_header_textcolor() ) : ?> - <div class="only-search<?php if ( ! empty( $header_image ) ) : ?> with-image<?php endif; ?>"> + <div class="only-search<?php if ( $header_image ) : ?> with-image<?php endif; ?>"> <?php get_search_form(); ?> </div> <?php @@ -111,13 +127,13 @@ <nav id="access" role="navigation"> <h3 class="assistive-text"><?php _e( 'Main menu', 'twentyeleven' ); ?></h3> - <?php /* Allow screen readers / text browsers to skip the navigation menu and get right to the good stuff. */ ?> + <?php /* Allow screen readers / text browsers to skip the navigation menu and get right to the good stuff. */ ?> <div class="skip-link"><a class="assistive-text" href="#content" title="<?php esc_attr_e( 'Skip to primary content', 'twentyeleven' ); ?>"><?php _e( 'Skip to primary content', 'twentyeleven' ); ?></a></div> <div class="skip-link"><a class="assistive-text" href="#secondary" title="<?php esc_attr_e( 'Skip to secondary content', 'twentyeleven' ); ?>"><?php _e( 'Skip to secondary content', 'twentyeleven' ); ?></a></div> - <?php /* Our navigation menu. If one isn't filled out, wp_nav_menu falls back to wp_page_menu. The menu assiged to the primary position is the one used. If none is assigned, the menu with the lowest ID is used. */ ?> + <?php /* Our navigation menu. If one isn't filled out, wp_nav_menu falls back to wp_page_menu. The menu assigned to the primary location is the one used. If one isn't assigned, the menu with the lowest ID is used. */ ?> <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?> </nav><!-- #access --> </header><!-- #branding --> - <div id="main"> \ No newline at end of file + <div id="main"> diff --git a/wp-content/themes/twentyeleven/inc/theme-customizer.js b/wp-content/themes/twentyeleven/inc/theme-customizer.js new file mode 100644 index 000000000..ca63fdad4 --- /dev/null +++ b/wp-content/themes/twentyeleven/inc/theme-customizer.js @@ -0,0 +1,12 @@ +( function( $ ){ + wp.customize( 'blogname', function( value ) { + value.bind( function( to ) { + $( '#site-title a' ).html( to ); + } ); + } ); + wp.customize( 'blogdescription', function( value ) { + value.bind( function( to ) { + $( '#site-description' ).html( to ); + } ); + } ); +} )( jQuery ); \ No newline at end of file diff --git a/wp-content/themes/twentyeleven/inc/theme-options.php b/wp-content/themes/twentyeleven/inc/theme-options.php index f1d6c4b3d..698f2a0b5 100644 --- a/wp-content/themes/twentyeleven/inc/theme-options.php +++ b/wp-content/themes/twentyeleven/inc/theme-options.php @@ -31,16 +31,10 @@ add_action( 'admin_print_styles-appearance_page_theme_options', 'twentyeleven_ad * which is used when the option is saved, to ensure that our option values are complete, properly * formatted, and safe. * - * We also use this function to add our theme option if it doesn't already exist. - * * @since Twenty Eleven 1.0 */ function twentyeleven_theme_options_init() { - // If we have no options in the database, let's add them now. - if ( false === twentyeleven_get_theme_options() ) - add_option( 'twentyeleven_theme_options', twentyeleven_get_default_theme_options() ); - register_setting( 'twentyeleven_options', // Options group, see settings_fields() call in twentyeleven_theme_options_render_page() 'twentyeleven_theme_options', // Database option, see twentyeleven_get_theme_options() @@ -314,7 +308,8 @@ function twentyeleven_theme_options_render_page() { ?> <div class="wrap"> <?php screen_icon(); ?> - <h2><?php printf( __( '%s Theme Options', 'twentyeleven' ), get_current_theme() ); ?></h2> + <?php $theme_name = function_exists( 'wp_get_theme' ) ? wp_get_theme() : get_current_theme(); ?> + <h2><?php printf( __( '%s Theme Options', 'twentyeleven' ), $theme_name ); ?></h2> <?php settings_errors(); ?> <form method="post" action="options.php"> @@ -446,4 +441,91 @@ function twentyeleven_layout_classes( $existing_classes ) { return array_merge( $existing_classes, $classes ); } -add_filter( 'body_class', 'twentyeleven_layout_classes' ); \ No newline at end of file +add_filter( 'body_class', 'twentyeleven_layout_classes' ); + +/** + * Implements Twenty Eleven theme options into Theme Customizer + * + * @param $wp_customize Theme Customizer object + * @return void + * + * @since Twenty Eleven 1.3 + */ +function twentyeleven_customize_register( $wp_customize ) { + $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + + $options = twentyeleven_get_theme_options(); + $defaults = twentyeleven_get_default_theme_options(); + + $wp_customize->add_setting( 'twentyeleven_theme_options[color_scheme]', array( + 'default' => $defaults['color_scheme'], + 'type' => 'option', + 'capability' => 'edit_theme_options', + ) ); + + $schemes = twentyeleven_color_schemes(); + $choices = array(); + foreach ( $schemes as $scheme ) { + $choices[ $scheme['value'] ] = $scheme['label']; + } + + $wp_customize->add_control( 'twentyeleven_color_scheme', array( + 'label' => __( 'Color Scheme', 'twentyeleven' ), + 'section' => 'colors', + 'settings' => 'twentyeleven_theme_options[color_scheme]', + 'type' => 'radio', + 'choices' => $choices, + 'priority' => 5, + ) ); + + // Link Color (added to Color Scheme section in Theme Customizer) + $wp_customize->add_setting( 'twentyeleven_theme_options[link_color]', array( + 'default' => twentyeleven_get_default_link_color( $options['color_scheme'] ), + 'type' => 'option', + 'sanitize_callback' => 'sanitize_hex_color', + 'capability' => 'edit_theme_options', + ) ); + + $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'link_color', array( + 'label' => __( 'Link Color', 'twentyeleven' ), + 'section' => 'colors', + 'settings' => 'twentyeleven_theme_options[link_color]', + ) ) ); + + // Default Layout + $wp_customize->add_section( 'twentyeleven_layout', array( + 'title' => __( 'Layout', 'twentyeleven' ), + 'priority' => 50, + ) ); + + $wp_customize->add_setting( 'twentyeleven_theme_options[theme_layout]', array( + 'type' => 'option', + 'default' => $defaults['theme_layout'], + 'sanitize_callback' => 'sanitize_key', + ) ); + + $layouts = twentyeleven_layouts(); + $choices = array(); + foreach ( $layouts as $layout ) { + $choices[$layout['value']] = $layout['label']; + } + + $wp_customize->add_control( 'twentyeleven_theme_options[theme_layout]', array( + 'section' => 'twentyeleven_layout', + 'type' => 'radio', + 'choices' => $choices, + ) ); +} +add_action( 'customize_register', 'twentyeleven_customize_register' ); + +/** + * Bind JS handlers to make Theme Customizer preview reload changes asynchronously. + * Used with blogname and blogdescription. + * + * @since Twenty Eleven 1.3 + */ +function twentyeleven_customize_preview_js() { + wp_enqueue_script( 'twentyeleven-customizer', get_template_directory_uri() . '/inc/theme-customizer.js', array( 'customize-preview' ), '20120523', true ); +} +add_action( 'customize_preview_init', 'twentyeleven_customize_preview_js' ); \ No newline at end of file diff --git a/wp-content/themes/twentyeleven/languages/twentyeleven.pot b/wp-content/themes/twentyeleven/languages/twentyeleven.pot index a19b4fbf3..46e3e16b5 100644 --- a/wp-content/themes/twentyeleven/languages/twentyeleven.pot +++ b/wp-content/themes/twentyeleven/languages/twentyeleven.pot @@ -1,10 +1,10 @@ # Copyright (C) 2012 the WordPress team -# This file is distributed under the GNU General Public License. +# This file is distributed under the GNU General Public License v2 or later. msgid "" msgstr "" -"Project-Id-Version: Twenty Eleven 1.3\n" +"Project-Id-Version: Twenty Eleven 1.4\n" "Report-Msgid-Bugs-To: http://wordpress.org/tags/twentyeleven\n" -"POT-Creation-Date: 2012-02-10 16:30:53+00:00\n" +"POT-Creation-Date: 2012-06-10 15:18:15+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -110,7 +110,7 @@ msgstr "" #: content-aside.php:16 content-featured.php:14 content-gallery.php:16 #: content-gallery.php:48 content-image.php:15 content-link.php:16 #: content-quote.php:14 content-status.php:15 content.php:15 content.php:19 -#: inc/widgets.php:89 showcase.php:115 showcase.php:194 +#: inc/widgets.php:89 showcase.php:120 showcase.php:199 msgid "Permalink to %s" msgstr "" @@ -137,7 +137,7 @@ msgstr "" #: content-aside.php:33 content-gallery.php:32 content-image.php:27 #: content-link.php:33 content-quote.php:35 content-status.php:34 -#: content.php:41 functions.php:327 +#: content.php:41 functions.php:344 msgid "Continue reading <span class=\"meta-nav\">→</span>" msgstr "" @@ -150,26 +150,26 @@ msgstr "" #: content-aside.php:42 content-gallery.php:87 content-image.php:64 #: content-link.php:42 content-quote.php:69 content-status.php:43 -#: content.php:77 showcase.php:196 +#: content.php:77 showcase.php:201 msgid "Leave a reply" msgstr "" #: content-aside.php:42 content-gallery.php:87 content-image.php:64 #: content-link.php:42 content-quote.php:69 content-status.php:43 -#: content.php:77 showcase.php:196 +#: content.php:77 showcase.php:201 msgid "<b>1</b> Reply" msgstr "" #: content-aside.php:42 content-gallery.php:87 content-image.php:64 #: content-link.php:42 content-quote.php:69 content-status.php:43 -#: content.php:77 showcase.php:196 +#: content.php:77 showcase.php:201 msgid "<b>%</b> Replies" msgstr "" #: content-aside.php:44 content-featured.php:45 content-gallery.php:90 #: content-image.php:68 content-intro.php:19 content-link.php:44 #: content-page.php:21 content-quote.php:72 content-single.php:52 -#: content-status.php:45 content.php:80 functions.php:505 functions.php:533 +#: content-status.php:45 content.php:80 functions.php:522 functions.php:550 #: image.php:41 msgid "Edit" msgstr "" @@ -226,7 +226,7 @@ msgid "" "title=\"%5$s\" rel=\"author\">%6$s</a></span></span>" msgstr "" -#: content-image.php:39 functions.php:570 +#: content-image.php:39 functions.php:587 msgid "View all posts by %s" msgstr "" @@ -269,7 +269,7 @@ msgstr "" msgid "Featured" msgstr "" -#. #-#-#-#-# twentyeleven.pot (Twenty Eleven 1.3) #-#-#-#-# +#. #-#-#-#-# twentyeleven.pot (Twenty Eleven 1.4) #-#-#-#-# #. Author URI of the plugin/theme #: footer.php:27 msgid "http://wordpress.org/" @@ -283,113 +283,113 @@ msgstr "" msgid "Proudly powered by %s" msgstr "" -#: functions.php:101 +#: functions.php:95 msgid "Primary Menu" msgstr "" #. translators: header image description -#: functions.php:149 +#: functions.php:164 msgid "Wheel" msgstr "" #. translators: header image description -#: functions.php:155 +#: functions.php:170 msgid "Shore" msgstr "" #. translators: header image description -#: functions.php:161 +#: functions.php:176 msgid "Trolley" msgstr "" #. translators: header image description -#: functions.php:167 +#: functions.php:182 msgid "Pine Cone" msgstr "" #. translators: header image description -#: functions.php:173 +#: functions.php:188 msgid "Chessboard" msgstr "" #. translators: header image description -#: functions.php:179 +#: functions.php:194 msgid "Lanterns" msgstr "" #. translators: header image description -#: functions.php:185 +#: functions.php:200 msgid "Willow" msgstr "" #. translators: header image description -#: functions.php:191 +#: functions.php:206 msgid "Hanoi Plant" msgstr "" -#: functions.php:374 +#: functions.php:391 msgid "Main Sidebar" msgstr "" -#: functions.php:383 +#: functions.php:400 msgid "Showcase Sidebar" msgstr "" -#: functions.php:385 +#: functions.php:402 msgid "The sidebar for the optional Showcase Template" msgstr "" -#: functions.php:393 +#: functions.php:410 msgid "Footer Area One" msgstr "" -#: functions.php:395 functions.php:405 functions.php:415 +#: functions.php:412 functions.php:422 functions.php:432 msgid "An optional widget area for your site footer" msgstr "" -#: functions.php:403 +#: functions.php:420 msgid "Footer Area Two" msgstr "" -#: functions.php:413 +#: functions.php:430 msgid "Footer Area Three" msgstr "" -#: functions.php:433 single.php:18 +#: functions.php:450 single.php:18 msgid "Post navigation" msgstr "" -#: functions.php:434 +#: functions.php:451 msgid "<span class=\"meta-nav\">←</span> Older posts" msgstr "" -#: functions.php:435 +#: functions.php:452 msgid "Newer posts <span class=\"meta-nav\">→</span>" msgstr "" -#: functions.php:505 +#: functions.php:522 msgid "Pingback:" msgstr "" #. translators: 1: comment author, 2: date and time -#: functions.php:522 +#: functions.php:539 msgid "%1$s on %2$s <span class=\"says\">said:</span>" msgstr "" #. translators: 1: date, 2: time -#: functions.php:528 +#: functions.php:545 msgid "%1$s at %2$s" msgstr "" -#: functions.php:537 +#: functions.php:554 msgid "Your comment is awaiting moderation." msgstr "" -#: functions.php:546 +#: functions.php:563 msgid "Reply <span>↓</span>" msgstr "" -#: functions.php:564 +#: functions.php:581 msgid "" "<span class=\"sep\">Posted on </span><a href=\"%1$s\" title=\"%2$s\" rel=" "\"bookmark\"><time class=\"entry-date\" datetime=\"%3$s\" pubdate>%4$s</" @@ -402,15 +402,15 @@ msgstr "" msgid "Page %s" msgstr "" -#: header.php:113 +#: header.php:129 msgid "Main menu" msgstr "" -#: header.php:115 +#: header.php:131 msgid "Skip to primary content" msgstr "" -#: header.php:116 +#: header.php:132 msgid "Skip to secondary content" msgstr "" @@ -434,23 +434,23 @@ msgid "" "in <a href=\"%6$s\" title=\"Return to %7$s\" rel=\"gallery\">%8$s</a>" msgstr "" -#: inc/theme-options.php:61 +#: inc/theme-options.php:55 inc/theme-options.php:474 msgid "Color Scheme" msgstr "" -#: inc/theme-options.php:67 +#: inc/theme-options.php:61 inc/theme-options.php:491 msgid "Link Color" msgstr "" -#: inc/theme-options.php:68 +#: inc/theme-options.php:62 msgid "Default Layout" msgstr "" -#: inc/theme-options.php:100 inc/theme-options.php:101 +#: inc/theme-options.php:94 inc/theme-options.php:95 msgid "Theme Options" msgstr "" -#: inc/theme-options.php:116 +#: inc/theme-options.php:110 msgid "" "Some themes provide customization options that are grouped together on a " "Theme Options screen. If you change themes, options may change or disappear, " @@ -458,14 +458,14 @@ msgid "" "following Theme Options:" msgstr "" -#: inc/theme-options.php:118 +#: inc/theme-options.php:112 msgid "" "<strong>Color Scheme</strong>: You can choose a color palette of \"Light" "\" (light background with dark text) or \"Dark\" (dark background with light " "text) for your site." msgstr "" -#: inc/theme-options.php:119 +#: inc/theme-options.php:113 msgid "" "<strong>Link Color</strong>: You can choose the color used for text links on " "your site. You can enter the HTML color or hex code, or you can choose " @@ -473,70 +473,74 @@ msgid "" "wheel." msgstr "" -#: inc/theme-options.php:120 +#: inc/theme-options.php:114 msgid "" "<strong>Default Layout</strong>: You can choose if you want your site’" "s default layout to have a sidebar on the left, the right, or not at all." msgstr "" -#: inc/theme-options.php:122 +#: inc/theme-options.php:116 msgid "" "Remember to click \"Save Changes\" to save any changes you have made to the " "theme options." msgstr "" -#: inc/theme-options.php:124 +#: inc/theme-options.php:118 msgid "For more information:" msgstr "" -#: inc/theme-options.php:125 +#: inc/theme-options.php:119 msgid "" "<a href=\"http://codex.wordpress.org/Appearance_Theme_Options_Screen\" " "target=\"_blank\">Documentation on Theme Options</a>" msgstr "" -#: inc/theme-options.php:126 +#: inc/theme-options.php:120 msgid "" "<a href=\"http://wordpress.org/support/\" target=\"_blank\">Support Forums</" "a>" msgstr "" -#: inc/theme-options.php:133 +#: inc/theme-options.php:127 msgid "Overview" msgstr "" -#: inc/theme-options.php:155 +#: inc/theme-options.php:149 msgid "Light" msgstr "" -#: inc/theme-options.php:161 +#: inc/theme-options.php:155 msgid "Dark" msgstr "" -#: inc/theme-options.php:179 +#: inc/theme-options.php:173 msgid "Content on left" msgstr "" -#: inc/theme-options.php:184 +#: inc/theme-options.php:178 msgid "Content on right" msgstr "" -#: inc/theme-options.php:189 +#: inc/theme-options.php:183 msgid "One-column, no sidebar" msgstr "" -#: inc/theme-options.php:279 +#: inc/theme-options.php:273 msgid "Select a Color" msgstr "" -#: inc/theme-options.php:282 +#: inc/theme-options.php:276 msgid "Default color: %s" msgstr "" -#: inc/theme-options.php:317 +#: inc/theme-options.php:312 msgid "%s Theme Options" msgstr "" +#: inc/theme-options.php:498 +msgid "Layout" +msgstr "" + #: inc/widgets.php:19 msgid "" "Use this widget to list your recent Aside, Status, Quote, and Link posts" @@ -588,15 +592,15 @@ msgstr "" msgid "Search" msgstr "" -#: showcase.php:72 +#: showcase.php:77 msgid "Featured Post" msgstr "" -#: showcase.php:145 +#: showcase.php:150 msgid "Featuring: %s" msgstr "" -#: showcase.php:155 +#: showcase.php:160 msgid "Recent Posts" msgstr "" @@ -655,3 +659,11 @@ msgid "" "featured-images, full-width-template, microformats, post-formats, rtl-" "language-support, sticky-post, theme-options, translation-ready" msgstr "" + +#. Template Name of the plugin/theme +msgid "Showcase Template" +msgstr "" + +#. Template Name of the plugin/theme +msgid "Sidebar Template" +msgstr "" diff --git a/wp-content/themes/twentyeleven/showcase.php b/wp-content/themes/twentyeleven/showcase.php index 4f6909924..f5d2a3eeb 100644 --- a/wp-content/themes/twentyeleven/showcase.php +++ b/wp-content/themes/twentyeleven/showcase.php @@ -66,7 +66,12 @@ get_header(); ?> */ $counter_slider = 0; - ?> + // Compatibility with versions of WordPress prior to 3.4. + if ( function_exists( 'get_custom_header' ) ) + $header_image_width = get_theme_support( 'custom-header', 'width' ); + else + $header_image_width = HEADER_IMAGE_WIDTH; + ?> <div class="featured-posts"> <h1 class="showcase-heading"><?php _e( 'Featured Post', 'twentyeleven' ); ?></h1> @@ -89,10 +94,10 @@ get_header(); ?> $feature_class = 'feature-image small'; // Hang on. Let's check this here image out. - $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array( HEADER_IMAGE_WIDTH, HEADER_IMAGE_WIDTH ) ); + $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array( $header_image_width, $header_image_width ) ); // Is it bigger than or equal to our header? - if ( $image[1] >= HEADER_IMAGE_WIDTH ) { + if ( $image[1] >= $header_image_width ) { // If bigger, let's add a BIGGER class. It's EXTRA classy now. $feature_class = 'feature-image large'; } @@ -107,7 +112,7 @@ get_header(); ?> * make it a large featured post, otherwise render it small */ if ( has_post_thumbnail() ) { - if ( $image[1] >= HEADER_IMAGE_WIDTH ) + if ( $image[1] >= $header_image_width ) $thumbnail_size = 'large-feature'; else $thumbnail_size = 'small-feature'; diff --git a/wp-content/themes/twentyeleven/style.css b/wp-content/themes/twentyeleven/style.css index 40979239a..aec75804f 100644 --- a/wp-content/themes/twentyeleven/style.css +++ b/wp-content/themes/twentyeleven/style.css @@ -4,10 +4,11 @@ Theme URI: http://wordpress.org/extend/themes/twentyeleven Author: the WordPress team Author URI: http://wordpress.org/ Description: The 2011 theme for WordPress is sophisticated, lightweight, and adaptable. Make it yours with a custom menu, header image, and background -- then go further with available theme options for light or dark color scheme, custom link colors, and three layout choices. Twenty Eleven comes equipped with a Showcase page template that transforms your front page into a showcase to show off your best content, widget support galore (sidebar, three footer areas, and a Showcase page widget area), and a custom "Ephemera" widget to display your Aside, Link, Quote, or Status posts. Included are styles for print and for the admin editor, support for featured images (as custom header images on posts and pages and as large images on featured "sticky" posts), and special styles for six different post formats. -Version: 1.3 -License: GNU General Public License -License URI: license.txt +Version: 1.4 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html Tags: dark, light, white, black, gray, one-column, two-columns, left-sidebar, right-sidebar, fixed-width, flexible-width, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-image-header, featured-images, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready +Text Domain: twentyeleven */ /* =Reset default browser CSS. Based on work by Eric Meyer: http://meyerweb.com/eric/tools/css/reset/index.html @@ -401,7 +402,7 @@ pre { overflow: auto; padding: 0.75em 1.625em; } -code, kbd { +code, kbd, samp, var { font: 13px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; } abbr, acronym, dfn { @@ -1118,7 +1119,6 @@ blockquote.pull { .pull.alignleft { margin: 0 1.625em 0 0; text-align: right; - width: 33%; } .singular .pull.alignleft { margin: 0 1.625em 0 -22.25%; @@ -1126,6 +1126,9 @@ blockquote.pull { .pull.alignright { margin: 0 0 0 1.625em; text-align: left; +} +blockquote.pull.alignleft, +blockquote.pull.alignright { width: 33%; } .singular .pull.alignright { @@ -1237,15 +1240,24 @@ blockquote.pull { .indexed.format-image .entry-content { padding-top: 0.5em; } -.indexed.format-image p, -.indexed.format-image p img { - margin-bottom: 0; +.indexed.format-image .entry-content p { + margin: 1em 0; +} +.indexed.format-image .entry-content p:first-child, +.indexed.format-image .entry-content p:first-child a, +.indexed.format-image .entry-content p:first-child img { + display: block; + margin: 0; +} +.indexed.format-image .entry-content .wp-caption .wp-caption-text { + margin: 0; + padding-bottom: 1em; } .indexed.format-image footer.entry-meta { background: #ddd; - margin-top: -7px; - padding: 20px 30px; overflow: hidden; + padding: 4%; + max-width: 96%; } .indexed.format-image div.entry-meta { display: inline-block; @@ -1276,7 +1288,7 @@ blockquote.pull { background: #111; margin-bottom: 0; max-width: 96%; - padding: 11px; + padding: 2% 2% 0; } .indexed.format-image .wp-caption .wp-caption-text { color: #ddd; @@ -1722,12 +1734,14 @@ section.recent-posts .other-recent-posts li:after { } #nav-single .nav-previous, #nav-single .nav-next { - float: none; width: auto; } #nav-single .nav-next { padding-left: .5em; } +#nav-single .nav-previous { + padding-right: .5em; +} /* =Widgets @@ -1838,6 +1852,8 @@ section.ephemera .entry-title a span { /* Widget Image */ .widget_image img { + border: 0; + padding: 0; height: auto; max-width: 100%; } @@ -2237,15 +2253,6 @@ p.comment-form-comment { color: #555; font-weight: bold; } -#site-generator .sep { - background: url(images/wordpress.png) center left no-repeat; - color: transparent; - display: inline-block; - height: 16px; - line-height: 16px; - margin: 0 7px; - width: 16px; -} /* =Responsive Structure @@ -2414,6 +2421,7 @@ p.comment-form-comment { /* Floated content doesn't work well at this size */ .alignleft, .alignright { + display: block; float: none; margin-left: 0; margin-right: 0; @@ -2677,3 +2685,10 @@ p.comment-form-comment { #ie7 section.recent-posts { margin-right: 7.6%; } + +/* =IE8 +----------------------------------------------- */ + +#ie8 section.feature-image.large img { + width: 100%; +} \ No newline at end of file diff --git a/wp-content/themes/twentyten/comments.php b/wp-content/themes/twentyten/comments.php index 7863ca106..eece437d6 100644 --- a/wp-content/themes/twentyten/comments.php +++ b/wp-content/themes/twentyten/comments.php @@ -3,7 +3,7 @@ * The template for displaying Comments. * * The area of the page that contains both current comments - * and the comment form. The actual display of comments is + * and the comment form. The actual display of comments is * handled by a callback to twentyten_comment which is * located in the functions.php file. * diff --git a/wp-content/themes/twentyten/footer.php b/wp-content/themes/twentyten/footer.php index 6d0d1ab58..337cc9123 100644 --- a/wp-content/themes/twentyten/footer.php +++ b/wp-content/themes/twentyten/footer.php @@ -3,7 +3,7 @@ * The template for displaying the footer. * * Contains the closing of the id=main div and all content - * after. Calls sidebar-footer.php for bottom widgets. + * after. Calls sidebar-footer.php for bottom widgets. * * @package WordPress * @subpackage Twenty_Ten diff --git a/wp-content/themes/twentyten/functions.php b/wp-content/themes/twentyten/functions.php index 5fd5d3ef3..696ff15d8 100644 --- a/wp-content/themes/twentyten/functions.php +++ b/wp-content/themes/twentyten/functions.php @@ -61,12 +61,10 @@ if ( ! function_exists( 'twentyten_setup' ) ): * To override twentyten_setup() in a child theme, add your own twentyten_setup to your child theme's * functions.php file. * - * @uses add_theme_support() To add support for post thumbnails and automatic feed links. + * @uses add_theme_support() To add support for post thumbnails, custom headers and backgrounds, and automatic feed links. * @uses register_nav_menus() To add support for navigation menus. - * @uses add_custom_background() To add support for a custom background. * @uses add_editor_style() To style the visual editor. * @uses load_theme_textdomain() For translation/localization support. - * @uses add_custom_image_header() To add support for a custom header. * @uses register_default_headers() To register the default custom header images provided with the theme. * @uses set_post_thumbnail_size() To set a custom post thumbnail size. * @@ -90,46 +88,53 @@ function twentyten_setup() { // Translations can be filed in the /languages/ directory load_theme_textdomain( 'twentyten', get_template_directory() . '/languages' ); - $locale = get_locale(); - $locale_file = get_template_directory() . "/languages/$locale.php"; - if ( is_readable( $locale_file ) ) - require_once( $locale_file ); - // This theme uses wp_nav_menu() in one location. register_nav_menus( array( 'primary' => __( 'Primary Navigation', 'twentyten' ), ) ); - // This theme allows users to set a custom background - add_custom_background(); + // This theme allows users to set a custom background. + add_theme_support( 'custom-background', array( + // Let WordPress know what our default background color is. + 'default-color' => 'f1f1f1', + ) ); - // Your changeable header business starts here - if ( ! defined( 'HEADER_TEXTCOLOR' ) ) + // The custom header business starts here. + + $custom_header_support = array( + // The default image to use. + // The %s is a placeholder for the theme template directory URI. + 'default-image' => '%s/images/headers/path.jpg', + // The height and width of our custom header. + 'width' => apply_filters( 'twentyten_header_image_width', 940 ), + 'height' => apply_filters( 'twentyten_header_image_height', 198 ), + // Support flexible heights. + 'flex-height' => true, + // Don't support text inside the header image. + 'header-text' => false, + // Callback for styling the header preview in the admin. + 'admin-head-callback' => 'twentyten_admin_header_style', + ); + + add_theme_support( 'custom-header', $custom_header_support ); + + if ( ! function_exists( 'get_custom_header' ) ) { + // This is all for compatibility with versions of WordPress prior to 3.4. define( 'HEADER_TEXTCOLOR', '' ); - - // No CSS, just IMG call. The %s is a placeholder for the theme template directory URI. - if ( ! defined( 'HEADER_IMAGE' ) ) - define( 'HEADER_IMAGE', '%s/images/headers/path.jpg' ); - - // The height and width of your custom header. You can hook into the theme's own filters to change these values. - // Add a filter to twentyten_header_image_width and twentyten_header_image_height to change these values. - define( 'HEADER_IMAGE_WIDTH', apply_filters( 'twentyten_header_image_width', 940 ) ); - define( 'HEADER_IMAGE_HEIGHT', apply_filters( 'twentyten_header_image_height', 198 ) ); + define( 'NO_HEADER_TEXT', true ); + define( 'HEADER_IMAGE', $custom_header_support['default-image'] ); + define( 'HEADER_IMAGE_WIDTH', $custom_header_support['width'] ); + define( 'HEADER_IMAGE_HEIGHT', $custom_header_support['height'] ); + add_custom_image_header( '', $custom_header_support['admin-head-callback'] ); + add_custom_background(); + } // We'll be using post thumbnails for custom header images on posts and pages. // We want them to be 940 pixels wide by 198 pixels tall. // Larger images will be auto-cropped to fit, smaller ones will be ignored. See header.php. - set_post_thumbnail_size( HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT, true ); - - // Don't support text inside the header image. - if ( ! defined( 'NO_HEADER_TEXT' ) ) - define( 'NO_HEADER_TEXT', true ); - - // Add a way for the custom header to be styled in the admin panel that controls - // custom headers. See twentyten_admin_header_style(), below. - add_custom_image_header( '', 'twentyten_admin_header_style' ); + set_post_thumbnail_size( $custom_header_support['width'], $custom_header_support['height'], true ); - // ... and thus ends the changeable header business. + // ... and thus ends the custom header business. // Default custom headers packaged with the theme. %s is a placeholder for the theme template directory URI. register_default_headers( array( @@ -201,7 +206,7 @@ function twentyten_admin_header_style() { border-bottom: 1px solid #000; border-top: 4px solid #000; } -/* If NO_HEADER_TEXT is false, you would style the text with these selectors: +/* If header-text was supported, you would style the text with these selectors: #headimg #name { } #headimg #desc { } */ diff --git a/wp-content/themes/twentyten/header.php b/wp-content/themes/twentyten/header.php index 54971c930..50cb37589 100644 --- a/wp-content/themes/twentyten/header.php +++ b/wp-content/themes/twentyten/header.php @@ -66,22 +66,40 @@ <div id="site-description"><?php bloginfo( 'description' ); ?></div> <?php + // Compatibility with versions of WordPress prior to 3.4. + if ( function_exists( 'get_custom_header' ) ) { + // We need to figure out what the minimum width should be for our featured image. + // This result would be the suggested width if the theme were to implement flexible widths. + $header_image_width = get_theme_support( 'custom-header', 'width' ); + } else { + $header_image_width = HEADER_IMAGE_WIDTH; + } + // Check if this is a post or page, if it has a thumbnail, and if it's a big one if ( is_singular() && current_theme_supports( 'post-thumbnails' ) && has_post_thumbnail( $post->ID ) && ( /* $src, $width, $height */ $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'post-thumbnail' ) ) && - $image[1] >= HEADER_IMAGE_WIDTH ) : + $image[1] >= $header_image_width ) : // Houston, we have a new header image! echo get_the_post_thumbnail( $post->ID ); - elseif ( get_header_image() ) : ?> - <img src="<?php header_image(); ?>" width="<?php echo HEADER_IMAGE_WIDTH; ?>" height="<?php echo HEADER_IMAGE_HEIGHT; ?>" alt="" /> + elseif ( get_header_image() ) : + // Compatibility with versions of WordPress prior to 3.4. + if ( function_exists( 'get_custom_header' ) ) { + $header_image_width = get_custom_header()->width; + $header_image_height = get_custom_header()->height; + } else { + $header_image_width = HEADER_IMAGE_WIDTH; + $header_image_height = HEADER_IMAGE_HEIGHT; + } + ?> + <img src="<?php header_image(); ?>" width="<?php echo $header_image_width; ?>" height="<?php echo $header_image_height; ?>" alt="" /> <?php endif; ?> </div><!-- #branding --> <div id="access" role="navigation"> - <?php /* Allow screen readers / text browsers to skip the navigation menu and get right to the good stuff */ ?> + <?php /* Allow screen readers / text browsers to skip the navigation menu and get right to the good stuff */ ?> <div class="skip-link screen-reader-text"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'twentyten' ); ?>"><?php _e( 'Skip to content', 'twentyten' ); ?></a></div> - <?php /* Our navigation menu. If one isn't filled out, wp_nav_menu falls back to wp_page_menu. The menu assiged to the primary position is the one used. If none is assigned, the menu with the lowest ID is used. */ ?> + <?php /* Our navigation menu. If one isn't filled out, wp_nav_menu falls back to wp_page_menu. The menu assiged to the primary position is the one used. If none is assigned, the menu with the lowest ID is used. */ ?> <?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?> </div><!-- #access --> </div><!-- #masthead --> diff --git a/wp-content/themes/twentyten/languages/twentyten.pot b/wp-content/themes/twentyten/languages/twentyten.pot index 208848db7..e25d155f4 100644 --- a/wp-content/themes/twentyten/languages/twentyten.pot +++ b/wp-content/themes/twentyten/languages/twentyten.pot @@ -1,10 +1,10 @@ # Copyright (C) 2012 the WordPress team -# This file is distributed under the GNU General Public License. +# This file is distributed under the GNU General Public License v2 or later. msgid "" msgstr "" -"Project-Id-Version: Twenty Ten 1.3\n" +"Project-Id-Version: Twenty Ten 1.4\n" "Report-Msgid-Bugs-To: http://wordpress.org/tags/twentyten\n" -"POT-Creation-Date: 2012-02-10 16:30:52+00:00\n" +"POT-Creation-Date: 2012-06-10 15:18:09+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -83,7 +83,7 @@ msgstr "" msgid "Comments are closed." msgstr "" -#. #-#-#-#-# twentyten.pot (Twenty Ten 1.3) #-#-#-#-# +#. #-#-#-#-# twentyten.pot (Twenty Ten 1.4) #-#-#-#-# #. Theme URI of the plugin/theme #: footer.php:33 msgid "http://wordpress.org/" @@ -97,146 +97,146 @@ msgstr "" msgid "Proudly powered by %s." msgstr "" -#: functions.php:100 +#: functions.php:93 msgid "Primary Navigation" msgstr "" #. translators: header image description -#: functions.php:140 +#: functions.php:145 msgid "Berries" msgstr "" #. translators: header image description -#: functions.php:146 +#: functions.php:151 msgid "Cherry Blossoms" msgstr "" #. translators: header image description -#: functions.php:152 +#: functions.php:157 msgid "Concave" msgstr "" #. translators: header image description -#: functions.php:158 +#: functions.php:163 msgid "Fern" msgstr "" #. translators: header image description -#: functions.php:164 +#: functions.php:169 msgid "Forest Floor" msgstr "" #. translators: header image description -#: functions.php:170 +#: functions.php:175 msgid "Inkwell" msgstr "" #. translators: header image description -#: functions.php:176 +#: functions.php:181 msgid "Path" msgstr "" #. translators: header image description -#: functions.php:182 +#: functions.php:187 msgid "Sunset" msgstr "" -#: functions.php:248 loop-attachment.php:104 loop.php:115 loop.php:143 +#: functions.php:253 loop-attachment.php:104 loop.php:115 loop.php:143 msgid "Continue reading <span class=\"meta-nav\">→</span>" msgstr "" -#: functions.php:330 +#: functions.php:335 msgid "%s <span class=\"says\">says:</span>" msgstr "" -#: functions.php:333 +#: functions.php:338 msgid "Your comment is awaiting moderation." msgstr "" #. translators: 1: date, 2: time -#: functions.php:340 +#: functions.php:345 msgid "%1$s at %2$s" msgstr "" -#: functions.php:340 functions.php:357 +#: functions.php:345 functions.php:362 msgid "(Edit)" msgstr "" -#: functions.php:357 +#: functions.php:362 msgid "Pingback:" msgstr "" -#: functions.php:376 +#: functions.php:381 msgid "Primary Widget Area" msgstr "" -#: functions.php:378 +#: functions.php:383 msgid "The primary widget area" msgstr "" -#: functions.php:387 +#: functions.php:392 msgid "Secondary Widget Area" msgstr "" -#: functions.php:389 +#: functions.php:394 msgid "The secondary widget area" msgstr "" -#: functions.php:398 +#: functions.php:403 msgid "First Footer Widget Area" msgstr "" -#: functions.php:400 +#: functions.php:405 msgid "The first footer widget area" msgstr "" -#: functions.php:409 +#: functions.php:414 msgid "Second Footer Widget Area" msgstr "" -#: functions.php:411 +#: functions.php:416 msgid "The second footer widget area" msgstr "" -#: functions.php:420 +#: functions.php:425 msgid "Third Footer Widget Area" msgstr "" -#: functions.php:422 +#: functions.php:427 msgid "The third footer widget area" msgstr "" -#: functions.php:431 +#: functions.php:436 msgid "Fourth Footer Widget Area" msgstr "" -#: functions.php:433 +#: functions.php:438 msgid "The fourth footer widget area" msgstr "" -#: functions.php:467 +#: functions.php:472 msgid "" "<span class=\"%1$s\">Posted on</span> %2$s <span class=\"meta-sep\">by</" "span> %3$s" msgstr "" -#: functions.php:476 loop-attachment.php:36 +#: functions.php:481 loop-attachment.php:36 msgid "View all posts by %s" msgstr "" -#: functions.php:493 +#: functions.php:498 msgid "" "This entry was posted in %1$s and tagged %2$s. Bookmark the <a href=\"%3$s\" " "title=\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>." msgstr "" -#: functions.php:495 +#: functions.php:500 msgid "" "This entry was posted in %1$s. Bookmark the <a href=\"%3$s\" title=" "\"Permalink to %4$s\" rel=\"bookmark\">permalink</a>." msgstr "" -#: functions.php:497 +#: functions.php:502 msgid "" "Bookmark the <a href=\"%3$s\" title=\"Permalink to %4$s\" rel=\"bookmark" "\">permalink</a>." @@ -246,7 +246,7 @@ msgstr "" msgid "Page %s" msgstr "" -#: header.php:83 +#: header.php:101 msgid "Skip to content" msgstr "" @@ -416,3 +416,7 @@ msgid "" "background, threaded-comments, sticky-post, translation-ready, microformats, " "rtl-language-support, editor-style, custom-menu" msgstr "" + +#. Template Name of the plugin/theme +msgid "One column, no sidebar" +msgstr "" diff --git a/wp-content/themes/twentyten/loop-attachment.php b/wp-content/themes/twentyten/loop-attachment.php index defa10405..e77586973 100644 --- a/wp-content/themes/twentyten/loop-attachment.php +++ b/wp-content/themes/twentyten/loop-attachment.php @@ -2,7 +2,7 @@ /** * The loop that displays an attachment. * - * The loop displays the posts and the post content. See + * The loop displays the posts and the post content. See * http://codex.wordpress.org/The_Loop to understand it and * http://codex.wordpress.org/Template_Tags to understand * the tags used in it. @@ -114,4 +114,4 @@ <?php comments_template(); ?> -<?php endwhile; // end of the loop. ?> \ No newline at end of file +<?php endwhile; // end of the loop. ?> diff --git a/wp-content/themes/twentyten/loop-page.php b/wp-content/themes/twentyten/loop-page.php index 252a1d0e6..88c5d7454 100644 --- a/wp-content/themes/twentyten/loop-page.php +++ b/wp-content/themes/twentyten/loop-page.php @@ -2,7 +2,7 @@ /** * The loop that displays a page. * - * The loop displays the posts and the post content. See + * The loop displays the posts and the post content. See * http://codex.wordpress.org/The_Loop to understand it and * http://codex.wordpress.org/Template_Tags to understand * the tags used in it. @@ -33,4 +33,4 @@ <?php comments_template( '', true ); ?> -<?php endwhile; // end of the loop. ?> \ No newline at end of file +<?php endwhile; // end of the loop. ?> diff --git a/wp-content/themes/twentyten/loop-single.php b/wp-content/themes/twentyten/loop-single.php index 4d89a6a0d..1dde4aa3e 100644 --- a/wp-content/themes/twentyten/loop-single.php +++ b/wp-content/themes/twentyten/loop-single.php @@ -2,7 +2,7 @@ /** * The loop that displays a single post. * - * The loop displays the posts and the post content. See + * The loop displays the posts and the post content. See * http://codex.wordpress.org/The_Loop to understand it and * http://codex.wordpress.org/Template_Tags to understand * the tags used in it. @@ -64,4 +64,4 @@ <?php comments_template( '', true ); ?> -<?php endwhile; // end of the loop. ?> \ No newline at end of file +<?php endwhile; // end of the loop. ?> diff --git a/wp-content/themes/twentyten/loop.php b/wp-content/themes/twentyten/loop.php index 9dc6297df..3e22fe247 100644 --- a/wp-content/themes/twentyten/loop.php +++ b/wp-content/themes/twentyten/loop.php @@ -2,7 +2,7 @@ /** * The loop that displays posts. * - * The loop displays the posts and the post content. See + * The loop displays the posts and the post content. See * http://codex.wordpress.org/The_Loop to understand it and * http://codex.wordpress.org/Template_Tags to understand * the tags used in it. diff --git a/wp-content/themes/twentyten/style.css b/wp-content/themes/twentyten/style.css index 27d92edef..ecf29f580 100644 --- a/wp-content/themes/twentyten/style.css +++ b/wp-content/themes/twentyten/style.css @@ -3,10 +3,11 @@ Theme Name: Twenty Ten Theme URI: http://wordpress.org/ Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar. Author: the WordPress team -Version: 1.3 -License: GNU General Public License -License URI: license.txt +Version: 1.4 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style, custom-menu +Text Domain: twentyten */ diff --git a/wp-cron.php b/wp-cron.php index a84c4635d..f0da6ecc5 100644 --- a/wp-cron.php +++ b/wp-cron.php @@ -48,7 +48,7 @@ if ( false === $crons = _get_cron_array() ) die(); $keys = array_keys( $crons ); -$local_time = time(); +$local_time = microtime( true ); if ( isset($keys[0]) && $keys[0] > $local_time ) die(); @@ -61,7 +61,7 @@ if ( empty( $doing_wp_cron ) ) { // Called from external script/job. Try setting a lock. if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $local_time ) ) return; - $doing_cron_transient = $doing_wp_cron = time(); + $doing_cron_transient = $doing_wp_cron = sprintf( '%.22F', microtime( true ) ); set_transient( 'doing_cron', $doing_wp_cron ); } else { $doing_wp_cron = $_GET[ 'doing_wp_cron' ]; diff --git a/wp-includes/admin-bar.php b/wp-includes/admin-bar.php index ff959bb72..1b23dad80 100644 --- a/wp-includes/admin-bar.php +++ b/wp-includes/admin-bar.php @@ -64,7 +64,7 @@ function wp_admin_bar_render() { do_action( 'wp_after_admin_bar_render' ); } add_action( 'wp_footer', 'wp_admin_bar_render', 1000 ); -add_action( 'admin_footer', 'wp_admin_bar_render', 1000 ); +add_action( 'in_admin_header', 'wp_admin_bar_render', 0 ); /** * Add the WordPress logo menu. @@ -75,7 +75,7 @@ function wp_admin_bar_wp_menu( $wp_admin_bar ) { $wp_admin_bar->add_menu( array( 'id' => 'wp-logo', 'title' => '<span class="ab-icon"></span>', - 'href' => admin_url( 'about.php' ), + 'href' => self_admin_url( 'about.php' ), 'meta' => array( 'title' => __('About WordPress'), ), @@ -87,7 +87,7 @@ function wp_admin_bar_wp_menu( $wp_admin_bar ) { 'parent' => 'wp-logo', 'id' => 'about', 'title' => __('About WordPress'), - 'href' => admin_url('about.php'), + 'href' => self_admin_url( 'about.php' ), ) ); } @@ -96,7 +96,7 @@ function wp_admin_bar_wp_menu( $wp_admin_bar ) { 'parent' => 'wp-logo-external', 'id' => 'wporg', 'title' => __('WordPress.org'), - 'href' => __('http://wordpress.org'), + 'href' => __('http://wordpress.org/'), ) ); // Add codex link @@ -104,7 +104,7 @@ function wp_admin_bar_wp_menu( $wp_admin_bar ) { 'parent' => 'wp-logo-external', 'id' => 'documentation', 'title' => __('Documentation'), - 'href' => __('http://codex.wordpress.org'), + 'href' => __('http://codex.wordpress.org/'), ) ); // Add forums link @@ -248,9 +248,17 @@ function wp_admin_bar_site_menu( $wp_admin_bar ) { 'href' => home_url( '/' ), ) ); - // We're on the front end, print a copy of the admin menu. + if ( is_blog_admin() && is_multisite() && current_user_can( 'manage_sites' ) ) { + $wp_admin_bar->add_menu( array( + 'parent' => 'site-name', + 'id' => 'edit-site', + 'title' => __( 'Edit Site' ), + 'href' => network_admin_url( 'site-info.php?id=' . get_current_blog_id() ), + ) ); + } + } else { - // Add the dashboard item. + // We're on the front end, link to the Dashboard. $wp_admin_bar->add_menu( array( 'parent' => 'site-name', 'id' => 'dashboard', @@ -568,6 +576,18 @@ function wp_admin_bar_appearance_menu( $wp_admin_bar ) { if ( ! current_user_can( 'edit_theme_options' ) ) return; + $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $wp_admin_bar->add_menu( array( + 'parent' => 'appearance', + 'id' => 'customize', + 'title' => __('Customize'), + 'href' => add_query_arg( 'url', urlencode( $current_url ), wp_customize_url() ), + 'meta' => array( + 'class' => 'hide-if-no-customize', + ), + ) ); + add_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' ); + if ( current_theme_supports( 'widgets' ) ) $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'widgets', 'title' => __('Widgets'), 'href' => admin_url('widgets.php') ) ); @@ -680,7 +700,7 @@ function _admin_bar_bump_cb() { ?> /** * Set the display status of the admin bar. * - * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action. + * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action. * * @since 3.1.0 * @@ -741,5 +761,3 @@ function _get_admin_bar_pref( $context = 'front', $user = 0 ) { return 'true' === $pref; } - -?> diff --git a/wp-includes/atomlib.php b/wp-includes/atomlib.php index e75ca394a..c6f2f2475 100644 --- a/wp-includes/atomlib.php +++ b/wp-includes/atomlib.php @@ -350,5 +350,3 @@ class AtomParser { $string ); } } - -?> diff --git a/wp-includes/author-template.php b/wp-includes/author-template.php index 4b21e446e..ab2737c56 100644 --- a/wp-includes/author-template.php +++ b/wp-includes/author-template.php @@ -96,25 +96,20 @@ function the_modified_author() { * @param int $user_id Optional. User ID. * @return string The author's field from the current author's DB object. */ -function get_the_author_meta($field = '', $user_id = false) { - if ( ! $user_id ) +function get_the_author_meta( $field = '', $user_id = false ) { + if ( ! $user_id ) { global $authordata; - else + $user_id = isset( $authordata->ID ) ? $authordata->ID : 0; + } else { $authordata = get_userdata( $user_id ); + } - // Keys used as object vars cannot have dashes. - $field = str_replace('-', '', $field); - $field = strtolower($field); - $user_field = "user_$field"; + if ( in_array( $field, array( 'login', 'pass', 'nicename', 'email', 'url', 'registered', 'activation_key', 'status' ) ) ) + $field = 'user_' . $field; - if ( 'id' == $field ) - $value = isset($authordata->ID) ? (int)$authordata->ID : 0; - elseif ( isset($authordata->$user_field) ) - $value = $authordata->$user_field; - else - $value = isset($authordata->$field) ? $authordata->$field : ''; + $value = isset( $authordata->$field ) ? $authordata->$field : ''; - return apply_filters('get_the_author_' . $field, $value, $user_id); + return apply_filters( 'get_the_author_' . $field, $value, $user_id ); } /** @@ -140,7 +135,7 @@ function the_author_meta($field = '', $user_id = false) { */ function get_the_author_link() { if ( get_the_author_meta('url') ) { - return '<a href="' . get_the_author_meta('url') . '" title="' . esc_attr( sprintf(__("Visit %s’s website"), get_the_author()) ) . '" rel="external">' . get_the_author() . '</a>'; + return '<a href="' . get_the_author_meta('url') . '" title="' . esc_attr( sprintf(__("Visit %s’s website"), get_the_author()) ) . '" rel="author external">' . get_the_author() . '</a>'; } else { return get_the_author(); } @@ -397,5 +392,3 @@ function __clear_multi_author_cache() { wp_cache_delete('is_multi_author', 'posts'); } add_action('transition_post_status', '__clear_multi_author_cache'); - -?> diff --git a/wp-includes/bookmark-template.php b/wp-includes/bookmark-template.php index 7c5949cc2..2dc5b7b2e 100644 --- a/wp-includes/bookmark-template.php +++ b/wp-includes/bookmark-template.php @@ -252,5 +252,3 @@ function wp_list_bookmarks($args = '') { return $output; echo $output; } - -?> diff --git a/wp-includes/bookmark.php b/wp-includes/bookmark.php index c965d4c8d..8248e3a64 100644 --- a/wp-includes/bookmark.php +++ b/wp-includes/bookmark.php @@ -101,9 +101,9 @@ function get_bookmark_field( $field, $bookmark, $context = 'display' ) { * links marked as 'invisible'. * 'show_updated' - Default is 0 (integer). Will show the time of when the * bookmark was last updated. - * 'include' - Default is empty string (string). Include other categories + * 'include' - Default is empty string (string). Include bookmark ID(s) * separated by commas. - * 'exclude' - Default is empty string (string). Exclude other categories + * 'exclude' - Default is empty string (string). Exclude bookmark ID(s) * separated by commas. * * @since 2.1.0 @@ -375,9 +375,8 @@ function sanitize_bookmark_field($field, $value, $bookmark_id, $context) { * @since 2.7.0 * @uses wp_cache_delete() Deletes the contents of 'get_bookmarks' */ -function clean_bookmark_cache($bookmark_id) { +function clean_bookmark_cache( $bookmark_id ) { wp_cache_delete( $bookmark_id, 'bookmark' ); wp_cache_delete( 'get_bookmarks', 'bookmark' ); + clean_object_term_cache( $bookmark_id, 'link'); } - -?> diff --git a/wp-includes/cache.php b/wp-includes/cache.php index f285be3a9..bb61249cf 100644 --- a/wp-includes/cache.php +++ b/wp-includes/cache.php @@ -51,7 +51,7 @@ function wp_cache_close() { * @see WP_Object_Cache::decr() * * @param int|string $key The cache key to increment - * @param int $offset The amount by which to decrement the item's value. Default is 1. + * @param int $offset The amount by which to decrement the item's value. Default is 1. * @param string $group The group the key is in. * @return false|int False on failure, the item's new value on success. */ @@ -103,13 +103,14 @@ function wp_cache_flush() { * @param int|string $key What the contents in the cache are called * @param string $group Where the cache contents are grouped * @param bool $force Whether to force an update of the local cache from the persistent cache (default is false) + * @param &bool $found Whether key was found in the cache. Disambiguates a return of false, a storable value. * @return bool|mixed False on failure to retrieve contents or the cache * contents on success */ -function wp_cache_get( $key, $group = '', $force = false ) { +function wp_cache_get( $key, $group = '', $force = false, &$found = null ) { global $wp_object_cache; - return $wp_object_cache->get( $key, $group, $force ); + return $wp_object_cache->get( $key, $group, $force, $found ); } /** @@ -120,7 +121,7 @@ function wp_cache_get( $key, $group = '', $force = false ) { * @see WP_Object_Cache::incr() * * @param int|string $key The cache key to increment - * @param int $offset The amount by which to increment the item's value. Default is 1. + * @param int $offset The amount by which to increment the item's value. Default is 1. * @param string $group The group the key is in. * @return false|int False on failure, the item's new value on success. */ @@ -204,7 +205,7 @@ function wp_cache_add_non_persistent_groups( $groups ) { } /** - * Reset internal cache keys and structures. If the cache backend uses global blog or site IDs as part of its cache keys, + * Reset internal cache keys and structures. If the cache backend uses global blog or site IDs as part of its cache keys, * this function instructs the backend to reset those keys and perform any cleanup since blog or site IDs have changed since cache init. * * @since 2.6.0 @@ -272,7 +273,7 @@ class WP_Object_Cache { /** * Adds data to the cache if it doesn't already exist. * - * @uses WP_Object_Cache::get Checks to see if the cache already has data. + * @uses WP_Object_Cache::_exists Checks to see if the cache already has data. * @uses WP_Object_Cache::set Sets the data after the checking the cache * contents existence. * @@ -288,10 +289,10 @@ class WP_Object_Cache { if ( wp_suspend_cache_addition() ) return false; - if ( empty ($group) ) + if ( empty( $group ) ) $group = 'default'; - if (false !== $this->get($key, $group)) + if ( $this->_exists($key, $group) ) return false; return $this->set($key, $data, $group, $expire); @@ -317,12 +318,12 @@ class WP_Object_Cache { * @since 3.3.0 * * @param int|string $key The cache key to increment - * @param int $offset The amount by which to decrement the item's value. Default is 1. + * @param int $offset The amount by which to decrement the item's value. Default is 1. * @param string $group The group the key is in. * @return false|int False on failure, the item's new value on success. */ function decr( $key, $offset = 1, $group = 'default' ) { - if ( ! isset( $this->cache[ $group ][ $key ] ) ) + if ( ! $this->_exists( $key, $group ) ) return false; if ( ! is_numeric( $this->cache[ $group ][ $key ] ) ) @@ -354,13 +355,13 @@ class WP_Object_Cache { * @return bool False if the contents weren't deleted and true on success */ function delete($key, $group = 'default', $force = false) { - if (empty ($group)) + if ( empty( $group ) ) $group = 'default'; - if (!$force && false === $this->get($key, $group)) + if ( ! $force && ! $this->_exists( $key, $group ) ) return false; - unset ($this->cache[$group][$key]); + unset( $this->cache[$group][$key] ); return true; } @@ -394,11 +395,12 @@ class WP_Object_Cache { * @return bool|mixed False on failure to retrieve contents or the cache * contents on success */ - function get( $key, $group = 'default', $force = false) { - if ( empty ($group) ) + function get( $key, $group = 'default', $force = false, &$found = null ) { + if ( empty( $group ) ) $group = 'default'; - if ( isset ($this->cache[$group][$key]) ) { + if ( $this->_exists( $key, $group ) ) { + $found = true; $this->cache_hits += 1; if ( is_object($this->cache[$group][$key]) ) return clone $this->cache[$group][$key]; @@ -406,6 +408,7 @@ class WP_Object_Cache { return $this->cache[$group][$key]; } + $found = false; $this->cache_misses += 1; return false; } @@ -416,12 +419,15 @@ class WP_Object_Cache { * @since 3.3.0 * * @param int|string $key The cache key to increment - * @param int $offset The amount by which to increment the item's value. Default is 1. + * @param int $offset The amount by which to increment the item's value. Default is 1. * @param string $group The group the key is in. * @return false|int False on failure, the item's new value on success. */ function incr( $key, $offset = 1, $group = 'default' ) { - if ( ! isset( $this->cache[ $group ][ $key ] ) ) + if ( empty( $group ) ) + $group = 'default'; + + if ( ! $this->_exists( $key, $group ) ) return false; if ( ! is_numeric( $this->cache[ $group ][ $key ] ) ) @@ -450,10 +456,10 @@ class WP_Object_Cache { * @return bool False if not exists, true if contents were replaced */ function replace($key, $data, $group = 'default', $expire = '') { - if (empty ($group)) + if ( empty( $group ) ) $group = 'default'; - if ( false === $this->get($key, $group) ) + if ( ! $this->_exists( $key, $group ) ) return false; return $this->set($key, $data, $group, $expire); @@ -493,12 +499,9 @@ class WP_Object_Cache { * @return bool Always returns true */ function set($key, $data, $group = 'default', $expire = '') { - if ( empty ($group) ) + if ( empty( $group ) ) $group = 'default'; - if ( NULL === $data ) - $data = ''; - if ( is_object($data) ) $data = clone $data; @@ -526,6 +529,14 @@ class WP_Object_Cache { echo '</ul>'; } + /** + * Utility function to determine whether a key exists in the cache. + * @access private + */ + protected function _exists($key, $group) { + return isset( $this->cache[$group] ) && is_array( $this->cache[$group] ) && array_key_exists( $key, $this->cache[$group] ); + } + /** * Sets up object properties; PHP 5 style constructor * @@ -553,4 +564,3 @@ class WP_Object_Cache { return true; } } -?> diff --git a/wp-includes/canonical.php b/wp-includes/canonical.php index ea3bb7769..683c1479a 100644 --- a/wp-includes/canonical.php +++ b/wp-includes/canonical.php @@ -66,6 +66,13 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { if ( !isset($redirect['query']) ) $redirect['query'] = ''; + if ( is_feed() && ( $id = get_query_var( 'p' ) ) ) { + if ( $redirect_url = get_post_comments_feed_link( $id, get_query_var( 'feed' ) ) ) { + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type', 'feed'), $redirect_url ); + $redirect['path'] = parse_url( $redirect_url, PHP_URL_PATH ); + } + } + if ( is_singular() && 1 > $wp_query->post_count && ($id = get_query_var('p')) ) { $vars = $wpdb->get_results( $wpdb->prepare("SELECT post_type, post_parent FROM $wpdb->posts WHERE ID = %d", $id) ); @@ -75,7 +82,7 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $id = $vars->post_parent; if ( $redirect_url = get_permalink($id) ) - $redirect['query'] = remove_query_arg(array('p', 'page_id', 'attachment_id', 'post_type'), $redirect['query']); + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url ); } } @@ -88,12 +95,15 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $post_type_obj = get_post_type_object($redirect_post->post_type); if ( $post_type_obj->public ) { $redirect_url = get_permalink($redirect_post); - $redirect['query'] = remove_query_arg(array('p', 'page_id', 'attachment_id', 'post_type'), $redirect['query']); + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url ); } } - if ( ! $redirect_url ) - $redirect_url = redirect_guess_404_permalink(); + if ( ! $redirect_url ) { + if ( $redirect_url = redirect_guess_404_permalink( $requested_url ) ) { + $redirect['query'] = _remove_qs_args_if_not_in_url( $redirect['query'], array( 'page', 'feed', 'p', 'page_id', 'attachment_id', 'pagename', 'name', 'post_type' ), $redirect_url ); + } + } } elseif ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) { // rewriting of old ?p=X, ?m=2004, ?m=200401, ?m=20040101 @@ -191,15 +201,17 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { } } - } elseif ( is_single() && strpos($wp_rewrite->permalink_structure, '%category%') !== false ) { - $category = get_category_by_path(get_query_var('category_name')); + } elseif ( is_single() && strpos($wp_rewrite->permalink_structure, '%category%') !== false && $cat = get_query_var( 'category_name' ) ) { + $category = get_category_by_path( $cat ); $post_terms = wp_get_object_terms($wp_query->get_queried_object_id(), 'category', array('fields' => 'tt_ids')); if ( (!$category || is_wp_error($category)) || ( !is_wp_error($post_terms) && !empty($post_terms) && !in_array($category->term_taxonomy_id, $post_terms) ) ) $redirect_url = get_permalink($wp_query->get_queried_object_id()); } // Post Paging - if ( is_singular() && get_query_var('page') && $redirect_url ) { + if ( is_singular() && ! is_front_page() && get_query_var('page') ) { + if ( !$redirect_url ) + $redirect_url = get_permalink( get_queried_object_id() ); $redirect_url = trailingslashit( $redirect_url ) . user_trailingslashit( get_query_var( 'page' ), 'single_paged' ); $redirect['query'] = remove_query_arg( 'page', $redirect['query'] ); } @@ -216,7 +228,7 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $addl_path = ''; if ( is_feed() && in_array( get_query_var('feed'), $wp_rewrite->feeds ) ) { $addl_path = !empty( $addl_path ) ? trailingslashit($addl_path) : ''; - if ( get_query_var( 'withcomments' ) ) + if ( !is_singular() && get_query_var( 'withcomments' ) ) $addl_path .= 'comments/'; if ( ( 'rss' == get_default_feed() && 'feed' == get_query_var('feed') ) || 'rss' == get_query_var('feed') ) $addl_path .= user_trailingslashit( 'feed/' . ( ( get_default_feed() == 'rss2' ) ? '' : 'rss2' ), 'feed' ); @@ -265,6 +277,15 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $redirect['path'] = trailingslashit($redirect['path']) . $addl_path; $redirect_url = $redirect['scheme'] . '://' . $redirect['host'] . $redirect['path']; } + + if ( 'wp-register.php' == basename( $redirect['path'] ) ) { + if ( is_multisite() ) + $redirect_url = apply_filters( 'wp_signup_location', site_url( 'wp-signup.php' ) ); + else + $redirect_url = site_url( 'wp-login.php?action=register' ); + wp_redirect( $redirect_url, 301 ); + die(); + } } // tack on any additional query vars @@ -280,7 +301,7 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { unset( $_parsed_query['name'] ); } - $_parsed_query = array_map( 'rawurlencode', $_parsed_query ); + $_parsed_query = rawurlencode_deep( $_parsed_query ); $redirect_url = add_query_arg( $_parsed_query, $redirect_url ); } @@ -395,7 +416,7 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $requested_url = preg_replace_callback('|%[a-fA-F0-9][a-fA-F0-9]|', 'lowercase_octets', $requested_url); } - // Note that you can use the "redirect_canonical" filter to cancel a canonical redirect for whatever reason by returning FALSE + // Note that you can use the "redirect_canonical" filter to cancel a canonical redirect for whatever reason by returning false $redirect_url = apply_filters('redirect_canonical', $redirect_url, $requested_url); if ( !$redirect_url || $redirect_url == $requested_url ) // yes, again -- in case the filter aborted the request @@ -417,38 +438,112 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { } /** - * Attempts to guess correct post based on query vars. + * Removes arguments from a query string if they are not present in a URL + * DO NOT use this in plugin code. + * + * @since 3.4 + * @access private + * + * @return string The altered query string + */ +function _remove_qs_args_if_not_in_url( $query_string, Array $args_to_check, $url ) { + $parsed_url = @parse_url( $url ); + if ( ! empty( $parsed_url['query'] ) ) { + parse_str( $parsed_url['query'], $parsed_query ); + foreach ( $args_to_check as $qv ) { + if ( !isset( $parsed_query[$qv] ) ) + $query_string = remove_query_arg( $qv, $query_string ); + } + } else { + $query_string = remove_query_arg( $args_to_check, $query_string ); + } + return $query_string; +} + +/** + * Attempts to guess the correct URL from the current URL (that produced a 404) or + * the current query variables. * * @since 2.3.0 * @uses $wpdb * - * @return bool|string Returns False, if it can't find post, returns correct - * location on success. + * @param string $current_url Optional. The URL that has 404'd. + * @return bool|string The correct URL if one is found. False on failure. */ -function redirect_guess_404_permalink() { - global $wpdb; +function redirect_guess_404_permalink( $current_url = '' ) { + global $wpdb, $wp_rewrite; + + if ( ! empty( $current_url ) ) + $parsed_url = @parse_url( $current_url ); + + // Attempt to redirect bare category slugs if the permalink structure starts + // with the %category% tag. + if ( isset( $parsed_url['path'] ) + && preg_match( '#^[^%]+%category%#', $wp_rewrite->permalink_structure ) + && $cat = get_category_by_path( $parsed_url['path'] ) + ) { + if ( ! is_wp_error( $cat ) ) + return get_term_link( $cat ); + } - if ( !get_query_var('name') ) - return false; + if ( get_query_var('name') ) { + $where = $wpdb->prepare("post_name LIKE %s", like_escape( get_query_var('name') ) . '%'); - $where = $wpdb->prepare("post_name LIKE %s", like_escape( get_query_var('name') ) . '%'); + // if any of post_type, year, monthnum, or day are set, use them to refine the query + if ( get_query_var('post_type') ) + $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type')); + else + $where .= " AND post_type IN ('" . implode( "', '", get_post_types( array( 'public' => true ) ) ) . "')"; - // if any of post_type, year, monthnum, or day are set, use them to refine the query - if ( get_query_var('post_type') ) - $where .= $wpdb->prepare(" AND post_type = %s", get_query_var('post_type')); - if ( get_query_var('year') ) - $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year')); - if ( get_query_var('monthnum') ) - $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum')); - if ( get_query_var('day') ) - $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day')); + if ( get_query_var('year') ) + $where .= $wpdb->prepare(" AND YEAR(post_date) = %d", get_query_var('year')); + if ( get_query_var('monthnum') ) + $where .= $wpdb->prepare(" AND MONTH(post_date) = %d", get_query_var('monthnum')); + if ( get_query_var('day') ) + $where .= $wpdb->prepare(" AND DAYOFMONTH(post_date) = %d", get_query_var('day')); - $post_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE $where AND post_status = 'publish'"); - if ( !$post_id ) - return false; - return get_permalink($post_id); + $post_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE $where AND post_status = 'publish'"); + if ( ! $post_id ) + return false; + if ( get_query_var( 'feed' ) ) + return get_post_comments_feed_link( $post_id, get_query_var( 'feed' ) ); + elseif ( get_query_var( 'page' ) ) + return trailingslashit( get_permalink( $post_id ) ) . user_trailingslashit( get_query_var( 'page' ), 'single_paged' ); + else + return get_permalink( $post_id ); + } + + return false; } add_action('template_redirect', 'redirect_canonical'); -?> +function wp_redirect_admin_locations() { + global $wp_rewrite; + if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) ) + return; + + $admins = array( + home_url( 'wp-admin', 'relative' ), + home_url( 'dashboard', 'relative' ), + home_url( 'admin', 'relative' ), + site_url( 'dashboard', 'relative' ), + site_url( 'admin', 'relative' ), + ); + if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) { + wp_redirect( admin_url() ); + exit; + } + + $logins = array( + home_url( 'wp-login.php', 'relative' ), + home_url( 'login', 'relative' ), + site_url( 'login', 'relative' ), + ); + if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) { + wp_redirect( site_url( 'wp-login.php', 'login' ) ); + exit; + } +} + +add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 ); diff --git a/wp-includes/capabilities.php b/wp-includes/capabilities.php index 19bdaa48a..d77cfea8e 100644 --- a/wp-includes/capabilities.php +++ b/wp-includes/capabilities.php @@ -598,6 +598,18 @@ class WP_User { $this->data->$key = $value; } + /** + * Determine whether the user exists in the database. + * + * @since 3.4.0 + * @access public + * + * @return bool True if user exists in the database, false if not. + */ + function exists() { + return ! empty( $this->ID ); + } + /** * Retrieve the value of a property or meta key. * @@ -841,13 +853,12 @@ class WP_User { * * This is useful for looking up whether the user has a specific role * assigned to the user. The second optional parameter can also be used to - * check for capabilities against a specific post. + * check for capabilities against a specific object, such as a post or user. * * @since 2.0.0 * @access public * * @param string|int $cap Capability or role name to search. - * @param int $post_id Optional. Post ID to check capability against specific post. * @return bool True, if user has capability; false, if user does not have capability. */ function has_cap( $cap ) { @@ -1065,7 +1076,8 @@ function map_meta_cap( $cap, $user_id ) { break; } - if ( 'private' != $post->post_status ) { + $status_obj = get_post_status_object( $post->post_status ); + if ( $status_obj->public ) { $caps[] = $post_type->cap->read; break; } @@ -1079,8 +1091,10 @@ function map_meta_cap( $cap, $user_id ) { if ( is_object( $post_author_data ) && $user_id == $post_author_data->ID ) $caps[] = $post_type->cap->read; - else + elseif ( $status_obj->private ) $caps[] = $post_type->cap->read_private_posts; + else + $caps = map_meta_cap( 'edit_post', $user_id, $post->ID ); break; case 'edit_post_meta': case 'delete_post_meta': @@ -1112,6 +1126,13 @@ function map_meta_cap( $cap, $user_id ) { else $caps[] = 'do_not_allow'; break; + case 'unfiltered_html' : + // Disallow unfiltered_html for all users, even admins and super admins. + if ( defined( 'DISALLOW_UNFILTERED_HTML' ) && DISALLOW_UNFILTERED_HTML ) + $caps[] = 'do_not_allow'; + else + $caps[] = $cap; + break; case 'edit_files': case 'edit_plugins': case 'edit_themes': @@ -1134,13 +1155,6 @@ function map_meta_cap( $cap, $user_id ) { break; } // Fall through if not DISALLOW_FILE_MODS. - case 'unfiltered_html': - // Disallow unfiltered_html for all users, even admins and super admins. - if ( defined('DISALLOW_UNFILTERED_HTML') && DISALLOW_UNFILTERED_HTML ) { - $caps[] = 'do_not_allow'; - break; - } - // Fall through if not DISALLOW_UNFILTERED_HTML case 'delete_user': case 'delete_users': // If multisite these caps are allowed only for super admins. @@ -1213,7 +1227,7 @@ function current_user_can_for_blog( $blog_id, $capability ) { // Create new object to avoid stomping the global current_user. $user = new WP_User( $current_user->ID) ; - // Set the blog id. @todo add blog id arg to WP_User constructor? + // Set the blog id. @todo add blog id arg to WP_User constructor? $user->for_blog( $blog_id ); $args = array_slice( func_get_args(), 2 ); @@ -1259,7 +1273,7 @@ function user_can( $user, $capability ) { if ( ! is_object( $user ) ) $user = new WP_User( $user ); - if ( ! $user || ! $user->ID ) + if ( ! $user || ! $user->exists() ) return false; $args = array_slice( func_get_args(), 2 ); @@ -1356,7 +1370,7 @@ function is_super_admin( $user_id = false ) { else $user = wp_get_current_user(); - if ( empty( $user->ID ) ) + if ( ! $user->exists() ) return false; if ( is_multisite() ) { @@ -1370,5 +1384,3 @@ function is_super_admin( $user_id = false ) { return false; } - -?> diff --git a/wp-includes/category-template.php b/wp-includes/category-template.php index 2be9eed79..2e23f8a3f 100644 --- a/wp-includes/category-template.php +++ b/wp-includes/category-template.php @@ -56,7 +56,7 @@ function get_category_parents( $id, $link = false, $separator = '/', $nicename = } if ( $link ) - $chain .= '<a href="' . get_category_link( $parent->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator; + $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator; else $chain .= $name.$separator; return $chain; @@ -153,10 +153,10 @@ function get_the_category_by_ID( $cat_ID ) { */ function get_the_category_list( $separator = '', $parents='', $post_id = false ) { global $wp_rewrite; - $categories = get_the_category( $post_id ); - if ( !is_object_in_taxonomy( get_post_type( $post_id ), 'category' ) ) + if ( ! is_object_in_taxonomy( get_post_type( $post_id ), 'category' ) ) return apply_filters( 'the_category', '', $separator, $parents ); + $categories = get_the_category( $post_id ); if ( empty( $categories ) ) return apply_filters( 'the_category', __( 'Uncategorized' ), $separator, $parents ); @@ -171,17 +171,17 @@ function get_the_category_list( $separator = '', $parents='', $post_id = false ) case 'multiple': if ( $category->parent ) $thelist .= get_category_parents( $category->parent, true, $separator ); - $thelist .= '<a href="' . get_category_link( $category->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>'; + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>'; break; case 'single': - $thelist .= '<a href="' . get_category_link( $category->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>'; + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>'; if ( $category->parent ) $thelist .= get_category_parents( $category->parent, false, $separator ); $thelist .= $category->name.'</a></li>'; break; case '': default: - $thelist .= '<a href="' . get_category_link( $category->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>'; + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a></li>'; } } $thelist .= '</ul>'; @@ -194,17 +194,17 @@ function get_the_category_list( $separator = '', $parents='', $post_id = false ) case 'multiple': if ( $category->parent ) $thelist .= get_category_parents( $category->parent, true, $separator ); - $thelist .= '<a href="' . get_category_link( $category->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>'; + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>'; break; case 'single': - $thelist .= '<a href="' . get_category_link( $category->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>'; + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>'; if ( $category->parent ) $thelist .= get_category_parents( $category->parent, false, $separator ); $thelist .= "$category->name</a>"; break; case '': default: - $thelist .= '<a href="' . get_category_link( $category->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>'; + $thelist .= '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $category->name ) ) . '" ' . $rel . '>' . $category->name.'</a>'; } ++$i; } @@ -212,7 +212,6 @@ function get_the_category_list( $separator = '', $parents='', $post_id = false ) return apply_filters( 'the_category', $thelist, $separator, $parents ); } - /** * Check if the current post in within any of the given categories. * @@ -228,7 +227,7 @@ function get_the_category_list( $separator = '', $parents='', $post_id = false ) * @since 1.2.0 * * @param int|string|array $category Category ID, name or slug, or array of said. - * @param int|object $_post Optional. Post to check instead of the current post. (since 2.7.0) + * @param int|object $post Optional. Post to check instead of the current post. (since 2.7.0) * @return bool True if the current post is in any of the given categories. */ function in_category( $category, $post = null ) { @@ -272,7 +271,6 @@ function category_description( $category = 0 ) { * 'orderby' (string) default is 'ID' - What column to use for ordering the * categories. * 'order' (string) default is 'ASC' - What direction to order categories. - * 'show_last_update' (bool|int) default is 0 - See {@link get_categories()} * 'show_count' (bool|int) default is 0 - Whether to show how many posts are * in the category. * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that @@ -302,7 +300,7 @@ function wp_dropdown_categories( $args = '' ) { $defaults = array( 'show_option_all' => '', 'show_option_none' => '', 'orderby' => 'id', 'order' => 'ASC', - 'show_last_update' => 0, 'show_count' => 0, + 'show_count' => 0, 'hide_empty' => 1, 'child_of' => 0, 'exclude' => '', 'echo' => 1, 'selected' => 0, 'hierarchical' => 0, @@ -326,7 +324,6 @@ function wp_dropdown_categories( $args = '' ) { $r['pad_counts'] = true; } - $r['include_last_update_time'] = $r['show_last_update']; extract( $r ); $tab_index_attribute = ''; @@ -369,10 +366,10 @@ function wp_dropdown_categories( $args = '' ) { $output .= walk_category_dropdown_tree( $categories, $depth, $r ); } + if ( ! $r['hide_if_empty'] || ! empty($categories) ) $output .= "</select>\n"; - $output = apply_filters( 'wp_dropdown_cats', $output ); if ( $echo ) @@ -389,8 +386,6 @@ function wp_dropdown_categories( $args = '' ) { * 'orderby' (string) default is 'ID' - What column to use for ordering the * categories. * 'order' (string) default is 'ASC' - What direction to order categories. - * 'show_last_update' (bool|int) default is 0 - See {@link - * walk_category_dropdown_tree()} * 'show_count' (bool|int) default is 0 - Whether to show how many posts are * in the category. * 'hide_empty' (bool|int) default is 1 - Whether to hide categories that @@ -418,7 +413,7 @@ function wp_list_categories( $args = '' ) { $defaults = array( 'show_option_all' => '', 'show_option_none' => __('No categories'), 'orderby' => 'name', 'order' => 'ASC', - 'show_last_update' => 0, 'style' => 'list', + 'style' => 'list', 'show_count' => 0, 'hide_empty' => 1, 'use_desc_for_title' => 1, 'child_of' => 0, 'feed' => '', 'feed_type' => '', @@ -434,9 +429,6 @@ function wp_list_categories( $args = '' ) { if ( !isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) $r['pad_counts'] = true; - if ( isset( $r['show_date'] ) ) - $r['include_last_update_time'] = $r['show_date']; - if ( true == $r['hierarchical'] ) { $r['exclude_tree'] = $r['exclude']; $r['exclude'] = ''; @@ -581,7 +573,6 @@ function default_topic_count_scale( $count ) { return round(log10($count + 1) * 100); } - /** * Generates a tag cloud (heatmap) from provided data. * @@ -614,7 +605,6 @@ function default_topic_count_scale( $count ) { * @return string */ function wp_generate_tag_cloud( $tags, $args = '' ) { - global $wp_rewrite; $defaults = array( 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 0, 'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC', @@ -682,7 +672,7 @@ function wp_generate_tag_cloud( $tags, $args = '' ) { $tag_id = isset($tags[ $key ]->id) ? $tags[ $key ]->id : $key; $tag_name = $tags[ $key ]->name; $a[] = "<a href='$tag_link' class='tag-link-$tag_id' title='" . esc_attr( call_user_func( $topic_count_text_callback, $real_count ) ) . "' style='font-size: " . - ( $smallest + ( ( $count - $min_count ) * $font_step ) ) + str_replace( ',', '.', ( $smallest + ( ( $count - $min_count ) * $font_step ) ) ) . "$unit;'>$tag_name</a>"; } @@ -797,7 +787,7 @@ class Walker_Category extends Walker { * @param int $depth Depth of category. Used for tab indentation. * @param array $args Will only append content if style argument value is 'list'. */ - function start_lvl(&$output, $depth, $args) { + function start_lvl( &$output, $depth = 0, $args = array() ) { if ( 'list' != $args['style'] ) return; @@ -813,7 +803,7 @@ class Walker_Category extends Walker { * @param int $depth Depth of category. Used for tab indentation. * @param array $args Will only append content if style argument value is 'list'. */ - function end_lvl(&$output, $depth, $args) { + function end_lvl( &$output, $depth = 0, $args = array() ) { if ( 'list' != $args['style'] ) return; @@ -830,12 +820,12 @@ class Walker_Category extends Walker { * @param int $depth Depth of category in reference to parents. * @param array $args */ - function start_el(&$output, $category, $depth, $args) { + function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { extract($args); $cat_name = esc_attr( $category->name ); $cat_name = apply_filters( 'list_cats', $cat_name, $category ); - $link = '<a href="' . esc_attr( get_term_link($category) ) . '" '; + $link = '<a href="' . esc_url( get_term_link($category) ) . '" '; if ( $use_desc_for_title == 0 || empty($category->description) ) $link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ), $cat_name) ) . '"'; else @@ -849,7 +839,7 @@ class Walker_Category extends Walker { if ( empty($feed_image) ) $link .= '('; - $link .= '<a href="' . get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) . '"'; + $link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . '"'; if ( empty($feed) ) { $alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $cat_name ) . '"'; @@ -876,9 +866,6 @@ class Walker_Category extends Walker { if ( !empty($show_count) ) $link .= ' (' . intval($category->count) . ')'; - if ( !empty($show_date) ) - $link .= ' ' . gmdate('Y-m-d', $category->last_update_timestamp); - if ( 'list' == $args['style'] ) { $output .= "\t<li"; $class = 'cat-item cat-item-' . $category->term_id; @@ -905,7 +892,7 @@ class Walker_Category extends Walker { * @param int $depth Depth of category. Not used. * @param array $args Only uses 'list' for whether should append to output. */ - function end_el(&$output, $page, $depth, $args) { + function end_el( &$output, $page, $depth = 0, $args = array() ) { if ( 'list' != $args['style'] ) return; @@ -944,9 +931,9 @@ class Walker_CategoryDropdown extends Walker { * @param string $output Passed by reference. Used to append additional content. * @param object $category Category data object. * @param int $depth Depth of category. Used for padding. - * @param array $args Uses 'selected', 'show_count', and 'show_last_update' keys, if they exist. + * @param array $args Uses 'selected' and 'show_count' keys, if they exist. */ - function start_el(&$output, $category, $depth, $args) { + function start_el( &$output, $category, $depth, $args, $id = 0 ) { $pad = str_repeat(' ', $depth * 3); $cat_name = apply_filters('list_cats', $category->name, $category); @@ -957,10 +944,6 @@ class Walker_CategoryDropdown extends Walker { $output .= $pad.$cat_name; if ( $args['show_count'] ) $output .= ' ('. $category->count .')'; - if ( $args['show_last_update'] ) { - $format = 'Y-m-d'; - $output .= ' ' . gmdate($format, $category->last_update_timestamp); - } $output .= "</option>\n"; } } @@ -1012,10 +995,11 @@ function get_the_tags( $id = 0 ) { * @param string $before Optional. Before tags. * @param string $sep Optional. Between tags. * @param string $after Optional. After tags. + * @param int $id Optional. Post ID. Defaults to the current post. * @return string */ -function get_the_tag_list( $before = '', $sep = '', $after = '' ) { - return apply_filters( 'the_tags', get_the_term_list( 0, 'post_tag', $before, $sep, $after ), $before, $sep, $after); +function get_the_tag_list( $before = '', $sep = '', $after = '', $id = 0 ) { + return apply_filters( 'the_tags', get_the_term_list( $id, 'post_tag', $before, $sep, $after ), $before, $sep, $after, $id ); } /** @@ -1052,6 +1036,7 @@ function tag_description( $tag = 0 ) { * @since 2.8 * * @param int $term Optional. Term ID. Will use global term ID by default. + * @param string $taxonomy Optional taxonomy name. Defaults to 'post_tag'. * @return string Term description, available. */ function term_description( $term = 0, $taxonomy = 'post_tag' ) { @@ -1069,17 +1054,17 @@ function term_description( $term = 0, $taxonomy = 'post_tag' ) { * * @since 2.5.0 * - * @param int $id Post ID. Is not optional. + * @param int $id Post ID. * @param string $taxonomy Taxonomy name. * @return array|bool False on failure. Array of term objects on success. */ -function get_the_terms( $id = 0, $taxonomy ) { +function get_the_terms( $id, $taxonomy ) { global $post; $id = (int) $id; if ( !$id ) { - if ( !$post->ID ) + if ( empty( $post->ID ) ) return false; else $id = (int) $post->ID; @@ -1111,7 +1096,7 @@ function get_the_terms( $id = 0, $taxonomy ) { * @param string $after Optional. After list. * @return string */ -function get_the_term_list( $id = 0, $taxonomy, $before = '', $sep = '', $after = '' ) { +function get_the_term_list( $id, $taxonomy, $before = '', $sep = '', $after = '' ) { $terms = get_the_terms( $id, $taxonomy ); if ( is_wp_error( $terms ) ) @@ -1124,7 +1109,7 @@ function get_the_term_list( $id = 0, $taxonomy, $before = '', $sep = '', $after $link = get_term_link( $term, $taxonomy ); if ( is_wp_error( $link ) ) return $link; - $term_links[] = '<a href="' . $link . '" rel="tag">' . $term->name . '</a>'; + $term_links[] = '<a href="' . esc_url( $link ) . '" rel="tag">' . $term->name . '</a>'; } $term_links = apply_filters( "term_links-$taxonomy", $term_links ); @@ -1144,7 +1129,7 @@ function get_the_term_list( $id = 0, $taxonomy, $before = '', $sep = '', $after * @param string $after Optional. After list. * @return null|bool False on WordPress error. Returns null when displaying. */ -function the_terms( $id = 0, $taxonomy, $before = '', $sep = ', ', $after = '' ) { +function the_terms( $id, $taxonomy, $before = '', $sep = ', ', $after = '' ) { $term_list = get_the_term_list( $id, $taxonomy, $before, $sep, $after ); if ( is_wp_error( $term_list ) ) @@ -1153,13 +1138,12 @@ function the_terms( $id = 0, $taxonomy, $before = '', $sep = ', ', $after = '' ) echo apply_filters('the_terms', $term_list, $taxonomy, $before, $sep, $after); } - /** * Check if the current post has any of given category. * * @since 3.1.0 * - * @param string|int|array $tag Optional. The category name/term_id/slug or array of them to check for. + * @param string|int|array $category Optional. The category name/term_id/slug or array of them to check for. * @param int|object $post Optional. Post to check instead of the current post. * @return bool True if the current post has any of the given categories (or any category, if no category specified). */ @@ -1214,5 +1198,3 @@ function has_term( $term = '', $taxonomy = '', $post = null ) { return $r; } - -?> diff --git a/wp-includes/category.php b/wp-includes/category.php index 4d0227741..17283d01a 100644 --- a/wp-includes/category.php +++ b/wp-includes/category.php @@ -160,7 +160,6 @@ function get_category_by_slug( $slug ) { return $category; } - /** * Retrieve the ID of a category from its name. * @@ -176,7 +175,6 @@ function get_cat_ID( $cat_name='General' ) { return 0; } - /** * Retrieve the name of a category from its ID. * @@ -193,7 +191,6 @@ function get_cat_name( $cat_id ) { return $category->name; } - /** * Check if a category is an ancestor of another category. * @@ -207,20 +204,9 @@ function get_cat_name( $cat_id ) { * @return bool Whether $cat2 is child of $cat1 */ function cat_is_ancestor_of( $cat1, $cat2 ) { - if ( ! isset($cat1->term_id) ) - $cat1 = &get_category( $cat1 ); - if ( ! isset($cat2->parent) ) - $cat2 = &get_category( $cat2 ); - - if ( empty($cat1->term_id) || empty($cat2->parent) ) - return false; - if ( $cat2->parent == $cat1->term_id ) - return true; - - return cat_is_ancestor_of( $cat1, get_category( $cat2->parent ) ); + return term_is_ancestor_of( $cat1, $cat2, 'category' ); } - /** * Sanitizes category data based on context. * @@ -235,7 +221,6 @@ function sanitize_category( $category, $context = 'display' ) { return sanitize_term( $category, 'category', $context ); } - /** * Sanitizes data in single category key field. * @@ -254,7 +239,6 @@ function sanitize_category_field( $field, $value, $cat_id, $context ) { /* Tags */ - /** * Retrieves all post tags. * @@ -277,7 +261,6 @@ function &get_tags( $args = '' ) { return $tags; } - /** * Retrieve post tag by tag ID or tag object. * @@ -301,10 +284,8 @@ function &get_tag( $tag, $output = OBJECT, $filter = 'raw' ) { return get_term( $tag, 'post_tag', $output, $filter ); } - /* Cache */ - /** * Remove the category cache data based on ID. * @@ -317,7 +298,6 @@ function clean_category_cache( $id ) { clean_term_cache( $id, 'category' ); } - /** * Update category structure to old pre 2.3 from new taxonomy structure. * @@ -354,6 +334,3 @@ function _make_cat_compat( &$category ) { $category['category_parent'] = &$category['parent']; } } - - -?> diff --git a/wp-includes/class-IXR.php b/wp-includes/class-IXR.php index 9d89f0c58..64a60d46b 100644 --- a/wp-includes/class-IXR.php +++ b/wp-includes/class-IXR.php @@ -1061,5 +1061,3 @@ class IXR_ClientMulticall extends IXR_Client return parent::query('system.multicall', $this->calls); } } - -?> diff --git a/wp-includes/class-http.php b/wp-includes/class-http.php index a68711c8c..31a13ea6d 100644 --- a/wp-includes/class-http.php +++ b/wp-includes/class-http.php @@ -98,7 +98,6 @@ class WP_Http { 'filename' => null ); - // Pre-parse for the HEAD checks. $args = wp_parse_args( $args ); @@ -201,7 +200,7 @@ class WP_Http { * @param array $args Request arguments * @param string $url URL to Request * - * @return string|false Class name for the first transport that claims to support the request. False if no transport claims to support the request. + * @return string|false Class name for the first transport that claims to support the request. False if no transport claims to support the request. */ public function _get_first_available_transport( $args, $url = null ) { $request_order = array( 'curl', 'streams', 'fsockopen' ); @@ -535,8 +534,55 @@ class WP_Http { else return !in_array( $check['host'], $accessible_hosts ); //Inverse logic, If its in the array, then we can't access it. + } + + static function make_absolute_url( $maybe_relative_path, $url ) { + if ( empty( $url ) ) + return $maybe_relative_path; + + // Check for a scheme + if ( false !== strpos( $maybe_relative_path, '://' ) ) + return $maybe_relative_path; + + if ( ! $url_parts = @parse_url( $url ) ) + return $maybe_relative_path; + + if ( ! $relative_url_parts = @parse_url( $maybe_relative_path ) ) + return $maybe_relative_path; + + $absolute_path = $url_parts['scheme'] . '://' . $url_parts['host']; + if ( isset( $url_parts['port'] ) ) + $absolute_path .= ':' . $url_parts['port']; + + // Start off with the Absolute URL path + $path = ! empty( $url_parts['path'] ) ? $url_parts['path'] : '/'; + + // If the it's a root-relative path, then great + if ( ! empty( $relative_url_parts['path'] ) && '/' == $relative_url_parts['path'][0] ) { + $path = $relative_url_parts['path']; + + // Else it's a relative path + } elseif ( ! empty( $relative_url_parts['path'] ) ) { + // Strip off any file components from the absolute path + $path = substr( $path, 0, strrpos( $path, '/' ) + 1 ); + + // Build the new path + $path .= $relative_url_parts['path']; + // Strip all /path/../ out of the path + while ( strpos( $path, '../' ) > 1 ) { + $path = preg_replace( '![^/]+/\.\./!', '', $path ); + } + + // Strip any final leading ../ from the path + $path = preg_replace( '!^/(\.\./)+!', '', $path ); + } + // Add the Query string + if ( ! empty( $relative_url_parts['query'] ) ) + $path .= '?' . $relative_url_parts['query']; + + return $absolute_path . '/' . ltrim( $path, '/' ); } } @@ -733,7 +779,7 @@ class WP_Http_Fsockopen { // If location is found, then assume redirect and redirect to location. if ( isset($arrHeaders['headers']['location']) && 0 !== $r['_redirection'] ) { if ( $r['redirection']-- > 0 ) { - return $this->request($arrHeaders['headers']['location'], $r); + return $this->request( WP_HTTP::make_absolute_url( $arrHeaders['headers']['location'], $url ), $r); } else { return new WP_Error('http_request_failed', __('Too many redirects.')); } @@ -1023,15 +1069,14 @@ class WP_Http_Curl { } } - $is_local = isset($args['local']) && $args['local']; - $ssl_verify = isset($args['sslverify']) && $args['sslverify']; + $is_local = isset($r['local']) && $r['local']; + $ssl_verify = isset($r['sslverify']) && $r['sslverify']; if ( $is_local ) $ssl_verify = apply_filters('https_local_ssl_verify', $ssl_verify); elseif ( ! $is_local ) $ssl_verify = apply_filters('https_ssl_verify', $ssl_verify); - - // CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT expect integers. Have to use ceil since + // CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT expect integers. Have to use ceil since // a value of 0 will allow an unlimited timeout. $timeout = (int) ceil( $r['timeout'] ); curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, $timeout ); @@ -1042,7 +1087,9 @@ class WP_Http_Curl { curl_setopt( $handle, CURLOPT_SSL_VERIFYHOST, ( $ssl_verify === true ) ? 2 : false ); curl_setopt( $handle, CURLOPT_SSL_VERIFYPEER, $ssl_verify ); curl_setopt( $handle, CURLOPT_USERAGENT, $r['user-agent'] ); - curl_setopt( $handle, CURLOPT_MAXREDIRS, $r['redirection'] ); + // The option doesn't work with safe mode or when open_basedir is set, and there's a + // bug #17490 with redirected POST requests, so handle redirections outside Curl. + curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, false ); switch ( $r['method'] ) { case 'HEAD': @@ -1056,6 +1103,11 @@ class WP_Http_Curl { curl_setopt( $handle, CURLOPT_CUSTOMREQUEST, 'PUT' ); curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] ); break; + default: + curl_setopt( $handle, CURLOPT_CUSTOMREQUEST, $r['method'] ); + if ( ! empty( $r['body'] ) ) + curl_setopt( $handle, CURLOPT_POSTFIELDS, $r['body'] ); + break; } if ( true === $r['blocking'] ) @@ -1074,10 +1126,6 @@ class WP_Http_Curl { curl_setopt( $handle, CURLOPT_FILE, $stream_handle ); } - // The option doesn't work with safe mode or when open_basedir is set. - if ( !ini_get('safe_mode') && !ini_get('open_basedir') && 0 !== $r['_redirection'] ) - curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true ); - if ( !empty( $r['headers'] ) ) { // cURL expects full header strings in each element $headers = array(); @@ -1110,12 +1158,12 @@ class WP_Http_Curl { if ( strlen($theResponse) > 0 && ! is_bool( $theResponse ) ) // is_bool: when using $args['stream'], curl_exec will return (bool)true $theBody = $theResponse; - // If no response, and It's not a HEAD request with valid headers returned - if ( 0 == strlen($theResponse) && ('HEAD' != $args['method'] || empty($this->headers)) ) { - if ( $curl_error = curl_error($handle) ) - return new WP_Error('http_request_failed', $curl_error); - if ( in_array( curl_getinfo( $handle, CURLINFO_HTTP_CODE ), array(301, 302) ) ) - return new WP_Error('http_request_failed', __('Too many redirects.')); + // If no response + if ( 0 == strlen( $theResponse ) && empty( $theHeaders['headers'] ) ) { + if ( $curl_error = curl_error( $handle ) ) + return new WP_Error( 'http_request_failed', $curl_error ); + if ( in_array( curl_getinfo( $handle, CURLINFO_HTTP_CODE ), array( 301, 302 ) ) ) + return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) ); } $this->headers = ''; @@ -1130,9 +1178,9 @@ class WP_Http_Curl { fclose( $stream_handle ); // See #11305 - When running under safe mode, redirection is disabled above. Handle it manually. - if ( ! empty( $theHeaders['headers']['location'] ) && ( ini_get( 'safe_mode' ) || ini_get( 'open_basedir' ) ) && 0 !== $r['_redirection'] ) { + if ( ! empty( $theHeaders['headers']['location'] ) && 0 !== $r['_redirection'] ) { // _redirection: The requested number of redirections if ( $r['redirection']-- > 0 ) { - return $this->request( $theHeaders['headers']['location'], $r ); + return $this->request( WP_HTTP::make_absolute_url( $theHeaders['headers']['location'], $url ), $r ); } else { return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) ); } @@ -1494,7 +1542,7 @@ class WP_Http_Cookie { * @since 2.8.0 * * @param string $url URL you intend to send this cookie to - * @return boolean TRUE if allowed, FALSE otherwise. + * @return boolean true if allowed, false otherwise. */ function test( $url ) { // Expires - if expired then nothing else matters @@ -1541,7 +1589,7 @@ class WP_Http_Cookie { if ( empty( $this->name ) || empty( $this->value ) ) return ''; - return $this->name . '=' . urlencode( $this->value ); + return $this->name . '=' . apply_filters( 'wp_http_cookie_value', $this->value, $this->name ); } /** diff --git a/wp-includes/class-json.php b/wp-includes/class-json.php index 75010df20..58f6f7de2 100644 --- a/wp-includes/class-json.php +++ b/wp-includes/class-json.php @@ -860,4 +860,3 @@ if (class_exists('PEAR_Error')) { } endif; -?> diff --git a/wp-includes/class-oembed.php b/wp-includes/class-oembed.php index f79772cae..591f01736 100644 --- a/wp-includes/class-oembed.php +++ b/wp-includes/class-oembed.php @@ -30,23 +30,24 @@ class WP_oEmbed { // The WP_Embed class disables discovery for non-unfiltered_html users, so only providers in this array will be used for them. // Add to this list using the wp_oembed_add_provider() function (see its PHPDoc for details). $this->providers = apply_filters( 'oembed_providers', array( - '#http://(www\.)?youtube.com/watch.*#i' => array( 'http://www.youtube.com/oembed', true ), - 'http://youtu.be/*' => array( 'http://www.youtube.com/oembed', false ), - 'http://blip.tv/*' => array( 'http://blip.tv/oembed/', false ), - '#http://(www\.)?vimeo\.com/.*#i' => array( 'http://vimeo.com/api/oembed.{format}', true ), - '#http://(www\.)?dailymotion\.com/.*#i' => array( 'http://www.dailymotion.com/api/oembed', true ), - '#http://(www\.)?flickr\.com/.*#i' => array( 'http://www.flickr.com/services/oembed/', true ), - '#http://(.+\.)?smugmug\.com/.*#i' => array( 'http://api.smugmug.com/services/oembed/', true ), - '#http://(www\.)?hulu\.com/watch/.*#i' => array( 'http://www.hulu.com/api/oembed.{format}', true ), - '#http://(www\.)?viddler\.com/.*#i' => array( 'http://lab.viddler.com/services/oembed/', true ), - 'http://qik.com/*' => array( 'http://qik.com/api/oembed.{format}', false ), - 'http://revision3.com/*' => array( 'http://revision3.com/api/oembed/', false ), - 'http://i*.photobucket.com/albums/*' => array( 'http://photobucket.com/oembed', false ), - 'http://gi*.photobucket.com/groups/*' => array( 'http://photobucket.com/oembed', false ), - '#http://(www\.)?scribd\.com/.*#i' => array( 'http://www.scribd.com/services/oembed', true ), - 'http://wordpress.tv/*' => array( 'http://wordpress.tv/oembed/', false ), - '#http://(.+\.)?polldaddy\.com/.*#i' => array( 'http://polldaddy.com/oembed/', true ), - '#http://(www\.)?funnyordie\.com/videos/.*#i' => array( 'http://www.funnyordie.com/oembed', true ), + '#http://(www\.)?youtube.com/watch.*#i' => array( 'http://www.youtube.com/oembed', true ), + 'http://youtu.be/*' => array( 'http://www.youtube.com/oembed', false ), + 'http://blip.tv/*' => array( 'http://blip.tv/oembed/', false ), + '#http://(www\.)?vimeo\.com/.*#i' => array( 'http://vimeo.com/api/oembed.{format}', true ), + '#http://(www\.)?dailymotion\.com/.*#i' => array( 'http://www.dailymotion.com/services/oembed', true ), + '#http://(www\.)?flickr\.com/.*#i' => array( 'http://www.flickr.com/services/oembed/', true ), + '#http://(.+\.)?smugmug\.com/.*#i' => array( 'http://api.smugmug.com/services/oembed/', true ), + '#http://(www\.)?hulu\.com/watch/.*#i' => array( 'http://www.hulu.com/api/oembed.{format}', true ), + '#http://(www\.)?viddler\.com/.*#i' => array( 'http://lab.viddler.com/services/oembed/', true ), + 'http://qik.com/*' => array( 'http://qik.com/api/oembed.{format}', false ), + 'http://revision3.com/*' => array( 'http://revision3.com/api/oembed/', false ), + 'http://i*.photobucket.com/albums/*' => array( 'http://photobucket.com/oembed', false ), + 'http://gi*.photobucket.com/groups/*' => array( 'http://photobucket.com/oembed', false ), + '#http://(www\.)?scribd\.com/.*#i' => array( 'http://www.scribd.com/services/oembed', true ), + 'http://wordpress.tv/*' => array( 'http://wordpress.tv/oembed/', false ), + '#http://(.+\.)?polldaddy\.com/.*#i' => array( 'http://polldaddy.com/oembed/', true ), + '#http://(www\.)?funnyordie\.com/videos/.*#i' => array( 'http://www.funnyordie.com/oembed', true ), + '#https?://(www\.)?twitter.com/.+?/status(es)?/.*#i' => array( 'http://api.twitter.com/1/statuses/oembed.{format}', true ), ) ); // Fix any embeds that contain new lines in the middle of the HTML which breaks wpautop(). @@ -226,28 +227,34 @@ class WP_oEmbed { * @return bool|string False on error, otherwise the HTML needed to embed. */ function data2html( $data, $url ) { - if ( !is_object($data) || empty($data->type) ) + if ( ! is_object( $data ) || empty( $data->type ) ) return false; + $return = false; + switch ( $data->type ) { case 'photo': - if ( empty($data->url) || empty($data->width) || empty($data->height) ) - return false; + if ( empty( $data->url ) || empty( $data->width ) || empty( $data->height ) ) + break; + if ( ! is_string( $data->url ) || ! is_numeric( $data->width ) || ! is_numeric( $data->height ) ) + break; - $title = ( !empty($data->title) ) ? $data->title : ''; + $title = ! empty( $data->title ) && is_string( $data->title ) ? $data->title : ''; $return = '<a href="' . esc_url( $url ) . '"><img src="' . esc_url( $data->url ) . '" alt="' . esc_attr($title) . '" width="' . esc_attr($data->width) . '" height="' . esc_attr($data->height) . '" /></a>'; break; case 'video': case 'rich': - $return = ( !empty($data->html) ) ? $data->html : false; + if ( ! empty( $data->html ) && is_string( $data->html ) ) + $return = $data->html; break; case 'link': - $return = ( !empty($data->title) ) ? '<a href="' . esc_url($url) . '">' . esc_html($data->title) . '</a>' : false; + if ( ! empty( $data->title ) && is_string( $data->title ) ) + $return = '<a href="' . esc_url( $url ) . '">' . esc_html( $data->title ) . '</a>'; break; - default; + default: $return = false; } @@ -291,5 +298,3 @@ function &_wp_oembed_get_object() { return $wp_oembed; } - -?> \ No newline at end of file diff --git a/wp-includes/class-phpmailer.php b/wp-includes/class-phpmailer.php index 70de3de72..ba4ddb2eb 100644 --- a/wp-includes/class-phpmailer.php +++ b/wp-includes/class-phpmailer.php @@ -2,15 +2,15 @@ /*~ class.phpmailer.php .---------------------------------------------------------------------------. | Software: PHPMailer - PHP email class | -| Version: 5.1 | -| Contact: via sourceforge.net support pages (also www.worxware.com) | -| Info: http://phpmailer.sourceforge.net | -| Support: http://sourceforge.net/projects/phpmailer/ | +| Version: 5.2.1 | +| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ | | ------------------------------------------------------------------------- | -| Admin: Andy Prevost (project admininistrator) | +| Admin: Jim Jagielski (project admininistrator) | | Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | | : Marcus Bointon (coolbru) coolbru@users.sourceforge.net | +| : Jim Jagielski (jimjag) jimjag@gmail.com | | Founder: Brent R. Matzelle (original founder) | +| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved. | | Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. | | Copyright (c) 2001-2003, Brent R. Matzelle | | ------------------------------------------------------------------------- | @@ -19,11 +19,6 @@ | This program is distributed in the hope that it will be useful - WITHOUT | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | | FITNESS FOR A PARTICULAR PURPOSE. | -| ------------------------------------------------------------------------- | -| We offer a number of paid services (www.worxware.com): | -| - Web Hosting on highly optimized fast and secure servers | -| - Technology Consulting | -| - Oursourcing (highly qualified programmers and graphic designers) | '---------------------------------------------------------------------------' */ @@ -33,8 +28,10 @@ * @package PHPMailer * @author Andy Prevost * @author Marcus Bointon + * @author Jim Jagielski + * @copyright 2010 - 2012 Jim Jagielski * @copyright 2004 - 2009 Andy Prevost - * @version $Id: class.phpmailer.php 447 2009-05-25 01:36:38Z codeworxtech $ + * @version $Id: class.phpmailer.php 450 2010-06-23 16:46:33Z coolbru $ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ @@ -118,6 +115,27 @@ class PHPMailer { */ public $AltBody = ''; + /** + * Stores the complete compiled MIME message body. + * @var string + * @access protected + */ + protected $MIMEBody = ''; + + /** + * Stores the complete compiled MIME message headers. + * @var string + * @access protected + */ + protected $MIMEHeader = ''; + + /** + * Stores the complete sent MIME message (Body and Headers) + * @var string + * @access protected + */ + protected $SentMIMEMessage = ''; + /** * Sets word wrapping on the body of the message to a given number of * characters. @@ -269,6 +287,12 @@ class PHPMailer { */ public $DKIM_identity = ''; + /** + * Used with DKIM DNS Resource Record + * @var string + */ + public $DKIM_passphrase = ''; + /** * Used with DKIM DNS Resource Record * optional, in format of email address 'you@yourdomain.com' @@ -300,28 +324,34 @@ class PHPMailer { * Sets the PHPMailer Version number * @var string */ - public $Version = '5.1'; + public $Version = '5.2.1'; + + /** + * What to use in the X-Mailer header + * @var string + */ + public $XMailer = ''; ///////////////////////////////////////////////// // PROPERTIES, PRIVATE AND PROTECTED ///////////////////////////////////////////////// - private $smtp = NULL; - private $to = array(); - private $cc = array(); - private $bcc = array(); - private $ReplyTo = array(); - private $all_recipients = array(); - private $attachment = array(); - private $CustomHeader = array(); - private $message_type = ''; - private $boundary = array(); - protected $language = array(); - private $error_count = 0; - private $sign_cert_file = ""; - private $sign_key_file = ""; - private $sign_key_pass = ""; - private $exceptions = false; + protected $smtp = NULL; + protected $to = array(); + protected $cc = array(); + protected $bcc = array(); + protected $ReplyTo = array(); + protected $all_recipients = array(); + protected $attachment = array(); + protected $CustomHeader = array(); + protected $message_type = ''; + protected $boundary = array(); + protected $language = array(); + protected $error_count = 0; + protected $sign_cert_file = ''; + protected $sign_key_file = ''; + protected $sign_key_pass = ''; + protected $exceptions = false; ///////////////////////////////////////////////// // CONSTANTS @@ -437,7 +467,7 @@ class PHPMailer { * @return boolean */ public function AddReplyTo($address, $name = '') { - return $this->AddAnAddress('ReplyTo', $address, $name); + return $this->AddAnAddress('Reply-To', $address, $name); } /** @@ -447,11 +477,17 @@ class PHPMailer { * @param string $address The email address to send to * @param string $name * @return boolean true on success, false if address already used or invalid in some way - * @access private + * @access protected */ - private function AddAnAddress($kind, $address, $name = '') { - if (!preg_match('/^(to|cc|bcc|ReplyTo)$/', $kind)) { - echo 'Invalid recipient array: ' . $kind; + protected function AddAnAddress($kind, $address, $name = '') { + if (!preg_match('/^(to|cc|bcc|Reply-To)$/', $kind)) { + $this->SetError($this->Lang('Invalid recipient array').': '.$kind); + if ($this->exceptions) { + throw new phpmailerException('Invalid recipient array: ' . $kind); + } + if ($this->SMTPDebug) { + echo $this->Lang('Invalid recipient array').': '.$kind; + } return false; } $address = trim($address); @@ -461,10 +497,12 @@ class PHPMailer { if ($this->exceptions) { throw new phpmailerException($this->Lang('invalid_address').': '.$address); } - echo $this->Lang('invalid_address').': '.$address; + if ($this->SMTPDebug) { + echo $this->Lang('invalid_address').': '.$address; + } return false; } - if ($kind != 'ReplyTo') { + if ($kind != 'Reply-To') { if (!isset($this->all_recipients[strtolower($address)])) { array_push($this->$kind, array($address, $name)); $this->all_recipients[strtolower($address)] = true; @@ -485,7 +523,7 @@ class PHPMailer { * @param string $name * @return boolean */ - public function SetFrom($address, $name = '',$auto=1) { + public function SetFrom($address, $name = '', $auto = 1) { $address = trim($address); $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim if (!self::ValidateAddress($address)) { @@ -493,14 +531,16 @@ class PHPMailer { if ($this->exceptions) { throw new phpmailerException($this->Lang('invalid_address').': '.$address); } - echo $this->Lang('invalid_address').': '.$address; + if ($this->SMTPDebug) { + echo $this->Lang('invalid_address').': '.$address; + } return false; } $this->From = $address; $this->FromName = $name; if ($auto) { if (empty($this->ReplyTo)) { - $this->AddAnAddress('ReplyTo', $address, $name); + $this->AddAnAddress('Reply-To', $address, $name); } if (empty($this->Sender)) { $this->Sender = $address; @@ -544,6 +584,21 @@ class PHPMailer { */ public function Send() { try { + if(!$this->PreSend()) return false; + return $this->PostSend(); + } catch (phpmailerException $e) { + $this->SentMIMEMessage = ''; + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; + } + } + + protected function PreSend() { + try { + $mailHeader = ""; if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL); } @@ -555,27 +610,58 @@ class PHPMailer { $this->error_count = 0; // reset errors $this->SetMessageType(); - $header = $this->CreateHeader(); - $body = $this->CreateBody(); - + //Refuse to send an empty message if (empty($this->Body)) { throw new phpmailerException($this->Lang('empty_message'), self::STOP_CRITICAL); } + $this->MIMEHeader = $this->CreateHeader(); + $this->MIMEBody = $this->CreateBody(); + + // To capture the complete message when using mail(), create + // an extra header list which CreateHeader() doesn't fold in + if ($this->Mailer == 'mail') { + if (count($this->to) > 0) { + $mailHeader .= $this->AddrAppend("To", $this->to); + } else { + $mailHeader .= $this->HeaderLine("To", "undisclosed-recipients:;"); + } + $mailHeader .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader(trim($this->Subject)))); + // if(count($this->cc) > 0) { + // $mailHeader .= $this->AddrAppend("Cc", $this->cc); + // } + } + // digitally sign with DKIM if enabled if ($this->DKIM_domain && $this->DKIM_private) { - $header_dkim = $this->DKIM_Add($header,$this->Subject,$body); - $header = str_replace("\r\n","\n",$header_dkim) . $header; + $header_dkim = $this->DKIM_Add($this->MIMEHeader, $this->EncodeHeader($this->SecureHeader($this->Subject)), $this->MIMEBody); + $this->MIMEHeader = str_replace("\r\n", "\n", $header_dkim) . $this->MIMEHeader; } + $this->SentMIMEMessage = sprintf("%s%s\r\n\r\n%s",$this->MIMEHeader,$mailHeader,$this->MIMEBody); + return true; + + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + return false; + } + } + + protected function PostSend() { + try { // Choose the mailer and send through it switch($this->Mailer) { case 'sendmail': - return $this->SendmailSend($header, $body); + return $this->SendmailSend($this->MIMEHeader, $this->MIMEBody); case 'smtp': - return $this->SmtpSend($header, $body); + return $this->SmtpSend($this->MIMEHeader, $this->MIMEBody); + case 'mail': + return $this->MailSend($this->MIMEHeader, $this->MIMEBody); default: - return $this->MailSend($header, $body); + return $this->MailSend($this->MIMEHeader, $this->MIMEBody); } } catch (phpmailerException $e) { @@ -583,7 +669,9 @@ class PHPMailer { if ($this->exceptions) { throw $e; } - echo $e->getMessage()."\n"; + if ($this->SMTPDebug) { + echo $e->getMessage()."\n"; + } return false; } } @@ -612,7 +700,7 @@ class PHPMailer { $result = pclose($mail); // implement call back function if it exists $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); if($result != 0) { throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } @@ -626,7 +714,7 @@ class PHPMailer { $result = pclose($mail); // implement call back function if it exists $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent,$this->to,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $this->to, $this->cc, $this->bcc, $this->Subject, $body); if($result != 0) { throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); } @@ -648,8 +736,12 @@ class PHPMailer { } $to = implode(', ', $toArr); - $params = sprintf("-oi -f %s", $this->Sender); - if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) { + if (empty($this->Sender)) { + $params = "-oi "; + } else { + $params = sprintf("-oi -f %s", $this->Sender); + } + if ($this->Sender != '' and !ini_get('safe_mode')) { $old_from = ini_get('sendmail_from'); ini_set('sendmail_from', $this->Sender); if ($this->SingleTo === true && count($toArr) > 1) { @@ -657,13 +749,13 @@ class PHPMailer { $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); } } else { $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body); } } else { if ($this->SingleTo === true && count($toArr) > 1) { @@ -671,13 +763,13 @@ class PHPMailer { $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); } } else { - $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header); + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); // implement call back function if it exists $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body); + $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body); } } if (isset($old_from)) { @@ -716,11 +808,11 @@ class PHPMailer { $bad_rcpt[] = $to[0]; // implement call back function if it exists $isSent = 0; - $this->doCallback($isSent,$to[0],'','',$this->Subject,$body); + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); } else { // implement call back function if it exists $isSent = 1; - $this->doCallback($isSent,$to[0],'','',$this->Subject,$body); + $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); } } foreach($this->cc as $cc) { @@ -728,11 +820,11 @@ class PHPMailer { $bad_rcpt[] = $cc[0]; // implement call back function if it exists $isSent = 0; - $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body); + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); } else { // implement call back function if it exists $isSent = 1; - $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body); + $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); } } foreach($this->bcc as $bcc) { @@ -740,11 +832,11 @@ class PHPMailer { $bad_rcpt[] = $bcc[0]; // implement call back function if it exists $isSent = 0; - $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body); + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); } else { // implement call back function if it exists $isSent = 1; - $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body); + $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); } } @@ -822,7 +914,9 @@ class PHPMailer { } } catch (phpmailerException $e) { $this->smtp->Reset(); - throw $e; + if ($this->exceptions) { + throw $e; + } } return true; } @@ -942,7 +1036,7 @@ class PHPMailer { $line = explode($this->LE, $message); $message = ''; - for ($i=0 ;$i < count($line); $i++) { + for ($i = 0 ;$i < count($line); $i++) { $line_part = explode(' ', $line[$i]); $buf = ''; for ($e = 0; $e<count($line_part); $e++) { @@ -1056,7 +1150,9 @@ class PHPMailer { switch($this->message_type) { case 'alt': - case 'alt_attachments': + case 'alt_inline': + case 'alt_attach': + case 'alt_inline_attach': $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); break; default: @@ -1077,6 +1173,7 @@ class PHPMailer { $uniq_id = md5(uniqid(time())); $this->boundary[1] = 'b1_' . $uniq_id; $this->boundary[2] = 'b2_' . $uniq_id; + $this->boundary[3] = 'b3_' . $uniq_id; $result .= $this->HeaderLine('Date', self::RFCDate()); if($this->Sender == '') { @@ -1098,7 +1195,7 @@ class PHPMailer { $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); } } - } + } $from = array(); $from[0][0] = trim($this->From); @@ -1116,7 +1213,7 @@ class PHPMailer { } if(count($this->ReplyTo) > 0) { - $result .= $this->AddrAppend('Reply-to', $this->ReplyTo); + $result .= $this->AddrAppend('Reply-To', $this->ReplyTo); } // mail() sets the subject itself @@ -1125,12 +1222,16 @@ class PHPMailer { } if($this->MessageID != '') { - $result .= $this->HeaderLine('Message-ID',$this->MessageID); + $result .= $this->HeaderLine('Message-ID', $this->MessageID); } else { $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); } $result .= $this->HeaderLine('X-Priority', $this->Priority); - $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (phpmailer.sourceforge.net)'); + if($this->XMailer) { + $result .= $this->HeaderLine('X-Mailer', $this->XMailer); + } else { + $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (http://code.google.com/a/apache-extras.org/p/phpmailer/)'); + } if($this->ConfirmReadingTo != '') { $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); @@ -1158,18 +1259,21 @@ class PHPMailer { switch($this->message_type) { case 'plain': $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding); - $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet); + $result .= $this->TextLine('Content-Type: '.$this->ContentType.'; charset="'.$this->CharSet.'"'); break; - case 'attachments': - case 'alt_attachments': - if($this->InlineImageExists()){ - $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE); - } else { - $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); - $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); - } + case 'inline': + $result .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + case 'attach': + case 'inline_attach': + case 'alt_attach': + case 'alt_inline_attach': + $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); break; case 'alt': + case 'alt_inline': $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); break; @@ -1182,6 +1286,16 @@ class PHPMailer { return $result; } + /** + * Returns the MIME message (headers and body). Only really valid post PreSend(). + * @access public + * @return string + */ + public function GetSentMIMEMessage() { + return $this->SentMIMEMessage; + } + + /** * Assembles the message body. Returns an empty string on failure. * @access public @@ -1197,6 +1311,33 @@ class PHPMailer { $this->SetWordWrap(); switch($this->message_type) { + case 'plain': + $body .= $this->EncodeString($this->Body, $this->Encoding); + break; + case 'inline': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[1]); + break; + case 'attach': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; + case 'inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); + break; case 'alt': $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); $body .= $this->EncodeString($this->AltBody, $this->Encoding); @@ -1206,26 +1347,56 @@ class PHPMailer { $body .= $this->LE.$this->LE; $body .= $this->EndBoundary($this->boundary[1]); break; - case 'plain': + case 'alt_inline': + $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[2]); + $body .= $this->LE; + $body .= $this->EndBoundary($this->boundary[1]); break; - case 'attachments': - $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + case 'alt_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[2]); $body .= $this->LE; - $body .= $this->AttachAll(); + $body .= $this->AttachAll("attachment", $this->boundary[1]); break; - case 'alt_attachments': - $body .= sprintf("--%s%s", $this->boundary[1], $this->LE); - $body .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE); - $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body + case 'alt_inline_attach': + $body .= $this->TextLine("--" . $this->boundary[1]); + $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); $body .= $this->EncodeString($this->AltBody, $this->Encoding); $body .= $this->LE.$this->LE; - $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body + $body .= $this->TextLine("--" . $this->boundary[2]); + $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); + $body .= $this->TextLine("\tboundary=\"" . $this->boundary[3] . '"'); + $body .= $this->LE; + $body .= $this->GetBoundary($this->boundary[3], '', 'text/html', ''); $body .= $this->EncodeString($this->Body, $this->Encoding); $body .= $this->LE.$this->LE; + $body .= $this->AttachAll("inline", $this->boundary[3]); + $body .= $this->LE; $body .= $this->EndBoundary($this->boundary[2]); - $body .= $this->AttachAll(); + $body .= $this->LE; + $body .= $this->AttachAll("attachment", $this->boundary[1]); break; } @@ -1238,8 +1409,8 @@ class PHPMailer { $signed = tempnam("", "signed"); if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), NULL)) { @unlink($file); - @unlink($signed); $body = file_get_contents($signed); + @unlink($signed); } else { @unlink($file); @unlink($signed); @@ -1258,9 +1429,10 @@ class PHPMailer { /** * Returns the start of a message boundary. - * @access private + * @access protected + * @return string */ - private function GetBoundary($boundary, $charSet, $contentType, $encoding) { + protected function GetBoundary($boundary, $charSet, $contentType, $encoding) { $result = ''; if($charSet == '') { $charSet = $this->CharSet; @@ -1272,7 +1444,7 @@ class PHPMailer { $encoding = $this->Encoding; } $result .= $this->TextLine('--' . $boundary); - $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet); + $result .= sprintf("Content-Type: %s; charset=\"%s\"", $contentType, $charSet); $result .= $this->LE; $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding); $result .= $this->LE; @@ -1282,31 +1454,25 @@ class PHPMailer { /** * Returns the end of a message boundary. - * @access private + * @access protected + * @return string */ - private function EndBoundary($boundary) { + protected function EndBoundary($boundary) { return $this->LE . '--' . $boundary . '--' . $this->LE; } /** * Sets the message type. - * @access private + * @access protected * @return void */ - private function SetMessageType() { - if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) { - $this->message_type = 'plain'; - } else { - if(count($this->attachment) > 0) { - $this->message_type = 'attachments'; - } - if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) { - $this->message_type = 'alt'; - } - if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) { - $this->message_type = 'alt_attachments'; - } - } + protected function SetMessageType() { + $this->message_type = array(); + if($this->AlternativeExists()) $this->message_type[] = "alt"; + if($this->InlineImageExists()) $this->message_type[] = "inline"; + if($this->AttachmentExists()) $this->message_type[] = "attach"; + $this->message_type = implode("_", $this->message_type); + if($this->message_type == "") $this->message_type = "plain"; } /** @@ -1367,7 +1533,9 @@ class PHPMailer { if ($this->exceptions) { throw $e; } - echo $e->getMessage()."\n"; + if ($this->SMTPDebug) { + echo $e->getMessage()."\n"; + } if ( $e->getCode() == self::STOP_CRITICAL ) { return false; } @@ -1386,10 +1554,10 @@ class PHPMailer { /** * Attaches all fs, string, and binary attachments to the message. * Returns an empty string on failure. - * @access private + * @access protected * @return string */ - private function AttachAll() { + protected function AttachAll($disposition_type, $boundary) { // Return text of body $mime = array(); $cidUniq = array(); @@ -1397,54 +1565,58 @@ class PHPMailer { // Add all attachments foreach ($this->attachment as $attachment) { - // Check for string attachment - $bString = $attachment[5]; - if ($bString) { - $string = $attachment[0]; - } else { - $path = $attachment[0]; - } + // CHECK IF IT IS A VALID DISPOSITION_FILTER + if($attachment[6] == $disposition_type) { + // Check for string attachment + $bString = $attachment[5]; + if ($bString) { + $string = $attachment[0]; + } else { + $path = $attachment[0]; + } - if (in_array($attachment[0], $incl)) { continue; } - $filename = $attachment[1]; - $name = $attachment[2]; - $encoding = $attachment[3]; - $type = $attachment[4]; - $disposition = $attachment[6]; - $cid = $attachment[7]; - $incl[] = $attachment[0]; - if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } - $cidUniq[$cid] = true; - - $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); - $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); - $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); - - if($disposition == 'inline') { - $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); - } + $inclhash = md5(serialize($attachment)); + if (in_array($inclhash, $incl)) { continue; } + $incl[] = $inclhash; + $filename = $attachment[1]; + $name = $attachment[2]; + $encoding = $attachment[3]; + $type = $attachment[4]; + $disposition = $attachment[6]; + $cid = $attachment[7]; + if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } + $cidUniq[$cid] = true; + + $mime[] = sprintf("--%s%s", $boundary, $this->LE); + $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); + $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); + + if($disposition == 'inline') { + $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); + } - $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); + $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); - // Encode as string attachment - if($bString) { - $mime[] = $this->EncodeString($string, $encoding); - if($this->IsError()) { - return ''; - } - $mime[] = $this->LE.$this->LE; - } else { - $mime[] = $this->EncodeFile($path, $encoding); - if($this->IsError()) { - return ''; + // Encode as string attachment + if($bString) { + $mime[] = $this->EncodeString($string, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } else { + $mime[] = $this->EncodeFile($path, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; } - $mime[] = $this->LE.$this->LE; } } - $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); + $mime[] = sprintf("--%s--%s", $boundary, $this->LE); - return join('', $mime); + return implode("", $mime); } /** @@ -1453,10 +1625,10 @@ class PHPMailer { * @param string $path The full path to the file * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' * @see EncodeFile() - * @access private + * @access protected * @return string */ - private function EncodeFile($path, $encoding = 'base64') { + protected function EncodeFile($path, $encoding = 'base64') { try { if (!is_readable($path)) { throw new phpmailerException($this->Lang('file_open') . $path, self::STOP_CONTINUE); @@ -1466,13 +1638,23 @@ class PHPMailer { return false; } } - if (PHP_VERSION < 6) { - $magic_quotes = get_magic_quotes_runtime(); - set_magic_quotes_runtime(0); - } + $magic_quotes = get_magic_quotes_runtime(); + if ($magic_quotes) { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + set_magic_quotes_runtime(0); + } else { + ini_set('magic_quotes_runtime', 0); + } + } $file_buffer = file_get_contents($path); $file_buffer = $this->EncodeString($file_buffer, $encoding); - if (PHP_VERSION < 6) { set_magic_quotes_runtime($magic_quotes); } + if ($magic_quotes) { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + set_magic_quotes_runtime($magic_quotes); + } else { + ini_set('magic_quotes_runtime', $magic_quotes); + } + } return $file_buffer; } catch (Exception $e) { $this->SetError($e->getMessage()); @@ -1488,7 +1670,7 @@ class PHPMailer { * @access public * @return string */ - public function EncodeString ($str, $encoding = 'base64') { + public function EncodeString($str, $encoding = 'base64') { $encoded = ''; switch(strtolower($encoding)) { case 'base64': @@ -1637,7 +1819,7 @@ class PHPMailer { * @return string */ public function EncodeQPphp( $input = '', $line_max = 76, $space_conv = false) { - $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); + $hex = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); $lines = preg_split('/(?:\r\n|\r|\n)/', $input); $eol = "\r\n"; $escape = '='; @@ -1718,7 +1900,7 @@ class PHPMailer { * @access public * @return string */ - public function EncodeQ ($str, $position = 'text') { + public function EncodeQ($str, $position = 'text') { // There should not be any EOL in the string $encoded = preg_replace('/[\r\n]*/', '', $str); @@ -1733,7 +1915,7 @@ class PHPMailer { // Replace every high ascii, control =, ? and _ characters //TODO using /e (equivalent to eval()) is probably not a good idea $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', - "'='.sprintf('%02X', ord('\\1'))", $encoded); + "'='.sprintf('%02X', ord(stripslashes('\\1')))", $encoded); break; } @@ -1807,6 +1989,20 @@ class PHPMailer { return true; } + public function AddStringEmbeddedImage($string, $cid, $filename = '', $encoding = 'base64', $type = 'application/octet-stream') { + // Append to $attachment array + $this->attachment[] = array( + 0 => $string, + 1 => $filename, + 2 => basename($filename), + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => 'inline', + 7 => $cid + ); + } + /** * Returns true if an inline attachment is present. * @access public @@ -1821,6 +2017,19 @@ class PHPMailer { return false; } + public function AttachmentExists() { + foreach($this->attachment as $attachment) { + if ($attachment[6] == 'attachment') { + return true; + } + } + return false; + } + + public function AlternativeExists() { + return strlen($this->AltBody)>0; + } + ///////////////////////////////////////////////// // CLASS METHODS, MESSAGE RESET ///////////////////////////////////////////////// @@ -1933,10 +2142,10 @@ class PHPMailer { /** * Returns the server hostname or 'localhost.localdomain' if unknown. - * @access private + * @access protected * @return string */ - private function ServerHostname() { + protected function ServerHostname() { if (!empty($this->Hostname)) { $result = $this->Hostname; } elseif (isset($_SERVER['SERVER_NAME'])) { @@ -1950,10 +2159,10 @@ class PHPMailer { /** * Returns a message in the appropriate language. - * @access private + * @access protected * @return string */ - private function Lang($key) { + protected function Lang($key) { if(count($this->language) < 1) { $this->SetLanguage('en'); // set the default language } @@ -1976,10 +2185,10 @@ class PHPMailer { /** * Changes every end of line from CR or LF to CRLF. - * @access private + * @access public * @return string */ - private function FixEOL($str) { + public function FixEOL($str) { $str = str_replace("\r\n", "\n", $str); $str = str_replace("\r", "\n", $str); $str = str_replace("\n", $this->LE, $str); @@ -2001,34 +2210,37 @@ class PHPMailer { * @return $message */ public function MsgHTML($message, $basedir = '') { - preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images); + preg_match_all("/(src|background)=[\"'](.*)[\"']/Ui", $message, $images); if(isset($images[2])) { foreach($images[2] as $i => $url) { // do not change urls for absolute images (thanks to corvuscorax) - if (!preg_match('#^[A-z]+://#',$url)) { + if (!preg_match('#^[A-z]+://#', $url)) { $filename = basename($url); $directory = dirname($url); - ($directory == '.')?$directory='':''; + ($directory == '.') ? $directory='': ''; $cid = 'cid:' . md5($filename); $ext = pathinfo($filename, PATHINFO_EXTENSION); $mimeType = self::_mime_types($ext); - if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; } - if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; } - if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) { - $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message); + if ( strlen($basedir) > 1 && substr($basedir, -1) != '/') { $basedir .= '/'; } + if ( strlen($directory) > 1 && substr($directory, -1) != '/') { $directory .= '/'; } + if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64', $mimeType) ) { + $message = preg_replace("/".$images[1][$i]."=[\"']".preg_quote($url, '/')."[\"']/Ui", $images[1][$i]."=\"".$cid."\"", $message); } } } } $this->IsHTML(true); $this->Body = $message; - $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message))); - if (!empty($textMsg) && empty($this->AltBody)) { - $this->AltBody = html_entity_decode($textMsg); - } + if (empty($this->AltBody)) { + $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s', '', $message))); + if (!empty($textMsg)) { + $this->AltBody = html_entity_decode($textMsg, ENT_QUOTES, $this->CharSet); + } + } if (empty($this->AltBody)) { $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n"; } + return $message; } /** @@ -2192,14 +2404,14 @@ class PHPMailer { * @param string $key_pass Password for private key */ public function DKIM_QP($txt) { - $tmp=""; - $line=""; - for ($i=0;$i<strlen($txt);$i++) { - $ord=ord($txt[$i]); + $tmp = ''; + $line = ''; + for ($i = 0; $i < strlen($txt); $i++) { + $ord = ord($txt[$i]); if ( ((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E)) ) { - $line.=$txt[$i]; + $line .= $txt[$i]; } else { - $line.="=".sprintf("%02X",$ord); + $line .= "=".sprintf("%02X", $ord); } } return $line; @@ -2213,8 +2425,8 @@ class PHPMailer { */ public function DKIM_Sign($s) { $privKeyStr = file_get_contents($this->DKIM_private); - if ($this->DKIM_passphrase!='') { - $privKey = openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase); + if ($this->DKIM_passphrase != '') { + $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); } else { $privKey = $privKeyStr; } @@ -2230,15 +2442,15 @@ class PHPMailer { * @param string $s Header */ public function DKIM_HeaderC($s) { - $s=preg_replace("/\r\n\s+/"," ",$s); - $lines=explode("\r\n",$s); - foreach ($lines as $key=>$line) { - list($heading,$value)=explode(":",$line,2); - $heading=strtolower($heading); - $value=preg_replace("/\s+/"," ",$value) ; // Compress useless spaces - $lines[$key]=$heading.":".trim($value) ; // Don't forget to remove WSP around the value - } - $s=implode("\r\n",$lines); + $s = preg_replace("/\r\n\s+/", " ", $s); + $lines = explode("\r\n", $s); + foreach ($lines as $key => $line) { + list($heading, $value) = explode(":", $line, 2); + $heading = strtolower($heading); + $value = preg_replace("/\s+/", " ", $value) ; // Compress useless spaces + $lines[$key] = $heading.":".trim($value) ; // Don't forget to remove WSP around the value + } + $s = implode("\r\n", $lines); return $s; } @@ -2251,11 +2463,11 @@ class PHPMailer { public function DKIM_BodyC($body) { if ($body == '') return "\r\n"; // stabilize line endings - $body=str_replace("\r\n","\n",$body); - $body=str_replace("\n","\r\n",$body); + $body = str_replace("\r\n", "\n", $body); + $body = str_replace("\n", "\r\n", $body); // END stabilize line endings - while (substr($body,strlen($body)-4,4) == "\r\n\r\n") { - $body=substr($body,0,strlen($body)-2); + while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") { + $body = substr($body, 0, strlen($body) - 2); } return $body; } @@ -2268,23 +2480,23 @@ class PHPMailer { * @param string $subject Subject * @param string $body Body */ - public function DKIM_Add($headers_line,$subject,$body) { + public function DKIM_Add($headers_line, $subject, $body) { $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body $DKIMquery = 'dns/txt'; // Query method $DKIMtime = time() ; // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) $subject_header = "Subject: $subject"; - $headers = explode("\r\n",$headers_line); + $headers = explode($this->LE, $headers_line); foreach($headers as $header) { - if (strpos($header,'From:') === 0) { - $from_header=$header; - } elseif (strpos($header,'To:') === 0) { - $to_header=$header; + if (strpos($header, 'From:') === 0) { + $from_header = $header; + } elseif (strpos($header, 'To:') === 0) { + $to_header = $header; } } - $from = str_replace('|','=7C',$this->DKIM_QP($from_header)); - $to = str_replace('|','=7C',$this->DKIM_QP($to_header)); - $subject = str_replace('|','=7C',$this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable + $from = str_replace('|', '=7C', $this->DKIM_QP($from_header)); + $to = str_replace('|', '=7C', $this->DKIM_QP($to_header)); + $subject = str_replace('|', '=7C', $this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable $body = $this->DKIM_BodyC($body); $DKIMlen = strlen($body) ; // Length of body $DKIMb64 = base64_encode(pack("H*", sha1($body))) ; // Base64 of packed binary SHA-1 hash of body @@ -2303,10 +2515,10 @@ class PHPMailer { return "X-PHPMAILER-DKIM: phpmailer.worxware.com\r\n".$dkimhdrs.$signed."\r\n"; } - protected function doCallback($isSent,$to,$cc,$bcc,$subject,$body) { + protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body) { if (!empty($this->action_function) && function_exists($this->action_function)) { - $params = array($isSent,$to,$cc,$bcc,$subject,$body); - call_user_func_array($this->action_function,$params); + $params = array($isSent, $to, $cc, $bcc, $subject, $body); + call_user_func_array($this->action_function, $params); } } } @@ -2317,4 +2529,4 @@ class phpmailerException extends Exception { return $errorMsg; } } -?> \ No newline at end of file +?> diff --git a/wp-includes/class-simplepie.php b/wp-includes/class-simplepie.php index 275033a82..6128495d8 100644 --- a/wp-includes/class-simplepie.php +++ b/wp-includes/class-simplepie.php @@ -1,12 +1,12 @@ <?php -if ( !class_exists( 'SimplePie' ) ) : +if ( ! class_exists( 'SimplePie' ) ) : /** * SimplePie * * A PHP-Based RSS and Atom Feed Framework. * Takes the hard work out of managing a complete RSS/Atom solution. * - * Copyright (c) 2004-2009, Ryan Parman and Geoffrey Sneddon + * Copyright (c) 2004-2011, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are @@ -34,10 +34,11 @@ if ( !class_exists( 'SimplePie' ) ) : * POSSIBILITY OF SUCH DAMAGE. * * @package SimplePie - * @version 1.2 - * @copyright 2004-2009 Ryan Parman, Geoffrey Sneddon + * @version 1.2.1 + * @copyright 2004-2011 Ryan Parman, Geoffrey Sneddon, Ryan McCue * @author Ryan Parman * @author Geoffrey Sneddon + * @author Ryan McCue * @link http://simplepie.org/ SimplePie * @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums * @license http://www.opensource.org/licenses/bsd-license.php BSD License @@ -52,12 +53,12 @@ define('SIMPLEPIE_NAME', 'SimplePie'); /** * SimplePie Version */ -define('SIMPLEPIE_VERSION', '1.2'); +define('SIMPLEPIE_VERSION', '1.2.1'); /** * SimplePie Build */ -define('SIMPLEPIE_BUILD', '20090627192103'); +define('SIMPLEPIE_BUILD', '20111015034325'); /** * SimplePie Website URL @@ -1672,7 +1673,7 @@ class SimplePie $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD); if (!$cache->save($this)) { - trigger_error("$this->cache_location is not writeable", E_USER_WARNING); + trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); } $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'); } @@ -1680,7 +1681,7 @@ class SimplePie } else { - $this->error = "A feed could not be found at $this->feed_url"; + $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed."; SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); return false; } @@ -1777,27 +1778,27 @@ class SimplePie // Cache the file if caching is enabled if ($cache && !$cache->save($this)) { - trigger_error("$cache->name is not writeable", E_USER_WARNING); + trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); } return true; } else { - $this->error = "A feed could not be found at $this->feed_url"; + $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed."; SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); return false; } } } } - if(isset($parser)) + if (isset($parser)) { // We have an error, just set SimplePie_Misc::error to it and quit - $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); + $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); } else { - $this->error = 'The data could not be converted to UTF-8'; + $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.'; } SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); return false; @@ -1831,7 +1832,7 @@ class SimplePie } /** - * Return the error message for the occurred error + * Return the error message for the occured error * * @access public * @return string Error message @@ -1984,7 +1985,7 @@ class SimplePie } else { - trigger_error("$cache->name is not writeable", E_USER_WARNING); + trigger_error("$cache->name is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI); } } @@ -2774,11 +2775,12 @@ class SimplePie function get_latitude() { + if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat')) { return (float) $return[0]['data']; } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) { return (float) $match[1]; } @@ -2798,7 +2800,7 @@ class SimplePie { return (float) $return[0]['data']; } - elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) { return (float) $match[2]; } @@ -3278,6 +3280,11 @@ class SimplePie_Item { return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } + elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) + { + return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML); + } + elseif (!$description_only) { return $this->get_content(true); @@ -3642,7 +3649,7 @@ class SimplePie_Item { return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT); } - elseif (($date = $this->get_date('U')) !== null) + elseif (($date = $this->get_date('U')) !== null && $date !== false) { return strftime($date_format, $date); } @@ -4428,621 +4435,624 @@ class SimplePie_Item // If we have media:group tags, loop through them. foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group) { - // If we have media:content tags, loop through them. - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) - { - if (isset($content['attribs']['']['url'])) - { - // Attributes - $bitrate = null; - $channels = null; - $duration = null; - $expression = null; - $framerate = null; - $height = null; - $javascript = null; - $lang = null; - $length = null; - $medium = null; - $samplingrate = null; - $type = null; - $url = null; - $width = null; - - // Elements - $captions = null; - $categories = null; - $copyrights = null; - $credits = null; - $description = null; - $hashes = null; - $keywords = null; - $player = null; - $ratings = null; - $restrictions = null; - $thumbnails = null; - $title = null; - - // Start checking the attributes of media:content - if (isset($content['attribs']['']['bitrate'])) - { - $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['channels'])) - { - $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['duration'])) - { - $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $duration = $duration_parent; - } - if (isset($content['attribs']['']['expression'])) - { - $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['framerate'])) - { - $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['height'])) - { - $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['lang'])) - { - $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['fileSize'])) - { - $length = ceil($content['attribs']['']['fileSize']); - } - if (isset($content['attribs']['']['medium'])) - { - $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['samplingrate'])) - { - $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['type'])) - { - $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($content['attribs']['']['width'])) - { - $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - - // Checking the other optional media: elements. Priority: media:content, media:group, item, channel - - // CAPTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'])) + { + // If we have media:content tags, loop through them. + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) + { + if (isset($content['attribs']['']['url'])) + { + // Attributes + $bitrate = null; + $channels = null; + $duration = null; + $expression = null; + $framerate = null; + $height = null; + $javascript = null; + $lang = null; + $length = null; + $medium = null; + $samplingrate = null; + $type = null; + $url = null; + $width = null; + + // Elements + $captions = null; + $categories = null; + $copyrights = null; + $credits = null; + $description = null; + $hashes = null; + $keywords = null; + $player = null; + $ratings = null; + $restrictions = null; + $thumbnails = null; + $title = null; + + // Start checking the attributes of media:content + if (isset($content['attribs']['']['bitrate'])) { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT); } - if (is_array($captions)) + if (isset($content['attribs']['']['channels'])) { - $captions = array_values(SimplePie_Misc::array_unique($captions)); + $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT); } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) + if (isset($content['attribs']['']['duration'])) { - $caption_type = null; - $caption_lang = null; - $caption_startTime = null; - $caption_endTime = null; - $caption_text = null; - if (isset($caption['attribs']['']['type'])) - { - $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['lang'])) - { - $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['start'])) - { - $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['attribs']['']['end'])) - { - $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($caption['data'])) - { - $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); + $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT); } - if (is_array($captions)) + else { - $captions = array_values(SimplePie_Misc::array_unique($captions)); + $duration = $duration_parent; } - } - else - { - $captions = $captions_parent; - } - - // CATEGORIES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + if (isset($content['attribs']['']['expression'])) { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] =& new $this->feed->category_class($term, $scheme, $label); + $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT); } - } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) - { - foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) + if (isset($content['attribs']['']['framerate'])) { - $term = null; - $scheme = null; - $label = null; - if (isset($category['data'])) - { - $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($category['attribs']['']['scheme'])) - { - $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $scheme = 'http://search.yahoo.com/mrss/category_schema'; - } - if (isset($category['attribs']['']['label'])) - { - $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); - } - $categories[] =& new $this->feed->category_class($term, $scheme, $label); + $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT); } - } - if (is_array($categories) && is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); - } - elseif (is_array($categories)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories)); - } - elseif (is_array($categories_parent)) - { - $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); - } - - // COPYRIGHTS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + if (isset($content['attribs']['']['height'])) { - $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT); } - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + if (isset($content['attribs']['']['lang'])) { - $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); } - $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) - { - $copyright_url = null; - $copyright_label = null; - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) + if (isset($content['attribs']['']['fileSize'])) { - $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); + $length = ceil($content['attribs']['']['fileSize']); } - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + if (isset($content['attribs']['']['medium'])) { - $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT); } - $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); - } - else - { - $copyrights = $copyrights_parent; - } + if (isset($content['attribs']['']['samplingrate'])) + { + $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['type'])) + { + $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($content['attribs']['']['width'])) + { + $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - // CREDITS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + // Checking the other optional media: elements. Priority: media:content, media:group, item, channel + + // CAPTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); } - if (isset($credit['attribs']['']['scheme'])) + if (is_array($captions)) { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + $captions = array_values(SimplePie_Misc::array_unique($captions)); } - else + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption) { - $credit_scheme = 'urn:ebu'; + $caption_type = null; + $caption_lang = null; + $caption_startTime = null; + $caption_endTime = null; + $caption_text = null; + if (isset($caption['attribs']['']['type'])) + { + $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['lang'])) + { + $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['start'])) + { + $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['attribs']['']['end'])) + { + $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($caption['data'])) + { + $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text); } - if (isset($credit['data'])) + if (is_array($captions)) { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $captions = array_values(SimplePie_Misc::array_unique($captions)); } - $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); } - if (is_array($credits)) + else { - $credits = array_values(SimplePie_Misc::array_unique($credits)); + $captions = $captions_parent; } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) + + // CATEGORIES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) { - $credit_role = null; - $credit_scheme = null; - $credit_name = null; - if (isset($credit['attribs']['']['role'])) + foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) { - $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); - } - if (isset($credit['attribs']['']['scheme'])) - { - $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $credit_scheme = 'urn:ebu'; + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); } - if (isset($credit['data'])) + } + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'])) + { + foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category) { - $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $term = null; + $scheme = null; + $label = null; + if (isset($category['data'])) + { + $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($category['attribs']['']['scheme'])) + { + $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $scheme = 'http://search.yahoo.com/mrss/category_schema'; + } + if (isset($category['attribs']['']['label'])) + { + $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $categories[] =& new $this->feed->category_class($term, $scheme, $label); } - $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); } - if (is_array($credits)) + if (is_array($categories) && is_array($categories_parent)) { - $credits = array_values(SimplePie_Misc::array_unique($credits)); + $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent))); + } + elseif (is_array($categories)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories)); + } + elseif (is_array($categories_parent)) + { + $categories = array_values(SimplePie_Misc::array_unique($categories_parent)); } - } - else - { - $credits = $credits_parent; - } - - // DESCRIPTION - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) - { - $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $description = $description_parent; - } - // HASHES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + // COPYRIGHTS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) { - $value = null; - $algo = null; - if (isset($hash['data'])) + $copyright_url = null; + $copyright_label = null; + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); } - if (isset($hash['attribs']['']['algo'])) + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - else + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'])) + { + $copyright_url = null; + $copyright_label = null; + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) { - $algo = 'md5'; + $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT); } - $hashes[] = $algo.':'.$value; + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'])) + { + $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label); } - if (is_array($hashes)) + else { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + $copyrights = $copyrights_parent; } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + + // CREDITS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) { - $value = null; - $algo = null; - if (isset($hash['data'])) + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) { - $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); } - if (isset($hash['attribs']['']['algo'])) + if (is_array($credits)) { - $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + $credits = array_values(SimplePie_Misc::array_unique($credits)); } - else + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit) { - $algo = 'md5'; + $credit_role = null; + $credit_scheme = null; + $credit_name = null; + if (isset($credit['attribs']['']['role'])) + { + $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($credit['attribs']['']['scheme'])) + { + $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $credit_scheme = 'urn:ebu'; + } + if (isset($credit['data'])) + { + $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name); + } + if (is_array($credits)) + { + $credits = array_values(SimplePie_Misc::array_unique($credits)); } - $hashes[] = $algo.':'.$value; } - if (is_array($hashes)) + else { - $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + $credits = $credits_parent; } - } - else - { - $hashes = $hashes_parent; - } - // KEYWORDS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + // DESCRIPTION + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) { - $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) - { - $keywords[] = trim($word); - } - unset($temp); + $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - if (is_array($keywords)) + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'])) { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); + $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) - { - if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) + else { - $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); - foreach ($temp as $word) + $description = $description_parent; + } + + // HASHES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) { - $keywords[] = trim($word); + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); } - unset($temp); } - if (is_array($keywords)) + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'])) { - $keywords = array_values(SimplePie_Misc::array_unique($keywords)); - } - } - else - { - $keywords = $keywords_parent; - } - - // PLAYER - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) - { - $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - else - { - $player = $player_parent; - } + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash) + { + $value = null; + $algo = null; + if (isset($hash['data'])) + { + $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($hash['attribs']['']['algo'])) + { + $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $algo = 'md5'; + } + $hashes[] = $algo.':'.$value; + } + if (is_array($hashes)) + { + $hashes = array_values(SimplePie_Misc::array_unique($hashes)); + } + } + else + { + $hashes = $hashes_parent; + } - // RATINGS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + // KEYWORDS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); } - else + if (is_array($keywords)) { - $rating_scheme = 'urn:simple'; + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); } - if (isset($rating['data'])) + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'])) + { + if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'])) { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); + foreach ($temp as $word) + { + $keywords[] = trim($word); + } + unset($temp); + } + if (is_array($keywords)) + { + $keywords = array_values(SimplePie_Misc::array_unique($keywords)); } - $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); } - if (is_array($ratings)) + else { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + $keywords = $keywords_parent; } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) + + // PLAYER + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) { - $rating_scheme = null; - $rating_value = null; - if (isset($rating['attribs']['']['scheme'])) + $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) + { + $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + else + { + $player = $player_parent; + } + + // RATINGS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) { - $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); } - else + if (is_array($ratings)) { - $rating_scheme = 'urn:simple'; + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); } - if (isset($rating['data'])) + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating) { - $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $rating_scheme = null; + $rating_value = null; + if (isset($rating['attribs']['']['scheme'])) + { + $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT); + } + else + { + $rating_scheme = 'urn:simple'; + } + if (isset($rating['data'])) + { + $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); + } + if (is_array($ratings)) + { + $ratings = array_values(SimplePie_Misc::array_unique($ratings)); } - $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value); } - if (is_array($ratings)) + else { - $ratings = array_values(SimplePie_Misc::array_unique($ratings)); + $ratings = $ratings_parent; } - } - else - { - $ratings = $ratings_parent; - } - // RESTRICTIONS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + // RESTRICTIONS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); } - if (isset($restriction['attribs']['']['type'])) + if (is_array($restrictions)) { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); } - if (isset($restriction['data'])) + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $restriction_relationship = null; + $restriction_type = null; + $restriction_value = null; + if (isset($restriction['attribs']['']['relationship'])) + { + $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['attribs']['']['type'])) + { + $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + } + if (isset($restriction['data'])) + { + $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + } + $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); + } + if (is_array($restrictions)) + { + $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); } - $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); } - if (is_array($restrictions)) + else { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + $restrictions = $restrictions_parent; } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction) + + // THUMBNAILS + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) { - $restriction_relationship = null; - $restriction_type = null; - $restriction_value = null; - if (isset($restriction['attribs']['']['relationship'])) + foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) { - $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT); + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); } - if (isset($restriction['attribs']['']['type'])) + if (is_array($thumbnails)) { - $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT); + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); } - if (isset($restriction['data'])) + } + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) + { + foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) { - $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT); + $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } + if (is_array($thumbnails)) + { + $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); } - $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value); } - if (is_array($restrictions)) + else { - $restrictions = array_values(SimplePie_Misc::array_unique($restrictions)); + $thumbnails = $thumbnails_parent; } - } - else - { - $restrictions = $restrictions_parent; - } - // THUMBNAILS - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + // TITLES + if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - } - if (is_array($thumbnails)) - { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'])) - { - foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) + elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) { - $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); } - if (is_array($thumbnails)) + else { - $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails)); + $title = $title_parent; } - } - else - { - $thumbnails = $thumbnails_parent; - } - // TITLES - if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'])) - { - $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); - } - else - { - $title = $title_parent; + $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); } - - $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width); } } } @@ -5052,7 +5062,7 @@ class SimplePie_Item { foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content) { - if (isset($content['attribs']['']['url'])) + if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'])) { // Attributes $bitrate = null; @@ -5137,8 +5147,10 @@ class SimplePie_Item { $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT); } - $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); - + if (isset($content['attribs']['']['url'])) + { + $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI); + } // Checking the other optional media: elements. Priority: media:content, media:group, item, channel // CAPTIONS @@ -5580,7 +5592,7 @@ class SimplePie_Item { return (float) $return[0]['data']; } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) { return (float) $match[1]; } @@ -5600,7 +5612,7 @@ class SimplePie_Item { return (float) $return[0]['data']; } - elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) { return (float) $match[2]; } @@ -6223,7 +6235,7 @@ class SimplePie_Source { return (float) $return[0]['data']; } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) { return (float) $match[1]; } @@ -6243,7 +6255,7 @@ class SimplePie_Source { return (float) $return[0]['data']; } - elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match)) + elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) { return (float) $match[2]; } @@ -7727,16 +7739,17 @@ class SimplePie_File { $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; $url_parts = parse_url($url); + $socket_host = $url_parts['host']; if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') { - $url_parts['host'] = "ssl://$url_parts[host]"; + $socket_host = "ssl://$url_parts[host]"; $url_parts['port'] = 443; } if (!isset($url_parts['port'])) { $url_parts['port'] = 80; } - $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout); + $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout); if (!$fp) { $this->error = 'fsockopen error: ' . $errstr; @@ -8482,7 +8495,7 @@ class SimplePie_gzdecode // Get the length of the extra field $len = current(unpack('v', substr($this->compressed_data, $this->position, 2))); - $position += 2; + $this->position += 2; // Check the length of the string is still valid $this->min_compressed_size += $len + 4; @@ -9234,8 +9247,25 @@ class SimplePie_Misc $note = 'Unknown Error'; break; } - error_log("$note: $message in $file on line $line", 0); + + $log_error = true; + if (!function_exists('error_log')) + { + $log_error = false; + } + + $log_file = @ini_get('error_log'); + if (!empty($log_file) && ('syslog' != $log_file) && !@is_writable($log_file)) + { + $log_error = false; + } + + if ($log_error) + { + @error_log("$note: $message in $file on line $line", 0); + } } + return $message; } @@ -9432,7 +9462,7 @@ class SimplePie_Misc return SimplePie_Misc::windows_1252_to_utf8($data); } // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported). - elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && ($return = @mb_convert_encoding($data, $output, $input))) + elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && in_array($input, mb_list_encodings()) && ($return = @mb_convert_encoding($data, $output, $input))) { return $return; } @@ -9448,6 +9478,17 @@ class SimplePie_Misc } } + /** + * Normalize an encoding name + * + * This is automatically generated by create.php + * + * To generate it, run `php create.php` on the command line, and copy the + * output to replace this function. + * + * @param string $charset Character set to standardise + * @return string Standardised name + */ function encoding($charset) { // Normalization from UTS #22 @@ -9481,7 +9522,6 @@ class SimplePie_Misc case 'big5': case 'csbig5': - case 'xxbig5': return 'Big5'; case 'big5hkscs': @@ -9637,14 +9677,14 @@ class SimplePie_Misc case 'isoir85': return 'ES2'; - case 'cseucfixwidjapanese': - case 'extendedunixcodefixedwidthforjapanese': - return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; - case 'cseucpkdfmtjapanese': case 'eucjp': case 'extendedunixcodepackedformatforjapanese': - return 'Extended_UNIX_Code_Packed_Format_for_Japanese'; + return 'EUC-JP'; + + case 'cseucfixwidjapanese': + case 'extendedunixcodefixedwidthforjapanese': + return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; case 'gb18030': return 'GB18030'; @@ -9695,107 +9735,33 @@ class SimplePie_Misc return 'HP-DeskTop'; case 'cshplegal': - case 'hplegal': - return 'HP-Legal'; - - case 'cshpmath8': - case 'hpmath8': - return 'HP-Math8'; - - case 'cshppifont': - case 'hppifont': - return 'HP-Pi-font'; - - case 'cshproman8': - case 'hproman8': - case 'r8': - case 'roman8': - return 'hp-roman8'; - - case 'hzgb2312': - return 'HZ-GB-2312'; - - case 'csibmsymbols': - case 'ibmsymbols': - return 'IBM-Symbols'; - - case 'csibmthai': - case 'ibmthai': - return 'IBM-Thai'; - - case 'ccsid858': - case 'cp858': - case 'ibm858': - case 'pcmultilingual850euro': - return 'IBM00858'; - - case 'ccsid924': - case 'cp924': - case 'ebcdiclatin9euro': - case 'ibm924': - return 'IBM00924'; - - case 'ccsid1140': - case 'cp1140': - case 'ebcdicus37euro': - case 'ibm1140': - return 'IBM01140'; - - case 'ccsid1141': - case 'cp1141': - case 'ebcdicde273euro': - case 'ibm1141': - return 'IBM01141'; - - case 'ccsid1142': - case 'cp1142': - case 'ebcdicdk277euro': - case 'ebcdicno277euro': - case 'ibm1142': - return 'IBM01142'; - - case 'ccsid1143': - case 'cp1143': - case 'ebcdicfi278euro': - case 'ebcdicse278euro': - case 'ibm1143': - return 'IBM01143'; + case 'hplegal': + return 'HP-Legal'; - case 'ccsid1144': - case 'cp1144': - case 'ebcdicit280euro': - case 'ibm1144': - return 'IBM01144'; + case 'cshpmath8': + case 'hpmath8': + return 'HP-Math8'; - case 'ccsid1145': - case 'cp1145': - case 'ebcdices284euro': - case 'ibm1145': - return 'IBM01145'; + case 'cshppifont': + case 'hppifont': + return 'HP-Pi-font'; - case 'ccsid1146': - case 'cp1146': - case 'ebcdicgb285euro': - case 'ibm1146': - return 'IBM01146'; + case 'cshproman8': + case 'hproman8': + case 'r8': + case 'roman8': + return 'hp-roman8'; - case 'ccsid1147': - case 'cp1147': - case 'ebcdicfr297euro': - case 'ibm1147': - return 'IBM01147'; + case 'hzgb2312': + return 'HZ-GB-2312'; - case 'ccsid1148': - case 'cp1148': - case 'ebcdicinternational500euro': - case 'ibm1148': - return 'IBM01148'; + case 'csibmsymbols': + case 'ibmsymbols': + return 'IBM-Symbols'; - case 'ccsid1149': - case 'cp1149': - case 'ebcdicis871euro': - case 'ibm1149': - return 'IBM01149'; + case 'csibmthai': + case 'ibmthai': + return 'IBM-Thai'; case 'cp37': case 'csibm37': @@ -9944,6 +9910,12 @@ class SimplePie_Misc case 'ibm857': return 'IBM857'; + case 'ccsid858': + case 'cp858': + case 'ibm858': + case 'pcmultilingual850euro': + return 'IBM00858'; + case '860': case 'cp860': case 'csibm860': @@ -10046,6 +10018,12 @@ class SimplePie_Misc case 'ibm918': return 'IBM918'; + case 'ccsid924': + case 'cp924': + case 'ebcdiclatin9euro': + case 'ibm924': + return 'IBM00924'; + case 'cp1026': case 'csibm1026': case 'ibm1026': @@ -10054,6 +10032,68 @@ class SimplePie_Misc case 'ibm1047': return 'IBM1047'; + case 'ccsid1140': + case 'cp1140': + case 'ebcdicus37euro': + case 'ibm1140': + return 'IBM01140'; + + case 'ccsid1141': + case 'cp1141': + case 'ebcdicde273euro': + case 'ibm1141': + return 'IBM01141'; + + case 'ccsid1142': + case 'cp1142': + case 'ebcdicdk277euro': + case 'ebcdicno277euro': + case 'ibm1142': + return 'IBM01142'; + + case 'ccsid1143': + case 'cp1143': + case 'ebcdicfi278euro': + case 'ebcdicse278euro': + case 'ibm1143': + return 'IBM01143'; + + case 'ccsid1144': + case 'cp1144': + case 'ebcdicit280euro': + case 'ibm1144': + return 'IBM01144'; + + case 'ccsid1145': + case 'cp1145': + case 'ebcdices284euro': + case 'ibm1145': + return 'IBM01145'; + + case 'ccsid1146': + case 'cp1146': + case 'ebcdicgb285euro': + case 'ibm1146': + return 'IBM01146'; + + case 'ccsid1147': + case 'cp1147': + case 'ebcdicfr297euro': + case 'ibm1147': + return 'IBM01147'; + + case 'ccsid1148': + case 'cp1148': + case 'ebcdicinternational500euro': + case 'ibm1148': + return 'IBM01148'; + + case 'ccsid1149': + case 'cp1149': + case 'ebcdicis871euro': + case 'ibm1149': + return 'IBM01149'; + case 'csiso143iecp271': case 'iecp271': case 'isoir143': @@ -10596,11 +10636,6 @@ class SimplePie_Misc case 'sen850200c': return 'SEN_850200_C'; - case 'csshiftjis': - case 'mskanji': - case 'shiftjis': - return 'Shift_JIS'; - case 'csiso102t617bit': case 'isoir102': case 't617bit': @@ -10699,7 +10734,10 @@ class SimplePie_Misc case 'viscii': return 'VISCII'; + case 'csshiftjis': case 'cswindows31j': + case 'mskanji': + case 'shiftjis': case 'windows31j': return 'Windows-31J'; @@ -11360,6 +11398,58 @@ function embed_wmedia(width, height, link) { } <?php } + + + + /** + * Format debugging information + */ + function debug($sp) + { + $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n"; + $info .= 'PHP ' . PHP_VERSION . "\n"; + if ($sp->error() !== null) + { + $info .= 'Error occurred: ' . $sp->error() . "\n"; + } + else + { + $info .= "No error found.\n"; + } + $info .= "Extensions:\n"; + $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml'); + foreach ($extensions as $ext) + { + if (extension_loaded($ext)) + { + $info .= " $ext loaded\n"; + switch ($ext) + { + case 'pcre': + $info .= ' Version ' . PCRE_VERSION . "\n"; + break; + case 'curl': + $version = curl_version(); + $info .= ' Version ' . $version['version'] . "\n"; + break; + case 'mbstring': + $info .= ' Overloading: ' . mb_get_info('func_overload') . "\n"; + break; + case 'iconv': + $info .= ' Version ' . ICONV_VERSION . "\n"; + break; + case 'xml': + $info .= ' Version ' . LIBXML_DOTTED_VERSION . "\n"; + break; + } + } + else + { + $info .= " $ext not loaded\n"; + } + } + return $info; + } } /** @@ -11831,14 +11921,135 @@ class SimplePie_IRI /** * Replace invalid character with percent encoding * - * @access private * @param string $string Input string * @param string $valid_chars Valid characters * @param int $case Normalise case * @return string */ - function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE) + function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE, $iprivate = false) { + // Normalize as many pct-encoded sections as possible + $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string); + + // Replace invalid percent characters + $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string); + + // Add unreserved and % to $valid_chars (the latter is safe because all + // pct-encoded sections are now valid). + $valid_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%'; + + // Now replace any bytes that aren't allowed with their pct-encoded versions + $position = 0; + $strlen = strlen($string); + while (($position += strspn($string, $valid_chars, $position)) < $strlen) + { + $value = ord($string[$position]); + + // Start position + $start = $position; + + // By default we are valid + $valid = true; + + // No one byte sequences are valid due to the while. + // Two byte sequence: + if (($value & 0xE0) === 0xC0) + { + $character = ($value & 0x1F) << 6; + $length = 2; + $remaining = 1; + } + // Three byte sequence: + elseif (($value & 0xF0) === 0xE0) + { + $character = ($value & 0x0F) << 12; + $length = 3; + $remaining = 2; + } + // Four byte sequence: + elseif (($value & 0xF8) === 0xF0) + { + $character = ($value & 0x07) << 18; + $length = 4; + $remaining = 3; + } + // Invalid byte: + else + { + $valid = false; + $length = 1; + $remaining = 0; + } + + if ($remaining) + { + if ($position + $length <= $strlen) + { + for ($position++; $remaining; $position++) + { + $value = ord($string[$position]); + + // Check that the byte is valid, then add it to the character: + if (($value & 0xC0) === 0x80) + { + $character |= ($value & 0x3F) << (--$remaining * 6); + } + // If it is invalid, count the sequence as invalid and reprocess the current byte: + else + { + $valid = false; + $position--; + break; + } + } + } + else + { + $position = $strlen - 1; + $valid = false; + } + } + + // Percent encode anything invalid or not in ucschar + if ( + // Invalid sequences + !$valid + // Non-shortest form sequences are invalid + || $length > 1 && $character <= 0x7F + || $length > 2 && $character <= 0x7FF + || $length > 3 && $character <= 0xFFFF + // Outside of range of ucschar codepoints + // Noncharacters + || ($character & 0xFFFE) === 0xFFFE + || $character >= 0xFDD0 && $character <= 0xFDEF + || ( + // Everything else not in ucschar + $character > 0xD7FF && $character < 0xF900 + || $character < 0xA0 + || $character > 0xEFFFD + ) + && ( + // Everything not in iprivate, if it applies + !$iprivate + || $character < 0xE000 + || $character > 0x10FFFD + ) + ) + { + // If we were a character, pretend we weren't, but rather an error. + if ($valid) + $position--; + + for ($j = $start; $j <= $position; $j++) + { + $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1); + $j += 2; + $position += 2; + $strlen += 2; + } + } + } + // Normalise case if ($case & SIMPLEPIE_LOWERCASE) { @@ -11849,61 +12060,148 @@ class SimplePie_IRI $string = strtoupper($string); } - // Store position and string length (to avoid constantly recalculating this) - $position = 0; - $strlen = strlen($string); + return $string; + } - // Loop as long as we have invalid characters, advancing the position to the next invalid character - while (($position += strspn($string, $valid_chars, $position)) < $strlen) + /** + * Callback function for preg_replace_callback. + * + * Removes sequences of percent encoded bytes that represent UTF-8 + * encoded characters in iunreserved + * + * @access private + * @param array $match PCRE match + * @return string Replacement + */ + function remove_iunreserved_percent_encoded($match) + { + // As we just have valid percent encoded sequences we can just explode + // and ignore the first member of the returned array (an empty string). + $bytes = explode('%', $match[0]); + + // Initialize the new string (this is what will be returned) and that + // there are no bytes remaining in the current sequence (unsurprising + // at the first byte!). + $string = ''; + $remaining = 0; + + // Loop over each and every byte, and set $value to its value + for ($i = 1, $len = count($bytes); $i < $len; $i++) { - // If we have a % character - if ($string[$position] === '%') + $value = hexdec($bytes[$i]); + + // If we're the first byte of sequence: + if (!$remaining) { - // If we have a pct-encoded section - if ($position + 2 < $strlen && strspn($string, '0123456789ABCDEFabcdef', $position + 1, 2) === 2) - { - // Get the the represented character - $chr = chr(hexdec(substr($string, $position + 1, 2))); + // Start position + $start = $i; - // If the character is valid, replace the pct-encoded with the actual character while normalising case - if (strpos($valid_chars, $chr) !== false) - { - if ($case & SIMPLEPIE_LOWERCASE) - { - $chr = strtolower($chr); - } - elseif ($case & SIMPLEPIE_UPPERCASE) - { - $chr = strtoupper($chr); - } - $string = substr_replace($string, $chr, $position, 3); - $strlen -= 2; - $position++; - } + // By default we are valid + $valid = true; - // Otherwise just normalise the pct-encoded to uppercase - else + // One byte sequence: + if ($value <= 0x7F) + { + $character = $value; + $length = 1; + } + // Two byte sequence: + elseif (($value & 0xE0) === 0xC0) + { + $character = ($value & 0x1F) << 6; + $length = 2; + $remaining = 1; + } + // Three byte sequence: + elseif (($value & 0xF0) === 0xE0) + { + $character = ($value & 0x0F) << 12; + $length = 3; + $remaining = 2; + } + // Four byte sequence: + elseif (($value & 0xF8) === 0xF0) + { + $character = ($value & 0x07) << 18; + $length = 4; + $remaining = 3; + } + // Invalid byte: + else + { + $valid = false; + $remaining = 0; + } + } + // Continuation byte: + else + { + // Check that the byte is valid, then add it to the character: + if (($value & 0xC0) === 0x80) + { + $remaining--; + $character |= ($value & 0x3F) << ($remaining * 6); + } + // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence: + else + { + $valid = false; + $remaining = 0; + $i--; + } + } + + // If we've reached the end of the current byte sequence, append it to Unicode::$data + if (!$remaining) + { + // Percent encode anything invalid or not in iunreserved + if ( + // Invalid sequences + !$valid + // Non-shortest form sequences are invalid + || $length > 1 && $character <= 0x7F + || $length > 2 && $character <= 0x7FF + || $length > 3 && $character <= 0xFFFF + // Outside of range of iunreserved codepoints + || $character < 0x2D + || $character > 0xEFFFD + // Noncharacters + || ($character & 0xFFFE) === 0xFFFE + || $character >= 0xFDD0 && $character <= 0xFDEF + // Everything else not in iunreserved (this is all BMP) + || $character === 0x2F + || $character > 0x39 && $character < 0x41 + || $character > 0x5A && $character < 0x61 + || $character > 0x7A && $character < 0x7E + || $character > 0x7E && $character < 0xA0 + || $character > 0xD7FF && $character < 0xF900 + ) + { + for ($j = $start; $j <= $i; $j++) { - $string = substr_replace($string, strtoupper(substr($string, $position + 1, 2)), $position + 1, 2); - $position += 3; + $string .= '%' . strtoupper($bytes[$j]); } } - // If we don't have a pct-encoded section, just replace the % with its own esccaped form else { - $string = substr_replace($string, '%25', $position, 1); - $strlen += 2; - $position += 3; + for ($j = $start; $j <= $i; $j++) + { + $string .= chr(hexdec($bytes[$j])); + } } } - // If we have an invalid character, change into its pct-encoded form - else + } + + // If we have any bytes left over they are invalid (i.e., we are + // mid-way through a multi-byte sequence) + if ($remaining) + { + for ($j = $start; $j < $len; $j++) { - $replacement = sprintf("%%%02X", ord($string[$position])); - $string = str_replace($string[$position], $replacement, $string); - $strlen = strlen($string); + $string .= '%' . strtoupper($bytes[$j]); } } + return $string; } @@ -12031,7 +12329,7 @@ class SimplePie_IRI } elseif ($host[0] === '[' && substr($host, -1) === ']') { - if (Net_IPv6::checkIPv6(substr($host, 1, -1))) + if (SimplePie_Net_IPv6::checkIPv6(substr($host, 1, -1))) { $this->host = $host; $this->valid[__FUNCTION__] = true; @@ -12130,7 +12428,7 @@ class SimplePie_IRI } else { - $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:@/?'); + $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$\'()*+,;:@/?&='); } $this->valid[__FUNCTION__] = true; return true; @@ -13933,7 +14231,7 @@ class SimplePie_XML_Declaration_Parser } else { - $this->state = 'standalone_name'; + $this->state = false; } } @@ -13947,7 +14245,7 @@ class SimplePie_XML_Declaration_Parser } else { - $this->state = false; + $this->state = 'standalone_name'; } } @@ -14425,7 +14723,7 @@ class SimplePie_Parser case constant('XMLReader::END_ELEMENT'): if ($xml->namespaceURI !== '') { - $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; + $tagName = $xml->namespaceURI . $this->separator . $xml->localName; } else { @@ -14437,7 +14735,7 @@ class SimplePie_Parser $empty = $xml->isEmptyElement; if ($xml->namespaceURI !== '') { - $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; + $tagName = $xml->namespaceURI . $this->separator . $xml->localName; } else { @@ -14448,7 +14746,7 @@ class SimplePie_Parser { if ($xml->namespaceURI !== '') { - $attrName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; + $attrName = $xml->namespaceURI . $this->separator . $xml->localName; } else { @@ -14913,7 +15211,7 @@ class SimplePie_Sanitize } else { - trigger_error("$this->cache_location is not writeable", E_USER_WARNING); + trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING); } } } diff --git a/wp-includes/class-smtp.php b/wp-includes/class-smtp.php index c664d971e..6977bffad 100644 --- a/wp-includes/class-smtp.php +++ b/wp-includes/class-smtp.php @@ -2,15 +2,15 @@ /*~ class.smtp.php .---------------------------------------------------------------------------. | Software: PHPMailer - PHP email class | -| Version: 5.1 | -| Contact: via sourceforge.net support pages (also www.codeworxtech.com) | -| Info: http://phpmailer.sourceforge.net | -| Support: http://sourceforge.net/projects/phpmailer/ | +| Version: 5.2.1 | +| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ | | ------------------------------------------------------------------------- | -| Admin: Andy Prevost (project admininistrator) | +| Admin: Jim Jagielski (project admininistrator) | | Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | | : Marcus Bointon (coolbru) coolbru@users.sourceforge.net | +| : Jim Jagielski (jimjag) jimjag@gmail.com | | Founder: Brent R. Matzelle (original founder) | +| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved. | | Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. | | Copyright (c) 2001-2003, Brent R. Matzelle | | ------------------------------------------------------------------------- | @@ -19,11 +19,6 @@ | This program is distributed in the hope that it will be useful - WITHOUT | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | | FITNESS FOR A PARTICULAR PURPOSE. | -| ------------------------------------------------------------------------- | -| We offer a number of paid services (www.codeworxtech.com): | -| - Web Hosting on highly optimized fast and secure servers | -| - Technology Consulting | -| - Oursourcing (highly qualified programmers and graphic designers) | '---------------------------------------------------------------------------' */ @@ -34,8 +29,10 @@ * @author Andy Prevost * @author Marcus Bointon * @copyright 2004 - 2008 Andy Prevost + * @author Jim Jagielski + * @copyright 2010 - 2012 Jim Jagielski * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL) - * @version $Id: class.smtp.php 444 2009-05-05 11:22:26Z coolbru $ + * @version $Id: class.smtp.php 450 2010-06-23 16:46:33Z coolbru $ */ /** @@ -71,6 +68,12 @@ class SMTP { */ public $do_verp = false; + /** + * Sets the SMTP PHPMailer Version number + * @var string + */ + public $Version = '5.2.1'; + ///////////////////////////////////////////////// // PROPERTIES, PRIVATE AND PROTECTED ///////////////////////////////////////////////// @@ -794,7 +797,8 @@ class SMTP { */ private function get_lines() { $data = ""; - while($str = @fgets($this->smtp_conn,515)) { + while(!feof($this->smtp_conn)) { + $str = @fgets($this->smtp_conn,515); if($this->do_debug >= 4) { echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF . '<br />'; echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF . '<br />'; @@ -811,4 +815,4 @@ class SMTP { } -?> \ No newline at end of file +?> diff --git a/wp-includes/class-wp-admin-bar.php b/wp-includes/class-wp-admin-bar.php index 1b8f8b339..20fcf4058 100644 --- a/wp-includes/class-wp-admin-bar.php +++ b/wp-includes/class-wp-admin-bar.php @@ -321,7 +321,7 @@ class WP_Admin_Bar { } final protected function _render( $root ) { - global $is_IE, $is_iphone; + global $is_IE; // Add browser classes. // We have to do this here since admin bar shows on the front end. @@ -333,7 +333,7 @@ class WP_Admin_Bar { $class .= ' ie8'; elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE 9' ) ) $class .= ' ie9'; - } elseif ( $is_iphone ) { + } elseif ( wp_is_mobile() ) { $class .= ' mobile'; } @@ -471,4 +471,3 @@ class WP_Admin_Bar { do_action( 'add_admin_bar_menus' ); } } -?> diff --git a/wp-includes/class-wp-ajax-response.php b/wp-includes/class-wp-ajax-response.php index 9c225c116..2bf974a26 100644 --- a/wp-includes/class-wp-ajax-response.php +++ b/wp-includes/class-wp-ajax-response.php @@ -131,8 +131,9 @@ class WP_Ajax_Response { foreach ( (array) $this->responses as $response ) echo $response; echo '</wp_ajax>'; - die(); + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + wp_die(); + else + die(); } } - -?> diff --git a/wp-includes/class-wp-atom-server.php b/wp-includes/class-wp-atom-server.php new file mode 100644 index 000000000..d3816732c --- /dev/null +++ b/wp-includes/class-wp-atom-server.php @@ -0,0 +1,1487 @@ +<?php + +/** + * WordPress AtomPub API implementation. + * + * @package WordPress + * @subpackage Publishing + * @since 2.2.0 + */ +class wp_atom_server { + + /** + * ATOM content type. + * + * @since 2.2.0 + * @var string + */ + var $ATOM_CONTENT_TYPE = 'application/atom+xml'; + + /** + * Categories ATOM content type. + * + * @since 2.2.0 + * @var string + */ + var $CATEGORIES_CONTENT_TYPE = 'application/atomcat+xml'; + + /** + * Service ATOM content type. + * + * @since 2.3.0 + * @var string + */ + var $SERVICE_CONTENT_TYPE = 'application/atomsvc+xml'; + + /** + * ATOM XML namespace. + * + * @since 2.3.0 + * @var string + */ + var $ATOM_NS = 'http://www.w3.org/2005/Atom'; + + /** + * ATOMPUB XML namespace. + * + * @since 2.3.0 + * @var string + */ + var $ATOMPUB_NS = 'http://www.w3.org/2007/app'; + + /** + * Entries path. + * + * @since 2.2.0 + * @var string + */ + var $ENTRIES_PATH = "posts"; + + /** + * Categories path. + * + * @since 2.2.0 + * @var string + */ + var $CATEGORIES_PATH = "categories"; + + /** + * Media path. + * + * @since 2.2.0 + * @var string + */ + var $MEDIA_PATH = "attachments"; + + /** + * Entry path. + * + * @since 2.2.0 + * @var string + */ + var $ENTRY_PATH = "post"; + + /** + * Service path. + * + * @since 2.2.0 + * @var string + */ + var $SERVICE_PATH = "service"; + + /** + * Media single path. + * + * @since 2.2.0 + * @var string + */ + var $MEDIA_SINGLE_PATH = "attachment"; + + /** + * ATOMPUB parameters. + * + * @since 2.2.0 + * @var array + */ + var $params = array(); + + /** + * Supported ATOMPUB media types. + * + * @since 2.3.0 + * @var array + */ + var $media_content_types = array('image/*','audio/*','video/*'); + + /** + * ATOMPUB content type(s). + * + * @since 2.2.0 + * @var array + */ + var $atom_content_types = array('application/atom+xml'); + + /** + * ATOMPUB methods. + * + * @since 2.2.0 + * @var unknown_type + */ + var $selectors = array(); + + /** + * Whether to do output. + * + * Support for head. + * + * @since 2.2.0 + * @var bool + */ + var $do_output = true; + + /** + * Constructor - Sets up object properties. + * + * @since 2.2.0 + * @return AtomServer + */ + function __construct() { + + $var_by_ref = explode( '/', $_SERVER['SCRIPT_NAME'] ); + $this->script_name = array_pop( $var_by_ref ); + $this->app_base = site_url( $this->script_name . '/' ); + + $this->selectors = array( + '@/service$@' => + array('GET' => 'get_service'), + '@/categories$@' => + array('GET' => 'get_categories_xml'), + '@/post/(\d+)$@' => + array('GET' => 'get_post', + 'PUT' => 'put_post', + 'DELETE' => 'delete_post'), + '@/posts/?(\d+)?$@' => + array('GET' => 'get_posts', + 'POST' => 'create_post'), + '@/attachments/?(\d+)?$@' => + array('GET' => 'get_attachment', + 'POST' => 'create_attachment'), + '@/attachment/file/(\d+)$@' => + array('GET' => 'get_file', + 'PUT' => 'put_file', + 'DELETE' => 'delete_file'), + '@/attachment/(\d+)$@' => + array('GET' => 'get_attachment', + 'PUT' => 'put_attachment', + 'DELETE' => 'delete_attachment'), + ); + } + + /** + * Handle ATOMPUB request. + * + * @since 2.2.0 + */ + function handle_request() { + + if ( !empty( $_SERVER['ORIG_PATH_INFO'] ) ) + $path = $_SERVER['ORIG_PATH_INFO']; + else + $path = $_SERVER['PATH_INFO']; + + $method = $_SERVER['REQUEST_METHOD']; + + $this->process_conditionals(); + //$this->process_conditionals(); + + // exception case for HEAD (treat exactly as GET, but don't output) + if ($method == 'HEAD') { + $this->do_output = false; + $method = 'GET'; + } + + // redirect to /service in case no path is found. + if (strlen($path) == 0 || $path == '/') + $this->redirect($this->get_service_url()); + + // check to see if AtomPub is enabled + if ( !get_option( 'enable_app' ) ) + $this->forbidden( sprintf( __( 'AtomPub services are disabled on this site. An admin user can enable them at %s' ), admin_url('options-writing.php') ) ); + + // dispatch + foreach ( $this->selectors as $regex => $funcs ) { + if ( preg_match($regex, $path, $matches) ) { + if ( isset($funcs[$method]) ) { + + // authenticate regardless of the operation and set the current + // user. each handler will decide if auth is required or not. + if ( !$this->authenticate() ) { + $this->auth_required('Credentials required.'); + } + + array_shift($matches); + call_user_func_array(array($this,$funcs[$method]), $matches); + wp_die(); + } else { + // only allow what we have handlers for... + $this->not_allowed(array_keys($funcs)); + } + } + } + + // oops, nothing found + $this->not_found(); + } + + /** + * Retrieve XML for ATOMPUB service. + * + * @since 2.2.0 + */ + function get_service() { + + if ( !current_user_can( 'edit_posts' ) ) + $this->auth_required( __( 'Sorry, you do not have the right to access this site.' ) ); + + $entries_url = esc_attr($this->get_entries_url()); + $categories_url = esc_attr($this->get_categories_url()); + $media_url = esc_attr($this->get_attachments_url()); + $accepted_media_types = ''; + foreach ($this->media_content_types as $med) { + $accepted_media_types = $accepted_media_types . "<accept>" . $med . "</accept>"; + } + $atom_prefix="atom"; + $atom_blogname = get_bloginfo('name'); + $service_doc = <<<EOD +<service xmlns="$this->ATOMPUB_NS" xmlns:$atom_prefix="$this->ATOM_NS"> + <workspace> + <$atom_prefix:title>$atom_blogname Workspace</$atom_prefix:title> + <collection href="$entries_url"> + <$atom_prefix:title>$atom_blogname Posts</$atom_prefix:title> + <accept>$this->ATOM_CONTENT_TYPE;type=entry</accept> + <categories href="$categories_url" /> + </collection> + <collection href="$media_url"> + <$atom_prefix:title>$atom_blogname Media</$atom_prefix:title> + $accepted_media_types + </collection> + </workspace> +</service> + +EOD; + + $this->output($service_doc, $this->SERVICE_CONTENT_TYPE); + } + + /** + * Retrieve categories list in XML format. + * + * @since 2.2.0 + */ + function get_categories_xml() { + + if ( !current_user_can( 'edit_posts' ) ) + $this->auth_required( __( 'Sorry, you do not have the right to access this site.' ) ); + + $home = esc_attr(get_bloginfo_rss('url')); + + $categories = ""; + $cats = get_categories(array('hierarchical' => 0, 'hide_empty' => 0)); + foreach ( (array) $cats as $cat ) { + $categories .= " <category term=\"" . esc_attr($cat->name) . "\" />\n"; + } + $output = <<<EOD +<app:categories xmlns:app="$this->ATOMPUB_NS" + xmlns="$this->ATOM_NS" + fixed="yes" scheme="$home"> + $categories +</app:categories> +EOD; + $this->output($output, $this->CATEGORIES_CONTENT_TYPE); + } + + /** + * Create new post. + * + * @since 2.2.0 + */ + function create_post() { + global $user_ID; + $this->get_accepted_content_type($this->atom_content_types); + + $parser = new AtomParser(); + if ( !$parser->parse() ) + $this->client_error(); + + $entry = array_pop($parser->feed->entries); + + $catnames = array(); + if ( !empty( $entry->categories ) ) { + foreach ( $entry->categories as $cat ) { + array_push($catnames, $cat["term"]); + } + } + + $wp_cats = get_categories(array('hide_empty' => false)); + + $post_category = array(); + + foreach ( $wp_cats as $cat ) { + if ( in_array($cat->name, $catnames) ) + array_push($post_category, $cat->term_id); + } + + $publish = ! ( isset( $entry->draft ) && 'yes' == trim( $entry->draft ) ); + + $cap = ($publish) ? 'publish_posts' : 'edit_posts'; + + if ( !current_user_can($cap) ) + $this->auth_required(__('Sorry, you do not have the right to edit/publish new posts.')); + + $blog_ID = get_current_blog_id(); + $post_status = ($publish) ? 'publish' : 'draft'; + $post_author = (int) $user_ID; + + $post_title = ''; + $post_content = ''; + $post_excerpt = ''; + $pubtimes = ''; + + if ( isset( $entry->title ) && is_array( $entry->title ) && !empty( $entry->title[1] ) ) + $post_title = (string) $entry->title[1]; + if ( isset( $entry->content ) && is_array( $entry->content ) && !empty( $entry->content[1] ) ) + $post_content = (string) $entry->content[1]; + if ( isset( $entry->summary ) && is_array( $entry->summary ) && !empty( $entry->summary[1] ) ) + $post_excerpt = (string) $entry->summary[1]; + if ( !empty( $entry->published ) ) + $pubtimes = (string) $entry->published; + + $pubtimes = $this->get_publish_time( $pubtimes ); + + $post_date = $pubtimes[0]; + $post_date_gmt = $pubtimes[1]; + + if ( isset( $_SERVER['HTTP_SLUG'] ) ) + $post_name = $_SERVER['HTTP_SLUG']; + + $post_data = compact('blog_ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_name'); + + $this->escape($post_data); + + $postID = wp_insert_post($post_data); + if ( is_wp_error( $postID ) ) + $this->internal_error($postID->get_error_message()); + + if ( !$postID ) + $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); + + // getting warning here about unable to set headers + // because something in the cache is printing to the buffer + // could we clean up wp_set_post_categories or cache to not print + // this could affect our ability to send back the right headers + @wp_set_post_categories($postID, $post_category); + + do_action( 'atompub_create_post', $postID, $entry ); + + $output = $this->get_entry($postID); + + $this->created($postID, $output); + } + + /** + * Retrieve post. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function get_post($postID) { + global $entry; + + if ( !current_user_can( 'edit_post', $postID ) ) + $this->auth_required( __( 'Sorry, you do not have the right to access this post.' ) ); + + $this->set_current_entry($postID); + $output = $this->get_entry($postID); + $this->output($output); + + } + + /** + * Update post. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function put_post($postID) { + // checked for valid content-types (atom+xml) + // quick check and exit + $this->get_accepted_content_type($this->atom_content_types); + + $parser = new AtomParser(); + if ( !$parser->parse() ) + $this->bad_request(); + + $parsed = array_pop($parser->feed->entries); + + // check for not found + global $entry; + $this->set_current_entry($postID); + + if ( !current_user_can('edit_post', $entry['ID']) ) + $this->auth_required(__('Sorry, you do not have the right to edit this post.')); + + $publish = ! ( isset($parsed->draft) && 'yes' == trim($parsed->draft) ); + $post_status = ($publish) ? 'publish' : 'draft'; + + extract($entry); + + $post_title = $parsed->title[1]; + $post_content = $parsed->content[1]; + $post_excerpt = $parsed->summary[1]; + $pubtimes = $this->get_publish_time($entry->published); + $post_date = $pubtimes[0]; + $post_date_gmt = $pubtimes[1]; + $pubtimes = $this->get_publish_time($parsed->updated); + $post_modified = $pubtimes[0]; + $post_modified_gmt = $pubtimes[1]; + + $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt'); + $this->escape($postdata); + + $result = wp_update_post($postdata); + + if ( !$result ) + $this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.')); + + do_action( 'atompub_put_post', $ID, $parsed ); + + $this->ok(); + } + + /** + * Remove post. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function delete_post($postID) { + + // check for not found + global $entry; + $this->set_current_entry($postID); + + if ( !current_user_can('edit_post', $postID) ) + $this->auth_required(__('Sorry, you do not have the right to delete this post.')); + + if ( $entry['post_type'] == 'attachment' ) { + $this->delete_attachment($postID); + } else { + $result = wp_delete_post($postID); + + if ( !$result ) { + $this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.')); + } + + $this->ok(); + } + + } + + /** + * Retrieve attachment. + * + * @since 2.2.0 + * + * @param int $postID Optional. Post ID. + */ + function get_attachment($postID = null) { + if ( !current_user_can( 'upload_files' ) ) + $this->auth_required( __( 'You do not have permission to upload files.' ) ); + + if ( !isset($postID) ) { + $this->get_attachments(); + } else { + $this->set_current_entry($postID); + $output = $this->get_entry($postID, 'attachment'); + $this->output($output); + } + } + + /** + * Create new attachment. + * + * @since 2.2.0 + */ + function create_attachment() { + + $type = $this->get_accepted_content_type(); + + if ( !current_user_can('upload_files') ) + $this->auth_required( __( 'You do not have permission to upload files.' ) ); + + $fp = fopen("php://input", "rb"); + $bits = null; + while ( !feof($fp) ) { + $bits .= fread($fp, 4096); + } + fclose($fp); + + $slug = ''; + if ( isset( $_SERVER['HTTP_SLUG'] ) ) + $slug = $_SERVER['HTTP_SLUG']; + elseif ( isset( $_SERVER['HTTP_TITLE'] ) ) + $slug = $_SERVER['HTTP_TITLE']; + elseif ( empty( $slug ) ) // just make a random name + $slug = substr( md5( uniqid( microtime() ) ), 0, 7); + $ext = preg_replace( '|.*/([a-z0-9]+)|', '$1', $_SERVER['CONTENT_TYPE'] ); + $slug = sanitize_file_name( "$slug.$ext" ); + $file = wp_upload_bits( $slug, null, $bits); + + $url = $file['url']; + $file = $file['file']; + + do_action('wp_create_file_in_uploads', $file); // replicate + + // Construct the attachment array + $attachment = array( + 'post_title' => $slug, + 'post_content' => $slug, + 'post_status' => 'attachment', + 'post_parent' => 0, + 'post_mime_type' => $type, + 'guid' => $url + ); + + // Save the data + $postID = wp_insert_attachment($attachment, $file); + + if (!$postID) + $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); + + $output = $this->get_entry($postID, 'attachment'); + + $this->created($postID, $output, 'attachment'); + } + + /** + * Update attachment. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function put_attachment($postID) { + // checked for valid content-types (atom+xml) + // quick check and exit + $this->get_accepted_content_type($this->atom_content_types); + + $parser = new AtomParser(); + if (!$parser->parse()) { + $this->bad_request(); + } + + $parsed = array_pop($parser->feed->entries); + + // check for not found + global $entry; + $this->set_current_entry($postID); + + if ( !current_user_can('edit_post', $entry['ID']) ) + $this->auth_required(__('Sorry, you do not have the right to edit this post.')); + + extract($entry); + + $post_title = $parsed->title[1]; + $post_content = $parsed->summary[1]; + $pubtimes = $this->get_publish_time($parsed->updated); + $post_modified = $pubtimes[0]; + $post_modified_gmt = $pubtimes[1]; + + $postdata = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'post_modified', 'post_modified_gmt'); + $this->escape($postdata); + + $result = wp_update_post($postdata); + + if ( !$result ) + $this->internal_error(__('For some strange yet very annoying reason, this post could not be edited.')); + + $this->ok(); + } + + /** + * Remove attachment. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function delete_attachment($postID) { + + // check for not found + global $entry; + $this->set_current_entry($postID); + + if ( !current_user_can('edit_post', $postID) ) + $this->auth_required(__('Sorry, you do not have the right to delete this post.')); + + $location = get_post_meta($entry['ID'], '_wp_attached_file', true); + $filetype = wp_check_filetype($location); + + if ( !isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext']) ) + $this->internal_error(__('Error occurred while accessing post metadata for file location.')); + + // delete file + @unlink($location); + + // delete attachment + $result = wp_delete_post($postID); + + if ( !$result ) + $this->internal_error(__('For some strange yet very annoying reason, this post could not be deleted.')); + + $this->ok(); + } + + /** + * Retrieve attachment from post. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function get_file($postID) { + + // check for not found + global $entry; + $this->set_current_entry($postID); + + // then whether user can edit the specific post + if ( !current_user_can('edit_post', $postID) ) + $this->auth_required(__('Sorry, you do not have the right to edit this post.')); + + $location = get_post_meta($entry['ID'], '_wp_attached_file', true); + $location = get_option ('upload_path') . '/' . $location; + $filetype = wp_check_filetype($location); + + if ( !isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext']) ) + $this->internal_error(__('Error occurred while accessing post metadata for file location.')); + + status_header('200'); + header('Content-Type: ' . $entry['post_mime_type']); + header('Connection: close'); + + if ( $fp = fopen($location, "rb") ) { + status_header('200'); + header('Content-Type: ' . $entry['post_mime_type']); + header('Connection: close'); + + while ( !feof($fp) ) { + echo fread($fp, 4096); + } + + fclose($fp); + } else { + status_header ('404'); + } + + wp_die(); + } + + /** + * Upload file to blog and add attachment to post. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function put_file($postID) { + + // first check if user can upload + if ( !current_user_can('upload_files') ) + $this->auth_required(__('You do not have permission to upload files.')); + + // check for not found + global $entry; + $this->set_current_entry($postID); + + // then whether user can edit the specific post + if ( !current_user_can('edit_post', $postID) ) + $this->auth_required(__('Sorry, you do not have the right to edit this post.')); + + $upload_dir = wp_upload_dir( ); + $location = get_post_meta($entry['ID'], '_wp_attached_file', true); + $filetype = wp_check_filetype($location); + + $location = "{$upload_dir['basedir']}/{$location}"; + + if (!isset($location) || 'attachment' != $entry['post_type'] || empty($filetype['ext'])) + $this->internal_error(__('Error occurred while accessing post metadata for file location.')); + + $fp = fopen("php://input", "rb"); + $localfp = fopen($location, "w+"); + while ( !feof($fp) ) { + fwrite($localfp,fread($fp, 4096)); + } + fclose($fp); + fclose($localfp); + + $ID = $entry['ID']; + $pubtimes = $this->get_publish_time($entry->published); + $post_date = $pubtimes[0]; + $post_date_gmt = $pubtimes[1]; + $pubtimes = $this->get_publish_time($parsed->updated); + $post_modified = $pubtimes[0]; + $post_modified_gmt = $pubtimes[1]; + + $post_data = compact('ID', 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt'); + $result = wp_update_post($post_data); + + if ( !$result ) + $this->internal_error(__('Sorry, your entry could not be posted. Something wrong happened.')); + + wp_update_attachment_metadata( $postID, wp_generate_attachment_metadata( $postID, $location ) ); + + $this->ok(); + } + + /** + * Retrieve entries URL. + * + * @since 2.2.0 + * + * @param int $page Page ID. + * @return string + */ + function get_entries_url($page = null) { + if ( isset($GLOBALS['post_type']) && ( $GLOBALS['post_type'] == 'attachment' ) ) + $path = $this->MEDIA_PATH; + else + $path = $this->ENTRIES_PATH; + $url = $this->app_base . $path; + if ( isset($page) && is_int($page) ) + $url .= "/$page"; + return $url; + } + + /** + * Display entries URL. + * + * @since 2.2.0 + * + * @param int $page Page ID. + */ + function the_entries_url($page = null) { + echo $this->get_entries_url($page); + } + + /** + * Retrieve categories URL. + * + * @since 2.2.0 + * + * @param mixed $deprecated Not used. + * @return string + */ + function get_categories_url($deprecated = '') { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.5' ); + return $this->app_base . $this->CATEGORIES_PATH; + } + + /** + * Display category URL. + * + * @since 2.2.0 + */ + function the_categories_url() { + echo $this->get_categories_url(); + } + + /** + * Retrieve attachment URL. + * + * @since 2.2.0 + * + * @param int $page Page ID. + * @return string + */ + function get_attachments_url($page = null) { + $url = $this->app_base . $this->MEDIA_PATH; + if (isset($page) && is_int($page)) { + $url .= "/$page"; + } + return $url; + } + + /** + * Display attachment URL. + * + * @since 2.2.0 + * + * @param int $page Page ID. + */ + function the_attachments_url($page = null) { + echo $this->get_attachments_url($page); + } + + /** + * Retrieve service URL. + * + * @since 2.3.0 + * + * @return string + */ + function get_service_url() { + return $this->app_base . $this->SERVICE_PATH; + } + + /** + * Retrieve entry URL. + * + * @since 2.7.0 + * + * @param int $postID Post ID. + * @return string + */ + function get_entry_url($postID = null) { + if (!isset($postID)) { + global $post; + $postID = (int) $post->ID; + } + + $url = $this->app_base . $this->ENTRY_PATH . "/$postID"; + + return $url; + } + + /** + * Display entry URL. + * + * @since 2.7.0 + * + * @param int $postID Post ID. + */ + function the_entry_url($postID = null) { + echo $this->get_entry_url($postID); + } + + /** + * Retrieve media URL. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + * @return string + */ + function get_media_url($postID = null) { + if (!isset($postID)) { + global $post; + $postID = (int) $post->ID; + } + + $url = $this->app_base . $this->MEDIA_SINGLE_PATH ."/file/$postID"; + + return $url; + } + + /** + * Display the media URL. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function the_media_url($postID = null) { + echo $this->get_media_url($postID); + } + + /** + * Set the current entry to post ID. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + */ + function set_current_entry($postID) { + global $entry; + + if (!isset($postID)) { + // $this->bad_request(); + $this->not_found(); + } + + $entry = wp_get_single_post($postID,ARRAY_A); + + if (!isset($entry) || !isset($entry['ID'])) + $this->not_found(); + + return; + } + + /** + * Display posts XML. + * + * @since 2.2.0 + * + * @param int $page Optional. Page ID. + * @param string $post_type Optional, default is 'post'. Post Type. + */ + function get_posts($page = 1, $post_type = 'post') { + $feed = $this->get_feed($page, $post_type); + $this->output($feed); + } + + /** + * Display attachment XML. + * + * @since 2.2.0 + * + * @param int $page Page ID. + * @param string $post_type Optional, default is 'attachment'. Post type. + */ + function get_attachments($page = 1, $post_type = 'attachment') { + $GLOBALS['post_type'] = $post_type; + $feed = $this->get_feed($page, $post_type); + $this->output($feed); + } + + /** + * Retrieve feed XML. + * + * @since 2.2.0 + * + * @param int $page Page ID. + * @param string $post_type Optional, default is post. Post type. + * @return string + */ + function get_feed($page = 1, $post_type = 'post') { + global $post, $wp, $wp_query, $posts, $wpdb, $blog_id; + ob_start(); + + $this->ENTRY_PATH = $post_type; + + if (!isset($page)) { + $page = 1; + } + $page = (int) $page; + + $count = get_option('posts_per_rss'); + + wp('posts_per_page=' . $count . '&offset=' . ($count * ($page-1)) . '&orderby=modified&post_status=any'); + + $post = $GLOBALS['post']; + $posts = $GLOBALS['posts']; + $wp = $GLOBALS['wp']; + $wp_query = $GLOBALS['wp_query']; + $wpdb = $GLOBALS['wpdb']; + $blog_id = (int) $GLOBALS['blog_id']; + + $last_page = $wp_query->max_num_pages; + $next_page = (($page + 1) > $last_page) ? null : $page + 1; + $prev_page = ($page - 1) < 1 ? null : $page - 1; + $last_page = ((int)$last_page == 1 || (int)$last_page == 0) ? null : (int) $last_page; + $self_page = $page > 1 ? $page : null; +?><feed xmlns="<?php echo $this->ATOM_NS ?>" xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php bloginfo_rss( 'language' ); ?>" <?php do_action('app_ns'); ?> > +<id><?php $this->the_entries_url() ?></id> +<updated><?php echo mysql2date('Y-m-d\TH:i:s\Z', get_lastpostmodified('GMT'), false); ?></updated> +<title type="text"><?php bloginfo_rss('name') ?></title> +<subtitle type="text"><?php bloginfo_rss("description") ?></subtitle> +<link rel="first" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url() ?>" /> +<?php if (isset($prev_page)): ?> +<link rel="previous" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($prev_page) ?>" /> +<?php endif; ?> +<?php if (isset($next_page)): ?> +<link rel="next" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($next_page) ?>" /> +<?php endif; ?> +<link rel="last" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($last_page) ?>" /> +<link rel="self" type="<?php echo $this->ATOM_CONTENT_TYPE ?>" href="<?php $this->the_entries_url($self_page) ?>" /> +<rights type="text">Copyright <?php echo date('Y'); ?></rights> +<?php do_action('app_head'); ?> +<?php if ( have_posts() ) { + while ( have_posts() ) { + the_post(); + $this->echo_entry(); + } + } +?></feed> +<?php + $feed = ob_get_contents(); + ob_end_clean(); + return $feed; + } + + /** + * Display entry XML. + * + * @since 2.2.0 + * + * @param int $postID Post ID. + * @param string $post_type Optional, default is post. Post type. + * @return string. + */ + function get_entry($postID, $post_type = 'post') { + ob_start(); + switch($post_type) { + case 'post': + $varname = 'p'; + break; + case 'attachment': + $this->ENTRY_PATH = 'attachment'; + $varname = 'attachment_id'; + break; + } + query_posts($varname . '=' . $postID); + if ( have_posts() ) { + while ( have_posts() ) { + the_post(); + $this->echo_entry(); + $entry = ob_get_contents(); + break; + } + } + ob_end_clean(); + + return $entry; + } + + /** + * Display post content XML. + * + * @since 2.3.0 + */ + function echo_entry() { ?> +<entry xmlns="<?php echo $this->ATOM_NS ?>" + xmlns:app="<?php echo $this->ATOMPUB_NS ?>" xml:lang="<?php bloginfo_rss( 'language' ); ?>"> + <id><?php the_guid( $GLOBALS['post']->ID ); ?></id> +<?php list($content_type, $content) = prep_atom_text_construct(get_the_title()); ?> + <title type="<?php echo $content_type ?>"><?php echo $content ?></title> + <updated><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></updated> + <published><?php echo get_post_time('Y-m-d\TH:i:s\Z', true); ?></published> + <app:edited><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true); ?></app:edited> + <app:control> + <app:draft><?php echo ($GLOBALS['post']->post_status == 'draft' ? 'yes' : 'no') ?></app:draft> + </app:control> + <author> + <name><?php the_author()?></name> +<?php if ( get_the_author_meta('url') && get_the_author_meta('url') != 'http://' ) { ?> + <uri><?php the_author_meta('url') ?></uri> +<?php } ?> + </author> +<?php if ($GLOBALS['post']->post_type == 'attachment') { ?> + <link rel="edit-media" href="<?php $this->the_media_url() ?>" /> + <content type="<?php echo $GLOBALS['post']->post_mime_type ?>" src="<?php the_guid() ; ?>"/> +<?php } else { ?> + <link href="<?php the_permalink_rss() ?>" /> +<?php if ( strlen( $GLOBALS['post']->post_content ) ) : +list($content_type, $content) = prep_atom_text_construct(get_the_content()); ?> + <content type="<?php echo $content_type ?>"><?php echo $content ?></content> +<?php endif; ?> +<?php } ?> + <link rel="edit" href="<?php $this->the_entry_url() ?>" /> + <?php the_category_rss( 'atom' ); ?> +<?php list($content_type, $content) = prep_atom_text_construct(get_the_excerpt()); ?> + <summary type="<?php echo $content_type ?>"><?php echo $content ?></summary> + <?php do_action('app_entry'); ?> +</entry> +<?php } + + /** + * Set 'OK' (200) status header. + * + * @since 2.2.0 + */ + function ok() { + header('Content-Type: text/plain'); + status_header('200'); + wp_die(); + } + + /** + * Set 'No Content' (204) status header. + * + * @since 2.2.0 + */ + function no_content() { + header('Content-Type: text/plain'); + status_header('204'); + echo "Moved to Trash."; + wp_die(); + } + + /** + * Display 'Internal Server Error' (500) status header. + * + * @since 2.2.0 + * + * @param string $msg Optional. Status string. + */ + function internal_error($msg = 'Internal Server Error') { + header('Content-Type: text/plain'); + status_header('500'); + echo $msg; + wp_die(); + } + + /** + * Set 'Bad Request' (400) status header. + * + * @since 2.2.0 + */ + function bad_request() { + header('Content-Type: text/plain'); + status_header('400'); + wp_die(); + } + + /** + * Set 'Length Required' (411) status header. + * + * @since 2.2.0 + */ + function length_required() { + header("HTTP/1.1 411 Length Required"); + header('Content-Type: text/plain'); + status_header('411'); + wp_die(); + } + + /** + * Set 'Unsupported Media Type' (415) status header. + * + * @since 2.2.0 + */ + function invalid_media() { + header("HTTP/1.1 415 Unsupported Media Type"); + header('Content-Type: text/plain'); + wp_die(); + } + + /** + * Set 'Forbidden' (403) status header. + * + * @since 2.6.0 + */ + function forbidden($reason='') { + header('Content-Type: text/plain'); + status_header('403'); + echo $reason; + wp_die(); + } + + /** + * Set 'Not Found' (404) status header. + * + * @since 2.2.0 + */ + function not_found() { + header('Content-Type: text/plain'); + status_header('404'); + wp_die(); + } + + /** + * Set 'Not Allowed' (405) status header. + * + * @since 2.2.0 + */ + function not_allowed($allow) { + header('Allow: ' . join(',', $allow)); + status_header('405'); + wp_die(); + } + + /** + * Display Redirect (302) content and set status headers. + * + * @since 2.3.0 + */ + function redirect($url) { + $escaped_url = esc_attr($url); + $content = <<<EOD +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html> + <head> + <title>302 Found</title> + </head> +<body> + <h1>Found</h1> + <p>The document has moved <a href="$escaped_url">here</a>.</p> + </body> +</html> + +EOD; + header('HTTP/1.1 302 Moved'); + header('Content-Type: text/html'); + header('Location: ' . $url); + echo $content; + wp_die(); + + } + + /** + * Set 'Client Error' (400) status header. + * + * @since 2.2.0 + */ + function client_error($msg = 'Client Error') { + header('Content-Type: text/plain'); + status_header('400'); + wp_die(); + } + + /** + * Set created status headers (201). + * + * Sets the 'content-type', 'content-location', and 'location'. + * + * @since 2.2.0 + */ + function created($post_ID, $content, $post_type = 'post') { + $edit = $this->get_entry_url($post_ID); + switch($post_type) { + case 'post': + $ctloc = $this->get_entry_url($post_ID); + break; + case 'attachment': + $edit = $this->app_base . "attachments/$post_ID"; + break; + } + header("Content-Type: $this->ATOM_CONTENT_TYPE"); + if (isset($ctloc)) + header('Content-Location: ' . $ctloc); + header('Location: ' . $edit); + status_header('201'); + echo $content; + wp_die(); + } + + /** + * Set 'Auth Required' (401) headers. + * + * @since 2.2.0 + * + * @param string $msg Status header content and HTML content. + */ + function auth_required($msg) { + nocache_headers(); + header('WWW-Authenticate: Basic realm="WordPress Atom Protocol"'); + header("HTTP/1.1 401 $msg"); + header('Status: 401 ' . $msg); + header('Content-Type: text/html'); + $content = <<<EOD +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> +<html> + <head> + <title>401 Unauthorized</title> + </head> +<body> + <h1>401 Unauthorized</h1> + <p>$msg</p> + </body> +</html> + +EOD; + echo $content; + wp_die(); + } + + /** + * Display XML and set headers with content type. + * + * @since 2.2.0 + * + * @param string $xml Display feed content. + * @param string $ctype Optional, default is 'atom+xml'. Feed content type. + */ + function output($xml, $ctype = 'application/atom+xml') { + status_header('200'); + $xml = '<?xml version="1.0" encoding="' . strtolower(get_option('blog_charset')) . '"?>'."\n".$xml; + header('Connection: close'); + header('Content-Length: '. strlen($xml)); + header('Content-Type: ' . $ctype); + header('Content-Disposition: attachment; filename=atom.xml'); + header('Date: '. date('r')); + if ($this->do_output) + echo $xml; + wp_die(); + } + + /** + * Sanitize content for database usage. + * + * @since 2.2.0 + * + * @param array $array Sanitize array and multi-dimension array. + */ + function escape(&$array) { + global $wpdb; + + foreach ($array as $k => $v) { + if (is_array($v)) { + $this->escape($array[$k]); + } else if (is_object($v)) { + //skip + } else { + $array[$k] = $wpdb->escape($v); + } + } + } + + /** + * Access credential through various methods and perform login. + * + * @since 2.2.0 + * + * @return bool + */ + function authenticate() { + + // if using mod_rewrite/ENV hack + // http://www.besthostratings.com/articles/http-auth-php-cgi.html + if (isset($_SERVER['HTTP_AUTHORIZATION'])) { + list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = + explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6))); + } else if (isset($_SERVER['REDIRECT_REMOTE_USER'])) { + // Workaround for setups that do not forward HTTP_AUTHORIZATION + // See http://trac.wordpress.org/ticket/7361 + list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = + explode(':', base64_decode(substr($_SERVER['REDIRECT_REMOTE_USER'], 6))); + } + + // If Basic Auth is working... + if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { + + $user = wp_authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); + if ( $user && !is_wp_error($user) ) { + wp_set_current_user($user->ID); + return true; + } + } + + return false; + } + + /** + * Retrieve accepted content types. + * + * @since 2.2.0 + * + * @param array $types Optional. Content Types. + * @return string + */ + function get_accepted_content_type($types = null) { + + if (!isset($types)) { + $types = $this->media_content_types; + } + + if (!isset($_SERVER['CONTENT_LENGTH']) || !isset($_SERVER['CONTENT_TYPE'])) { + $this->length_required(); + } + + $type = $_SERVER['CONTENT_TYPE']; + list($type,$subtype) = explode('/',$type); + list($subtype) = explode(";",$subtype); // strip MIME parameters + + foreach($types as $t) { + list($acceptedType,$acceptedSubtype) = explode('/',$t); + if ($acceptedType == '*' || $acceptedType == $type) { + if ($acceptedSubtype == '*' || $acceptedSubtype == $subtype) + return $type . "/" . $subtype; + } + } + + $this->invalid_media(); + } + + /** + * Process conditionals for posts. + * + * @since 2.2.0 + */ + function process_conditionals() { + + if (empty($this->params)) return; + if ($_SERVER['REQUEST_METHOD'] == 'DELETE') return; + + switch($this->params[0]) { + case $this->ENTRY_PATH: + global $post; + $post = wp_get_single_post($this->params[1]); + $wp_last_modified = get_post_modified_time('D, d M Y H:i:s', true); + $post = null; + break; + case $this->ENTRIES_PATH: + $wp_last_modified = mysql2date('D, d M Y H:i:s', get_lastpostmodified('GMT'), 0).' GMT'; + break; + default: + return; + } + $wp_etag = md5($wp_last_modified); + @header("Last-Modified: $wp_last_modified"); + @header("ETag: $wp_etag"); + + // Support for Conditional GET + if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) + $client_etag = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']); + else + $client_etag = false; + + $client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE']); + // If string is empty, return 0. If not, attempt to parse into a timestamp + $client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0; + + // Make a timestamp for our most recent modification... + $wp_modified_timestamp = strtotime($wp_last_modified); + + if ( ($client_last_modified && $client_etag) ? + (($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) : + (($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) { + status_header( 304 ); + wp_die(); + } + } + + /** + * Convert RFC3339 time string to timestamp. + * + * @since 2.3.0 + * + * @param string $str String to time. + * @return bool|int false if format is incorrect. + */ + function rfc3339_str2time($str) { + + $match = false; + if (!preg_match("/(\d{4}-\d{2}-\d{2})T(\d{2}\:\d{2}\:\d{2})\.?\d{0,3}(Z|[+-]+\d{2}\:\d{2})/", $str, $match)) + return false; + + if ($match[3] == 'Z') + $match[3] = '+0000'; + + return strtotime($match[1] . " " . $match[2] . " " . $match[3]); + } + + /** + * Retrieve published time to display in XML. + * + * @since 2.3.0 + * + * @param string $published Time string. + * @return string + */ + function get_publish_time($published) { + + $pubtime = $this->rfc3339_str2time($published); + + if (!$pubtime) { + return array(current_time('mysql'),current_time('mysql',1)); + } else { + return array(date("Y-m-d H:i:s", $pubtime), gmdate("Y-m-d H:i:s", $pubtime)); + } + } + +} diff --git a/wp-includes/class-wp-customize-control.php b/wp-includes/class-wp-customize-control.php new file mode 100644 index 000000000..5ded24ca1 --- /dev/null +++ b/wp-includes/class-wp-customize-control.php @@ -0,0 +1,516 @@ +<?php +/** + * Customize Control Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ + +class WP_Customize_Control { + public $manager; + public $id; + + // All settings tied to the control. + public $settings; + + // The primary setting for the control (if there is one). + public $setting = 'default'; + + public $priority = 10; + public $section = ''; + public $label = ''; + // @todo: remove choices + public $choices = array(); + + public $json = array(); + + public $type = 'text'; + + + /** + * Constructor. + * + * If $args['settings'] is not defined, use the $id as the setting ID. + * + * @since 3.4.0 + */ + function __construct( $manager, $id, $args = array() ) { + $keys = array_keys( get_object_vars( $this ) ); + foreach ( $keys as $key ) { + if ( isset( $args[ $key ] ) ) + $this->$key = $args[ $key ]; + } + + $this->manager = $manager; + $this->id = $id; + + + // Process settings. + if ( empty( $this->settings ) ) + $this->settings = $id; + + $settings = array(); + if ( is_array( $this->settings ) ) { + foreach ( $this->settings as $key => $setting ) { + $settings[ $key ] = $this->manager->get_setting( $setting ); + } + } else { + $this->setting = $this->manager->get_setting( $this->settings ); + $settings['default'] = $this->setting; + } + $this->settings = $settings; + } + + /** + * Enqueue control related scripts/styles. + * + * @since 3.4.0 + */ + public function enqueue() {} + + + /** + * Fetch a setting's value. + * Grabs the main setting by default. + * + * @since 3.4.0 + */ + public final function value( $setting_key = 'default' ) { + if ( isset( $this->settings[ $setting_key ] ) ) + return $this->settings[ $setting_key ]->value(); + } + + /** + * Refresh the parameters passed to the JavaScript via JSON. + * + * @since 3.4.0 + */ + public function to_json() { + $this->json['settings'] = array(); + foreach ( $this->settings as $key => $setting ) { + $this->json['settings'][ $key ] = $setting->id; + } + + $this->json['type'] = $this->type; + } + + /** + * Check if the theme supports the control and check user capabilities. + * + * @since 3.4.0 + * + * @return bool False if theme doesn't support the control or user doesn't have the required permissions, otherwise true. + */ + public final function check_capabilities() { + foreach ( $this->settings as $setting ) { + if ( ! $setting->check_capabilities() ) + return false; + } + + $section = $this->manager->get_section( $this->section ); + if ( isset( $section ) && ! $section->check_capabilities() ) + return false; + + return true; + } + + /** + * Check capabilities and render the control. + * + * @since 3.4.0 + */ + public final function maybe_render() { + if ( ! $this->check_capabilities() ) + return; + + do_action( 'customize_render_control', $this ); + do_action( 'customize_render_control_' . $this->id, $this ); + + $this->render(); + } + + /** + * Render the control. Renders the control wrapper, then calls $this->render_content(). + * + * @since 3.4.0 + */ + protected function render() { + $id = 'customize-control-' . str_replace( '[', '-', str_replace( ']', '', $this->id ) ); + $class = 'customize-control customize-control-' . $this->type; + + ?><li id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>"> + <?php $this->render_content(); ?> + </li><?php + } + + public function get_link( $setting_key = 'default' ) { + if ( ! isset( $this->settings[ $setting_key ] ) ) + return ''; + + return 'data-customize-setting-link="' . esc_attr( $this->settings[ $setting_key ]->id ) . '"'; + } + + public function link( $setting_key = 'default' ) { + echo $this->get_link( $setting_key ); + } + + /** + * Render the control's content. + * + * Allows the content to be overriden without having to rewrite the wrapper. + * + * @since 3.4.0 + */ + protected function render_content() { + switch( $this->type ) { + case 'text': + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <input type="text" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); ?> /> + </label> + <?php + break; + case 'checkbox': + ?> + <label> + <input type="checkbox" value="<?php echo esc_attr( $this->value() ); ?>" <?php $this->link(); checked( $this->value() ); ?> /> + <?php echo esc_html( $this->label ); ?> + </label> + <?php + break; + case 'radio': + if ( empty( $this->choices ) ) + return; + + $name = '_customize-radio-' . $this->id; + + ?> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <?php + foreach ( $this->choices as $value => $label ) : + ?> + <label> + <input type="radio" value="<?php echo esc_attr( $value ); ?>" name="<?php echo esc_attr( $name ); ?>" <?php $this->link(); checked( $this->value(), $value ); ?> /> + <?php echo esc_html( $label ); ?><br/> + </label> + <?php + endforeach; + break; + case 'select': + if ( empty( $this->choices ) ) + return; + + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <select <?php $this->link(); ?>> + <?php + foreach ( $this->choices as $value => $label ) + echo '<option value="' . esc_attr( $value ) . '"' . selected( $this->value(), $value, false ) . '>' . $label . '</option>'; + ?> + </select> + </label> + <?php + break; + case 'dropdown-pages': + $dropdown = wp_dropdown_pages( + array( + 'name' => '_customize-dropdown-pages-' . $this->id, + 'echo' => 0, + 'show_option_none' => __( '— Select —' ), + 'option_none_value' => '0', + 'selected' => $this->value(), + ) + ); + + // Hackily add in the data link parameter. + $dropdown = str_replace( '<select', '<select ' . $this->get_link(), $dropdown ); + + printf( + '<label class="customize-control-select"><span class="customize-control-title">%s</span> %s</label>', + $this->label, + $dropdown + ); + break; + } + } +} + +class WP_Customize_Color_Control extends WP_Customize_Control { + public $type = 'color'; + public $statuses; + + public function __construct( $manager, $id, $args = array() ) { + $this->statuses = array( '' => __('Default') ); + parent::__construct( $manager, $id, $args ); + } + + public function enqueue() { + wp_enqueue_script( 'farbtastic' ); + wp_enqueue_style( 'farbtastic' ); + } + + public function to_json() { + parent::to_json(); + $this->json['statuses'] = $this->statuses; + } + + public function render_content() { + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <div class="customize-control-content"> + <div class="dropdown"> + <div class="dropdown-content"> + <div class="dropdown-status"></div> + </div> + <div class="dropdown-arrow"></div> + </div> + <input class="color-picker-hex" type="text" maxlength="7" placeholder="<?php esc_attr_e('Hex Value'); ?>" /> + </div> + <div class="farbtastic-placeholder"></div> + </label> + <?php + } +} + +class WP_Customize_Upload_Control extends WP_Customize_Control { + public $type = 'upload'; + public $removed = ''; + public $context; + + public function enqueue() { + wp_enqueue_script( 'wp-plupload' ); + } + + public function to_json() { + parent::to_json(); + + $this->json['removed'] = $this->removed; + + if ( $this->context ) + $this->json['context'] = $this->context; + } + + public function render_content() { + ?> + <label> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + <div> + <a href="#" class="button-secondary upload"><?php _e( 'Upload' ); ?></a> + <a href="#" class="remove"><?php _e( 'Remove' ); ?></a> + </div> + </label> + <?php + } +} + +class WP_Customize_Image_Control extends WP_Customize_Upload_Control { + public $type = 'image'; + public $get_url; + public $statuses; + + protected $tabs = array(); + + public function __construct( $manager, $id, $args ) { + $this->statuses = array( '' => __('No Image') ); + + parent::__construct( $manager, $id, $args ); + + $this->add_tab( 'upload-new', __('Upload New'), array( $this, 'tab_upload_new' ) ); + $this->add_tab( 'uploaded', __('Uploaded'), array( $this, 'tab_uploaded' ) ); + } + + public function to_json() { + parent::to_json(); + $this->json['statuses'] = $this->statuses; + } + + public function render_content() { + $src = $this->value(); + if ( isset( $this->get_url ) ) + $src = call_user_func( $this->get_url, $src ); + + ?> + <div class="customize-image-picker"> + <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> + + <div class="customize-control-content"> + <div class="dropdown preview-thumbnail"> + <div class="dropdown-content"> + <?php if ( empty( $src ) ): ?> + <img style="display:none;" /> + <?php else: ?> + <img src="<?php echo esc_url( set_url_scheme( $src ) ); ?>" /> + <?php endif; ?> + <div class="dropdown-status"></div> + </div> + <div class="dropdown-arrow"></div> + </div> + </div> + + <div class="library"> + <ul> + <?php foreach ( $this->tabs as $id => $tab ): ?> + <li data-customize-tab='<?php echo esc_attr( $id ); ?>'> + <?php echo esc_html( $tab['label'] ); ?> + </li> + <?php endforeach; ?> + </ul> + <?php foreach ( $this->tabs as $id => $tab ): ?> + <div class="library-content" data-customize-tab='<?php echo esc_attr( $id ); ?>'> + <?php call_user_func( $tab['callback'] ); ?> + </div> + <?php endforeach; ?> + </div> + + <div class="actions"> + <a href="#" class="remove"><?php _e( 'Remove Image' ); ?></a> + </div> + </div> + <?php + } + + public function add_tab( $id, $label, $callback ) { + $this->tabs[ $id ] = array( + 'label' => $label, + 'callback' => $callback, + ); + } + + public function remove_tab( $id ) { + unset( $this->tabs[ $id ] ); + } + + public function tab_upload_new() { + if ( ! _device_can_upload() ) { + ?> + <p><?php _e('The web browser on your device cannot be used to upload files. You may be able to use the <a href="http://wordpress.org/extend/mobile/">native app for your device</a> instead.'); ?></p> + <?php + } else { + ?> + <div class="upload-dropzone"> + <?php _e('Drop a file here or <a href="#" class="upload">select a file</a>.'); ?> + </div> + <div class="upload-fallback"> + <span class="button-secondary"><?php _e('Select File'); ?></span> + </div> + <?php + } + } + + public function tab_uploaded() { + ?> + <div class="uploaded-target"></div> + <?php + } + + public function print_tab_image( $url, $thumbnail_url = null ) { + $url = set_url_scheme( $url ); + $thumbnail_url = ( $thumbnail_url ) ? set_url_scheme( $thumbnail_url ) : $url; + ?> + <a href="#" class="thumbnail" data-customize-image-value="<?php echo esc_url( $url ); ?>"> + <img src="<?php echo esc_url( $thumbnail_url ); ?>" /> + </a> + <?php + } +} + +class WP_Customize_Background_Image_Control extends WP_Customize_Image_Control { + public function __construct( $manager ) { + parent::__construct( $manager, 'background_image', array( + 'label' => __( 'Background Image' ), + 'section' => 'background_image', + 'context' => 'custom-background', + 'get_url' => 'get_background_image', + ) ); + + if ( $this->setting->default ) + $this->add_tab( 'default', __('Default'), array( $this, 'tab_default_background' ) ); + } + + public function tab_uploaded() { + $backgrounds = get_posts( array( + 'post_type' => 'attachment', + 'meta_key' => '_wp_attachment_is_custom_background', + 'meta_value' => $this->manager->get_stylesheet(), + 'orderby' => 'none', + 'nopaging' => true, + ) ); + + ?><div class="uploaded-target"></div><?php + + if ( empty( $backgrounds ) ) + return; + + foreach ( (array) $backgrounds as $background ) + $this->print_tab_image( esc_url_raw( $background->guid ) ); + } + + public function tab_default_background() { + $this->print_tab_image( $this->setting->default ); + } +} + +class WP_Customize_Header_Image_Control extends WP_Customize_Image_Control { + public function __construct( $manager ) { + parent::__construct( $manager, 'header_image', array( + 'label' => __( 'Header Image' ), + 'settings' => array( + 'default' => 'header_image', + 'data' => 'header_image_data', + ), + 'section' => 'header_image', + 'context' => 'custom-header', + 'removed' => 'remove-header', + 'get_url' => 'get_header_image', + 'statuses' => array( + '' => __('Default'), + 'remove-header' => __('No Image'), + 'random-default-image' => __('Random Default Image'), + 'random-uploaded-image' => __('Random Uploaded Image'), + ) + ) ); + + $this->add_tab( 'default', __('Default'), array( $this, 'tab_default_headers' ) ); + } + + public function print_header_image( $choice, $header ) { + $header['url'] = set_url_scheme( $header['url'] ); + $header['thumbnail_url'] = set_url_scheme( $header['thumbnail_url'] ); + + $header_image_data = array( 'choice' => $choice ); + foreach ( array( 'attachment_id', 'width', 'height', 'url', 'thumbnail_url' ) as $key ) { + if ( isset( $header[ $key ] ) ) + $header_image_data[ $key ] = $header[ $key ]; + } + + + ?> + <a href="#" class="thumbnail" + data-customize-image-value="<?php echo esc_url( $header['url'] ); ?>" + data-customize-header-image-data="<?php echo esc_attr( json_encode( $header_image_data ) ); ?>"> + <img src="<?php echo esc_url( $header['thumbnail_url'] ); ?>" /> + </a> + <?php + } + + public function tab_uploaded() { + $headers = get_uploaded_header_images(); + + ?><div class="uploaded-target"></div><?php + + foreach ( $headers as $choice => $header ) + $this->print_header_image( $choice, $header ); + } + + public function tab_default_headers() { + global $custom_image_header; + $custom_image_header->process_default_headers(); + + foreach ( $custom_image_header->default_headers as $choice => $header ) + $this->print_header_image( $choice, $header ); + } +} \ No newline at end of file diff --git a/wp-includes/class-wp-customize-manager.php b/wp-includes/class-wp-customize-manager.php new file mode 100644 index 000000000..c1ce0510e --- /dev/null +++ b/wp-includes/class-wp-customize-manager.php @@ -0,0 +1,1010 @@ +<?php +/** + * Customize + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ + +final class WP_Customize_Manager { + protected $theme; + protected $original_stylesheet; + + protected $previewing = false; + + protected $settings = array(); + protected $sections = array(); + protected $controls = array(); + + protected $customized; + + private $_post_values; + + /** + * Constructor. + * + * @since 3.4.0 + */ + public function __construct() { + require( ABSPATH . WPINC . '/class-wp-customize-setting.php' ); + require( ABSPATH . WPINC . '/class-wp-customize-section.php' ); + require( ABSPATH . WPINC . '/class-wp-customize-control.php' ); + + add_filter( 'wp_die_handler', array( $this, 'wp_die_handler' ) ); + + add_action( 'setup_theme', array( $this, 'setup_theme' ) ); + add_action( 'wp_loaded', array( $this, 'wp_loaded' ) ); + + // Run wp_redirect_status late to make sure we override the status last. + add_action( 'wp_redirect_status', array( $this, 'wp_redirect_status' ), 1000 ); + + // Do not spawn cron (especially the alternate cron) while running the customizer. + remove_action( 'init', 'wp_cron' ); + + // Do not run update checks when rendering the controls. + remove_action( 'admin_init', '_maybe_update_core' ); + remove_action( 'admin_init', '_maybe_update_plugins' ); + remove_action( 'admin_init', '_maybe_update_themes' ); + + add_action( 'wp_ajax_customize_save', array( $this, 'save' ) ); + + add_action( 'customize_register', array( $this, 'register_controls' ) ); + add_action( 'customize_controls_init', array( $this, 'prepare_controls' ) ); + add_action( 'customize_controls_enqueue_scripts', array( $this, 'enqueue_control_scripts' ) ); + } + + /** + * Return true if it's an AJAX request. + * + * @since 3.4.0 + */ + public function doing_ajax() { + return isset( $_POST['customized'] ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ); + } + + /** + * Custom wp_die wrapper. Returns either the standard message for UI + * or the AJAX message. + * + * @param mixed $ajax_message AJAX return + * @param mixed $message UI message + * + * @since 3.4.0 + */ + protected function wp_die( $ajax_message, $message = null ) { + if ( $this->doing_ajax() ) + wp_die( $ajax_message ); + + if ( ! $message ) + $message = __( 'Cheatin’ uh?' ); + + wp_die( $message ); + } + + /** + * Return the AJAX wp_die() handler if it's a customized request. + * + * @since 3.4.0 + */ + public function wp_die_handler() { + if ( $this->doing_ajax() ) + return '_ajax_wp_die_handler'; + + return '_default_wp_die_handler'; + } + /** + * Start preview and customize theme. + * + * Check if customize query variable exist. Init filters to filter the current theme. + * + * @since 3.4.0 + */ + public function setup_theme() { + send_origin_headers(); + + if ( is_admin() && ! $this->doing_ajax() ) + auth_redirect(); + elseif ( $this->doing_ajax() && ! is_user_logged_in() ) + $this->wp_die( 0 ); + + show_admin_bar( false ); + + if ( ! current_user_can( 'edit_theme_options' ) ) + $this->wp_die( -1 ); + + $this->original_stylesheet = get_stylesheet(); + + $this->theme = wp_get_theme( isset( $_REQUEST['theme'] ) ? $_REQUEST['theme'] : null ); + + if ( $this->is_theme_active() ) { + // Once the theme is loaded, we'll validate it. + add_action( 'after_setup_theme', array( $this, 'after_setup_theme' ) ); + } else { + if ( ! current_user_can( 'switch_themes' ) ) + $this->wp_die( -1 ); + + // If the theme isn't active, you can't preview it if it is not allowed or has errors. + if ( $this->theme()->errors() ) + $this->wp_die( -1 ); + + if ( ! $this->theme()->is_allowed() ) + $this->wp_die( -1 ); + } + + $this->start_previewing_theme(); + } + + function after_setup_theme() { + if ( ! $this->doing_ajax() && ! validate_current_theme() ) { + wp_redirect( 'themes.php?broken=true' ); + exit; + } + } + + /** + * Start previewing the selected theme. + * + * Adds filters to change the current theme. + * + * @since 3.4.0 + */ + public function start_previewing_theme() { + // Bail if we're already previewing. + if ( $this->is_preview() ) + return; + + $this->previewing = true; + + if ( ! $this->is_theme_active() ) { + add_filter( 'template', array( $this, 'get_template' ) ); + add_filter( 'stylesheet', array( $this, 'get_stylesheet' ) ); + add_filter( 'pre_option_current_theme', array( $this, 'current_theme' ) ); + + // @link: http://core.trac.wordpress.org/ticket/20027 + add_filter( 'pre_option_stylesheet', array( $this, 'get_stylesheet' ) ); + add_filter( 'pre_option_template', array( $this, 'get_template' ) ); + + // Handle custom theme roots. + add_filter( 'pre_option_stylesheet_root', array( $this, 'get_stylesheet_root' ) ); + add_filter( 'pre_option_template_root', array( $this, 'get_template_root' ) ); + } + + do_action( 'start_previewing_theme', $this ); + } + + /** + * Stop previewing the selected theme. + * + * Removes filters to change the current theme. + * + * @since 3.4.0 + */ + public function stop_previewing_theme() { + if ( ! $this->is_preview() ) + return; + + $this->previewing = false; + + if ( ! $this->is_theme_active() ) { + remove_filter( 'template', array( $this, 'get_template' ) ); + remove_filter( 'stylesheet', array( $this, 'get_stylesheet' ) ); + remove_filter( 'pre_option_current_theme', array( $this, 'current_theme' ) ); + + // @link: http://core.trac.wordpress.org/ticket/20027 + remove_filter( 'pre_option_stylesheet', array( $this, 'get_stylesheet' ) ); + remove_filter( 'pre_option_template', array( $this, 'get_template' ) ); + + // Handle custom theme roots. + remove_filter( 'pre_option_stylesheet_root', array( $this, 'get_stylesheet_root' ) ); + remove_filter( 'pre_option_template_root', array( $this, 'get_template_root' ) ); + } + + do_action( 'stop_previewing_theme', $this ); + } + + /** + * Get the theme being customized. + * + * @since 3.4.0 + * + * @return WP_Theme + */ + public function theme() { + return $this->theme; + } + + /** + * Get the registered settings. + * + * @since 3.4.0 + * + * @return array + */ + public function settings() { + return $this->settings; + } + + /** + * Get the registered controls. + * + * @since 3.4.0 + * + * @return array + */ + public function controls() { + return $this->controls; + } + + /** + * Get the registered sections. + * + * @since 3.4.0 + * + * @return array + */ + public function sections() { + return $this->sections; + } + + /** + * Checks if the current theme is active. + * + * @since 3.4.0 + * + * @return bool + */ + public function is_theme_active() { + return $this->get_stylesheet() == $this->original_stylesheet; + } + + /** + * Register styles/scripts and initialize the preview of each setting + * + * @since 3.4.0 + */ + public function wp_loaded() { + do_action( 'customize_register', $this ); + + if ( $this->is_preview() && ! is_admin() ) + $this->customize_preview_init(); + } + + /** + * Prevents AJAX requests from following redirects when previewing a theme + * by issuing a 200 response instead of a 30x. + * + * Instead, the JS will sniff out the location header. + * + * @since 3.4.0 + */ + public function wp_redirect_status( $status ) { + if ( $this->is_preview() && ! is_admin() ) + return 200; + + return $status; + } + + /** + * Decode the $_POST attribute used to override the WP_Customize_Setting values. + * + * @since 3.4.0 + */ + public function post_value( $setting ) { + if ( ! isset( $this->_post_values ) ) { + if ( isset( $_POST['customized'] ) ) + $this->_post_values = json_decode( stripslashes( $_POST['customized'] ), true ); + else + $this->_post_values = false; + } + + if ( isset( $this->_post_values[ $setting->id ] ) ) + return $setting->sanitize( $this->_post_values[ $setting->id ] ); + } + + /** + * Print javascript settings. + * + * @since 3.4.0 + */ + public function customize_preview_init() { + $this->prepare_controls(); + + wp_enqueue_script( 'customize-preview' ); + add_action( 'wp_head', array( $this, 'customize_preview_base' ) ); + add_action( 'wp_head', array( $this, 'customize_preview_html5' ) ); + add_action( 'wp_footer', array( $this, 'customize_preview_settings' ), 20 ); + add_action( 'shutdown', array( $this, 'customize_preview_signature' ), 1000 ); + add_filter( 'wp_die_handler', array( $this, 'remove_preview_signature' ) ); + + foreach ( $this->settings as $setting ) { + $setting->preview(); + } + + do_action( 'customize_preview_init', $this ); + } + + /** + * Print base element for preview frame. + * + * @since 3.4.0 + */ + public function customize_preview_base() { + ?><base href="<?php echo home_url( '/' ); ?>" /><?php + } + + /** + * Print a workaround to handle HTML5 tags in IE < 9 + * + * @since 3.4.0 + */ + public function customize_preview_html5() { ?> + <!--[if lt IE 9]> + <script type="text/javascript"> + var e = [ 'abbr', 'article', 'aside', 'audio', 'canvas', 'datalist', 'details', + 'figure', 'footer', 'header', 'hgroup', 'mark', 'menu', 'meter', 'nav', + 'output', 'progress', 'section', 'time', 'video' ]; + for ( var i = 0; i < e.length; i++ ) { + document.createElement( e[i] ); + } + </script> + <![endif]--><?php + } + + /** + * Print javascript settings for preview frame. + * + * @since 3.4.0 + */ + public function customize_preview_settings() { + $settings = array( + 'values' => array(), + 'channel' => esc_js( $_POST['customize_messenger_channel'] ), + ); + + foreach ( $this->settings as $id => $setting ) { + $settings['values'][ $id ] = $setting->js_value(); + } + + ?> + <script type="text/javascript"> + var _wpCustomizeSettings = <?php echo json_encode( $settings ); ?>; + </script> + <?php + } + + /** + * Prints a signature so we can ensure the customizer was properly executed. + * + * @since 3.4.0 + */ + public function customize_preview_signature() { + echo 'WP_CUSTOMIZER_SIGNATURE'; + } + + /** + * Removes the signature in case we experience a case where the customizer was not properly executed. + * + * @since 3.4.0 + */ + public function remove_preview_signature( $return = null ) { + remove_action( 'shutdown', array( $this, 'customize_preview_signature' ), 1000 ); + + return $return; + } + + /** + * Is it a theme preview? + * + * @since 3.4.0 + * + * @return bool True if it's a preview, false if not. + */ + public function is_preview() { + return (bool) $this->previewing; + } + + /** + * Retrieve the template name of the previewed theme. + * + * @since 3.4.0 + * + * @return string Template name. + */ + public function get_template() { + return $this->theme()->get_template(); + } + + /** + * Retrieve the stylesheet name of the previewed theme. + * + * @since 3.4.0 + * + * @return string Stylesheet name. + */ + public function get_stylesheet() { + return $this->theme()->get_stylesheet(); + } + + /** + * Retrieve the template root of the previewed theme. + * + * @since 3.4.0 + * + * @return string Theme root. + */ + public function get_template_root() { + return get_raw_theme_root( $this->get_template(), true ); + } + + /** + * Retrieve the stylesheet root of the previewed theme. + * + * @since 3.4.0 + * + * @return string Theme root. + */ + public function get_stylesheet_root() { + return get_raw_theme_root( $this->get_stylesheet(), true ); + } + + /** + * Filter the current theme and return the name of the previewed theme. + * + * @since 3.4.0 + * + * @return string Theme name. + */ + public function current_theme( $current_theme ) { + return $this->theme()->display('Name'); + } + + /** + * Switch the theme and trigger the save action of each setting. + * + * @since 3.4.0 + */ + public function save() { + if ( ! $this->is_preview() ) + die; + + check_ajax_referer( 'customize_controls-' . $this->get_stylesheet(), 'nonce' ); + + // Do we have to switch themes? + if ( ! $this->is_theme_active() ) { + // Temporarily stop previewing the theme to allow switch_themes() + // to operate properly. + $this->stop_previewing_theme(); + switch_theme( $this->get_template(), $this->get_stylesheet() ); + $this->start_previewing_theme(); + } + + do_action( 'customize_save', $this ); + + foreach ( $this->settings as $setting ) { + $setting->save(); + } + + die; + } + + /** + * Add a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the setting. Can be a + * theme mod or option name. + * @param array $args Setting arguments. + */ + public function add_setting( $id, $args = array() ) { + if ( is_a( $id, 'WP_Customize_Setting' ) ) + $setting = $id; + else + $setting = new WP_Customize_Setting( $this, $id, $args ); + + $this->settings[ $setting->id ] = $setting; + } + + /** + * Retrieve a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the setting. + * @return object The settings object. + */ + public function get_setting( $id ) { + if ( isset( $this->settings[ $id ] ) ) + return $this->settings[ $id ]; + } + + /** + * Remove a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the setting. + */ + public function remove_setting( $id ) { + unset( $this->settings[ $id ] ); + } + + /** + * Add a customize section. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the section. + * @param array $args Section arguments. + */ + public function add_section( $id, $args = array() ) { + if ( is_a( $id, 'WP_Customize_Section' ) ) + $section = $id; + else + $section = new WP_Customize_Section( $this, $id, $args ); + + $this->sections[ $section->id ] = $section; + } + + /** + * Retrieve a customize section. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the section. + * @return object The section object. + */ + public function get_section( $id ) { + if ( isset( $this->sections[ $id ] ) ) + return $this->sections[ $id ]; + } + + /** + * Remove a customize section. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the section. + */ + public function remove_section( $id ) { + unset( $this->sections[ $id ] ); + } + + /** + * Add a customize control. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the control. + * @param array $args Setting arguments. + */ + public function add_control( $id, $args = array() ) { + if ( is_a( $id, 'WP_Customize_Control' ) ) + $control = $id; + else + $control = new WP_Customize_Control( $this, $id, $args ); + + $this->controls[ $control->id ] = $control; + } + + /** + * Retrieve a customize control. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the control. + * @return object The settings object. + */ + public function get_control( $id ) { + if ( isset( $this->controls[ $id ] ) ) + return $this->controls[ $id ]; + } + + /** + * Remove a customize setting. + * + * @since 3.4.0 + * + * @param string $id A specific ID of the control. + */ + public function remove_control( $id ) { + unset( $this->controls[ $id ] ); + } + + /** + * Helper function to compare two objects by priority. + * + * @since 3.4.0 + * + * @param object $a Object A. + * @param object $b Object B. + */ + protected final function _cmp_priority( $a, $b ) { + $ap = $a->priority; + $bp = $b->priority; + + if ( $ap == $bp ) + return 0; + return ( $ap > $bp ) ? 1 : -1; + } + + /** + * Prepare settings and sections. + * + * @since 3.4.0 + */ + public function prepare_controls() { + // Prepare controls + // Reversing makes uasort sort by time added when conflicts occur. + + $this->controls = array_reverse( $this->controls ); + $controls = array(); + + foreach ( $this->controls as $id => $control ) { + if ( ! isset( $this->sections[ $control->section ] ) || ! $control->check_capabilities() ) + continue; + + $this->sections[ $control->section ]->controls[] = $control; + $controls[ $id ] = $control; + } + $this->controls = $controls; + + // Prepare sections + $this->sections = array_reverse( $this->sections ); + uasort( $this->sections, array( $this, '_cmp_priority' ) ); + $sections = array(); + + foreach ( $this->sections as $section ) { + if ( ! $section->check_capabilities() || ! $section->controls ) + continue; + + usort( $section->controls, array( $this, '_cmp_priority' ) ); + $sections[] = $section; + } + $this->sections = $sections; + } + + /** + * Enqueue scripts for customize controls. + * + * @since 3.4.0 + */ + public function enqueue_control_scripts() { + foreach ( $this->controls as $control ) { + $control->enqueue(); + } + } + + /** + * Register some default controls. + * + * @since 3.4.0 + */ + public function register_controls() { + + /* Site Title & Tagline */ + + $this->add_section( 'title_tagline', array( + 'title' => __( 'Site Title & Tagline' ), + 'priority' => 20, + ) ); + + $this->add_setting( 'blogname', array( + 'default' => get_option( 'blogname' ), + 'type' => 'option', + 'capability' => 'manage_options', + ) ); + + $this->add_control( 'blogname', array( + 'label' => __( 'Site Title' ), + 'section' => 'title_tagline', + ) ); + + $this->add_setting( 'blogdescription', array( + 'default' => get_option( 'blogdescription' ), + 'type' => 'option', + 'capability' => 'manage_options', + ) ); + + $this->add_control( 'blogdescription', array( + 'label' => __( 'Tagline' ), + 'section' => 'title_tagline', + ) ); + + /* Colors */ + + $this->add_section( 'colors', array( + 'title' => __( 'Colors' ), + 'priority' => 40, + ) ); + + $this->add_setting( 'header_textcolor', array( + 'theme_supports' => array( 'custom-header', 'header-text' ), + 'default' => get_theme_support( 'custom-header', 'default-text-color' ), + + 'sanitize_callback' => array( $this, '_sanitize_header_textcolor' ), + 'sanitize_js_callback' => 'maybe_hash_hex_color', + ) ); + + // Input type: checkbox + // With custom value + $this->add_control( 'display_header_text', array( + 'settings' => 'header_textcolor', + 'label' => __( 'Display Header Text' ), + 'section' => 'title_tagline', + 'type' => 'checkbox', + ) ); + + $this->add_control( new WP_Customize_Color_Control( $this, 'header_textcolor', array( + 'label' => __( 'Header Text Color' ), + 'section' => 'colors', + ) ) ); + + // Input type: Color + // With sanitize_callback + $this->add_setting( 'background_color', array( + 'default' => get_theme_support( 'custom-background', 'default-color' ), + 'theme_supports' => 'custom-background', + + 'sanitize_callback' => 'sanitize_hex_color_no_hash', + 'sanitize_js_callback' => 'maybe_hash_hex_color', + ) ); + + $this->add_control( new WP_Customize_Color_Control( $this, 'background_color', array( + 'label' => __( 'Background Color' ), + 'section' => 'colors', + ) ) ); + + + /* Custom Header */ + + $this->add_section( 'header_image', array( + 'title' => __( 'Header Image' ), + 'theme_supports' => 'custom-header', + 'priority' => 60, + ) ); + + $this->add_setting( new WP_Customize_Filter_Setting( $this, 'header_image', array( + 'default' => get_theme_support( 'custom-header', 'default-image' ), + 'theme_supports' => 'custom-header', + ) ) ); + + $this->add_setting( new WP_Customize_Header_Image_Setting( $this, 'header_image_data', array( + // 'default' => get_theme_support( 'custom-header', 'default-image' ), + 'theme_supports' => 'custom-header', + ) ) ); + + $this->add_control( new WP_Customize_Header_Image_Control( $this ) ); + + /* Custom Background */ + + $this->add_section( 'background_image', array( + 'title' => __( 'Background Image' ), + 'theme_supports' => 'custom-background', + 'priority' => 80, + ) ); + + $this->add_setting( 'background_image', array( + 'default' => get_theme_support( 'custom-background', 'default-image' ), + 'theme_supports' => 'custom-background', + ) ); + + $this->add_setting( new WP_Customize_Background_Image_Setting( $this, 'background_image_thumb', array( + 'theme_supports' => 'custom-background', + ) ) ); + + $this->add_control( new WP_Customize_Background_Image_Control( $this ) ); + + $this->add_setting( 'background_repeat', array( + 'default' => 'repeat', + 'theme_supports' => 'custom-background', + ) ); + + $this->add_control( 'background_repeat', array( + 'label' => __( 'Background Repeat' ), + 'section' => 'background_image', + 'type' => 'radio', + 'choices' => array( + 'no-repeat' => __('No Repeat'), + 'repeat' => __('Tile'), + 'repeat-x' => __('Tile Horizontally'), + 'repeat-y' => __('Tile Vertically'), + ), + ) ); + + $this->add_setting( 'background_position_x', array( + 'default' => 'left', + 'theme_supports' => 'custom-background', + ) ); + + $this->add_control( 'background_position_x', array( + 'label' => __( 'Background Position' ), + 'section' => 'background_image', + 'type' => 'radio', + 'choices' => array( + 'left' => __('Left'), + 'center' => __('Center'), + 'right' => __('Right'), + ), + ) ); + + $this->add_setting( 'background_attachment', array( + 'default' => 'fixed', + 'theme_supports' => 'custom-background', + ) ); + + $this->add_control( 'background_attachment', array( + 'label' => __( 'Background Attachment' ), + 'section' => 'background_image', + 'type' => 'radio', + 'choices' => array( + 'fixed' => __('Fixed'), + 'scroll' => __('Scroll'), + ), + ) ); + + // If the theme is using the default background callback, we can update + // the background CSS using postMessage. + if ( get_theme_support( 'custom-background', 'wp-head-callback' ) === '_custom_background_cb' ) { + foreach ( array( 'color', 'image', 'position_x', 'repeat', 'attachment' ) as $prop ) { + $this->get_setting( 'background_' . $prop )->transport = 'postMessage'; + } + } + + /* Nav Menus */ + + $locations = get_registered_nav_menus(); + $menus = wp_get_nav_menus(); + $menu_locations = get_nav_menu_locations(); + $num_locations = count( array_keys( $locations ) ); + + $this->add_section( 'nav', array( + 'title' => __( 'Navigation' ), + 'theme_supports' => 'menus', + 'priority' => 100, + 'description' => sprintf( _n('Your theme supports %s menu. Select which menu you would like to use.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n( $num_locations ) ) . "\n\n" . __('You can edit your menu content on the Menus screen in the Appearance section.'), + ) ); + + if ( $menus ) { + $choices = array( 0 => __( '— Select —' ) ); + foreach ( $menus as $menu ) { + $truncated_name = wp_html_excerpt( $menu->name, 40 ); + $truncated_name = ( $truncated_name == $menu->name ) ? $menu->name : trim( $truncated_name ) . '…'; + $choices[ $menu->term_id ] = $truncated_name; + } + + foreach ( $locations as $location => $description ) { + $menu_setting_id = "nav_menu_locations[{$location}]"; + + $this->add_setting( $menu_setting_id, array( + 'sanitize_callback' => 'absint', + 'theme_supports' => 'menus', + ) ); + + $this->add_control( $menu_setting_id, array( + 'label' => $description, + 'section' => 'nav', + 'type' => 'select', + 'choices' => $choices, + ) ); + } + } + + /* Static Front Page */ + // #WP19627 + + $this->add_section( 'static_front_page', array( + 'title' => __( 'Static Front Page' ), + // 'theme_supports' => 'static-front-page', + 'priority' => 120, + 'description' => __( 'Your theme supports a static front page.' ), + ) ); + + $this->add_setting( 'show_on_front', array( + 'default' => get_option( 'show_on_front' ), + 'capability' => 'manage_options', + 'type' => 'option', + // 'theme_supports' => 'static-front-page', + ) ); + + $this->add_control( 'show_on_front', array( + 'label' => __( 'Front page displays' ), + 'section' => 'static_front_page', + 'type' => 'radio', + 'choices' => array( + 'posts' => __( 'Your latest posts' ), + 'page' => __( 'A static page' ), + ), + ) ); + + $this->add_setting( 'page_on_front', array( + 'type' => 'option', + 'capability' => 'manage_options', + // 'theme_supports' => 'static-front-page', + ) ); + + $this->add_control( 'page_on_front', array( + 'label' => __( 'Front page' ), + 'section' => 'static_front_page', + 'type' => 'dropdown-pages', + ) ); + + $this->add_setting( 'page_for_posts', array( + 'type' => 'option', + 'capability' => 'manage_options', + // 'theme_supports' => 'static-front-page', + ) ); + + $this->add_control( 'page_for_posts', array( + 'label' => __( 'Posts page' ), + 'section' => 'static_front_page', + 'type' => 'dropdown-pages', + ) ); + } + + /** + * Callback for validating the header_textcolor value. + * + * Accepts 'blank', and otherwise uses sanitize_hex_color_no_hash(). + * + * @since 3.4.0 + */ + public function _sanitize_header_textcolor( $color ) { + return ( 'blank' === $color ) ? 'blank' : sanitize_hex_color_no_hash( $color ); + } +}; + +/** + * Validates a hex color. + * + * Returns either '', a 3 or 6 digit hex color (with #), or null. + * For validating values without a #, see sanitize_hex_color_no_hash(). + * + * @since 3.4.0 + */ +function sanitize_hex_color( $color ) { + if ( '' === $color ) + return ''; + + // 3 or 6 hex digits, or the empty string. + if ( preg_match('|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) + return $color; + + return null; +} + +/** + * Sanitizes a hex color without a hash. Use sanitize_hex_color() when possible. + * + * Saving hex colors without a hash puts the burden of adding the hash on the + * UI, which makes it difficult to use or upgrade to other color types such as + * rgba, hsl, rgb, and html color names. + * + * Returns either '', a 3 or 6 digit hex color (without a #), or null. + * + * @since 3.4.0 + */ +function sanitize_hex_color_no_hash( $color ) { + $color = ltrim( $color, '#' ); + + if ( '' === $color ) + return ''; + + return sanitize_hex_color( '#' . $color ) ? $color : null; +} + +/** + * Ensures that any hex color is properly hashed. + * Otherwise, returns value untouched. + * + * This method should only be necessary if using sanitize_hex_color_no_hash(). + * + * @since 3.4.0 + */ +function maybe_hash_hex_color( $color ) { + if ( $unhashed = sanitize_hex_color_no_hash( $color ) ) + return '#' . $unhashed; + + return $color; +} diff --git a/wp-includes/class-wp-customize-section.php b/wp-includes/class-wp-customize-section.php new file mode 100644 index 000000000..b1b7d5f86 --- /dev/null +++ b/wp-includes/class-wp-customize-section.php @@ -0,0 +1,94 @@ +<?php +/** + * Customize Section Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ + +class WP_Customize_Section { + public $manager; + public $id; + public $priority = 10; + public $capability = 'edit_theme_options'; + public $theme_supports = ''; + public $title = ''; + public $description = ''; + public $controls; + + /** + * Constructor. + * + * @since 3.4.0 + * + * @param string $id An specific ID of the section. + * @param array $args Section arguments. + */ + function __construct( $manager, $id, $args = array() ) { + $keys = array_keys( get_class_vars( __CLASS__ ) ); + foreach ( $keys as $key ) { + if ( isset( $args[ $key ] ) ) + $this->$key = $args[ $key ]; + } + + $this->manager = $manager; + $this->id = $id; + + $this->controls = array(); // Users cannot customize the $controls array. + + return $this; + } + + /** + * Check if the theme supports the section and check user capabilities. + * + * @since 3.4.0 + * + * @return bool False if theme doesn't support the section or user doesn't have the capability. + */ + public final function check_capabilities() { + if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) + return false; + + if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) + return false; + + return true; + } + + /** + * Check capabilities and render the section. + * + * @since 3.4.0 + */ + public final function maybe_render() { + if ( ! $this->check_capabilities() ) + return; + + do_action( 'customize_render_section', $this ); + do_action( 'customize_render_section_' . $this->id ); + + $this->render(); + } + + + /** + * Render the section. + * + * @since 3.4.0 + */ + protected function render() { + ?> + <li id="customize-section-<?php echo esc_attr( $this->id ); ?>" class="control-section customize-section"> + <h3 class="customize-section-title" title="<?php echo esc_attr( $this->description ); ?>"><?php echo esc_html( $this->title ); ?></h3> + <ul class="customize-section-content"> + <?php + foreach ( $this->controls as $control ) + $control->maybe_render(); + ?> + </ul> + </li> + <?php + } +} diff --git a/wp-includes/class-wp-customize-setting.php b/wp-includes/class-wp-customize-setting.php new file mode 100644 index 000000000..c4cff0e29 --- /dev/null +++ b/wp-includes/class-wp-customize-setting.php @@ -0,0 +1,409 @@ +<?php +/** + * Customize Setting Class + * + * @package WordPress + * @subpackage Customize + * @since 3.4.0 + */ + +class WP_Customize_Setting { + public $manager; + public $id; + + public $type = 'theme_mod'; + public $capability = 'edit_theme_options'; + public $theme_supports = ''; + public $default = ''; + public $transport = 'refresh'; + + public $sanitize_callback = ''; + public $sanitize_js_callback = ''; + + protected $id_data = array(); + private $_post_value; // Cached, sanitized $_POST value. + + /** + * Constructor. + * + * @since 3.4.0 + * + * @param string $id An specific ID of the setting. Can be a + * theme mod or option name. + * @param array $args Setting arguments. + */ + function __construct( $manager, $id, $args = array() ) { + $keys = array_keys( get_class_vars( __CLASS__ ) ); + foreach ( $keys as $key ) { + if ( isset( $args[ $key ] ) ) + $this->$key = $args[ $key ]; + } + + $this->manager = $manager; + $this->id = $id; + + // Parse the ID for array keys. + $this->id_data[ 'keys' ] = preg_split( '/\[/', str_replace( ']', '', $this->id ) ); + $this->id_data[ 'base' ] = array_shift( $this->id_data[ 'keys' ] ); + + // Rebuild the ID. + $this->id = $this->id_data[ 'base' ]; + if ( ! empty( $this->id_data[ 'keys' ] ) ) + $this->id .= '[' . implode( '][', $this->id_data[ 'keys' ] ) . ']'; + + if ( $this->sanitize_callback ) + add_filter( "customize_sanitize_{$this->id}", $this->sanitize_callback, 10, 2 ); + + if ( $this->sanitize_js_callback ) + add_filter( "customize_sanitize_js_{$this->id}", $this->sanitize_js_callback, 10, 2 ); + + return $this; + } + + /** + * Handle previewing the setting. + * + * @since 3.4.0 + */ + public function preview() { + switch( $this->type ) { + case 'theme_mod' : + add_filter( 'theme_mod_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + break; + case 'option' : + if ( empty( $this->id_data[ 'keys' ] ) ) + add_filter( 'pre_option_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + else { + add_filter( 'option_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + add_filter( 'default_option_' . $this->id_data[ 'base' ], array( $this, '_preview_filter' ) ); + } + break; + default : + do_action( 'customize_preview_' . $this->id ); + } + } + + /** + * Callback function to filter the theme mods and options. + * + * @since 3.4.0 + * + * @param mixed Old value. + * @return mixed New or old value. + */ + public function _preview_filter( $original ) { + return $this->multidimensional_replace( $original, $this->id_data[ 'keys' ], $this->post_value() ); + } + + /** + * Set the value of the parameter for a specific theme. + * + * @since 3.4.0 + * + * @return bool False if cap check fails or value isn't set. + */ + public final function save() { + $value = $this->post_value(); + + if ( ! $this->check_capabilities() || ! isset( $value ) ) + return false; + + do_action( 'customize_save_' . $this->id_data[ 'base' ] ); + + $this->update( $value ); + } + + /** + * Fetches, validates, and sanitizes the $_POST value. + * + * @since 3.4.0 + * + * @param $default mixed A default value which is used as a fallback. Default is null. + * @return mixed Either the default value on failure or sanitized value. + */ + public final function post_value( $default = null ) { + if ( isset( $this->_post_value ) ) + return $this->_post_value; + + $result = $this->manager->post_value( $this ); + + if ( isset( $result ) ) + return $this->_post_value = $result; + else + return $default; + } + + /** + * Sanitize an input. + * + * @since 3.4.0 + * + * @param $value mixed The value to sanitize. + * @return mixed Null if an input isn't valid, otherwise the sanitized value. + */ + public function sanitize( $value ) { + $value = stripslashes_deep( $value ); + return apply_filters( "customize_sanitize_{$this->id}", $value, $this ); + } + + /** + * Set the value of the parameter for a specific theme. + * + * @since 3.4.0 + * + * @param $value mixed The value to update. + * @return mixed The result of saving the value. + */ + protected function update( $value ) { + switch( $this->type ) { + case 'theme_mod' : + return $this->_update_theme_mod( $value ); + break; + case 'option' : + return $this->_update_option( $value ); + break; + default : + return do_action( 'customize_update_' . $this->type, $value ); + } + } + + /** + * Update the theme mod from the value of the parameter. + * + * @since 3.4.0 + * + * @param $value mixed The value to update. + * @return mixed The result of saving the value. + */ + protected function _update_theme_mod( $value ) { + // Handle non-array theme mod. + if ( empty( $this->id_data[ 'keys' ] ) ) + return set_theme_mod( $this->id_data[ 'base' ], $value ); + + // Handle array-based theme mod. + $mods = get_theme_mod( $this->id_data[ 'base' ] ); + $mods = $this->multidimensional_replace( $mods, $this->id_data[ 'keys' ], $value ); + if ( isset( $mods ) ) + return set_theme_mod( $this->id_data[ 'base' ], $mods ); + } + + /** + * Update the theme mod from the value of the parameter. + * + * @since 3.4.0 + * + * @param $value mixed The value to update. + * @return mixed The result of saving the value. + */ + protected function _update_option( $value ) { + // Handle non-array option. + if ( empty( $this->id_data[ 'keys' ] ) ) + return update_option( $this->id_data[ 'base' ], $value ); + + // Handle array-based options. + $options = get_option( $this->id_data[ 'base' ] ); + $options = $this->multidimensional_replace( $options, $this->id_data[ 'keys' ], $value ); + if ( isset( $options ) ) + return update_option( $this->id_data[ 'base' ], $options ); + } + + /** + * Fetch the value of the parameter for a specific theme. + * + * @since 3.4.0 + * + * @return mixed The requested value. + */ + public function value() { + switch( $this->type ) { + case 'theme_mod' : + $function = 'get_theme_mod'; + break; + case 'option' : + $function = 'get_option'; + break; + default : + return apply_filters( 'customize_value_' . $this->id_data[ 'base' ], $this->default ); + } + + // Handle non-array value + if ( empty( $this->id_data[ 'keys' ] ) ) + return $function( $this->id_data[ 'base' ], $this->default ); + + // Handle array-based value + $values = $function( $this->id_data[ 'base' ] ); + return $this->multidimensional_get( $values, $this->id_data[ 'keys' ], $this->default ); + } + + /** + * Escape the parameter's value for use in JavaScript. + * + * @since 3.4.0 + * + * @return mixed The requested escaped value. + */ + public function js_value() { + $value = apply_filters( "customize_sanitize_js_{$this->id}", $this->value(), $this ); + + if ( is_string( $value ) ) + return html_entity_decode( $value, ENT_QUOTES, 'UTF-8'); + + return $value; + } + + /** + * Check if the theme supports the setting and check user capabilities. + * + * @since 3.4.0 + * + * @return bool False if theme doesn't support the setting or user can't change setting, otherwise true. + */ + public final function check_capabilities() { + if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) + return false; + + if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) + return false; + + return true; + } + + /** + * Multidimensional helper function. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @param bool $create Default is false. + * @return null|array + */ + final protected function multidimensional( &$root, $keys, $create = false ) { + if ( $create && empty( $root ) ) + $root = array(); + + if ( ! isset( $root ) || empty( $keys ) ) + return; + + $last = array_pop( $keys ); + $node = &$root; + + foreach ( $keys as $key ) { + if ( $create && ! isset( $node[ $key ] ) ) + $node[ $key ] = array(); + + if ( ! is_array( $node ) || ! isset( $node[ $key ] ) ) + return; + + $node = &$node[ $key ]; + } + + if ( $create && ! isset( $node[ $last ] ) ) + $node[ $last ] = array(); + + if ( ! isset( $node[ $last ] ) ) + return; + + return array( + 'root' => &$root, + 'node' => &$node, + 'key' => $last, + ); + } + + /** + * Will attempt to replace a specific value in a multidimensional array. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @param mixed $value The value to update. + * @return + */ + final protected function multidimensional_replace( $root, $keys, $value ) { + if ( ! isset( $value ) ) + return $root; + elseif ( empty( $keys ) ) // If there are no keys, we're replacing the root. + return $value; + + $result = $this->multidimensional( $root, $keys, true ); + + if ( isset( $result ) ) + $result['node'][ $result['key'] ] = $value; + + return $root; + } + + /** + * Will attempt to fetch a specific value from a multidimensional array. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @param $default A default value which is used as a fallback. Default is null. + * @return mixed The requested value or the default value. + */ + final protected function multidimensional_get( $root, $keys, $default = null ) { + if ( empty( $keys ) ) // If there are no keys, test the root. + return isset( $root ) ? $root : $default; + + $result = $this->multidimensional( $root, $keys ); + return isset( $result ) ? $result['node'][ $result['key'] ] : $default; + } + + /** + * Will attempt to check if a specific value in a multidimensional array is set. + * + * @since 3.4.0 + * + * @param $root + * @param $keys + * @return bool True if value is set, false if not. + */ + final protected function multidimensional_isset( $root, $keys ) { + $result = $this->multidimensional_get( $root, $keys ); + return isset( $result ); + } +} + +/** + * A setting that is used to filter a value, but will not save the results. + * + * Results should be properly handled using another setting or callback. + */ +class WP_Customize_Filter_Setting extends WP_Customize_Setting { + public function update() {} +} + +/** + * A setting that is used to filter a value, but will not save the results. + * + * Results should be properly handled using another setting or callback. + */ +final class WP_Customize_Header_Image_Setting extends WP_Customize_Setting { + public $id = 'header_image_data'; + + public function update( $value ) { + global $custom_image_header; + + // If the value doesn't exist (removed or random), + // use the header_image value. + if ( ! $value ) + $value = $this->manager->get_setting('header_image')->post_value(); + + if ( is_array( $value ) && isset( $value['choice'] ) ) + $custom_image_header->set_header_image( $value['choice'] ); + else + $custom_image_header->set_header_image( $value ); + } +} + +final class WP_Customize_Background_Image_Setting extends WP_Customize_Setting { + public $id = 'background_image_thumb'; + + public function update( $value ) { + remove_theme_mod( 'background_image_thumb' ); + } +} diff --git a/wp-includes/class-wp-editor.php b/wp-includes/class-wp-editor.php index a272eb7ef..04bb7c91a 100644 --- a/wp-includes/class-wp-editor.php +++ b/wp-includes/class-wp-editor.php @@ -3,7 +3,7 @@ * Facilitates adding of the WordPress editor as used on the Write and Edit screens. * * @package WordPress - * @since 3.3 + * @since 3.3.0 * * Private, not included by default. See wp_editor() in wp-includes/general-template.php. */ @@ -124,7 +124,7 @@ final class _WP_Editors { } public static function editor_settings($editor_id, $set) { - global $editor_styles; + global $editor_styles, $post; $first_run = false; if ( empty(self::$first_init) ) { @@ -167,10 +167,10 @@ final class _WP_Editors { $no_captions = (bool) apply_filters( 'disable_captions', '' ); $plugins = array( 'inlinepopups', 'spellchecker', 'tabfocus', 'paste', 'media', 'fullscreen', 'wordpress', 'wpeditimage', 'wpgallery', 'wplink', 'wpdialogs' ); $first_run = true; + $ext_plugins = ''; if ( $set['teeny'] ) { self::$plugins = $plugins = apply_filters( 'teeny_mce_plugins', array('inlinepopups', 'fullscreen', 'wordpress', 'wplink', 'wpdialogs'), $editor_id ); - $ext_plugins = ''; } else { /* The following filter takes an associative array of external plugins for TinyMCE in the form 'plugin_name' => 'url'. @@ -181,7 +181,6 @@ final class _WP_Editors { */ $mce_external_plugins = apply_filters('mce_external_plugins', array()); - $ext_plugins = ''; if ( ! empty($mce_external_plugins) ) { /* @@ -247,8 +246,6 @@ final class _WP_Editors { $ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . "\n"; $ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . "\n"; - - self::$ext_plugins .= $ext_plugins; } } @@ -259,14 +256,22 @@ final class _WP_Editors { $plugins[] = 'wpfullscreen'; self::$plugins = $plugins; + self::$ext_plugins = $ext_plugins; + + /* + translators: These languages show up in the spellchecker drop-down menu, in the order specified, and with the first + language listed being the default language. They must be comma-separated and take the format of name=code, where name + is the language name (which you may internationalize), and code is a valid ISO 639 language code. Please test the + spellchecker with your values. + */ + $mce_spellchecker_languages = __( 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv' ); /* The following filter allows localization scripts to change the languages displayed in the spellchecker's drop-down menu. By default it uses Google's spellchecker API, but can be configured to use PSpell/ASpell if installed on the server. - The + sign marks the default language. More information: - http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker + The + sign marks the default language. More: http://www.tinymce.com/wiki.php/Plugin:spellchecker. */ - $mce_spellchecker_languages = apply_filters('mce_spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv'); + $mce_spellchecker_languages = apply_filters( 'mce_spellchecker_languages', '+' . $mce_spellchecker_languages ); self::$first_init = array( 'mode' => 'exact', @@ -301,15 +306,17 @@ final class _WP_Editors { 'convert_urls' => false, 'remove_linebreaks' => true, 'gecko_spellcheck' => true, + 'fix_list_elements' => true, 'keep_styles' => false, 'entities' => '38,amp,60,lt,62,gt', 'accessibility_focus' => true, - 'tabfocus_elements' => 'major-publishing-actions', + 'tabfocus_elements' => 'title,publish', 'media_strict' => false, 'paste_remove_styles' => true, 'paste_remove_spans' => true, 'paste_strip_class_attributes' => 'all', 'paste_text_use_dialog' => true, + 'spellchecker_rpc_url' => self::$baseurl . '/plugins/spellchecker/rpc.php', 'extended_valid_elements' => 'article[*],aside[*],audio[*],canvas[*],command[*],datalist[*],details[*],embed[*],figcaption[*],figure[*],footer[*],header[*],hgroup[*],keygen[*],mark[*],meter[*],nav[*],output[*],progress[*],section[*],source[*],summary,time[*],video[*],wbr', 'wpeditimage_disable_captions' => $no_captions, 'wp_fullscreen_content_css' => self::$baseurl . '/plugins/wpfullscreen/css/wp-fullscreen.css', @@ -321,24 +328,25 @@ final class _WP_Editors { $mce_css = array(); $editor_styles = array_unique($editor_styles); $style_uri = get_stylesheet_directory_uri(); - if ( ! is_child_theme() ) { - foreach ( $editor_styles as $file ) - $mce_css[] = "$style_uri/$file"; - } else { - $style_dir = get_stylesheet_directory(); + $style_dir = get_stylesheet_directory(); + + if ( is_child_theme() ) { $template_uri = get_template_directory_uri(); $template_dir = get_template_directory(); - foreach ( $editor_styles as $file ) { - if ( file_exists( "$template_dir/$file" ) ) + foreach ( $editor_styles as $key => $file ) { + if ( $file && file_exists( "$template_dir/$file" ) ) { $mce_css[] = "$template_uri/$file"; + $editor_styles[$key] = ''; + } } + } - foreach ( $editor_styles as $file ) { - if ( file_exists( "$style_dir/$file" ) ) - $mce_css[] = "$style_uri/$file"; - } + foreach ( $editor_styles as $file ) { + if ( $file && file_exists( "$style_dir/$file" ) ) + $mce_css[] = "$style_uri/$file"; } + $mce_css = implode( ',', $mce_css ); } else { $mce_css = ''; @@ -360,6 +368,16 @@ final class _WP_Editors { $mce_buttons_4 = apply_filters('mce_buttons_4', array(), $editor_id); } + $body_class = $editor_id; + + if ( isset($post) ) + $body_class .= " post-type-$post->post_type"; + + if ( !empty($set['tinymce']['body_class']) ) { + $body_class .= ' ' . $set['tinymce']['body_class']; + unset($set['tinymce']['body_class']); + } + if ( $set['dfw'] ) { // replace the first 'fullscreen' with 'wp_fullscreen' if ( ($key = array_search('fullscreen', $mce_buttons)) !== false ) @@ -380,7 +398,8 @@ final class _WP_Editors { 'theme_advanced_buttons1' => implode($mce_buttons, ','), 'theme_advanced_buttons2' => implode($mce_buttons_2, ','), 'theme_advanced_buttons3' => implode($mce_buttons_3, ','), - 'theme_advanced_buttons4' => implode($mce_buttons_4, ',') + 'theme_advanced_buttons4' => implode($mce_buttons_4, ','), + 'body_class' => $body_class ); if ( $first_run ) @@ -499,13 +518,15 @@ final class _WP_Editors { 'language' => self::$mce_locale ); + $suffix = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '_src' : ''; + do_action('before_wp_tiny_mce', self::$mce_settings); ?> <script type="text/javascript"> tinyMCEPreInit = { base : "<?php echo self::$baseurl; ?>", - suffix : "", + suffix : "<?php echo $suffix; ?>", query : "<?php echo $version; ?>", mceInit : <?php echo $mceInit; ?>, qtInit : <?php echo $qtInit; ?>, @@ -575,7 +596,7 @@ final class _WP_Editors { } if ( !is_admin() ) - echo 'var ajaxurl = "' . admin_url('admin-ajax.php') . '";'; + echo 'var ajaxurl = "' . admin_url( 'admin-ajax.php', 'relative' ) . '";'; ?> </script> <?php @@ -597,7 +618,7 @@ final class _WP_Editors { $dfw_width = get_user_setting( 'dfw_width', $width ); $save = isset($post->post_status) && $post->post_status == 'publish' ? __('Update') : __('Save'); ?> - <div id="wp-fullscreen-body"> + <div id="wp-fullscreen-body"<?php if ( is_rtl() ) echo ' class="rtl"'; ?>> <div id="fullscreen-topbar"> <div id="wp-fullscreen-toolbar"> <div id="wp-fullscreen-close"><a href="#" onclick="fullscreen.off();return false;"><?php _e('Exit fullscreen'); ?></a></div> @@ -648,7 +669,7 @@ final class _WP_Editors { <div id="wp-fullscreen-save"> <span><?php if ( $post->post_status == 'publish' ) _e('Updated.'); else _e('Saved.'); ?></span> - <img src="images/wpspin_light.gif" alt="" /> + <img src="<?php echo admin_url('images/wpspin_light.gif'); ?>" alt="" /> <input type="button" class="button-primary" value="<?php echo $save; ?>" onclick="fullscreen.save();" /> </div> @@ -763,7 +784,7 @@ final class _WP_Editors { <div class="link-search-wrapper"> <label> <span><?php _e( 'Search' ); ?></span> - <input type="text" id="search-field" class="link-search-field" tabindex="60" autocomplete="off" /> + <input type="search" id="search-field" class="link-search-field" tabindex="60" autocomplete="off" /> <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /> </label> </div> @@ -795,4 +816,3 @@ final class _WP_Editors { <?php } } - diff --git a/wp-includes/class-wp-error.php b/wp-includes/class-wp-error.php index b34d0cfda..a3331da95 100644 --- a/wp-includes/class-wp-error.php +++ b/wp-includes/class-wp-error.php @@ -208,5 +208,3 @@ function is_wp_error($thing) { return true; return false; } - -?> \ No newline at end of file diff --git a/wp-includes/class-wp-http-ixr-client.php b/wp-includes/class-wp-http-ixr-client.php index 9e202ed63..736fc5a22 100644 --- a/wp-includes/class-wp-http-ixr-client.php +++ b/wp-includes/class-wp-http-ixr-client.php @@ -90,4 +90,3 @@ class WP_HTTP_IXR_Client extends IXR_Client { return true; } } -?> diff --git a/wp-includes/class-wp-theme.php b/wp-includes/class-wp-theme.php new file mode 100644 index 000000000..b07e0b5fb --- /dev/null +++ b/wp-includes/class-wp-theme.php @@ -0,0 +1,1189 @@ +<?php +/** + * WP_Theme Class + * + * @package WordPress + * @subpackage Theme + */ + +final class WP_Theme implements ArrayAccess { + + /** + * Headers for style.css files. + * + * @static + * @access private + * @var array + */ + private static $file_headers = array( + 'Name' => 'Theme Name', + 'ThemeURI' => 'Theme URI', + 'Description' => 'Description', + 'Author' => 'Author', + 'AuthorURI' => 'Author URI', + 'Version' => 'Version', + 'Template' => 'Template', + 'Status' => 'Status', + 'Tags' => 'Tags', + 'TextDomain' => 'Text Domain', + 'DomainPath' => 'Domain Path', + ); + + /** + * Default themes. + * + * @static + * @access private + * @var array + */ + private static $default_themes = array( + 'classic' => 'WordPress Classic', + 'default' => 'WordPress Default', + 'twentyten' => 'Twenty Ten', + 'twentyeleven' => 'Twenty Eleven', + ); + + /** + * Absolute path to the theme root, usually wp-content/themes + * + * @access private + * @var string + */ + private $theme_root; + + /** + * Header data from the theme's style.css file. + * + * @access private + * @var array + */ + private $headers = array(); + + /** + * Header data from the theme's style.css file after being sanitized. + * + * @access private + * @var array + */ + private $headers_sanitized; + + /** + * Header name from the theme's style.css after being translated. + * + * Cached due to sorting functions running over the translated name. + */ + private $name_translated; + + /** + * Errors encountered when initializing the theme. + * + * @access private + * @var WP_Error + */ + private $errors; + + /** + * The directory name of the theme's files, inside the theme root. + * + * In the case of a child theme, this is directory name of the the child theme. + * Otherwise, 'stylesheet' is the same as 'template'. + * + * @access private + * @var string + */ + private $stylesheet; + + /** + * The directory name of the theme's files, inside the theme root. + * + * In the case of a child theme, this is the directory name of the parent theme. + * Otherwise, 'template' is the same as 'stylesheet'. + * + * @access private + * @var string + */ + private $template; + + /** + * A reference to the parent theme, in the case of a child theme. + * + * @access private + * @var WP_Theme + */ + private $parent; + + /** + * URL to the theme root, usually an absolute URL to wp-content/themes + * + * @access private + * var string + */ + private $theme_root_uri; + + /** + * Flag for whether the theme's textdomain is loaded. + * + * @access private + * @var bool + */ + private $textdomain_loaded; + + /** + * Stores an md5 hash of the theme root, to function as the cache key. + * + * @access private + * @var string + */ + private $cache_hash; + + /** + * Flag for whether the themes cache bucket should be persistently cached. + * + * Default is false. Can be set with the wp_cache_themes_persistently filter. + * + * @access private + * @var bool + */ + private static $persistently_cache; + + /** + * Expiration time for the themes cache bucket. + * + * By default the bucket is not cached, so this value is useless. + * + * @access private + * @var bool + */ + private static $cache_expiration = 1800; + + /** + * Constructor for WP_Theme. + * + * @param string $theme_dir Directory of the theme within the theme_root. + * @param string $theme_root Theme root. + * @param WP_Error|null $_child If this theme is a parent theme, the child may be passed for validation purposes. + */ + public function __construct( $theme_dir, $theme_root, $_child = null ) { + global $wp_theme_directories; + + // Initialize caching on first run. + if ( ! isset( self::$persistently_cache ) ) { + self::$persistently_cache = apply_filters( 'wp_cache_themes_persistently', false, 'WP_Theme' ); + if ( self::$persistently_cache ) { + wp_cache_add_global_groups( 'themes' ); + if ( is_int( self::$persistently_cache ) ) + self::$cache_expiration = self::$persistently_cache; + } else { + wp_cache_add_non_persistent_groups( 'themes' ); + } + } + + $this->theme_root = $theme_root; + $this->stylesheet = $theme_dir; + + // Correct a situation where the theme is 'some-directory/some-theme' but 'some-directory' was passed in as part of the theme root instead. + if ( ! in_array( $theme_root, (array) $wp_theme_directories ) && in_array( dirname( $theme_root ), (array) $wp_theme_directories ) ) { + $this->stylesheet = basename( $this->theme_root ) . '/' . $this->stylesheet; + $this->theme_root = dirname( $theme_root ); + } + + $this->cache_hash = md5( $this->theme_root . '/' . $this->stylesheet ); + $theme_file = $this->stylesheet . '/style.css'; + + $cache = $this->cache_get( 'theme' ); + + if ( is_array( $cache ) ) { + foreach ( array( 'errors', 'headers', 'template' ) as $key ) { + if ( isset( $cache[ $key ] ) ) + $this->$key = $cache[ $key ]; + } + if ( $this->errors ) + return; + if ( isset( $cache['theme_root_template'] ) ) + $theme_root_template = $cache['theme_root_template']; + } elseif ( ! file_exists( $this->theme_root . '/' . $theme_file ) ) { + $this->headers['Name'] = $this->stylesheet; + if ( ! file_exists( $this->theme_root . '/' . $this->stylesheet ) ) + $this->errors = new WP_Error( 'theme_not_found', __( 'The theme directory does not exist.' ) ); + else + $this->errors = new WP_Error( 'theme_no_stylesheet', __( 'Stylesheet is missing.' ) ); + $this->template = $this->stylesheet; + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + if ( ! file_exists( $this->theme_root ) ) // Don't cache this one. + $this->errors->add( 'theme_root_missing', __( 'ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.' ) ); + return; + } elseif ( ! is_readable( $this->theme_root . '/' . $theme_file ) ) { + $this->headers['Name'] = $this->stylesheet; + $this->errors = new WP_Error( 'theme_stylesheet_not_readable', __( 'Stylesheet is not readable.' ) ); + $this->template = $this->stylesheet; + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + return; + } else { + $this->headers = get_file_data( $this->theme_root . '/' . $theme_file, self::$file_headers, 'theme' ); + // Default themes always trump their pretenders. + // Properly identify default themes that are inside a directory within wp-content/themes. + if ( $default_theme_slug = array_search( $this->headers['Name'], self::$default_themes ) ) { + if ( basename( $this->stylesheet ) != $default_theme_slug ) + $this->headers['Name'] .= '/' . $this->stylesheet; + } + } + + // (If template is set from cache [and there are no errors], we know it's good.) + if ( ! $this->template && ! ( $this->template = $this->headers['Template'] ) ) { + $this->template = $this->stylesheet; + if ( ! file_exists( $this->theme_root . '/' . $this->stylesheet . '/index.php' ) ) { + $this->errors = new WP_Error( 'theme_no_index', __( 'Template is missing.' ) ); + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + return; + } + } + + // If we got our data from cache, we can assume that 'template' is pointing to the right place. + if ( ! is_array( $cache ) && $this->template != $this->stylesheet && ! file_exists( $this->theme_root . '/' . $this->template . '/index.php' ) ) { + // If we're in a directory of themes inside /themes, look for the parent nearby. + // wp-content/themes/directory-of-themes/* + $parent_dir = dirname( $this->stylesheet ); + if ( '.' != $parent_dir && file_exists( $this->theme_root . '/' . $parent_dir . '/' . $this->template . '/index.php' ) ) { + $this->template = $parent_dir . '/' . $this->template; + } elseif ( ( $directories = search_theme_directories() ) && isset( $directories[ $this->template ] ) ) { + // Look for the template in the search_theme_directories() results, in case it is in another theme root. + // We don't look into directories of themes, just the theme root. + $theme_root_template = $directories[ $this->template ]['theme_root']; + } else { + // Parent theme is missing. + $this->errors = new WP_Error( 'theme_no_parent', sprintf( __( 'The parent theme is missing. Please install the "%s" parent theme.' ), $this->template ) ); + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + return; + } + } + + // Set the parent, if we're a child theme. + if ( $this->template != $this->stylesheet ) { + // If we are a parent, then there is a problem. Only two generations allowed! Cancel things out. + if ( is_a( $_child, 'WP_Theme' ) && $_child->template == $this->stylesheet ) { + $_child->parent = null; + $_child->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), $_child->template ) ); + $_child->cache_add( 'theme', array( 'headers' => $_child->headers, 'errors' => $_child->errors, 'stylesheet' => $_child->stylesheet, 'template' => $_child->template ) ); + // The two themes actually reference each other with the Template header. + if ( $_child->stylesheet == $this->template ) { + $this->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), $this->template ) ); + $this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) ); + } + return; + } + // Set the parent. Pass the current instance so we can do the crazy checks above and assess errors. + $this->parent = new WP_Theme( $this->template, isset( $theme_root_template ) ? $theme_root_template : $this->theme_root, $this ); + } + + // We're good. If we didn't retrieve from cache, set it. + if ( ! is_array( $cache ) ) { + $cache = array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ); + // If the parent theme is in another root, we'll want to cache this. Avoids an entire branch of filesystem calls above. + if ( isset( $theme_root_template ) ) + $cache['theme_root_template'] = $theme_root_template; + $this->cache_add( 'theme', $cache ); + } + } + + /** + * When converting the object to a string, the theme name is returned. + * + * @return string Theme name, ready for display (translated) + */ + public function __toString() { + return (string) $this->display('Name'); + } + + /** + * __isset() magic method for properties formerly returned by current_theme_info() + */ + public function __isset( $offset ) { + static $properties = array( + 'name', 'title', 'version', 'parent_theme', 'template_dir', 'stylesheet_dir', 'template', 'stylesheet', + 'screenshot', 'description', 'author', 'tags', 'theme_root', 'theme_root_uri', + ); + + return in_array( $offset, $properties ); + } + + /** + * __get() magic method for properties formerly returned by current_theme_info() + */ + public function __get( $offset ) { + switch ( $offset ) { + case 'name' : + case 'title' : + return $this->get('Name'); + case 'version' : + return $this->get('Version'); + case 'parent_theme' : + return $this->parent() ? $this->parent()->get('Name') : ''; + case 'template_dir' : + return $this->get_template_directory(); + case 'stylesheet_dir' : + return $this->get_stylesheet_directory(); + case 'template' : + return $this->get_template(); + case 'stylesheet' : + return $this->get_stylesheet(); + case 'screenshot' : + return $this->get_screenshot( 'relative' ); + // 'author' and 'description' did not previously return translated data. + case 'description' : + return $this->display('Description'); + case 'author' : + return $this->display('Author'); + case 'tags' : + return $this->get( 'Tags' ); + case 'theme_root' : + return $this->get_theme_root(); + case 'theme_root_uri' : + return $this->get_theme_root_uri(); + // For cases where the array was converted to an object. + default : + return $this->offsetGet( $offset ); + } + } + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes() + */ + public function offsetSet( $offset, $value ) {} + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes() + */ + public function offsetUnset( $offset ) {} + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes() + */ + public function offsetExists( $offset ) { + static $keys = array( + 'Name', 'Version', 'Status', 'Title', 'Author', 'Author Name', 'Author URI', 'Description', + 'Template', 'Stylesheet', 'Template Files', 'Stylesheet Files', 'Template Dir', 'Stylesheet Dir', + 'Screenshot', 'Tags', 'Theme Root', 'Theme Root URI', 'Parent Theme', + ); + + return in_array( $offset, $keys ); + } + + /** + * Method to implement ArrayAccess for keys formerly returned by get_themes(). + * + * Author, Author Name, Author URI, and Description did not previously return + * translated data. We are doing so now as it is safe to do. However, as + * Name and Title could have been used as the key for get_themes(), both remain + * untranslated for back compatibility. This means that ['Name'] is not ideal, + * and care should be taken to use $theme->display('Name') to get a properly + * translated header. + */ + public function offsetGet( $offset ) { + switch ( $offset ) { + case 'Name' : + case 'Title' : + // See note above about using translated data. get() is not ideal. + // It is only for backwards compatibility. Use display(). + return $this->get('Name'); + case 'Author' : + return $this->display( 'Author'); + case 'Author Name' : + return $this->display( 'Author', false); + case 'Author URI' : + return $this->display('AuthorURI'); + case 'Description' : + return $this->display( 'Description'); + case 'Version' : + case 'Status' : + return $this->get( $offset ); + case 'Template' : + return $this->get_template(); + case 'Stylesheet' : + return $this->get_stylesheet(); + case 'Template Files' : + return $this->get_files( 'php', 1, true ); + case 'Stylesheet Files' : + return $this->get_files( 'css', 0, false ); + case 'Template Dir' : + return $this->get_template_directory(); + case 'Stylesheet Dir' : + return $this->get_stylesheet_directory(); + case 'Screenshot' : + return $this->get_screenshot( 'relative' ); + case 'Tags' : + return $this->get('Tags'); + case 'Theme Root' : + return $this->get_theme_root(); + case 'Theme Root URI' : + return $this->get_theme_root_uri(); + case 'Parent Theme' : + return $this->parent() ? $this->parent()->get('Name') : ''; + default : + return null; + } + } + + /** + * Returns errors property. + * + * @since 3.4.0 + * @access public + * + * @return WP_Error|bool WP_Error if there are errors, or false. + */ + public function errors() { + return is_wp_error( $this->errors ) ? $this->errors : false; + } + + /** + * Whether the theme exists. + * + * A theme with errors exists. A theme with the error of 'theme_not_found', + * meaning that the theme's directory was not found, does not exist. + * + * @since 3.4.0 + * @access public + * + * @return bool Whether the theme exists. + */ + public function exists() { + return ! ( $this->errors() && in_array( 'theme_not_found', $this->errors()->get_error_codes() ) ); + } + + /** + * Returns reference to the parent theme. + * + * @since 3.4.0 + * @access public + * + * @return WP_Theme|bool Parent theme, or false if the current theme is not a child theme. + */ + public function parent() { + return isset( $this->parent ) ? $this->parent : false; + } + + /** + * Adds theme data to cache. + * + * Cache entries keyed by the theme and the type of data. + * + * @access private + * @since 3.4.0 + * + * @param string $key Type of data to store (theme, screenshot, headers, page_templates) + * @param string $data Data to store + * @return bool Return value from wp_cache_add() + */ + private function cache_add( $key, $data ) { + return wp_cache_add( $key . '-' . $this->cache_hash, $data, 'themes', self::$cache_expiration ); + } + + /** + * Gets theme data from cache. + * + * Cache entries are keyed by the theme and the type of data. + * + * @access private + * @since 3.4.0 + * + * @param string $key Type of data to retrieve (theme, screenshot, headers, page_templates) + * @return mixed Retrieved data + */ + private function cache_get( $key ) { + return wp_cache_get( $key . '-' . $this->cache_hash, 'themes' ); + } + + /** + * Clears the cache for the theme. + * + * @access public + * @since 3.4.0 + */ + public function cache_delete() { + foreach ( array( 'theme', 'screenshot', 'headers', 'page_templates' ) as $key ) + wp_cache_delete( $key . '-' . $this->cache_hash, 'themes' ); + $this->template = $this->textdomain_loaded = $this->theme_root_uri = $this->parent = $this->errors = $this->headers_sanitized = $this->name_translated = null; + $this->headers = array(); + $this->__construct( $this->stylesheet, $this->theme_root ); + } + + /** + * Get a raw, unformatted theme header. + * + * The header is sanitized, but is not translated, and is not marked up for display. + * To get a theme header for display, use the display() method. + * + * Use the get_template() method, not the 'Template' header, for finding the template. + * The 'Template' header is only good for what was written in the style.css, while + * get_template() takes into account where WordPress actually located the theme and + * whether it is actually valid. + * + * @access public + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @return string String on success, false on failure. + */ + public function get( $header ) { + if ( ! isset( $this->headers[ $header ] ) ) + return false; + + if ( ! isset( $this->headers_sanitized ) ) { + $this->headers_sanitized = $this->cache_get( 'headers' ); + if ( ! is_array( $this->headers_sanitized ) ) + $this->headers_sanitized = array(); + } + + if ( isset( $this->headers_sanitized[ $header ] ) ) + return $this->headers_sanitized[ $header ]; + + // If themes are a persistent group, sanitize everything and cache it. One cache add is better than many cache sets. + if ( self::$persistently_cache ) { + foreach ( array_keys( $this->headers ) as $_header ) + $this->headers_sanitized[ $_header ] = $this->sanitize_header( $_header, $this->headers[ $_header ] ); + $this->cache_add( 'headers', $this->headers_sanitized ); + } else { + $this->headers_sanitized[ $header ] = $this->sanitize_header( $header, $this->headers[ $header ] ); + } + + return $this->headers_sanitized[ $header ]; + } + + /** + * Gets a theme header, formatted and translated for display. + * + * @access public + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param bool $markup Optional. Whether to mark up the header. Defaults to true. + * @param bool $translate Optional. Whether to translate the header. Defaults to true. + * @return string Processed header, false on failure. + */ + public function display( $header, $markup = true, $translate = true ) { + $value = $this->get( $header ); + + if ( $translate && ( empty( $value ) || ! $this->load_textdomain() ) ) + $translate = false; + + if ( $translate ) + $value = $this->translate_header( $header, $value ); + + if ( $markup ) + $value = $this->markup_header( $header, $value, $translate ); + + return $value; + } + + /** + * Sanitize a theme header. + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param string $value Value to sanitize. + */ + private function sanitize_header( $header, $value ) { + switch ( $header ) { + case 'Status' : + if ( ! $value ) { + $value = 'publish'; + break; + } + // Fall through otherwise. + case 'Name' : + static $header_tags = array( + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, + ); + $value = wp_kses( $value, $header_tags ); + break; + case 'Author' : + // There shouldn't be anchor tags in Author, but some themes like to be challenging. + case 'Description' : + static $header_tags_with_a = array( + 'a' => array( 'href' => true, 'title' => true ), + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, + ); + $value = wp_kses( $value, $header_tags_with_a ); + break; + case 'ThemeURI' : + case 'AuthorURI' : + $value = esc_url_raw( $value ); + break; + case 'Tags' : + $value = array_filter( array_map( 'trim', explode( ',', strip_tags( $value ) ) ) ); + break; + } + + return $value; + } + + /** + * Mark up a theme header. + * + * @access private + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param string $value Value to mark up. + * @param string $translate Whether the header has been translated. + * @return string Value, marked up. + */ + private function markup_header( $header, $value, $translate ) { + switch ( $header ) { + case 'Name' : + if ( empty( $value ) ) + $value = $this->get_stylesheet(); + break; + case 'Description' : + $value = wptexturize( $value ); + break; + case 'Author' : + if ( $this->get('AuthorURI') ) { + static $attr = null; + if ( ! isset( $attr ) ) + $attr = esc_attr__( 'Visit author homepage' ); + $value = sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', $this->display( 'AuthorURI', true, $translate ), $attr, $value ); + } elseif ( ! $value ) { + $value = __( 'Anonymous' ); + } + break; + case 'Tags' : + static $comma = null; + if ( ! isset( $comma ) ) { + /* translators: used between list items, there is a space after the comma */ + $comma = __( ', ' ); + } + $value = implode( $comma, $value ); + break; + case 'ThemeURI' : + case 'AuthorURI' : + $value = esc_url( $value ); + break; + } + + return $value; + } + + /** + * Translate a theme header. + * + * @access private + * @since 3.4.0 + * + * @param string $header Theme header. Name, Description, Author, Version, ThemeURI, AuthorURI, Status, Tags. + * @param string $value Value to translate. + * @return string Translated value. + */ + private function translate_header( $header, $value ) { + switch ( $header ) { + case 'Name' : + // Cached for sorting reasons. + if ( isset( $this->name_translated ) ) + return $this->name_translated; + $this->name_translated = translate( $value, $this->get('TextDomain' ) ); + return $this->name_translated; + case 'Tags' : + if ( empty( $value ) || ! function_exists( 'get_theme_feature_list' ) ) + return $value; + + static $tags_list; + if ( ! isset( $tags_list ) ) { + $tags_list = array(); + $feature_list = get_theme_feature_list( false ); // No API + foreach ( $feature_list as $tags ) + $tags_list += $tags; + } + + foreach ( $value as &$tag ) { + if ( isset( $tags_list[ $tag ] ) ) + $tag = $tags_list[ $tag ]; + } + + return $value; + break; + default : + $value = translate( $value, $this->get('TextDomain') ); + } + return $value; + } + + /** + * The directory name of the theme's "stylesheet" files, inside the theme root. + * + * In the case of a child theme, this is directory name of the the child theme. + * Otherwise, get_stylesheet() is the same as get_template(). + * + * @since 3.4.0 + * @access public + * + * @return string Stylesheet + */ + public function get_stylesheet() { + return $this->stylesheet; + } + + /** + * The directory name of the theme's "template" files, inside the theme root. + * + * In the case of a child theme, this is the directory name of the parent theme. + * Otherwise, the get_template() is the same as get_stylesheet(). + * + * @since 3.4.0 + * @access public + * + * @return string Template + */ + public function get_template() { + return $this->template; + } + + /** + * Returns the absolute path to the directory of a theme's "stylesheet" files. + * + * In the case of a child theme, this is the absolute path to the directory + * of the child theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string Absolute path of the stylesheet directory. + */ + public function get_stylesheet_directory() { + if ( $this->errors() && in_array( 'theme_root_missing', $this->errors()->get_error_codes() ) ) + return ''; + + return $this->theme_root . '/' . $this->stylesheet; + } + + /** + * Returns the absolute path to the directory of a theme's "template" files. + * + * In the case of a child theme, this is the absolute path to the directory + * of the parent theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string Absolute path of the template directory. + */ + public function get_template_directory() { + if ( $this->parent() ) + $theme_root = $this->parent()->theme_root; + else + $theme_root = $this->theme_root; + + return $theme_root . '/' . $this->template; + } + + /** + * Returns the URL to the directory of a theme's "stylesheet" files. + * + * In the case of a child theme, this is the URL to the directory of the + * child theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string URL to the stylesheet directory. + */ + public function get_stylesheet_directory_uri() { + return $this->get_theme_root_uri() . '/' . $this->stylesheet; + } + + /** + * Returns the URL to the directory of a theme's "template" files. + * + * In the case of a child theme, this is the URL to the directory of the + * parent theme's files. + * + * @since 3.4.0 + * @access public + * + * @return string URL to the template directory. + */ + public function get_template_directory_uri() { + if ( $this->parent() ) + $theme_root_uri = $this->parent()->get_theme_root_uri(); + else + $theme_root_uri = $this->get_theme_root_uri(); + + return $theme_root . '/' . $this->template; + } + + /** + * The absolute path to the directory of the theme root. + * + * This is typically the absolute path to wp-content/themes. + * + * @since 3.4.0 + * @access public + * + * @return string Theme root. + */ + public function get_theme_root() { + return $this->theme_root; + } + + /** + * Returns the URL to the directory of the theme root. + * + * This is typically the absolute URL to wp-content/themes. This forms the basis + * for all other URLs returned by WP_Theme, so we pass it to the public function + * get_theme_root_uri() and allow it to run the theme_root_uri filter. + * + * @uses get_theme_root_uri() + * + * @since 3.4.0 + * @access public + * + * @return string Theme root URI. + */ + public function get_theme_root_uri() { + if ( ! isset( $this->theme_root_uri ) ) + $this->theme_root_uri = get_theme_root_uri( $this->stylesheet, $this->theme_root ); + return $this->theme_root_uri; + } + + /** + * Returns the main screenshot file for the theme. + * + * The main screenshot is called screenshot.png. gif and jpg extensions are also allowed. + * + * Screenshots for a theme must be in the stylesheet directory. (In the case of child + * themes, parent theme screenshots are not inherited.) + * + * @since 3.4.0 + * @access public + * + * @param string $uri Type of URL to return, either 'relative' or an absolute URI. Defaults to absolute URI. + * @return mixed Screenshot file. False if the theme does not have a screenshot. + */ + public function get_screenshot( $uri = 'uri' ) { + $screenshot = $this->cache_get( 'screenshot' ); + if ( $screenshot ) { + if ( 'relative' == $uri ) + return $screenshot; + return $this->get_stylesheet_directory_uri() . '/' . $screenshot; + } elseif ( 0 === $screenshot ) { + return false; + } + + foreach ( array( 'png', 'gif', 'jpg', 'jpeg' ) as $ext ) { + if ( file_exists( $this->get_stylesheet_directory() . "/screenshot.$ext" ) ) { + $this->cache_add( 'screenshot', 'screenshot.' . $ext ); + if ( 'relative' == $uri ) + return 'screenshot.' . $ext; + return $this->get_stylesheet_directory_uri() . '/' . 'screenshot.' . $ext; + } + } + + $this->cache_add( 'screenshot', 0 ); + return false; + } + + /** + * Return files in the theme's directory. + * + * @since 3.4.0 + * @access public + * + * @param mixed $type Optional. Array of extensions to return. Defaults to all files (null). + * @param int $depth Optional. How deep to search for files. Defaults to a flat scan (0 depth). -1 depth is infinite. + * @param bool $search_parent Optional. Whether to return parent files. Defaults to false. + * @return array Array of files, keyed by the path to the file relative to the theme's directory, with the values + * being absolute paths. + */ + public function get_files( $type = null, $depth = 0, $search_parent = false ) { + $files = (array) self::scandir( $this->get_stylesheet_directory(), $type, $depth ); + + if ( $search_parent && $this->parent() ) + $files += (array) self::scandir( $this->get_template_directory(), $type, $depth ); + + return $files; + } + + /** + * Returns the theme's page templates. + * + * @since 3.4.0 + * @access public + * + * @return array Array of page templates, keyed by filename, with the value of the translated header name. + */ + public function get_page_templates() { + // If you screw up your current theme and we invalidate your parent, most things still work. Let it slide. + if ( $this->errors() && $this->errors()->get_error_codes() !== array( 'theme_parent_invalid' ) ) + return array(); + + $page_templates = $this->cache_get( 'page_templates' ); + + if ( ! is_array( $page_templates ) ) { + $page_templates = array(); + + $files = (array) $this->get_files( 'php', 1 ); + + foreach ( $files as $file => $full_path ) { + $headers = get_file_data( $full_path, array( 'Template Name' => 'Template Name' ) ); + if ( empty( $headers['Template Name'] ) ) + continue; + $page_templates[ $file ] = $headers['Template Name']; + } + + $this->cache_add( 'page_templates', $page_templates ); + } + + if ( $this->load_textdomain() ) { + foreach ( $page_templates as &$page_template ) { + $page_template = $this->translate_header( 'Template Name', $page_template ); + } + } + + if ( $this->parent() ) + $page_templates += $this->parent()->get_page_templates(); + + return $page_templates; + } + + /** + * Scans a directory for files of a certain extension. + * + * @since 3.4.0 + * @access private + * + * @param string $path Absolute path to search. + * @param mixed Array of extensions to find, string of a single extension, or null for all extensions. + * @param int $depth How deep to search for files. Optional, defaults to a flat scan (0 depth). -1 depth is infinite. + * @param string $relative_path The basename of the absolute path. Used to control the returned path + * for the found files, particularly when this function recurses to lower depths. + */ + private static function scandir( $path, $extensions = null, $depth = 0, $relative_path = '' ) { + if ( ! is_dir( $path ) ) + return false; + + if ( $extensions ) { + $extensions = (array) $extensions; + $_extensions = implode( '|', $extensions ); + } + + $relative_path = trailingslashit( $relative_path ); + if ( '/' == $relative_path ) + $relative_path = ''; + + $results = scandir( $path ); + $files = array(); + + foreach ( $results as $result ) { + if ( '.' == $result[0] ) + continue; + if ( is_dir( $path . '/' . $result ) ) { + if ( ! $depth || 'CVS' == $result ) + continue; + $found = self::scandir( $path . '/' . $result, $extensions, $depth - 1 , $relative_path . $result ); + $files = array_merge_recursive( $files, $found ); + } elseif ( ! $extensions || preg_match( '~\.(' . $_extensions . ')$~', $result ) ) { + $files[ $relative_path . $result ] = $path . '/' . $result; + } + } + + return $files; + } + + /** + * Loads the theme's textdomain. + * + * Translation files are not inherited from the parent theme. Todo: if this fails for the + * child theme, it should probably try to load the parent theme's translations. + * + * @since 3.4.0 + * @access public + * + * @return True if the textdomain was successfully loaded or has already been loaded. False if + * no textdomain was specified in the file headers, or if the domain could not be loaded. + */ + public function load_textdomain() { + if ( isset( $this->textdomain_loaded ) ) + return $this->textdomain_loaded; + + $textdomain = $this->get('TextDomain'); + if ( ! $textdomain ) { + $this->textdomain_loaded = false; + return false; + } + + if ( is_textdomain_loaded( $textdomain ) ) { + $this->textdomain_loaded = true; + return true; + } + + $path = $this->get_stylesheet_directory(); + if ( $domainpath = $this->get('DomainPath') ) + $path .= $domainpath; + else + $path .= '/languages'; + + $this->textdomain_loaded = load_theme_textdomain( $textdomain, $path ); + return $this->textdomain_loaded; + } + + /** + * Whether the theme is allowed (multisite only). + * + * @since 3.4.0 + * @access public + * + * @param string $check Optional. Whether to check only the 'network'-wide settings, the 'site' + * settings, or 'both'. Defaults to 'both'. + * @param int $blog_id Optional. Ignored if only network-wide settings are checked. Defaults to current blog. + * @return bool Whether the theme is allowed for the network. Returns true in single-site. + */ + public function is_allowed( $check = 'both', $blog_id = null ) { + if ( ! is_multisite() ) + return true; + + if ( 'both' == $check || 'network' == $check ) { + $allowed = self::get_allowed_on_network(); + if ( ! empty( $allowed[ $this->get_stylesheet() ] ) ) + return true; + } + + if ( 'both' == $check || 'site' == $check ) { + $allowed = self::get_allowed_on_site( $blog_id ); + if ( ! empty( $allowed[ $this->get_stylesheet() ] ) ) + return true; + } + + return false; + } + + /** + * Returns array of stylesheet names of themes allowed on the site or network. + * + * @since 3.4.0 + * @access public + * + * @param int $blog_id Optional. Defaults to current blog. + * @return array Array of stylesheet names. + */ + public static function get_allowed( $blog_id = null ) { + return self::get_allowed_on_network() + self::get_allowed_on_site( $blog_id ); + } + + /** + * Returns array of stylesheet names of themes allowed on the network. + * + * @since 3.4.0 + * @access public + * + * @return array Array of stylesheet names. + */ + public static function get_allowed_on_network() { + static $allowed_themes; + if ( ! isset( $allowed_themes ) ) + $allowed_themes = (array) get_site_option( 'allowedthemes' ); + return $allowed_themes; + } + + /** + * Returns array of stylesheet names of themes allowed on the site. + * + * @since 3.4.0 + * @access public + * + * @param int $blog_id Optional. Defaults to current blog. + * @return array Array of stylesheet names. + */ + public static function get_allowed_on_site( $blog_id = null ) { + static $allowed_themes = array(); + + if ( ! $blog_id ) + $blog_id = get_current_blog_id(); + + if ( isset( $allowed_themes[ $blog_id ] ) ) + return $allowed_themes[ $blog_id ]; + + $current = $blog_id == get_current_blog_id(); + + if ( $current ) + $allowed_themes[ $blog_id ] = get_option( 'allowedthemes' ); + else + $allowed_themes[ $blog_id ] = get_blog_option( $blog_id, 'allowedthemes' ); + + // This is all super old MU back compat joy. + // 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. + if ( false === $allowed_themes[ $blog_id ] ) { + if ( $current ) + $allowed_themes[ $blog_id ] = get_option( 'allowed_themes' ); + else + $allowed_themes[ $blog_id ] = get_blog_option( $blog_id, 'allowed_themes' ); + + if ( ! is_array( $allowed_themes[ $blog_id ] ) || empty( $allowed_themes[ $blog_id ] ) ) { + $allowed_themes[ $blog_id ] = array(); + } else { + $converted = array(); + $themes = wp_get_themes(); + foreach ( $themes as $stylesheet => $theme_data ) { + if ( isset( $allowed_themes[ $blog_id ][ $theme_data->get('Name') ] ) ) + $converted[ $stylesheet ] = true; + } + $allowed_themes[ $blog_id ] = $converted; + } + // Set the option so we never have to go through this pain again. + if ( is_admin() && $allowed_themes[ $blog_id ] ) { + if ( $current ) { + update_option( 'allowedthemes', $allowed_themes[ $blog_id ] ); + delete_option( 'allowed_themes' ); + } else { + update_blog_option( $blog_id, 'allowedthemes', $allowed_themes[ $blog_id ] ); + delete_blog_option( $blog_id, 'allowed_themes' ); + } + } + } + + return (array) $allowed_themes[ $blog_id ]; + } + + /** + * Sort themes by name. + * + * @since 3.4.0 + * @access public + */ + public static function sort_by_name( &$themes ) { + if ( 0 === strpos( get_locale(), 'en_' ) ) { + uasort( $themes, array( 'WP_Theme', '_name_sort' ) ); + } else { + uasort( $themes, array( 'WP_Theme', '_name_sort_i18n' ) ); + } + } + + /** + * Callback function for usort() to naturally sort themes by name. + * + * Accesses the Name header directly from the class for maximum speed. + * Would choke on HTML but we don't care enough to slow it down with strip_tags(). + * + * @since 3.4.0 + * @access private + */ + private static function _name_sort( $a, $b ) { + return strnatcasecmp( $a->headers['Name'], $b->headers['Name'] ); + } + + /** + * Name sort (with translation). + * + * @since 3.4.0 + * @access private + */ + private static function _name_sort_i18n( $a, $b ) { + // Don't mark up; Do translate. + return strnatcasecmp( $a->display( 'Name', false, true ), $b->display( 'Name', false, true ) ); + } +} diff --git a/wp-includes/class-wp-walker.php b/wp-includes/class-wp-walker.php index 25e040592..5478da90d 100644 --- a/wp-includes/class-wp-walker.php +++ b/wp-includes/class-wp-walker.php @@ -52,7 +52,7 @@ class Walker { * * @param string $output Passed by reference. Used to append additional content. */ - function start_lvl(&$output) {} + function start_lvl( &$output, $depth = 0, $args = array() ) {} /** * Ends the list of after the elements are added. @@ -66,7 +66,7 @@ class Walker { * * @param string $output Passed by reference. Used to append additional content. */ - function end_lvl(&$output) {} + function end_lvl( &$output, $depth = 0, $args = array() ) {} /** * Start the element output. @@ -80,7 +80,7 @@ class Walker { * * @param string $output Passed by reference. Used to append additional content. */ - function start_el(&$output) {} + function start_el( &$output, $object, $depth, $args, $current_object_id = 0 ) {} /** * Ends the element output, if needed. @@ -93,7 +93,7 @@ class Walker { * * @param string $output Passed by reference. Used to append additional content. */ - function end_el(&$output) {} + function end_el( &$output, $object, $depth = 0, $args = array() ) {} /** * Traverse elements to create list from elements. @@ -395,5 +395,3 @@ class Walker { } } - -?> \ No newline at end of file diff --git a/wp-includes/class-wp-xmlrpc-server.php b/wp-includes/class-wp-xmlrpc-server.php index 24807cd2a..7334a85dc 100644 --- a/wp-includes/class-wp-xmlrpc-server.php +++ b/wp-includes/class-wp-xmlrpc-server.php @@ -36,6 +36,18 @@ class wp_xmlrpc_server extends IXR_Server { $this->methods = array( // WordPress API 'wp.getUsersBlogs' => 'this:wp_getUsersBlogs', + 'wp.newPost' => 'this:wp_newPost', + 'wp.editPost' => 'this:wp_editPost', + 'wp.deletePost' => 'this:wp_deletePost', + 'wp.getPost' => 'this:wp_getPost', + 'wp.getPosts' => 'this:wp_getPosts', + 'wp.newTerm' => 'this:wp_newTerm', + 'wp.editTerm' => 'this:wp_editTerm', + 'wp.deleteTerm' => 'this:wp_deleteTerm', + 'wp.getTerm' => 'this:wp_getTerm', + 'wp.getTerms' => 'this:wp_getTerms', + 'wp.getTaxonomy' => 'this:wp_getTaxonomy', + 'wp.getTaxonomies' => 'this:wp_getTaxonomies', 'wp.getPage' => 'this:wp_getPage', 'wp.getPages' => 'this:wp_getPages', 'wp.newPage' => 'this:wp_newPage', @@ -64,6 +76,8 @@ class wp_xmlrpc_server extends IXR_Server { 'wp.getMediaItem' => 'this:wp_getMediaItem', 'wp.getMediaLibrary' => 'this:wp_getMediaLibrary', 'wp.getPostFormats' => 'this:wp_getPostFormats', + 'wp.getPostType' => 'this:wp_getPostType', + 'wp.getPostTypes' => 'this:wp_getPostTypes', // Blogger API 'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs', @@ -109,7 +123,7 @@ class wp_xmlrpc_server extends IXR_Server { 'demo.addTwoNumbers' => 'this:addTwoNumbers' ); - $this->initialise_blog_option_info( ); + $this->initialise_blog_option_info(); $this->methods = apply_filters('xmlrpc_methods', $this->methods); } @@ -156,7 +170,7 @@ class wp_xmlrpc_server extends IXR_Server { */ function login_pass_ok($user_login, $user_pass) { if ( !get_option( 'enable_xmlrpc' ) ) { - $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site. An admin user can enable them at %s'), admin_url('options-writing.php') ) ); + $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site. An admin user can enable them at %s'), admin_url('options-writing.php') ) ); return false; } @@ -178,7 +192,7 @@ class wp_xmlrpc_server extends IXR_Server { */ function login($username, $password) { if ( !get_option( 'enable_xmlrpc' ) ) { - $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site. An admin user can enable them at %s'), admin_url('options-writing.php') ) ); + $this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site. An admin user can enable them at %s'), admin_url('options-writing.php') ) ); return false; } @@ -262,11 +276,11 @@ class wp_xmlrpc_server extends IXR_Server { if ( isset($meta['id']) ) { $meta['id'] = (int) $meta['id']; $pmeta = get_metadata_by_mid( 'post', $meta['id'] ); - $meta['value'] = stripslashes_deep( $meta['value'] ); if ( isset($meta['key']) ) { $meta['key'] = stripslashes( $meta['key'] ); if ( $meta['key'] != $pmeta->meta_key ) continue; + $meta['value'] = stripslashes_deep( $meta['value'] ); if ( current_user_can( 'edit_post_meta', $post_id, $meta['key'] ) ) update_metadata_by_mid( 'post', $meta['id'], $meta['value'] ); } elseif ( current_user_can( 'delete_post_meta', $post_id, $pmeta->meta_key ) ) { @@ -285,153 +299,1613 @@ class wp_xmlrpc_server extends IXR_Server { * * @since 2.6.0 */ - function initialise_blog_option_info( ) { + function initialise_blog_option_info() { global $wp_version; $this->blog_options = array( // Read only options - 'software_name' => array( - 'desc' => __( 'Software Name' ), - 'readonly' => true, - 'value' => 'WordPress' + 'software_name' => array( + 'desc' => __( 'Software Name' ), + 'readonly' => true, + 'value' => 'WordPress' ), - 'software_version' => array( - 'desc' => __( 'Software Version' ), - 'readonly' => true, - 'value' => $wp_version + 'software_version' => array( + 'desc' => __( 'Software Version' ), + 'readonly' => true, + 'value' => $wp_version ), - 'blog_url' => array( - 'desc' => __( 'Site URL' ), - 'readonly' => true, - 'option' => 'siteurl' + 'blog_url' => array( + 'desc' => __( 'Site URL' ), + 'readonly' => true, + 'option' => 'siteurl' ), + 'image_default_link_type' => array( + 'desc' => __( 'Image default link type' ), + 'readonly' => true, + 'option' => 'image_default_link_type' + ), + 'image_default_size' => array( + 'desc' => __( 'Image default size' ), + 'readonly' => true, + 'option' => 'image_default_size' + ), + 'image_default_align' => array( + 'desc' => __( 'Image default align' ), + 'readonly' => true, + 'option' => 'image_default_align' + ), + 'template' => array( + 'desc' => __( 'Template' ), + 'readonly' => true, + 'option' => 'template' + ), + 'stylesheet' => array( + 'desc' => __( 'Stylesheet' ), + 'readonly' => true, + 'option' => 'stylesheet' + ), + 'post_thumbnail' => array( + 'desc' => __('Post Thumbnail'), + 'readonly' => true, + 'value' => current_theme_supports( 'post-thumbnails' ) + ), + + // Updatable options + 'time_zone' => array( + 'desc' => __( 'Time Zone' ), + 'readonly' => false, + 'option' => 'gmt_offset' + ), + 'blog_title' => array( + 'desc' => __( 'Site Title' ), + 'readonly' => false, + 'option' => 'blogname' + ), + 'blog_tagline' => array( + 'desc' => __( 'Site Tagline' ), + 'readonly' => false, + 'option' => 'blogdescription' + ), + 'date_format' => array( + 'desc' => __( 'Date Format' ), + 'readonly' => false, + 'option' => 'date_format' + ), + 'time_format' => array( + 'desc' => __( 'Time Format' ), + 'readonly' => false, + 'option' => 'time_format' + ), + 'users_can_register' => array( + 'desc' => __( 'Allow new users to sign up' ), + 'readonly' => false, + 'option' => 'users_can_register' + ), + 'thumbnail_size_w' => array( + 'desc' => __( 'Thumbnail Width' ), + 'readonly' => false, + 'option' => 'thumbnail_size_w' + ), + 'thumbnail_size_h' => array( + 'desc' => __( 'Thumbnail Height' ), + 'readonly' => false, + 'option' => 'thumbnail_size_h' + ), + 'thumbnail_crop' => array( + 'desc' => __( 'Crop thumbnail to exact dimensions' ), + 'readonly' => false, + 'option' => 'thumbnail_crop' + ), + 'medium_size_w' => array( + 'desc' => __( 'Medium size image width' ), + 'readonly' => false, + 'option' => 'medium_size_w' + ), + 'medium_size_h' => array( + 'desc' => __( 'Medium size image height' ), + 'readonly' => false, + 'option' => 'medium_size_h' + ), + 'large_size_w' => array( + 'desc' => __( 'Large size image width' ), + 'readonly' => false, + 'option' => 'large_size_w' + ), + 'large_size_h' => array( + 'desc' => __( 'Large size image height' ), + 'readonly' => false, + 'option' => 'large_size_h' + ), + 'default_comment_status' => array( + 'desc' => __( 'Allow people to post comments on new articles' ), + 'readonly' => false, + 'option' => 'default_comment_status' + ), + 'default_ping_status' => array( + 'desc' => __( 'Allow link notifications from other blogs (pingbacks and trackbacks)' ), + 'readonly' => false, + 'option' => 'default_ping_status' + ) + ); + + $this->blog_options = apply_filters( 'xmlrpc_blog_options', $this->blog_options ); + } + + /** + * Retrieve the blogs of the user. + * + * @since 2.6.0 + * + * @param array $args Method parameters. Contains: + * - username + * - password + * @return array. Contains: + * - 'isAdmin' + * - 'url' + * - 'blogid' + * - 'blogName' + * - 'xmlrpc' - url of xmlrpc endpoint + */ + function wp_getUsersBlogs( $args ) { + global $current_site; + // If this isn't on WPMU then just use blogger_getUsersBlogs + if ( !is_multisite() ) { + array_unshift( $args, 1 ); + return $this->blogger_getUsersBlogs( $args ); + } + + $this->escape( $args ); + + $username = $args[0]; + $password = $args[1]; + + if ( !$user = $this->login($username, $password) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getUsersBlogs' ); + + $blogs = (array) get_blogs_of_user( $user->ID ); + $struct = array(); + + foreach ( $blogs as $blog ) { + // Don't include blogs that aren't hosted at this site + if ( $blog->site_id != $current_site->id ) + continue; + + $blog_id = $blog->userblog_id; + switch_to_blog($blog_id); + $is_admin = current_user_can('manage_options'); + + $struct[] = array( + 'isAdmin' => $is_admin, + 'url' => get_option( 'home' ) . '/', + 'blogid' => (string) $blog_id, + 'blogName' => get_option( 'blogname' ), + 'xmlrpc' => site_url( 'xmlrpc.php' ) + ); + + restore_current_blog(); + } + + return $struct; + } + + /** + * Checks if the method received at least the minimum number of arguments. + * + * @since 3.4.0 + * + * @param string|array $args Sanitize single string or array of strings. + * @param int $count Minimum number of arguments. + * @return boolean if $args contains at least $count arguments. + */ + protected function minimum_args( $args, $count ) { + if ( count( $args ) < $count ) { + $this->error = new IXR_Error( 400, __( 'Insufficient arguments passed to this XML-RPC method.' ) ); + return false; + } + + return true; + } + + /** + * Prepares taxonomy data for return in an XML-RPC object. + * + * @access protected + * + * @param object $taxonomy The unprepared taxonomy data + * @param array $fields The subset of taxonomy fields to return + * @return array The prepared taxonomy data + */ + protected function _prepare_taxonomy( $taxonomy, $fields ) { + $_taxonomy = array( + 'name' => $taxonomy->name, + 'label' => $taxonomy->label, + 'hierarchical' => (bool) $taxonomy->hierarchical, + 'public' => (bool) $taxonomy->public, + 'show_ui' => (bool) $taxonomy->show_ui, + '_builtin' => (bool) $taxonomy->_builtin, + ); + + if ( in_array( 'labels', $fields ) ) + $_taxonomy['labels'] = (array) $taxonomy->labels; + + if ( in_array( 'cap', $fields ) ) + $_taxonomy['cap'] = (array) $taxonomy->cap; + + if ( in_array( 'object_type', $fields ) ) + $_taxonomy['object_type'] = array_unique( (array) $taxonomy->object_type ); + + return apply_filters( 'xmlrpc_prepare_taxonomy', $_taxonomy, $taxonomy, $fields ); + } + + /** + * Prepares term data for return in an XML-RPC object. + * + * @access protected + * + * @param array|object $term The unprepared term data + * @return array The prepared term data + */ + protected function _prepare_term( $term ) { + $_term = $term; + if ( ! is_array( $_term) ) + $_term = get_object_vars( $_term ); + + // For Intergers which may be largeer than XMLRPC supports ensure we return strings. + $_term['term_id'] = strval( $_term['term_id'] ); + $_term['term_group'] = strval( $_term['term_group'] ); + $_term['term_taxonomy_id'] = strval( $_term['term_taxonomy_id'] ); + $_term['parent'] = strval( $_term['parent'] ); + + // Count we are happy to return as an Integer because people really shouldn't use Terms that much. + $_term['count'] = intval( $_term['count'] ); + + return apply_filters( 'xmlrpc_prepare_term', $_term, $term ); + } + + /** + * Convert a WordPress date string to an IXR_Date object. + * + * @access protected + * + * @param string $date + * @return IXR_Date + */ + protected function _convert_date( $date ) { + if ( $date === '0000-00-00 00:00:00' ) { + return new IXR_Date( '00000000T00:00:00Z' ); + } + return new IXR_Date( mysql2date( 'Ymd\TH:i:s', $date, false ) ); + } + + /** + * Convert a WordPress GMT date string to an IXR_Date object. + * + * @access protected + * + * @param string $date_gmt + * @param string $date + * @return IXR_Date + */ + protected function _convert_date_gmt( $date_gmt, $date ) { + if ( $date !== '0000-00-00 00:00:00' && $date_gmt === '0000-00-00 00:00:00' ) { + return new IXR_Date( get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $date, false ), 'Ymd\TH:i:s' ) ); + } + return $this->_convert_date( $date_gmt ); + } + + /** + * Prepares post data for return in an XML-RPC object. + * + * @access protected + * + * @param array $post The unprepared post data + * @param array $fields The subset of post type fields to return + * @return array The prepared post data + */ + protected function _prepare_post( $post, $fields ) { + // holds the data for this post. built up based on $fields + $_post = array( 'post_id' => strval( $post['ID'] ) ); + + // prepare common post fields + $post_fields = array( + 'post_title' => $post['post_title'], + 'post_date' => $this->_convert_date( $post['post_date'] ), + 'post_date_gmt' => $this->_convert_date_gmt( $post['post_date_gmt'], $post['post_date'] ), + 'post_modified' => $this->_convert_date( $post['post_modified'] ), + 'post_modified_gmt' => $this->_convert_date_gmt( $post['post_modified_gmt'], $post['post_modified'] ), + 'post_status' => $post['post_status'], + 'post_type' => $post['post_type'], + 'post_name' => $post['post_name'], + 'post_author' => $post['post_author'], + 'post_password' => $post['post_password'], + 'post_excerpt' => $post['post_excerpt'], + 'post_content' => $post['post_content'], + 'link' => post_permalink( $post['ID'] ), + 'comment_status' => $post['comment_status'], + 'ping_status' => $post['ping_status'], + 'sticky' => ( $post['post_type'] === 'post' && is_sticky( $post['ID'] ) ), + ); + + // Thumbnail + $post_fields['post_thumbnail'] = array(); + $thumbnail_id = get_post_thumbnail_id( $post['ID'] ); + if ( $thumbnail_id ) { + $thumbnail_size = current_theme_supports('post-thumbnail') ? 'post-thumbnail' : 'thumbnail'; + $post_fields['post_thumbnail'] = $this->_prepare_media_item( get_post( $thumbnail_id ), $thumbnail_size ); + } + + // Consider future posts as published + if ( $post_fields['post_status'] === 'future' ) + $post_fields['post_status'] = 'publish'; + + // Fill in blank post format + $post_fields['post_format'] = get_post_format( $post['ID'] ); + if ( empty( $post_fields['post_format'] ) ) + $post_fields['post_format'] = 'standard'; + + // Merge requested $post_fields fields into $_post + if ( in_array( 'post', $fields ) ) { + $_post = array_merge( $_post, $post_fields ); + } else { + $requested_fields = array_intersect_key( $post_fields, array_flip( $fields ) ); + $_post = array_merge( $_post, $requested_fields ); + } + + $all_taxonomy_fields = in_array( 'taxonomies', $fields ); + + if ( $all_taxonomy_fields || in_array( 'terms', $fields ) ) { + $post_type_taxonomies = get_object_taxonomies( $post['post_type'], 'names' ); + $terms = wp_get_object_terms( $post['ID'], $post_type_taxonomies ); + $_post['terms'] = array(); + foreach ( $terms as $term ) { + $_post['terms'][] = $this->_prepare_term( $term ); + } + } + + if ( in_array( 'custom_fields', $fields ) ) + $_post['custom_fields'] = $this->get_custom_fields( $post['ID'] ); + + if ( in_array( 'enclosure', $fields ) ) { + $_post['enclosure'] = array(); + $enclosures = (array) get_post_meta( $post['ID'], 'enclosure' ); + if ( ! empty( $enclosures ) ) { + $encdata = explode( "\n", $enclosures[0] ); + $_post['enclosure']['url'] = trim( htmlspecialchars( $encdata[0] ) ); + $_post['enclosure']['length'] = (int) trim( $encdata[1] ); + $_post['enclosure']['type'] = trim( $encdata[2] ); + } + } + + return apply_filters( 'xmlrpc_prepare_post', $_post, $post, $fields ); + } + + /** + * Prepares post data for return in an XML-RPC object. + * + * @access protected + * + * @param object $post_type Post type object + * @param array $fields The subset of post fields to return + * @return array The prepared post type data + */ + protected function _prepare_post_type( $post_type, $fields ) { + $_post_type = array( + 'name' => $post_type->name, + 'label' => $post_type->label, + 'hierarchical' => (bool) $post_type->hierarchical, + 'public' => (bool) $post_type->public, + 'show_ui' => (bool) $post_type->show_ui, + '_builtin' => (bool) $post_type->_builtin, + 'has_archive' => (bool) $post_type->has_archive, + 'supports' => get_all_post_type_supports( $post_type->name ), + ); + + if ( in_array( 'labels', $fields ) ) { + $_post_type['labels'] = (array) $post_type->labels; + } + + if ( in_array( 'cap', $fields ) ) { + $_post_type['cap'] = (array) $post_type->cap; + $_post_type['map_meta_cap'] = (bool) $post_type->map_meta_cap; + } + + if ( in_array( 'menu', $fields ) ) { + $_post_type['menu_position'] = (int) $post_type->menu_position; + $_post_type['menu_icon'] = $post_type->menu_icon; + $_post_type['show_in_menu'] = (bool) $post_type->show_in_menu; + } + + if ( in_array( 'taxonomies', $fields ) ) + $_post_type['taxonomies'] = get_object_taxonomies( $post_type->name, 'names' ); + + return apply_filters( 'xmlrpc_prepare_post_type', $_post_type, $post_type ); + } + + /** + * Prepares media item data for return in an XML-RPC object. + * + * @access protected + * + * @param object $media_item The unprepared media item data + * @param string $thumbnail_size The image size to use for the thumbnail URL + * @return array The prepared media item data + */ + protected function _prepare_media_item( $media_item, $thumbnail_size = 'thumbnail' ) { + $_media_item = array( + 'attachment_id' => strval( $media_item->ID ), + 'date_created_gmt' => $this->_convert_date_gmt( $media_item->post_date_gmt, $media_item->post_date ), + 'parent' => $media_item->post_parent, + 'link' => wp_get_attachment_url( $media_item->ID ), + 'title' => $media_item->post_title, + 'caption' => $media_item->post_excerpt, + 'description' => $media_item->post_content, + 'metadata' => wp_get_attachment_metadata( $media_item->ID ), + ); + + $thumbnail_src = image_downsize( $media_item->ID, $thumbnail_size ); + if ( $thumbnail_src ) + $_media_item['thumbnail'] = $thumbnail_src[0]; + else + $_media_item['thumbnail'] = $_media_item['link']; + + return apply_filters( 'xmlrpc_prepare_media_item', $_media_item, $media_item, $thumbnail_size ); + } + + /** + * Prepares page data for return in an XML-RPC object. + * + * @access protected + * + * @param object $page The unprepared page data + * @return array The prepared page data + */ + protected function _prepare_page( $page ) { + // Get all of the page content and link. + $full_page = get_extended( $page->post_content ); + $link = post_permalink( $page->ID ); + + // Get info the page parent if there is one. + $parent_title = ""; + if ( ! empty( $page->post_parent ) ) { + $parent = get_page( $page->post_parent ); + $parent_title = $parent->post_title; + } + + // Determine comment and ping settings. + $allow_comments = comments_open( $page->ID ) ? 1 : 0; + $allow_pings = pings_open( $page->ID ) ? 1 : 0; + + // Format page date. + $page_date = $this->_convert_date( $page->post_date ); + $page_date_gmt = $this->_convert_date_gmt( $page->post_date_gmt, $page->post_date ); + + // Pull the categories info together. + $categories = array(); + foreach ( wp_get_post_categories( $page->ID ) as $cat_id ) { + $categories[] = get_cat_name( $cat_id ); + } + + // Get the author info. + $author = get_userdata( $page->post_author ); + + $page_template = get_page_template_slug( $page->ID ); + if ( empty( $page_template ) ) + $page_template = 'default'; + + $_page = array( + 'dateCreated' => $page_date, + 'userid' => $page->post_author, + 'page_id' => $page->ID, + 'page_status' => $page->post_status, + 'description' => $full_page['main'], + 'title' => $page->post_title, + 'link' => $link, + 'permaLink' => $link, + 'categories' => $categories, + 'excerpt' => $page->post_excerpt, + 'text_more' => $full_page['extended'], + 'mt_allow_comments' => $allow_comments, + 'mt_allow_pings' => $allow_pings, + 'wp_slug' => $page->post_name, + 'wp_password' => $page->post_password, + 'wp_author' => $author->display_name, + 'wp_page_parent_id' => $page->post_parent, + 'wp_page_parent_title' => $parent_title, + 'wp_page_order' => $page->menu_order, + 'wp_author_id' => (string) $author->ID, + 'wp_author_display_name' => $author->display_name, + 'date_created_gmt' => $page_date_gmt, + 'custom_fields' => $this->get_custom_fields( $page->ID ), + 'wp_page_template' => $page_template + ); + + return apply_filters( 'xmlrpc_prepare_page', $_page, $page ); + } + + /** + * Prepares comment data for return in an XML-RPC object. + * + * @access protected + * + * @param object $comment The unprepared comment data + * @return array The prepared comment data + */ + protected function _prepare_comment( $comment ) { + // Format page date. + $comment_date = $this->_convert_date( $comment->comment_date ); + $comment_date_gmt = $this->_convert_date_gmt( $comment->comment_date_gmt, $comment->comment_date ); + + if ( '0' == $comment->comment_approved ) + $comment_status = 'hold'; + else if ( 'spam' == $comment->comment_approved ) + $comment_status = 'spam'; + else if ( '1' == $comment->comment_approved ) + $comment_status = 'approve'; + else + $comment_status = $comment->comment_approved; + + $_comment = array( + 'date_created_gmt' => $comment_date_gmt, + 'user_id' => $comment->user_id, + 'comment_id' => $comment->comment_ID, + 'parent' => $comment->comment_parent, + 'status' => $comment_status, + 'content' => $comment->comment_content, + 'link' => get_comment_link($comment), + 'post_id' => $comment->comment_post_ID, + 'post_title' => get_the_title($comment->comment_post_ID), + 'author' => $comment->comment_author, + 'author_url' => $comment->comment_author_url, + 'author_email' => $comment->comment_author_email, + 'author_ip' => $comment->comment_author_IP, + 'type' => $comment->comment_type, + ); + + return apply_filters( 'xmlrpc_prepare_comment', $_comment, $comment ); + } + + /** + * Create a new post for any registered post type. + * + * @since 3.4.0 + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $content_struct + * $content_struct can contain: + * - post_type (default: 'post') + * - post_status (default: 'draft') + * - post_title + * - post_author + * - post_exerpt + * - post_content + * - post_date_gmt | post_date + * - post_format + * - post_password + * - comment_status - can be 'open' | 'closed' + * - ping_status - can be 'open' | 'closed' + * - sticky + * - post_thumbnail - ID of a media item to use as the post thumbnail/featured image + * - custom_fields - array, with each element containing 'key' and 'value' + * - terms - array, with taxonomy names as keys and arrays of term IDs as values + * - terms_names - array, with taxonomy names as keys and arrays of term names as values + * - enclosure + * - any other fields supported by wp_insert_post() + * @return string post_id + */ + function wp_newPost( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $content_struct = $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.newPost' ); + + unset( $content_struct['ID'] ); + + return $this->_insert_post( $user, $content_struct ); + } + + /** + * Helper method for filtering out elements from an array. + * + * @since 3.4.0 + * + * @param int $count Number to compare to one. + */ + private function _is_greater_than_one( $count ) { + return $count > 1; + } + + /** + * Helper method for wp_newPost and wp_editPost, containing shared logic. + * + * @since 3.4.0 + * @uses wp_insert_post() + * + * @param WP_User $user The post author if post_author isn't set in $content_struct. + * @param array $content_struct Post data to insert. + */ + protected function _insert_post( $user, $content_struct ) { + $defaults = array( 'post_status' => 'draft', 'post_type' => 'post', 'post_author' => 0, + 'post_password' => '', 'post_excerpt' => '', 'post_content' => '', 'post_title' => '' ); + + $post_data = wp_parse_args( $content_struct, $defaults ); + + $post_type = get_post_type_object( $post_data['post_type'] ); + if ( ! $post_type ) + return new IXR_Error( 403, __( 'Invalid post type' ) ); + + $update = ! empty( $post_data['ID'] ); + + if ( $update ) { + if ( ! get_post( $post_data['ID'] ) ) + return new IXR_Error( 401, __( 'Invalid post ID.' ) ); + if ( ! current_user_can( $post_type->cap->edit_post, $post_data['ID'] ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) ); + if ( $post_data['post_type'] != get_post_type( $post_data['ID'] ) ) + return new IXR_Error( 401, __( 'The post type may not be changed.' ) ); + } else { + if ( ! current_user_can( $post_type->cap->edit_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to post on this site.' ) ); + } + + switch ( $post_data['post_status'] ) { + case 'draft': + case 'pending': + break; + case 'private': + if ( ! current_user_can( $post_type->cap->publish_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to create private posts in this post type' ) ); + break; + case 'publish': + case 'future': + if ( ! current_user_can( $post_type->cap->publish_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts in this post type' ) ); + break; + default: + $post_data['post_status'] = 'draft'; + break; + } + + if ( ! empty( $post_data['post_password'] ) && ! current_user_can( $post_type->cap->publish_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to create password protected posts in this post type' ) ); + + $post_data['post_author'] = absint( $post_data['post_author'] ); + if ( ! empty( $post_data['post_author'] ) && $post_data['post_author'] != $user->ID ) { + if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) + return new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) ); + + $author = get_userdata( $post_data['post_author'] ); + + if ( ! $author ) + return new IXR_Error( 404, __( 'Invalid author ID.' ) ); + } else { + $post_data['post_author'] = $user->ID; + } + + if ( isset( $post_data['comment_status'] ) && $post_data['comment_status'] != 'open' && $post_data['comment_status'] != 'closed' ) + unset( $post_data['comment_status'] ); + + if ( isset( $post_data['ping_status'] ) && $post_data['ping_status'] != 'open' && $post_data['ping_status'] != 'closed' ) + unset( $post_data['ping_status'] ); + + // Do some timestamp voodoo + if ( ! empty( $post_data['post_date_gmt'] ) ) { + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $post_data['post_date_gmt']->getIso(), 'Z' ) . 'Z'; + } elseif ( ! empty( $post_data['post_date'] ) ) { + $dateCreated = $post_data['post_date']->getIso(); + } + + if ( ! empty( $dateCreated ) ) { + $post_data['post_date'] = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) ); + $post_data['post_date_gmt'] = iso8601_to_datetime( $dateCreated, 'GMT' ); + } + + if ( ! isset( $post_data['ID'] ) ) + $post_data['ID'] = get_default_post_to_edit( $post_data['post_type'], true )->ID; + $post_ID = $post_data['ID']; + + if ( $post_data['post_type'] == 'post' ) { + // Private and password-protected posts cannot be stickied. + if ( $post_data['post_status'] == 'private' || ! empty( $post_data['post_password'] ) ) { + // Error if the client tried to stick the post, otherwise, silently unstick. + if ( ! empty( $post_data['sticky'] ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) ); + if ( $update ) + unstick_post( $post_ID ); + } elseif ( isset( $post_data['sticky'] ) ) { + if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) ); + if ( $post_data['sticky'] ) + stick_post( $post_ID ); + else + unstick_post( $post_ID ); + } + } + + if ( isset( $post_data['post_thumbnail'] ) ) { + // empty value deletes, non-empty value adds/updates + if ( ! $post_data['post_thumbnail'] ) + delete_post_thumbnail( $post_ID ); + elseif ( ! set_post_thumbnail( $post_ID, $post_data['post_thumbnail'] ) ) + return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); + unset( $content_struct['post_thumbnail'] ); + } + + if ( isset( $post_data['custom_fields'] ) ) + $this->set_custom_fields( $post_ID, $post_data['custom_fields'] ); + + if ( isset( $post_data['terms'] ) || isset( $post_data['terms_names'] ) ) { + $post_type_taxonomies = get_object_taxonomies( $post_data['post_type'], 'objects' ); + + // accumulate term IDs from terms and terms_names + $terms = array(); + + // first validate the terms specified by ID + if ( isset( $post_data['terms'] ) && is_array( $post_data['terms'] ) ) { + $taxonomies = array_keys( $post_data['terms'] ); + + // validating term ids + foreach ( $taxonomies as $taxonomy ) { + if ( ! array_key_exists( $taxonomy , $post_type_taxonomies ) ) + return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) ); + + if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) ); + + $term_ids = $post_data['terms'][$taxonomy]; + foreach ( $term_ids as $term_id ) { + $term = get_term_by( 'id', $term_id, $taxonomy ); + + if ( ! $term ) + return new IXR_Error( 403, __( 'Invalid term ID' ) ); + + $terms[$taxonomy][] = (int) $term_id; + } + } + } + + // now validate terms specified by name + if ( isset( $post_data['terms_names'] ) && is_array( $post_data['terms_names'] ) ) { + $taxonomies = array_keys( $post_data['terms_names'] ); + + foreach ( $taxonomies as $taxonomy ) { + if ( ! array_key_exists( $taxonomy , $post_type_taxonomies ) ) + return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) ); + + if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) ); + + // for hierarchical taxonomies, we can't assign a term when multiple terms in the hierarchy share the same name + $ambiguous_terms = array(); + if ( is_taxonomy_hierarchical( $taxonomy ) ) { + $tax_term_names = get_terms( $taxonomy, array( 'fields' => 'names', 'hide_empty' => false ) ); + + // count the number of terms with the same name + $tax_term_names_count = array_count_values( $tax_term_names ); + + // filter out non-ambiguous term names + $ambiguous_tax_term_counts = array_filter( $tax_term_names_count, array( $this, '_is_greater_than_one') ); + + $ambiguous_terms = array_keys( $ambiguous_tax_term_counts ); + } + + $term_names = $post_data['terms_names'][$taxonomy]; + foreach ( $term_names as $term_name ) { + if ( in_array( $term_name, $ambiguous_terms ) ) + return new IXR_Error( 401, __( 'Ambiguous term name used in a hierarchical taxonomy. Please use term ID instead.' ) ); + + $term = get_term_by( 'name', $term_name, $taxonomy ); + + if ( ! $term ) { + // term doesn't exist, so check that the user is allowed to create new terms + if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->edit_terms ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to add a term to one of the given taxonomies.' ) ); + + // create the new term + $term_info = wp_insert_term( $term_name, $taxonomy ); + if ( is_wp_error( $term_info ) ) + return new IXR_Error( 500, $term_info->get_error_message() ); + + $terms[$taxonomy][] = (int) $term_info['term_id']; + } else { + $terms[$taxonomy][] = (int) $term->term_id; + } + } + } + } + + $post_data['tax_input'] = $terms; + unset( $post_data['terms'], $post_data['terms_names'] ); + } else { + // do not allow direct submission of 'tax_input', clients must use 'terms' and/or 'terms_names' + unset( $post_data['tax_input'], $post_data['post_category'], $post_data['tags_input'] ); + } + + if ( isset( $post_data['post_format'] ) ) { + $format = set_post_format( $post_ID, $post_data['post_format'] ); + + if ( is_wp_error( $format ) ) + return new IXR_Error( 500, $format->get_error_message() ); + + unset( $post_data['post_format'] ); + } + + // Handle enclosures + $enclosure = isset( $post_data['enclosure'] ) ? $post_data['enclosure'] : null; + $this->add_enclosure_if_new( $post_ID, $enclosure ); + + $this->attach_uploads( $post_ID, $post_data['post_content'] ); + + $post_data = apply_filters( 'xmlrpc_wp_insert_post_data', $post_data, $content_struct ); + + $post_ID = wp_insert_post( $post_data, true ); + if ( is_wp_error( $post_ID ) ) + return new IXR_Error( 500, $post_ID->get_error_message() ); + + if ( ! $post_ID ) + return new IXR_Error( 401, __( 'Sorry, your entry could not be posted. Something wrong happened.' ) ); + + return strval( $post_ID ); + } + + /** + * Edit a post for any registered post type. + * + * The $content_struct parameter only needs to contain fields that + * should be changed. All other fields will retain their existing values. + * + * @since 3.4.0 + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - int $post_id + * - array $content_struct + * @return true on success + */ + function wp_editPost( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + $content_struct = $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.editPost' ); + + $post = get_post( $post_id, ARRAY_A ); + + if ( empty( $post['ID'] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + // convert the date field back to IXR form + $post['post_date'] = $this->_convert_date( $post['post_date'] ); + + // ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct, + // since _insert_post will ignore the non-GMT date if the GMT date is set + if ( $post['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) ) + unset( $post['post_date_gmt'] ); + else + $post['post_date_gmt'] = $this->_convert_date( $post['post_date_gmt'] ); + + $this->escape( $post ); + $merged_content_struct = array_merge( $post, $content_struct ); + + $retval = $this->_insert_post( $user, $merged_content_struct ); + if ( $retval instanceof IXR_Error ) + return $retval; + + return true; + } + + /** + * Delete a post for any registered post type. + * + * @since 3.4.0 + * + * @uses wp_delete_post() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - int $post_id + * @return true on success + */ + function wp_deletePost( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.deletePost' ); + + $post = wp_get_single_post( $post_id, ARRAY_A ); + if ( empty( $post['ID'] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + $post_type = get_post_type_object( $post['post_type'] ); + if ( ! current_user_can( $post_type->cap->delete_post, $post_id ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this post.' ) ); + + $result = wp_delete_post( $post_id ); + + if ( ! $result ) + return new IXR_Error( 500, __( 'The post cannot be deleted.' ) ); + + return true; + } + + /** + * Retrieve a post. + * + * @since 3.4.0 + * + * The optional $fields parameter specifies what fields will be included + * in the response array. This should be a list of field names. 'post_id' will + * always be included in the response regardless of the value of $fields. + * + * Instead of, or in addition to, individual field names, conceptual group + * names can be used to specify multiple fields. The available conceptual + * groups are 'post' (all basic fields), 'taxonomies', 'custom_fields', + * and 'enclosure'. + * + * @uses wp_get_single_post() + * @param array $args Method parameters. Contains: + * - int $post_id + * - string $username + * - string $password + * - array $fields optional + * @return array contains (based on $fields parameter): + * - 'post_id' + * - 'post_title' + * - 'post_date' + * - 'post_date_gmt' + * - 'post_modified' + * - 'post_modified_gmt' + * - 'post_status' + * - 'post_type' + * - 'post_name' + * - 'post_author' + * - 'post_password' + * - 'post_excerpt' + * - 'post_content' + * - 'link' + * - 'comment_status' + * - 'ping_status' + * - 'sticky' + * - 'custom_fields' + * - 'terms' + * - 'categories' + * - 'tags' + * - 'enclosure' + */ + function wp_getPost( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_id = (int) $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_post_fields', array( 'post', 'terms', 'custom_fields' ), 'wp.getPost' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPost' ); + + $post = wp_get_single_post( $post_id, ARRAY_A ); + + if ( empty( $post['ID'] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + $post_type = get_post_type_object( $post['post_type'] ); + if ( ! current_user_can( $post_type->cap->edit_posts, $post_id ) ) + return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); + + return $this->_prepare_post( $post, $fields ); + } + + /** + * Retrieve posts. + * + * @since 3.4.0 + * + * The optional $filter parameter modifies the query used to retrieve posts. + * Accepted keys are 'post_type', 'post_status', 'number', 'offset', + * 'orderby', and 'order'. + * + * The optional $fields parameter specifies what fields will be included + * in the response array. + * + * @uses wp_get_recent_posts() + * @see wp_getPost() for more on $fields + * @see get_posts() for more on $filter values + * + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $filter optional + * - array $fields optional + * @return array contains a collection of posts. + */ + function wp_getPosts( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $filter = isset( $args[3] ) ? $args[3] : array(); + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_post_fields', array( 'post', 'terms', 'custom_fields' ), 'wp.getPosts' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPosts' ); + + $query = array(); + + if ( isset( $filter['post_type'] ) ) { + $post_type = get_post_type_object( $filter['post_type'] ); + if ( ! ( (bool) $post_type ) ) + return new IXR_Error( 403, __( 'The post type specified is not valid' ) ); + + if ( ! current_user_can( $post_type->cap->edit_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts in this post type' )); + + $query['post_type'] = $filter['post_type']; + } + + if ( isset( $filter['post_status'] ) ) + $query['post_status'] = $filter['post_status']; + + if ( isset( $filter['number'] ) ) + $query['numberposts'] = absint( $filter['number'] ); + + if ( isset( $filter['offset'] ) ) + $query['offset'] = absint( $filter['offset'] ); + + if ( isset( $filter['orderby'] ) ) { + $query['orderby'] = $filter['orderby']; + + if ( isset( $filter['order'] ) ) + $query['order'] = $filter['order']; + } + + $posts_list = wp_get_recent_posts( $query ); + + if ( ! $posts_list ) + return array(); + + // holds all the posts data + $struct = array(); + + foreach ( $posts_list as $post ) { + $post_type = get_post_type_object( $post['post_type'] ); + if ( ! current_user_can( $post_type->cap->edit_posts, $post['ID'] ) ) + continue; + + $struct[] = $this->_prepare_post( $post, $fields ); + } + + return $struct; + } + + /** + * Create a new term. + * + * @since 3.4.0 + * + * @uses wp_insert_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $content_struct + * The $content_struct must contain: + * - 'name' + * - 'taxonomy' + * Also, it can optionally contain: + * - 'parent' + * - 'description' + * - 'slug' + * @return string term_id + */ + function wp_newTerm( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $content_struct = $args[3]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.newTerm' ); + + if ( ! taxonomy_exists( $content_struct['taxonomy'] ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $content_struct['taxonomy'] ); + + if ( ! current_user_can( $taxonomy->cap->manage_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to create terms in this taxonomy.' ) ); + + $taxonomy = (array) $taxonomy; + + // hold the data of the term + $term_data = array(); + + $term_data['name'] = trim( $content_struct['name'] ); + if ( empty( $term_data['name'] ) ) + return new IXR_Error( 403, __( 'The term name cannot be empty.' ) ); + + if ( isset( $content_struct['parent'] ) ) { + if ( ! $taxonomy['hierarchical'] ) + return new IXR_Error( 403, __( 'This taxonomy is not hierarchical.' ) ); + + $parent_term_id = (int) $content_struct['parent']; + $parent_term = get_term( $parent_term_id , $taxonomy['name'] ); + + if ( is_wp_error( $parent_term ) ) + return new IXR_Error( 500, $parent_term->get_error_message() ); + + if ( ! $parent_term ) + return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); + + $term_data['parent'] = $content_struct['parent']; + } + + if ( isset( $content_struct['description'] ) ) + $term_data['description'] = $content_struct['description']; + + if ( isset( $content_struct['slug'] ) ) + $term_data['slug'] = $content_struct['slug']; + + $term = wp_insert_term( $term_data['name'] , $taxonomy['name'] , $term_data ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 500, __( 'Sorry, your term could not be created. Something wrong happened.' ) ); + + return strval( $term['term_id'] ); + } + + /** + * Edit a term. + * + * @since 3.4.0 + * + * @uses wp_update_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $term_id + * - array $content_struct + * The $content_struct must contain: + * - 'taxonomy' + * Also, it can optionally contain: + * - 'name' + * - 'parent' + * - 'description' + * - 'slug' + * @return bool True, on success. + */ + function wp_editTerm( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $term_id = (int) $args[3]; + $content_struct = $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.editTerm' ); + + if ( ! taxonomy_exists( $content_struct['taxonomy'] ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $content_struct['taxonomy'] ); + + if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to edit terms in this taxonomy.' ) ); + + $taxonomy = (array) $taxonomy; + + // hold the data of the term + $term_data = array(); + + $term = get_term( $term_id , $content_struct['taxonomy'] ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 404, __( 'Invalid term ID' ) ); + + if ( isset( $content_struct['name'] ) ) { + $term_data['name'] = trim( $content_struct['name'] ); + + if ( empty( $term_data['name'] ) ) + return new IXR_Error( 403, __( 'The term name cannot be empty.' ) ); + } + + if ( isset( $content_struct['parent'] ) ) { + if ( ! $taxonomy['hierarchical'] ) + return new IXR_Error( 403, __( "This taxonomy is not hierarchical so you can't set a parent." ) ); + + $parent_term_id = (int) $content_struct['parent']; + $parent_term = get_term( $parent_term_id , $taxonomy['name'] ); + + if ( is_wp_error( $parent_term ) ) + return new IXR_Error( 500, $parent_term->get_error_message() ); + + if ( ! $parent_term ) + return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); + + $term_data['parent'] = $content_struct['parent']; + } + + if ( isset( $content_struct['description'] ) ) + $term_data['description'] = $content_struct['description']; + + if ( isset( $content_struct['slug'] ) ) + $term_data['slug'] = $content_struct['slug']; + + $term = wp_update_term( $term_id , $taxonomy['name'] , $term_data ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 500, __( 'Sorry, editing the term failed.' ) ); + + return true; + } + + /** + * Delete a term. + * + * @since 3.4.0 + * + * @uses wp_delete_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxnomy_name + * - string $term_id + * @return boolean|IXR_Error If it suceeded true else a reason why not + */ + function wp_deleteTerm( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + $term_id = (int) $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.deleteTerm' ); + + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->delete_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to delete terms in this taxonomy.' ) ); + + $term = get_term( $term_id, $taxonomy->name ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 404, __( 'Invalid term ID' ) ); + + $result = wp_delete_term( $term_id, $taxonomy->name ); + + if ( is_wp_error( $result ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $result ) + return new IXR_Error( 500, __( 'Sorry, deleting the term failed.' ) ); + + return $result; + } + + /** + * Retrieve a term. + * + * @since 3.4.0 + * + * @uses get_term() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxonomy + * - string $term_id + * @return array contains: + * - 'term_id' + * - 'name' + * - 'slug' + * - 'term_group' + * - 'term_taxonomy_id' + * - 'taxonomy' + * - 'description' + * - 'parent' + * - 'count' + */ + function wp_getTerm( $args ) { + if ( ! $this->minimum_args( $args, 5 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + $term_id = (int) $args[4]; + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getTerm' ); + + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); + + $term = get_term( $term_id , $taxonomy->name, ARRAY_A ); + + if ( is_wp_error( $term ) ) + return new IXR_Error( 500, $term->get_error_message() ); + + if ( ! $term ) + return new IXR_Error( 404, __( 'Invalid term ID' ) ); + + return $this->_prepare_term( $term ); + } + + /** + * Retrieve all terms for a taxonomy. + * + * @since 3.4.0 + * + * The optional $filter parameter modifies the query used to retrieve terms. + * Accepted keys are 'number', 'offset', 'orderby', 'order', 'hide_empty', and 'search'. + * + * @uses get_terms() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxonomy + * - array $filter optional + * @return array terms + */ + function wp_getTerms( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + $filter = isset( $args[4] ) ? $args[4] : array(); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getTerms' ); + + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); + + $query = array(); + + if ( isset( $filter['number'] ) ) + $query['number'] = absint( $filter['number'] ); + + if ( isset( $filter['offset'] ) ) + $query['offset'] = absint( $filter['offset'] ); + + if ( isset( $filter['orderby'] ) ) { + $query['orderby'] = $filter['orderby']; + + if ( isset( $filter['order'] ) ) + $query['order'] = $filter['order']; + } + + if ( isset( $filter['hide_empty'] ) ) + $query['hide_empty'] = $filter['hide_empty']; + else + $query['get'] = 'all'; + + if ( isset( $filter['search'] ) ) + $query['search'] = $filter['search']; + + $terms = get_terms( $taxonomy->name, $query ); + + if ( is_wp_error( $terms ) ) + return new IXR_Error( 500, $terms->get_error_message() ); + + $struct = array(); + + foreach ( $terms as $term ) { + $struct[] = $this->_prepare_term( $term ); + } + + return $struct; + } + + /** + * Retrieve a taxonomy. + * + * @since 3.4.0 + * + * @uses get_taxonomy() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $taxonomy + * @return array (@see get_taxonomy()) + */ + function wp_getTaxonomy( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $taxonomy = $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_taxonomy_fields', array( 'labels', 'cap', 'object_type' ), 'wp.getTaxonomy' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; - // Updatable options - 'time_zone' => array( - 'desc' => __( 'Time Zone' ), - 'readonly' => false, - 'option' => 'gmt_offset' - ), - 'blog_title' => array( - 'desc' => __( 'Site Title' ), - 'readonly' => false, - 'option' => 'blogname' - ), - 'blog_tagline' => array( - 'desc' => __( 'Site Tagline' ), - 'readonly' => false, - 'option' => 'blogdescription' - ), - 'date_format' => array( - 'desc' => __( 'Date Format' ), - 'readonly' => false, - 'option' => 'date_format' - ), - 'time_format' => array( - 'desc' => __( 'Time Format' ), - 'readonly' => false, - 'option' => 'time_format' - ), - 'users_can_register' => array( - 'desc' => __( 'Allow new users to sign up' ), - 'readonly' => false, - 'option' => 'users_can_register' - ), - 'thumbnail_size_w' => array( - 'desc' => __( 'Thumbnail Width' ), - 'readonly' => false, - 'option' => 'thumbnail_size_w' - ), - 'thumbnail_size_h' => array( - 'desc' => __( 'Thumbnail Height' ), - 'readonly' => false, - 'option' => 'thumbnail_size_h' - ), - 'thumbnail_crop' => array( - 'desc' => __( 'Crop thumbnail to exact dimensions' ), - 'readonly' => false, - 'option' => 'thumbnail_crop' - ), - 'medium_size_w' => array( - 'desc' => __( 'Medium size image width' ), - 'readonly' => false, - 'option' => 'medium_size_w' - ), - 'medium_size_h' => array( - 'desc' => __( 'Medium size image height' ), - 'readonly' => false, - 'option' => 'medium_size_h' - ), - 'large_size_w' => array( - 'desc' => __( 'Large size image width' ), - 'readonly' => false, - 'option' => 'large_size_w' - ), - 'large_size_h' => array( - 'desc' => __( 'Large size image height' ), - 'readonly' => false, - 'option' => 'large_size_h' - ) - ); + do_action( 'xmlrpc_call', 'wp.getTaxonomy' ); - $this->blog_options = apply_filters( 'xmlrpc_blog_options', $this->blog_options ); + if ( ! taxonomy_exists( $taxonomy ) ) + return new IXR_Error( 403, __( 'Invalid taxonomy' ) ); + + $taxonomy = get_taxonomy( $taxonomy ); + + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) + return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); + + return $this->_prepare_taxonomy( $taxonomy, $fields ); } /** - * Retrieve the blogs of the user. + * Retrieve all taxonomies. * - * @since 2.6.0 + * @since 3.4.0 * + * @uses get_taxonomies() * @param array $args Method parameters. Contains: - * - username - * - password - * @return array. Contains: - * - 'isAdmin' - * - 'url' - * - 'blogid' - * - 'blogName' - * - 'xmlrpc' - url of xmlrpc endpoint + * - int $blog_id + * - string $username + * - string $password + * @return array taxonomies */ - function wp_getUsersBlogs( $args ) { - global $current_site; - // If this isn't on WPMU then just use blogger_getUsersBlogs - if ( !is_multisite() ) { - array_unshift( $args, 1 ); - return $this->blogger_getUsersBlogs( $args ); - } + function wp_getTaxonomies( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; $this->escape( $args ); - $username = $args[0]; - $password = $args[1]; + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $filter = isset( $args[3] ) ? $args[3] : array( 'public' => true ); - if ( !$user = $this->login($username, $password) ) + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_taxonomy_fields', array( 'labels', 'cap', 'object_type' ), 'wp.getTaxonomies' ); + + if ( ! $user = $this->login( $username, $password ) ) return $this->error; + do_action( 'xmlrpc_call', 'wp.getTaxonomies' ); - do_action( 'xmlrpc_call', 'wp.getUsersBlogs' ); + $taxonomies = get_taxonomies( $filter, 'objects' ); - $blogs = (array) get_blogs_of_user( $user->ID ); - $struct = array( ); + // holds all the taxonomy data + $struct = array(); - foreach ( $blogs as $blog ) { - // Don't include blogs that aren't hosted at this site - if ( $blog->site_id != $current_site->id ) + foreach ( $taxonomies as $taxonomy ) { + // capability check for post_types + if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) continue; - $blog_id = $blog->userblog_id; - switch_to_blog($blog_id); - $is_admin = current_user_can('manage_options'); - - $struct[] = array( - 'isAdmin' => $is_admin, - 'url' => get_option( 'home' ) . '/', - 'blogid' => (string) $blog_id, - 'blogName' => get_option( 'blogname' ), - 'xmlrpc' => site_url( 'xmlrpc.php' ) - ); - - restore_current_blog( ); + $struct[] = $this->_prepare_taxonomy( $taxonomy, $fields ); } return $struct; @@ -461,80 +1935,18 @@ class wp_xmlrpc_server extends IXR_Server { return $this->error; } + $page = get_page($page_id); + if ( ! $page ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + if ( !current_user_can( 'edit_page', $page_id ) ) return new IXR_Error( 401, __( 'Sorry, you cannot edit this page.' ) ); do_action('xmlrpc_call', 'wp.getPage'); - // Lookup page info. - $page = get_page($page_id); - // If we found the page then format the data. if ( $page->ID && ($page->post_type == 'page') ) { - // Get all of the page content and link. - $full_page = get_extended($page->post_content); - $link = post_permalink($page->ID); - - // Get info the page parent if there is one. - $parent_title = ""; - if ( !empty($page->post_parent) ) { - $parent = get_page($page->post_parent); - $parent_title = $parent->post_title; - } - - // Determine comment and ping settings. - $allow_comments = comments_open($page->ID) ? 1 : 0; - $allow_pings = pings_open($page->ID) ? 1 : 0; - - // Format page date. - $page_date = mysql2date('Ymd\TH:i:s', $page->post_date, false); - $page_date_gmt = mysql2date('Ymd\TH:i:s', $page->post_date_gmt, false); - - // For drafts use the GMT version of the date - if ( $page->post_status == 'draft' ) - $page_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $page->post_date ), 'Ymd\TH:i:s' ); - - // Pull the categories info together. - $categories = array(); - foreach ( wp_get_post_categories($page->ID) as $cat_id ) { - $categories[] = get_cat_name($cat_id); - } - - // Get the author info. - $author = get_userdata($page->post_author); - - $page_template = get_post_meta( $page->ID, '_wp_page_template', true ); - if ( empty( $page_template ) ) - $page_template = 'default'; - - $page_struct = array( - 'dateCreated' => new IXR_Date($page_date), - 'userid' => $page->post_author, - 'page_id' => $page->ID, - 'page_status' => $page->post_status, - 'description' => $full_page['main'], - 'title' => $page->post_title, - 'link' => $link, - 'permaLink' => $link, - 'categories' => $categories, - 'excerpt' => $page->post_excerpt, - 'text_more' => $full_page['extended'], - 'mt_allow_comments' => $allow_comments, - 'mt_allow_pings' => $allow_pings, - 'wp_slug' => $page->post_name, - 'wp_password' => $page->post_password, - 'wp_author' => $author->display_name, - 'wp_page_parent_id' => $page->post_parent, - 'wp_page_parent_title' => $parent_title, - 'wp_page_order' => $page->menu_order, - 'wp_author_id' => (string) $author->ID, - 'wp_author_display_name' => $author->display_name, - 'date_created_gmt' => new IXR_Date($page_date_gmt), - 'custom_fields' => $this->get_custom_fields($page_id), - 'wp_page_template' => $page_template - ); - - return($page_struct); + return $this->_prepare_page( $page ); } // If the page doesn't exist indicate that. else { @@ -577,11 +1989,9 @@ class wp_xmlrpc_server extends IXR_Server { if ( $num_pages >= 1 ) { $pages_struct = array(); - for ( $i = 0; $i < $num_pages; $i++ ) { - $page = wp_xmlrpc_server::wp_getPage(array( - $blog_id, $pages[$i]->ID, $username, $password - )); - $pages_struct[] = $page; + foreach ($pages as $page) { + if ( current_user_can( 'edit_page', $page->ID ) ) + $pages_struct[] = $this->_prepare_page( $page ); } return($pages_struct); @@ -612,10 +2022,6 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'wp.newPage'); - // Make sure the user is allowed to add new pages. - if ( !current_user_can('publish_pages') ) - return(new IXR_Error(401, __('Sorry, you cannot add new pages.'))); - // Mark this as content for a page. $args[3]["post_type"] = 'page'; @@ -659,6 +2065,8 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$result ) return(new IXR_Error(500, __('Failed to delete the page.'))); + do_action( 'xmlrpc_call_success_wp_deletePage', $page_id, $args ); + return(true); } @@ -750,17 +2158,8 @@ class wp_xmlrpc_server extends IXR_Server { // The date needs to be formatted properly. $num_pages = count($page_list); for ( $i = 0; $i < $num_pages; $i++ ) { - $post_date = mysql2date('Ymd\TH:i:s', $page_list[$i]->post_date, false); - $post_date_gmt = mysql2date('Ymd\TH:i:s', $page_list[$i]->post_date_gmt, false); - - $page_list[$i]->dateCreated = new IXR_Date($post_date); - $page_list[$i]->date_created_gmt = new IXR_Date($post_date_gmt); - - // For drafts use the GMT version of the date - if ( $page_list[$i]->post_status == 'draft' ) { - $page_list[$i]->date_created_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $page_list[$i]->post_date ), 'Ymd\TH:i:s' ); - $page_list[$i]->date_created_gmt = new IXR_Date( $page_list[$i]->date_created_gmt ); - } + $page_list[$i]->dateCreated = $this->_convert_date( $page_list[$i]->post_date ); + $page_list[$i]->date_created_gmt = $this->_convert_date_gmt( $page_list[$i]->post_date_gmt, $page_list[$i]->post_date ); unset($page_list[$i]->post_date_gmt); unset($page_list[$i]->post_date); @@ -809,7 +2208,7 @@ class wp_xmlrpc_server extends IXR_Server { /** * Get list of all tags * - * @since 2.7 + * @since 2.7.0 * * @param array $args Method parameters. * @return array @@ -829,7 +2228,7 @@ class wp_xmlrpc_server extends IXR_Server { do_action( 'xmlrpc_call', 'wp.getKeywords' ); - $tags = array( ); + $tags = array(); if ( $all_tags = get_tags() ) { foreach( (array) $all_tags as $tag ) { @@ -903,7 +2302,9 @@ class wp_xmlrpc_server extends IXR_Server { return(new IXR_Error(500, __('Sorry, the new category failed.'))); } - return($cat_id); + do_action( 'xmlrpc_call_success_wp_newCategory', $cat_id, $args ); + + return $cat_id; } /** @@ -930,7 +2331,12 @@ class wp_xmlrpc_server extends IXR_Server { if ( !current_user_can('manage_categories') ) return new IXR_Error( 401, __( 'Sorry, you do not have the right to delete a category.' ) ); - return wp_delete_term( $category_id, 'category' ); + $status = wp_delete_term( $category_id, 'category' ); + + if( true == $status ) + do_action( 'xmlrpc_call_success_wp_deleteCategory', $category_id, $args ); + + return $status; } /** @@ -997,39 +2403,7 @@ class wp_xmlrpc_server extends IXR_Server { if ( ! $comment = get_comment($comment_id) ) return new IXR_Error( 404, __( 'Invalid comment ID.' ) ); - // Format page date. - $comment_date = mysql2date('Ymd\TH:i:s', $comment->comment_date, false); - $comment_date_gmt = mysql2date('Ymd\TH:i:s', $comment->comment_date_gmt, false); - - if ( '0' == $comment->comment_approved ) - $comment_status = 'hold'; - else if ( 'spam' == $comment->comment_approved ) - $comment_status = 'spam'; - else if ( '1' == $comment->comment_approved ) - $comment_status = 'approve'; - else - $comment_status = $comment->comment_approved; - - $link = get_comment_link($comment); - - $comment_struct = array( - 'date_created_gmt' => new IXR_Date($comment_date_gmt), - 'user_id' => $comment->user_id, - 'comment_id' => $comment->comment_ID, - 'parent' => $comment->comment_parent, - 'status' => $comment_status, - 'content' => $comment->comment_content, - 'link' => $link, - 'post_id' => $comment->comment_post_ID, - 'post_title' => get_the_title($comment->comment_post_ID), - 'author' => $comment->comment_author, - 'author_url' => $comment->comment_author_url, - 'author_email' => $comment->comment_author_email, - 'author_ip' => $comment->comment_author_IP, - 'type' => $comment->comment_type, - ); - - return $comment_struct; + return $this->_prepare_comment( $comment ); } /** @@ -1052,13 +2426,12 @@ class wp_xmlrpc_server extends IXR_Server { * @return array. Contains a collection of comments. See {@link wp_xmlrpc_server::wp_getComment()} for a description of each item contents */ function wp_getComments($args) { - $raw_args = $args; $this->escape($args); $blog_id = (int) $args[0]; $username = $args[1]; $password = $args[2]; - $struct = $args[3]; + $struct = isset( $args[3] ) ? $args[3] : array(); if ( !$user = $this->login($username, $password) ) return $this->error; @@ -1086,19 +2459,11 @@ class wp_xmlrpc_server extends IXR_Server { $number = absint($struct['number']); $comments = get_comments( array('status' => $status, 'post_id' => $post_id, 'offset' => $offset, 'number' => $number ) ); - $num_comments = count($comments); - - if ( ! $num_comments ) - return array(); $comments_struct = array(); - // FIXME: we already have the comments, why query them again? - for ( $i = 0; $i < $num_comments; $i++ ) { - $comment = wp_xmlrpc_server::wp_getComment(array( - $raw_args[0], $raw_args[1], $raw_args[2], $comments[$i]->comment_ID, - )); - $comments_struct[] = $comment; + foreach ( $comments as $comment ) { + $comments_struct[] = $this->_prepare_comment( $comment ); } return $comments_struct; @@ -1142,7 +2507,12 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'wp.deleteComment'); - return wp_delete_comment($comment_ID); + $status = wp_delete_comment( $comment_ID ); + + if( true == $status ) + do_action( 'xmlrpc_call_success_wp_deleteComment', $comment_ID, $args ); + + return $status; } /** @@ -1203,7 +2573,8 @@ class wp_xmlrpc_server extends IXR_Server { // Do some timestamp voodoo if ( !empty( $content_struct['date_created_gmt'] ) ) { - $dateCreated = str_replace( 'Z', '', $content_struct['date_created_gmt']->getIso() ) . 'Z'; // We know this is supposed to be GMT, so we're going to slap that Z on there by force + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; $comment_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); $comment_date_gmt = iso8601_to_datetime($dateCreated, 'GMT'); } @@ -1230,6 +2601,8 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$result ) return new IXR_Error(500, __('Sorry, the comment could not be edited. Something wrong happened.')); + do_action( 'xmlrpc_call_success_wp_editComment', $comment_ID, $args ); + return true; } @@ -1313,7 +2686,11 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'wp.newComment'); - return wp_new_comment($comment); + $comment_ID = wp_new_comment( $comment ); + + do_action( 'xmlrpc_call_success_wp_newComment', $comment_ID, $args ); + + return $comment_ID; } /** @@ -1339,7 +2716,7 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'wp.getCommentStatusList'); - return get_comment_statuses( ); + return get_comment_statuses(); } /** @@ -1398,7 +2775,7 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'wp.getPostStatusList'); - return get_post_statuses( ); + return get_post_statuses(); } /** @@ -1424,7 +2801,7 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'wp.getPageStatusList'); - return get_page_statuses( ); + return get_page_statuses(); } /** @@ -1448,7 +2825,7 @@ class wp_xmlrpc_server extends IXR_Server { if ( !current_user_can( 'edit_pages' ) ) return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) ); - $templates = get_page_templates( ); + $templates = get_page_templates(); $templates['Default'] = 'default'; return $templates; @@ -1489,7 +2866,7 @@ class wp_xmlrpc_server extends IXR_Server { * @return array */ function _getOptions($options) { - $data = array( ); + $data = array(); foreach ( $options as $option ) { if ( array_key_exists( $option, $this->blog_options ) ) { $data[$option] = $this->blog_options[$option]; @@ -1573,32 +2950,14 @@ class wp_xmlrpc_server extends IXR_Server { return $this->error; if ( !current_user_can( 'upload_files' ) ) - return new IXR_Error( 403, __( 'You are not allowed to upload files to this site.' ) ); + return new IXR_Error( 403, __( 'You do not have permission to upload files.' ) ); do_action('xmlrpc_call', 'wp.getMediaItem'); if ( ! $attachment = get_post($attachment_id) ) return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); - // Format page date. - $attachment_date = mysql2date('Ymd\TH:i:s', $attachment->post_date, false); - $attachment_date_gmt = mysql2date('Ymd\TH:i:s', $attachment->post_date_gmt, false); - - $link = wp_get_attachment_url($attachment->ID); - $thumbnail_link = wp_get_attachment_thumb_url($attachment->ID); - - $attachment_struct = array( - 'date_created_gmt' => new IXR_Date($attachment_date_gmt), - 'parent' => $attachment->post_parent, - 'link' => $link, - 'thumbnail' => $thumbnail_link, - 'title' => $attachment->post_title, - 'caption' => $attachment->post_excerpt, - 'description' => $attachment->post_content, - 'metadata' => wp_get_attachment_metadata($attachment->ID), - ); - - return $attachment_struct; + return $this->_prepare_media_item( $attachment ); } /** @@ -1625,7 +2984,6 @@ class wp_xmlrpc_server extends IXR_Server { * @return array. Contains a collection of media items. See {@link wp_xmlrpc_server::wp_getMediaItem()} for a description of each item contents */ function wp_getMediaLibrary($args) { - $raw_args = $args; $this->escape($args); $blog_id = (int) $args[0]; @@ -1637,7 +2995,7 @@ class wp_xmlrpc_server extends IXR_Server { return $this->error; if ( !current_user_can( 'upload_files' ) ) - return new IXR_Error( 401, __( 'Sorry, you cannot upload files.' ) ); + return new IXR_Error( 401, __( 'You do not have permission to upload files.' ) ); do_action('xmlrpc_call', 'wp.getMediaLibrary'); @@ -1647,15 +3005,11 @@ class wp_xmlrpc_server extends IXR_Server { $number = ( isset($struct['number']) ) ? absint($struct['number']) : -1 ; $attachments = get_posts( array('post_type' => 'attachment', 'post_parent' => $parent_id, 'offset' => $offset, 'numberposts' => $number, 'post_mime_type' => $mime_type ) ); - $num_attachments = count($attachments); - - if ( ! $num_attachments ) - return array(); $attachments_struct = array(); foreach ($attachments as $attachment ) - $attachments_struct[] = $this->wp_getMediaItem( array( $raw_args[0], $raw_args[1], $raw_args[2], $attachment->ID ) ); + $attachments_struct[] = $this->_prepare_media_item( $attachment ); return $attachments_struct; } @@ -1681,6 +3035,9 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$user = $this->login( $username, $password ) ) return $this->error; + if ( !current_user_can( 'edit_posts' ) ) + return new IXR_Error( 403, __( 'You are not allowed access to details about this site.' ) ); + do_action( 'xmlrpc_call', 'wp.getPostFormats' ); $formats = get_post_format_strings(); @@ -1702,6 +3059,110 @@ class wp_xmlrpc_server extends IXR_Server { return $formats; } + /** + * Retrieves a post type + * + * @since 3.4.0 + * + * @uses get_post_type_object() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - string $post_type_name + * - array $fields + * @return array contains: + * - 'labels' + * - 'description' + * - 'capability_type' + * - 'cap' + * - 'map_meta_cap' + * - 'hierarchical' + * - 'menu_position' + * - 'taxonomies' + * - 'supports' + */ + function wp_getPostType( $args ) { + if ( ! $this->minimum_args( $args, 4 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $post_type_name = $args[3]; + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'cap', 'taxonomies' ), 'wp.getPostType' ); + + if ( !$user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPostType' ); + + if( ! post_type_exists( $post_type_name ) ) + return new IXR_Error( 403, __( 'Invalid post type' ) ); + + $post_type = get_post_type_object( $post_type_name ); + + if( ! current_user_can( $post_type->cap->edit_posts ) ) + return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post type.' ) ); + + return $this->_prepare_post_type( $post_type, $fields ); + } + + /** + * Retrieves a post types + * + * @since 3.4.0 + * + * @uses get_post_types() + * @param array $args Method parameters. Contains: + * - int $blog_id + * - string $username + * - string $password + * - array $filter + * - array $fields + * @return array + */ + function wp_getPostTypes( $args ) { + if ( ! $this->minimum_args( $args, 3 ) ) + return $this->error; + + $this->escape( $args ); + + $blog_id = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; + $filter = isset( $args[3] ) ? $args[3] : array( 'public' => true ); + + if ( isset( $args[4] ) ) + $fields = $args[4]; + else + $fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'cap', 'taxonomies' ), 'wp.getPostTypes' ); + + if ( ! $user = $this->login( $username, $password ) ) + return $this->error; + + do_action( 'xmlrpc_call', 'wp.getPostTypes' ); + + $post_types = get_post_types( $filter, 'objects' ); + + $struct = array(); + + foreach( $post_types as $post_type ) { + if( ! current_user_can( $post_type->cap->edit_posts ) ) + continue; + + $struct[$post_type->name] = $this->_prepare_post_type( $post_type, $fields ); + } + + return $struct; + } + /* Blogger API functions. * specs on http://plant.blogger.com/api and http://groups.yahoo.com/group/bloggerDev/ */ @@ -1827,13 +3288,15 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$user = $this->login($username, $password) ) return $this->error; + $post_data = wp_get_single_post($post_ID, ARRAY_A); + if ( ! $post_data ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + if ( !current_user_can( 'edit_post', $post_ID ) ) return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); do_action('xmlrpc_call', 'blogger.getPost'); - $post_data = wp_get_single_post($post_ID, ARRAY_A); - $categories = implode(',', wp_get_post_categories($post_ID)); $content = '<title>'.stripslashes($post_data['post_title']).'</title>'; @@ -1842,7 +3305,7 @@ class wp_xmlrpc_server extends IXR_Server { $struct = array( 'userid' => $post_data['post_author'], - 'dateCreated' => new IXR_Date(mysql2date('Ymd\TH:i:s', $post_data['post_date'], false)), + 'dateCreated' => $this->_convert_date( $post_data['post_date'] ), 'content' => $content, 'postid' => (string) $post_data['ID'] ); @@ -1887,7 +3350,7 @@ class wp_xmlrpc_server extends IXR_Server { if ( !current_user_can( 'edit_post', $entry['ID'] ) ) continue; - $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date'], false); + $post_date = $this->_convert_date( $entry['post_date'] ); $categories = implode(',', wp_get_post_categories($entry['ID'])); $content = '<title>'.stripslashes($entry['post_title']).'</title>'; @@ -1896,7 +3359,7 @@ class wp_xmlrpc_server extends IXR_Server { $struct[] = array( 'userid' => $entry['post_author'], - 'dateCreated' => new IXR_Date($post_date), + 'dateCreated' => $post_date, 'content' => $content, 'postid' => (string) $entry['ID'], ); @@ -1934,7 +3397,7 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'blogger.getTemplate'); if ( !current_user_can('edit_themes') ) - return new IXR_Error(401, __('Sorry, this user can not edit the template.')); + return new IXR_Error(401, __('Sorry, this user cannot edit the template.')); /* warning: here we make the assumption that the blog's URL is on the same server */ $filename = get_option('home') . '/'; @@ -1945,7 +3408,7 @@ class wp_xmlrpc_server extends IXR_Server { fclose($f); /* so it is actually editable with a windows/mac client */ - // FIXME: (or delete me) do we really want to cater to bad clients at the expense of good ones by BEEPing up their line breaks? commented. $content = str_replace("\n", "\r\n", $content); + // FIXME: (or delete me) do we really want to cater to bad clients at the expense of good ones by BEEPing up their line breaks? commented. $content = str_replace("\n", "\r\n", $content); return $content; } @@ -2039,7 +3502,7 @@ class wp_xmlrpc_server extends IXR_Server { $this->attach_uploads( $post_ID, $post_content ); - logIO('O', "Posted ! ID: $post_ID"); + do_action( 'xmlrpc_call_success_blogger_newPost', $post_ID, $args ); return $post_ID; } @@ -2095,6 +3558,8 @@ class wp_xmlrpc_server extends IXR_Server { $this->attach_uploads( $ID, $post_content ); + do_action( 'xmlrpc_call_success_blogger_editPost', $post_ID, $args ); + return true; } @@ -2132,6 +3597,8 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$result ) return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be deleted.')); + do_action( 'xmlrpc_call_success_blogger_deletePost', $post_ID, $args ); + return true; } @@ -2162,6 +3629,7 @@ class wp_xmlrpc_server extends IXR_Server { * - mt_allow_pings - can be 'open' or 'closed' * - date_created_gmt * - dateCreated + * - wp_post_thumbnail * * @since 1.5.0 * @@ -2176,7 +3644,7 @@ class wp_xmlrpc_server extends IXR_Server { function mw_newPost($args) { $this->escape($args); - $blog_ID = (int) $args[0]; // we will support this in the near future + $blog_ID = (int) $args[0]; $username = $args[1]; $password = $args[2]; $content_struct = $args[3]; @@ -2192,7 +3660,7 @@ class wp_xmlrpc_server extends IXR_Server { if ( $content_struct['post_type'] == 'page' ) { if ( $publish ) $cap = 'publish_pages'; - elseif ('publish' == $content_struct['page_status']) + elseif ( isset( $content_struct['page_status'] ) && 'publish' == $content_struct['page_status'] ) $cap = 'publish_pages'; else $cap = 'edit_pages'; @@ -2203,7 +3671,7 @@ class wp_xmlrpc_server extends IXR_Server { } elseif ( $content_struct['post_type'] == 'post' ) { if ( $publish ) $cap = 'publish_posts'; - elseif ('publish' == $content_struct['post_status']) + elseif ( isset( $content_struct['post_status'] ) && 'publish' == $content_struct['post_status'] ) $cap = 'publish_posts'; else $cap = 'edit_posts'; @@ -2211,12 +3679,12 @@ class wp_xmlrpc_server extends IXR_Server { $post_type = 'post'; } else { // No other post_type values are allowed here - return new IXR_Error( 401, __( 'Invalid post type.' ) ); + return new IXR_Error( 401, __( 'Invalid post type' ) ); } } else { if ( $publish ) $cap = 'publish_posts'; - elseif ('publish' == $content_struct['post_status']) + elseif ( isset( $content_struct['post_status'] ) && 'publish' == $content_struct['post_status']) $cap = 'publish_posts'; else $cap = 'edit_posts'; @@ -2267,9 +3735,12 @@ class wp_xmlrpc_server extends IXR_Server { return(new IXR_Error(401, __('You are not allowed to create pages as this user'))); break; default: - return(new IXR_Error(401, __('Invalid post type.'))); + return(new IXR_Error(401, __('Invalid post type'))); break; } + $author = get_userdata( $content_struct['wp_author_id'] ); + if ( ! $author ) + return new IXR_Error( 404, __( 'Invalid author ID.' ) ); $post_author = $content_struct['wp_author_id']; } @@ -2370,7 +3841,8 @@ class wp_xmlrpc_server extends IXR_Server { // Do some timestamp voodoo if ( !empty( $content_struct['date_created_gmt'] ) ) - $dateCreated = str_replace( 'Z', '', $content_struct['date_created_gmt']->getIso() ) . 'Z'; // We know this is supposed to be GMT, so we're going to slap that Z on there by force + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; elseif ( !empty( $content_struct['dateCreated']) ) $dateCreated = $content_struct['dateCreated']->getIso(); @@ -2385,7 +3857,6 @@ class wp_xmlrpc_server extends IXR_Server { $post_category = array(); if ( isset( $content_struct['categories'] ) ) { $catnames = $content_struct['categories']; - logIO('O', 'Post cats: ' . var_export($catnames,true)); if ( is_array($catnames) ) { foreach ($catnames as $cat) { @@ -2409,6 +3880,13 @@ class wp_xmlrpc_server extends IXR_Server { if ( isset($content_struct['custom_fields']) ) $this->set_custom_fields($post_ID, $content_struct['custom_fields']); + if ( isset ( $content_struct['wp_post_thumbnail'] ) ) { + if ( set_post_thumbnail( $post_ID, $content_struct['wp_post_thumbnail'] ) === false ) + return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); + + unset( $content_struct['wp_post_thumbnail'] ); + } + // Handle enclosures $thisEnclosure = isset($content_struct['enclosure']) ? $content_struct['enclosure'] : null; $this->add_enclosure_if_new($post_ID, $thisEnclosure); @@ -2427,7 +3905,7 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$post_ID ) return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.')); - logIO('O', "Posted ! ID: $post_ID"); + do_action( 'xmlrpc_call_success_mw_newPost', $post_ID, $args ); return strval($post_ID); } @@ -2485,53 +3963,35 @@ class wp_xmlrpc_server extends IXR_Server { $this->escape($args); - $post_ID = (int) $args[0]; - $username = $args[1]; - $password = $args[2]; + $post_ID = (int) $args[0]; + $username = $args[1]; + $password = $args[2]; $content_struct = $args[3]; - $publish = $args[4]; + $publish = isset( $args[4] ) ? $args[4] : 0; - if ( !$user = $this->login($username, $password) ) + if ( ! $user = $this->login($username, $password) ) return $this->error; do_action('xmlrpc_call', 'metaWeblog.editPost'); - $cap = ( $publish ) ? 'publish_posts' : 'edit_posts'; - $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' ); - $post_type = 'post'; - $page_template = ''; - if ( !empty( $content_struct['post_type'] ) ) { - if ( $content_struct['post_type'] == 'page' ) { - if ( $publish || 'publish' == $content_struct['page_status'] ) - $cap = 'publish_pages'; - else - $cap = 'edit_pages'; - $error_message = __( 'Sorry, you are not allowed to publish pages on this site.' ); - $post_type = 'page'; - if ( !empty( $content_struct['wp_page_template'] ) ) - $page_template = $content_struct['wp_page_template']; - } elseif ( $content_struct['post_type'] == 'post' ) { - if ( $publish || 'publish' == $content_struct['post_status'] ) - $cap = 'publish_posts'; - else - $cap = 'edit_posts'; - $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' ); - $post_type = 'post'; - } else { - // No other post_type values are allowed here - return new IXR_Error( 401, __( 'Invalid post type.' ) ); - } - } else { - if ( $publish || 'publish' == $content_struct['post_status'] ) - $cap = 'publish_posts'; - else - $cap = 'edit_posts'; - $error_message = __( 'Sorry, you are not allowed to publish posts on this site.' ); - $post_type = 'post'; - } + $postdata = wp_get_single_post( $post_ID, ARRAY_A ); - if ( !current_user_can( $cap ) ) - return new IXR_Error( 401, $error_message ); + // If there is no post data for the give post id, stop + // now and return an error. Other wise a new post will be + // created (which was the old behavior). + if ( ! $postdata || empty( $postdata[ 'ID' ] ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + + if ( ! current_user_can( 'edit_post', $post_ID ) ) + return new IXR_Error( 401, __( 'Sorry, you do not have the right to edit this post.' ) ); + + // Use wp.editPost to edit post types other than post and page. + if ( ! in_array( $postdata[ 'post_type' ], array( 'post', 'page' ) ) ) + return new IXR_Error( 401, __( 'Invalid post type' ) ); + + // Thwart attempt to change the post type. + if ( ! empty( $content_struct[ 'post_type' ] ) && ( $content_struct['post_type'] != $postdata[ 'post_type' ] ) ) + return new IXR_Error( 401, __( 'The post type may not be changed.' ) ); // Check for a valid post format if one was given if ( isset( $content_struct['wp_post_format'] ) ) { @@ -2541,14 +4001,6 @@ class wp_xmlrpc_server extends IXR_Server { } } - $postdata = wp_get_single_post($post_ID, ARRAY_A); - - // If there is no post data for the give post id, stop - // now and return an error. Other wise a new post will be - // created (which was the old behavior). - if ( empty($postdata["ID"]) ) - return(new IXR_Error(404, __('Invalid post ID.'))); - $this->escape($postdata); extract($postdata, EXTR_SKIP); @@ -2570,6 +4022,9 @@ class wp_xmlrpc_server extends IXR_Server { if ( isset($content_struct['wp_page_order']) ) $menu_order = $content_struct['wp_page_order']; + if ( ! empty( $content_struct['wp_page_template'] ) && 'page' == $post_type ) + $page_template = $content_struct['wp_page_template']; + $post_author = $postdata['post_author']; // Only set the post_author if one is set. @@ -2584,7 +4039,7 @@ class wp_xmlrpc_server extends IXR_Server { return(new IXR_Error(401, __('You are not allowed to change the page author as this user.'))); break; default: - return(new IXR_Error(401, __('Invalid post type.'))); + return(new IXR_Error(401, __('Invalid post type'))); break; } $post_author = $content_struct['wp_author_id']; @@ -2647,8 +4102,11 @@ class wp_xmlrpc_server extends IXR_Server { } } - $post_title = isset( $content_struct['title'] ) ? $content_struct['title'] : null; - $post_content = isset( $content_struct['description'] ) ? $content_struct['description'] : null; + if ( isset( $content_struct['title'] ) ) + $post_title = $content_struct['title']; + + if ( isset( $content_struct['description'] ) ) + $post_content = $content_struct['description']; $post_category = array(); if ( isset( $content_struct['categories'] ) ) { @@ -2660,7 +4118,9 @@ class wp_xmlrpc_server extends IXR_Server { } } - $post_excerpt = isset( $content_struct['mt_excerpt'] ) ? $content_struct['mt_excerpt'] : null; + if ( isset( $content_struct['mt_excerpt'] ) ) + $post_excerpt = $content_struct['mt_excerpt']; + $post_more = isset( $content_struct['mt_text_more'] ) ? $content_struct['mt_text_more'] : null; $post_status = $publish ? 'publish' : 'draft'; @@ -2699,7 +4159,8 @@ class wp_xmlrpc_server extends IXR_Server { // Do some timestamp voodoo if ( !empty( $content_struct['date_created_gmt'] ) ) - $dateCreated = str_replace( 'Z', '', $content_struct['date_created_gmt']->getIso() ) . 'Z'; // We know this is supposed to be GMT, so we're going to slap that Z on there by force + // We know this is supposed to be GMT, so we're going to slap that Z on there by force + $dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z'; elseif ( !empty( $content_struct['dateCreated']) ) $dateCreated = $content_struct['dateCreated']->getIso(); @@ -2732,6 +4193,17 @@ class wp_xmlrpc_server extends IXR_Server { if ( isset($content_struct['custom_fields']) ) $this->set_custom_fields($post_ID, $content_struct['custom_fields']); + if ( isset ( $content_struct['wp_post_thumbnail'] ) ) { + // empty value deletes, non-empty value adds/updates + if ( empty( $content_struct['wp_post_thumbnail'] ) ) { + delete_post_thumbnail( $post_ID ); + } else { + if ( set_post_thumbnail( $post_ID, $content_struct['wp_post_thumbnail'] ) === false ) + return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); + } + unset( $content_struct['wp_post_thumbnail'] ); + } + // Handle enclosures $thisEnclosure = isset($content_struct['enclosure']) ? $content_struct['enclosure'] : null; $this->add_enclosure_if_new($post_ID, $thisEnclosure); @@ -2743,7 +4215,7 @@ class wp_xmlrpc_server extends IXR_Server { if ( isset( $content_struct['wp_post_format'] ) ) wp_set_post_terms( $post_ID, array( 'post-format-' . $content_struct['wp_post_format'] ), 'post_format' ); - logIO('O',"(MW) Edited ! ID: $post_ID"); + do_action( 'xmlrpc_call_success_mw_editPost', $post_ID, $args ); return true; } @@ -2767,20 +4239,20 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$user = $this->login($username, $password) ) return $this->error; + $postdata = wp_get_single_post($post_ID, ARRAY_A); + if ( ! $postdata ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + if ( !current_user_can( 'edit_post', $post_ID ) ) return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) ); do_action('xmlrpc_call', 'metaWeblog.getPost'); - $postdata = wp_get_single_post($post_ID, ARRAY_A); - if ($postdata['post_date'] != '') { - $post_date = mysql2date('Ymd\TH:i:s', $postdata['post_date'], false); - $post_date_gmt = mysql2date('Ymd\TH:i:s', $postdata['post_date_gmt'], false); - - // For drafts use the GMT version of the post date - if ( $postdata['post_status'] == 'draft' ) - $post_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $postdata['post_date'] ), 'Ymd\TH:i:s' ); + $post_date = $this->_convert_date( $postdata['post_date'] ); + $post_date_gmt = $this->_convert_date_gmt( $postdata['post_date_gmt'], $postdata['post_date'] ); + $post_modified = $this->_convert_date( $postdata['post_modified'] ); + $post_modified_gmt = $this->_convert_date_gmt( $postdata['post_modified_gmt'], $postdata['post_modified'] ); $categories = array(); $catids = wp_get_post_categories($post_ID); @@ -2823,7 +4295,7 @@ class wp_xmlrpc_server extends IXR_Server { foreach ( (array) get_post_custom($post_ID) as $key => $val) { if ($key == 'enclosure') { foreach ( (array) $val as $enc ) { - $encdata = split("\n", $enc); + $encdata = explode("\n", $enc); $enclosure['url'] = trim(htmlspecialchars($encdata[0])); $enclosure['length'] = (int) trim($encdata[1]); $enclosure['type'] = trim($encdata[2]); @@ -2833,7 +4305,7 @@ class wp_xmlrpc_server extends IXR_Server { } $resp = array( - 'dateCreated' => new IXR_Date($post_date), + 'dateCreated' => $post_date, 'userid' => $postdata['post_author'], 'postid' => $postdata['ID'], 'description' => $post['main'], @@ -2845,22 +4317,27 @@ class wp_xmlrpc_server extends IXR_Server { 'categories' => $categories, 'mt_excerpt' => $postdata['post_excerpt'], 'mt_text_more' => $post['extended'], + 'wp_more_text' => $post['more_text'], 'mt_allow_comments' => $allow_comments, 'mt_allow_pings' => $allow_pings, 'mt_keywords' => $tagnames, 'wp_slug' => $postdata['post_name'], 'wp_password' => $postdata['post_password'], 'wp_author_id' => (string) $author->ID, - 'wp_author_display_name' => $author->display_name, - 'date_created_gmt' => new IXR_Date($post_date_gmt), + 'wp_author_display_name' => $author->display_name, + 'date_created_gmt' => $post_date_gmt, 'post_status' => $postdata['post_status'], 'custom_fields' => $this->get_custom_fields($post_ID), 'wp_post_format' => $post_format, - 'sticky' => $sticky + 'sticky' => $sticky, + 'date_modified' => $post_modified, + 'date_modified_gmt' => $post_modified_gmt ); if ( !empty($enclosure) ) $resp['enclosure'] = $enclosure; + $resp['wp_post_thumbnail'] = get_post_thumbnail_id( $postdata['ID'] ); + return $resp; } else { return new IXR_Error(404, __('Sorry, no such post.')); @@ -2895,18 +4372,16 @@ class wp_xmlrpc_server extends IXR_Server { $posts_list = wp_get_recent_posts( $query ); if ( !$posts_list ) - return array( ); + return array(); foreach ($posts_list as $entry) { if ( !current_user_can( 'edit_post', $entry['ID'] ) ) continue; - $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date'], false); - $post_date_gmt = mysql2date('Ymd\TH:i:s', $entry['post_date_gmt'], false); - - // For drafts use the GMT version of the date - if ( $entry['post_status'] == 'draft' ) - $post_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $entry['post_date'] ), 'Ymd\TH:i:s' ); + $post_date = $this->_convert_date( $entry['post_date'] ); + $post_date_gmt = $this->_convert_date_gmt( $entry['post_date_gmt'], $entry['post_date'] ); + $post_modified = $this->_convert_date( $entry['post_modified'] ); + $post_modified_gmt = $this->_convert_date_gmt( $entry['post_modified_gmt'], $entry['post_modified'] ); $categories = array(); $catids = wp_get_post_categories($entry['ID']); @@ -2943,7 +4418,7 @@ class wp_xmlrpc_server extends IXR_Server { $post_format = 'standard'; $struct[] = array( - 'dateCreated' => new IXR_Date($post_date), + 'dateCreated' => $post_date, 'userid' => $entry['post_author'], 'postid' => (string) $entry['ID'], 'description' => $post['main'], @@ -2955,6 +4430,7 @@ class wp_xmlrpc_server extends IXR_Server { 'categories' => $categories, 'mt_excerpt' => $entry['post_excerpt'], 'mt_text_more' => $post['extended'], + 'wp_more_text' => $post['more_text'], 'mt_allow_comments' => $allow_comments, 'mt_allow_pings' => $allow_pings, 'mt_keywords' => $tagnames, @@ -2962,12 +4438,16 @@ class wp_xmlrpc_server extends IXR_Server { 'wp_password' => $entry['post_password'], 'wp_author_id' => (string) $author->ID, 'wp_author_display_name' => $author->display_name, - 'date_created_gmt' => new IXR_Date($post_date_gmt), + 'date_created_gmt' => $post_date_gmt, 'post_status' => $entry['post_status'], 'custom_fields' => $this->get_custom_fields($entry['ID']), - 'wp_post_format' => $post_format + 'wp_post_format' => $post_format, + 'date_modified' => $post_modified, + 'date_modified_gmt' => $post_modified_gmt ); + $entry_index = count( $struct ) - 1; + $struct[ $entry_index ][ 'wp_post_thumbnail' ] = get_post_thumbnail_id( $entry['ID'] ); } $recent_posts = array(); @@ -3045,16 +4525,13 @@ class wp_xmlrpc_server extends IXR_Server { $type = $data['type']; $bits = $data['bits']; - logIO('O', '(MW) Received '.strlen($bits).' bytes'); - if ( !$user = $this->login($username, $password) ) return $this->error; do_action('xmlrpc_call', 'metaWeblog.newMediaObject'); if ( !current_user_can('upload_files') ) { - logIO('O', '(MW) User does not have upload_files capability'); - $this->error = new IXR_Error(401, __('You are not allowed to upload files to this site.')); + $this->error = new IXR_Error( 401, __( 'You do not have permission to upload files.' ) ); return $this->error; } @@ -3079,10 +4556,9 @@ class wp_xmlrpc_server extends IXR_Server { $name = "wpid{$old_file->ID}-{$filename}"; } - $upload = wp_upload_bits($name, NULL, $bits); + $upload = wp_upload_bits($name, null, $bits); if ( ! empty($upload['error']) ) { $errorString = sprintf(__('Could not write file %1$s (%2$s)'), $name, $upload['error']); - logIO('O', '(MW) ' . $errorString); return new IXR_Error(500, $errorString); } // Construct the attachment array @@ -3101,7 +4577,15 @@ class wp_xmlrpc_server extends IXR_Server { $id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id ); wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) ); - return apply_filters( 'wp_handle_upload', array( 'file' => $name, 'url' => $upload[ 'url' ], 'type' => $type ), 'upload' ); + do_action( 'xmlrpc_call_success_mw_newMediaObject', $id, $args ); + + $struct = array( + 'id' => strval( $id ), + 'file' => $name, + 'url' => $upload[ 'url' ], + 'type' => $type + ); + return apply_filters( 'wp_handle_upload', $struct, 'upload' ); } /* MovableType API functions @@ -3140,24 +4624,22 @@ class wp_xmlrpc_server extends IXR_Server { return $this->error; } + $struct = array(); + foreach ($posts_list as $entry) { if ( !current_user_can( 'edit_post', $entry['ID'] ) ) continue; - $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date'], false); - $post_date_gmt = mysql2date('Ymd\TH:i:s', $entry['post_date_gmt'], false); - - // For drafts use the GMT version of the date - if ( $entry['post_status'] == 'draft' ) - $post_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $entry['post_date'] ), 'Ymd\TH:i:s' ); + $post_date = $this->_convert_date( $entry['post_date'] ); + $post_date_gmt = $this->_convert_date_gmt( $entry['post_date_gmt'], $entry['post_date'] ); $struct[] = array( - 'dateCreated' => new IXR_Date($post_date), + 'dateCreated' => $post_date, 'userid' => $entry['post_author'], 'postid' => (string) $entry['ID'], 'title' => $entry['post_title'], 'post_status' => $entry['post_status'], - 'date_created_gmt' => new IXR_Date($post_date_gmt) + 'date_created_gmt' => $post_date_gmt ); } @@ -3227,6 +4709,9 @@ class wp_xmlrpc_server extends IXR_Server { if ( !$user = $this->login($username, $password) ) return $this->error; + if ( ! get_post( $post_ID ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + if ( !current_user_can( 'edit_post', $post_ID ) ) return new IXR_Error( 401, __( 'Sorry, you can not edit this post.' ) ); @@ -3270,6 +4755,9 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'mt.setPostCategories'); + if ( ! get_post( $post_ID ) ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + if ( !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you cannot edit this post.')); @@ -3377,11 +4865,13 @@ class wp_xmlrpc_server extends IXR_Server { do_action('xmlrpc_call', 'mt.publishPost'); + $postdata = wp_get_single_post($post_ID, ARRAY_A); + if ( ! $postdata ) + return new IXR_Error( 404, __( 'Invalid post ID.' ) ); + if ( !current_user_can('publish_posts') || !current_user_can('edit_post', $post_ID) ) return new IXR_Error(401, __('Sorry, you cannot publish this post.')); - $postdata = wp_get_single_post($post_ID,ARRAY_A); - $postdata['post_status'] = 'publish'; // retain old cats @@ -3469,9 +4959,6 @@ class wp_xmlrpc_server extends IXR_Server { } $post_ID = (int) $post_ID; - - logIO("O","(PB) URL='$pagelinkedto' ID='$post_ID' Found='$way'"); - $post = get_post($post_ID); if ( !$post ) // Post_ID not found @@ -3613,4 +5100,3 @@ class wp_xmlrpc_server extends IXR_Server { return $pingbacks; } } -?> diff --git a/wp-includes/class-wp.php b/wp-includes/class-wp.php index 78de5ae53..4f8bc3582 100644 --- a/wp-includes/class-wp.php +++ b/wp-includes/class-wp.php @@ -15,7 +15,7 @@ class WP { * @access public * @var array */ - var $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'debug', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type'); + var $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type'); /** * Private query variables. @@ -156,8 +156,8 @@ class WP { $home_path = trim($home_path, '/'); // Trim path info from the end and the leading home path from the - // front. For path info requests, this leaves us with the requesting - // filename, if any. For 404 requests, this leaves us with the + // front. For path info requests, this leaves us with the requesting + // filename, if any. For 404 requests, this leaves us with the // requested permalink. $req_uri = str_replace($pathinfo, '', $req_uri); $req_uri = trim($req_uri, '/'); @@ -401,7 +401,7 @@ class WP { } } - // query_string filter deprecated. Use request filter instead. + // query_string filter deprecated. Use request filter instead. if ( has_filter('query_string') ) { // Don't bother filtering and parsing if no plugins are hooked in. $this->query_string = apply_filters('query_string', $this->query_string); parse_str($this->query_string, $this->query_vars); @@ -474,19 +474,36 @@ class WP { function handle_404() { global $wp_query; - if ( !is_admin() && ( 0 == count( $wp_query->posts ) ) && !is_404() && !is_robots() && !is_search() && !is_home() ) { + // If we've already issued a 404, bail. + if ( is_404() ) + return; + + // Never 404 for the admin, robots, or if we found posts. + if ( is_admin() || is_robots() || $wp_query->posts ) { + status_header( 200 ); + return; + } + + // We will 404 for paged queries, as no posts were found. + if ( ! is_paged() ) { + // Don't 404 for these queries if they matched an object. - if ( ( is_tag() || is_category() || is_tax() || is_author() || is_post_type_archive() ) && $wp_query->get_queried_object() && !is_paged() ) { - if ( !is_404() ) - status_header( 200 ); + if ( ( is_tag() || is_category() || is_tax() || is_author() || is_post_type_archive() ) && $wp_query->get_queried_object() ) { + status_header( 200 ); + return; + } + + // Don't 404 for these queries either. + if ( is_home() || is_search() ) { + status_header( 200 ); return; } - $wp_query->set_404(); - status_header( 404 ); - nocache_headers(); - } elseif ( !is_404() ) { - status_header( 200 ); } + + // Guess it's time to 404. + $wp_query->set_404(); + status_header( 404 ); + nocache_headers(); } /** @@ -601,5 +618,3 @@ class WP_MatchesMapRegex { } } - -?> diff --git a/wp-includes/class.wp-dependencies.php b/wp-includes/class.wp-dependencies.php index 3907082eb..fb1f1ee0c 100644 --- a/wp-includes/class.wp-dependencies.php +++ b/wp-includes/class.wp-dependencies.php @@ -28,7 +28,7 @@ class WP_Dependencies { /** * Do the dependencies * - * Process the items passed to it or the queue. Processes all dependencies. + * Process the items passed to it or the queue. Processes all dependencies. * * @param mixed $handles (optional) items to be processed. (void) processes queue, (string) process that item, (array of strings) process those items * @return array Items that have been processed @@ -63,7 +63,7 @@ class WP_Dependencies { /** * Determines dependencies * - * Recursively builds array of items to process taking dependencies into account. Does NOT catch infinite loops. + * Recursively builds array of items to process taking dependencies into account. Does NOT catch infinite loops. * * * @param mixed $handles Accepts (string) dep name or (array of strings) dep names @@ -90,7 +90,7 @@ class WP_Dependencies { if ( !isset($this->registered[$handle]) ) $keep_going = false; // Script doesn't exist elseif ( $this->registered[$handle]->deps && array_diff($this->registered[$handle]->deps, array_keys($this->registered)) ) - $keep_going = false; // Script requires deps which don't exist (not a necessary check. efficiency?) + $keep_going = false; // Script requires deps which don't exist (not a necessary check. efficiency?) elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true, $group ) ) $keep_going = false; // Script requires deps which don't exist @@ -98,7 +98,7 @@ class WP_Dependencies { if ( $recursion ) return false; // Abort this branch. else - continue; // We're at the top level. Move on to the next one. + continue; // We're at the top level. Move on to the next one. } if ( $queued ) // Already grobbed it and its deps diff --git a/wp-includes/class.wp-scripts.php b/wp-includes/class.wp-scripts.php index 41f6019ec..ff0ca4d5d 100644 --- a/wp-includes/class.wp-scripts.php +++ b/wp-includes/class.wp-scripts.php @@ -31,15 +31,22 @@ class WP_Scripts extends WP_Dependencies { var $default_dirs; function __construct() { + if ( ! function_exists( 'did_action' ) || did_action( 'init' ) ) + $this->init(); + else + add_action( 'init', array( $this, 'init' ), 0 ); + } + + function init() { do_action_ref_array( 'wp_default_scripts', array(&$this) ); } /** * Prints scripts * - * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies. + * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies. * - * @param mixed $handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts. + * @param mixed $handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts. * @param int $group (optional) If scripts were queued in groups prints this group number. * @return array Scripts that have been printed */ @@ -143,12 +150,12 @@ class WP_Scripts extends WP_Dependencies { $script = "var $object_name = " . json_encode($l10n) . ';'; if ( !empty($after) ) - $script .= "\n$after"; + $script .= "\n$after;"; $data = $this->get_data( $handle, 'data' ); if ( !empty( $data ) ) - $script = "$data;\n$script"; + $script = "$data\n$script"; return $this->add_data( $handle, 'data', $script ); } diff --git a/wp-includes/class.wp-styles.php b/wp-includes/class.wp-styles.php index 6455fe473..48e8f7ef1 100644 --- a/wp-includes/class.wp-styles.php +++ b/wp-includes/class.wp-styles.php @@ -168,4 +168,3 @@ class WP_Styles extends WP_Dependencies { $this->print_html = ''; } } - diff --git a/wp-includes/comment-template.php b/wp-includes/comment-template.php index 25f73c3d9..5bacda18d 100644 --- a/wp-includes/comment-template.php +++ b/wp-includes/comment-template.php @@ -55,7 +55,7 @@ function comment_author( $comment_ID = 0 ) { * @uses apply_filters() Calls the 'get_comment_author_email' hook on the comment author email * @uses $comment * - * @param int $comment_ID The ID of the comment for which to get the author's email. Optional. + * @param int $comment_ID The ID of the comment for which to get the author's email. Optional. * @return string The current comment author's email */ function get_comment_author_email( $comment_ID = 0 ) { @@ -141,7 +141,7 @@ function get_comment_author_email_link($linktext='', $before='', $after='') { * @since 1.5.0 * @uses apply_filters() Calls 'get_comment_author_link' hook on the complete link HTML or author * - * @param int $comment_ID The ID of the comment for which to get the author's link. Optional. + * @param int $comment_ID The ID of the comment for which to get the author's link. Optional. * @return string Comment Author name or HTML link for author's URL */ function get_comment_author_link( $comment_ID = 0 ) { @@ -189,7 +189,7 @@ function get_comment_author_IP( $comment_ID = 0 ) { * @since 0.71 * @see get_comment_author_IP() Echoes Result * - * @param int $comment_ID The ID of the comment for which to print the author's IP address. Optional. + * @param int $comment_ID The ID of the comment for which to print the author's IP address. Optional. */ function comment_author_IP( $comment_ID = 0 ) { echo get_comment_author_IP( $comment_ID ); @@ -201,7 +201,7 @@ function comment_author_IP( $comment_ID = 0 ) { * @since 1.5.0 * @uses apply_filters() Calls 'get_comment_author_url' hook on the comment author's URL * - * @param int $comment_ID The ID of the comment for which to get the author's URL. Optional. + * @param int $comment_ID The ID of the comment for which to get the author's URL. Optional. * @return string */ function get_comment_author_url( $comment_ID = 0 ) { @@ -384,7 +384,7 @@ function get_comment_date( $d = '', $comment_ID = 0 ) { * @since 0.71 * * @param string $d The format of the date (defaults to user's config) - * @param int $comment_ID The ID of the comment for which to print the date. Optional. + * @param int $comment_ID The ID of the comment for which to print the date. Optional. */ function comment_date( $d = '', $comment_ID = 0 ) { echo get_comment_date( $d, $comment_ID ); @@ -769,7 +769,7 @@ function trackback_rdf( $deprecated = '' ) { * @param int $post_id An optional post ID to check instead of the current post. * @return bool True if the comments are open */ -function comments_open( $post_id=NULL ) { +function comments_open( $post_id = null ) { $_post = get_post($post_id); @@ -786,7 +786,7 @@ function comments_open( $post_id=NULL ) { * @param int $post_id An optional post ID to check instead of the current post. * @return bool True if pings are accepted */ -function pings_open( $post_id = NULL ) { +function pings_open( $post_id = null ) { $_post = get_post($post_id); @@ -816,8 +816,10 @@ function wp_comment_form_unfiltered_html_nonce() { if ( !empty($post) ) $post_id = $post->ID; - if ( current_user_can('unfiltered_html') ) - wp_nonce_field('unfiltered-html-comment_' . $post_id, '_wp_unfiltered_html_comment', false); + if ( current_user_can( 'unfiltered_html' ) ) { + wp_nonce_field( 'unfiltered-html-comment_' . $post_id, '_wp_unfiltered_html_comment_disabled', false ); + echo "<script>(function(){if(window===window.parent){document.getElementById('_wp_unfiltered_html_comment_disabled').name='_wp_unfiltered_html_comment';}})();</script>\n"; + } } /** @@ -899,10 +901,10 @@ function comments_template( $file = '/comments.php', $separate_comments = false $comments_by_type = &$wp_query->comments_by_type; } - $overridden_cpage = FALSE; + $overridden_cpage = false; if ( '' == get_query_var('cpage') && get_option('page_comments') ) { set_query_var( 'cpage', 'newest' == get_option('default_comments_page') ? get_comment_pages_count() : 1 ); - $overridden_cpage = TRUE; + $overridden_cpage = true; } if ( !defined('COMMENTS_TEMPLATE') || !COMMENTS_TEMPLATE) @@ -912,7 +914,7 @@ function comments_template( $file = '/comments.php', $separate_comments = false if ( file_exists( $include ) ) require( $include ); elseif ( file_exists( TEMPLATEPATH . $file ) ) - require( TEMPLATEPATH . $file ); + require( TEMPLATEPATH . $file ); else // Backward compat code will be removed in a future release require( ABSPATH . WPINC . '/theme-compat/comments.php'); } @@ -1091,7 +1093,7 @@ function comment_reply_link($args = array(), $comment = null, $post = null) { * @since 2.7.0 * * @param array $args Optional. Override default options. - * @param int|object $post Optional. Post that the comment is going to be displayed on. Defaults to current post. + * @param int|object $post Optional. Post that the comment is going to be displayed on. Defaults to current post. * @return string|bool|null Link to show comment form, if successful. False, if comments are closed. */ function get_post_reply_link($args = array(), $post = null) { @@ -1191,7 +1193,7 @@ function comment_id_fields( $id = 0 ) { * @param string $replytext Optional. Text to display when replying to a comment. Accepts "%s" for the author of the comment being replied to. * @param string $linktoparent Optional. Boolean to control making the author's name a link to their comment. */ -function comment_form_title( $noreplytext = false, $replytext = false, $linktoparent = TRUE ) { +function comment_form_title( $noreplytext = false, $replytext = false, $linktoparent = true ) { global $comment; if ( false === $noreplytext ) $noreplytext = __( 'Leave a Reply' ); @@ -1238,7 +1240,7 @@ class Walker_Comment extends Walker { * @param int $depth Depth of comment. * @param array $args Uses 'style' argument for type of HTML list. */ - function start_lvl(&$output, $depth, $args) { + function start_lvl( &$output, $depth = 0, $args = array() ) { $GLOBALS['comment_depth'] = $depth + 1; switch ( $args['style'] ) { @@ -1262,7 +1264,7 @@ class Walker_Comment extends Walker { * @param int $depth Depth of comment. * @param array $args Will only append content if style argument value is 'ol' or 'ul'. */ - function end_lvl(&$output, $depth, $args) { + function end_lvl( &$output, $depth = 0, $args = array() ) { $GLOBALS['comment_depth'] = $depth + 1; switch ( $args['style'] ) { @@ -1326,7 +1328,7 @@ class Walker_Comment extends Walker { * @param int $depth Depth of comment in reference to parents. * @param array $args */ - function start_el(&$output, $comment, $depth, $args) { + function start_el( &$output, $comment, $depth, $args, $id = 0 ) { $depth++; $GLOBALS['comment_depth'] = $depth; @@ -1386,7 +1388,7 @@ class Walker_Comment extends Walker { * @param int $depth Depth of comment. * @param array $args */ - function end_el(&$output, $comment, $depth, $args) { + function end_el(&$output, $comment, $depth = 0, $args = array() ) { if ( !empty($args['end-callback']) ) { call_user_func($args['end-callback'], $comment, $args, $depth); return; @@ -1408,7 +1410,7 @@ class Walker_Comment extends Walker { * @uses Walker_Comment * * @param string|array $args Formatting options - * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments + * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments */ function wp_list_comments($args = array(), $comments = null ) { global $wp_query, $comment_alt, $comment_depth, $comment_thread_alt, $overridden_cpage, $in_comment_loop; @@ -1517,7 +1519,7 @@ function comment_form( $args = array(), $post_id = null ) { $commenter = wp_get_current_commenter(); $user = wp_get_current_user(); - $user_identity = ! empty( $user->ID ) ? $user->display_name : ''; + $user_identity = $user->exists() ? $user->display_name : ''; $req = get_option( 'require_name_email' ); $aria_req = ( $req ? " aria-required='true'" : '' ); @@ -1534,7 +1536,7 @@ function comment_form( $args = array(), $post_id = null ) { $defaults = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ), 'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>', - 'must_log_in' => '<p class="must-log-in">' . sprintf( __( 'You must be <a href="%s">logged in</a> to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>', + 'must_log_in' => '<p class="must-log-in">' . sprintf( __( 'You must be <a href="%s">logged in</a> to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>', 'logged_in_as' => '<p class="logged-in-as">' . sprintf( __( 'Logged in as <a href="%1$s">%2$s</a>. <a href="%3$s" title="Log out of this account">Log out?</a>' ), admin_url( 'profile.php' ), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>', 'comment_notes_before' => '<p class="comment-notes">' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '</p>', 'comment_notes_after' => '<p class="form-allowed-tags">' . sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ), ' <code>' . allowed_tags() . '</code>' ) . '</p>', @@ -1549,7 +1551,7 @@ function comment_form( $args = array(), $post_id = null ) { $args = wp_parse_args( $args, apply_filters( 'comment_form_defaults', $defaults ) ); ?> - <?php if ( comments_open() ) : ?> + <?php if ( comments_open( $post_id ) ) : ?> <?php do_action( 'comment_form_before' ); ?> <div id="respond"> <h3 id="reply-title"><?php comment_form_title( $args['title_reply'], $args['title_reply_to'] ); ?> <small><?php cancel_comment_reply_link( $args['cancel_reply_link'] ); ?></small></h3> @@ -1588,5 +1590,3 @@ function comment_form( $args = array(), $post_id = null ) { <?php endif; ?> <?php } - -?> diff --git a/wp-includes/comment.php b/wp-includes/comment.php index 84076d715..49406f61c 100644 --- a/wp-includes/comment.php +++ b/wp-includes/comment.php @@ -394,7 +394,6 @@ function get_comment_statuses( ) { return $status; } - /** * The date the last comment was modified. * @@ -539,12 +538,12 @@ function delete_comment_meta($comment_id, $meta_key, $meta_value = '') { * @link http://codex.wordpress.org/Function_Reference/get_comment_meta * * @param int $comment_id Comment ID. - * @param string $key The meta key to retrieve. + * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys. * @param bool $single Whether to return a single value. * @return mixed Will be an array if $single is false. Will be value of meta data field if $single * is true. */ -function get_comment_meta($comment_id, $key, $single = false) { +function get_comment_meta($comment_id, $key = '', $single = false) { return get_metadata('comment', $comment_id, $key, $single); } @@ -570,6 +569,25 @@ function update_comment_meta($comment_id, $meta_key, $meta_value, $prev_value = return update_metadata('comment', $comment_id, $meta_key, $meta_value, $prev_value); } +/** + * Sets the cookies used to store an unauthenticated commentator's identity. Typically used + * to recall previous comments by this commentator that are still held in moderation. + * + * @param object $comment Comment object. + * @param object $user Comment author's object. + * + * @since 3.4.0 + */ +function wp_set_comment_cookies($comment, $user) { + if ( $user->exists() ) + return; + + $comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000); + setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); + setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); + setcookie('comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); +} + /** * Sanitizes the cookies sent to the user already. * @@ -685,9 +703,9 @@ function check_comment_flood_db( $ip, $email, $date ) { do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment); if ( defined('DOING_AJAX') ) - die( __('You are posting comments too quickly. Slow down.') ); + die( __('You are posting comments too quickly. Slow down.') ); - wp_die( __('You are posting comments too quickly. Slow down.'), '', array('response' => 403) ); + wp_die( __('You are posting comments too quickly. Slow down.'), '', array('response' => 403) ); } } } @@ -723,7 +741,7 @@ function &separate_comments(&$comments) { * @uses get_option() Used to fill in defaults for parameters. * @uses Walker_Comment * - * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments + * @param array $comments Optional array of comment objects. Defaults to $wp_query->comments * @param int $per_page Optional comments per page. * @param boolean $threaded Optional control over flat or threaded comments. * @return int Number of comment pages. @@ -962,15 +980,11 @@ function wp_delete_comment($comment_id, $force_delete = false) { } // Delete metadata - $meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->commentmeta WHERE comment_id = %d ", $comment_id ) ); - if ( !empty($meta_ids) ) { - do_action( 'delete_commentmeta', $meta_ids ); - $in_meta_ids = "'" . implode("', '", $meta_ids) . "'"; - $wpdb->query( "DELETE FROM $wpdb->commentmeta WHERE meta_id IN ($in_meta_ids)" ); - do_action( 'deleted_commentmeta', $meta_ids ); - } + $meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->commentmeta WHERE comment_id = %d", $comment_id ) ); + foreach ( $meta_ids as $mid ) + delete_metadata_by_mid( 'comment', $mid ); - if ( ! $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->comments WHERE comment_ID = %d LIMIT 1", $comment_id) ) ) + if ( ! $wpdb->delete( $wpdb->comments, array( 'comment_ID' => $comment_id ) ) ) return false; do_action('deleted_comment', $comment_id); @@ -1116,7 +1130,7 @@ function wp_get_comment_status($comment_id) { $approved = $comment->comment_approved; - if ( $approved == NULL ) + if ( $approved == null ) return false; elseif ( $approved == '1' ) return 'approved'; @@ -1364,17 +1378,14 @@ function wp_new_comment( $commentdata ) { /** * Sets the status of a comment. * - * The 'wp_set_comment_status' action is called after the comment is handled and - * will only be called, if the comment status is either 'hold', 'approve', or - * 'spam'. If the comment status is not in the list, then false is returned and - * if the status is 'delete', then the comment is deleted without calling the - * action. + * The 'wp_set_comment_status' action is called after the comment is handled. + * If the comment status is not in the list, then false is returned. * * @since 1.0.0 * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object * * @param int $comment_id Comment ID. - * @param string $comment_status New comment status, either 'hold', 'approve', 'spam', or 'delete'. + * @param string $comment_status New comment status, either 'hold', 'approve', 'spam', or 'trash'. * @param bool $wp_error Whether to return a WP_Error object if there is a failure. Default is false. * @return bool False on failure or deletion and true on success. */ @@ -1568,10 +1579,7 @@ function wp_update_comment_count_now($post_id) { $new = (int) $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1'", $post_id) ); $wpdb->update( $wpdb->posts, array('comment_count' => $new), array('ID' => $post_id) ); - if ( 'page' == $post->post_type ) - clean_page_cache( $post_id ); - else - clean_post_cache( $post_id ); + clean_post_cache( $post ); do_action('wp_update_comment_count', $post_id, $new, $old); do_action('edit_post', $post_id, $post); @@ -1801,7 +1809,7 @@ function pingback($content, $post_ID) { endif; endforeach; - do_action_ref_array('pre_ping', array(&$post_links, &$pung)); + do_action_ref_array( 'pre_ping', array( &$post_links, &$pung, $post_ID ) ); foreach ( (array) $post_links as $pagelinkedto ) { $pingback_server_url = discover_pingback_server_uri( $pagelinkedto ); @@ -1947,7 +1955,7 @@ function update_comment_cache($comments) { // /** - * Close comments on old posts on the fly, without any extra DB queries. Hooked to the_posts. + * Close comments on old posts on the fly, without any extra DB queries. Hooked to the_posts. * * @access private * @since 2.7.0 @@ -1977,7 +1985,7 @@ function _close_comments_for_old_posts( $posts, $query ) { } /** - * Close comments on an old post. Hooked to comments_open and pings_open. + * Close comments on an old post. Hooked to comments_open and pings_open. * * @access private * @since 2.7.0 @@ -2008,5 +2016,3 @@ function _close_comments_for_old_post( $open, $post_id ) { return $open; } - -?> diff --git a/wp-includes/cron.php b/wp-includes/cron.php index 27f29711a..9117ae5d3 100644 --- a/wp-includes/cron.php +++ b/wp-includes/cron.php @@ -47,7 +47,7 @@ function wp_schedule_single_event( $timestamp, $hook, $args = array()) { * specific interval, specified by you. The action will trigger when someone * visits your WordPress site, if the scheduled time has passed. * - * Valid values for the recurrence are hourly, daily and twicedaily. These can + * Valid values for the recurrence are hourly, daily and twicedaily. These can * be extended using the cron_schedules filter in wp_get_schedules(). * * Use wp_next_scheduled() to prevent duplicates @@ -194,8 +194,8 @@ function wp_next_scheduled( $hook, $args = array() ) { */ function spawn_cron( $local_time = 0 ) { - if ( !$local_time ) - $local_time = time(); + if ( ! $local_time ) + $local_time = microtime( true ); if ( defined('DOING_CRON') || isset($_GET['doing_wp_cron']) ) return; @@ -226,7 +226,7 @@ function spawn_cron( $local_time = 0 ) { if ( !empty($_POST) || defined('DOING_AJAX') ) return; - $doing_wp_cron = $local_time; + $doing_wp_cron = sprintf( '%.22F', $local_time ); set_transient( 'doing_cron', $doing_wp_cron ); ob_start(); @@ -241,11 +241,11 @@ function spawn_cron( $local_time = 0 ) { return; } - $doing_wp_cron = $local_time; + $doing_wp_cron = sprintf( '%.22F', $local_time ); set_transient( 'doing_cron', $doing_wp_cron ); - $cron_url = get_option( 'siteurl' ) . '/wp-cron.php?doing_wp_cron=' . $doing_wp_cron; - wp_remote_post( $cron_url, array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)) ); + $cron_url = site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron ); + wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) ); } /** @@ -264,7 +264,7 @@ function wp_cron() { if ( false === $crons = _get_cron_array() ) return; - $local_time = time(); + $local_time = microtime( true ); $keys = array_keys( $crons ); if ( isset($keys[0]) && $keys[0] > $local_time ) return; diff --git a/wp-includes/css/admin-bar-rtl.css b/wp-includes/css/admin-bar-rtl.css index f11c586d5..e2e2fb468 100644 --- a/wp-includes/css/admin-bar-rtl.css +++ b/wp-includes/css/admin-bar-rtl.css @@ -1 +1 @@ -#wpadminbar *{font-family:Tahoma,Arial,Helvetica,sans-serif;}#wpadminbar{direction:rtl;font-family:Tahoma,Arial,Helvetica,sans-serif;left:auto;right:0;}#wpadminbar .quicklinks{border-left:0;border-right:1px solid transparent;}#wpadminbar .quicklinks ul{text-align:right;}#wpadminbar li{float:right;}#wpadminbar .quicklinks>ul>li{border-right:0;border-left:1px solid #555;}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks>ul>li>.ab-empty-item{border-right:0;border-left:1px solid #333;}#wpadminbar .quicklinks .ab-top-secondary>li{border-left:0;border-right:1px solid #333;float:left;}#wpadminbar .quicklinks .ab-top-secondary>li>a,#wpadminbar .quicklinks .ab-top-secondary>li>.ab-empty-item{border-right:1px solid #555;border-left:0;}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0 -1px 0 0;}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{left:auto;right:0;}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{right:auto;left:0;margin:0 0 0 -1px;}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-left:0;margin-right:100%;}#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper{margin-left:inherit;margin-right:0;left:100%;right:inherit;}#wpadminbar .menupop .menupop>.ab-item{background-position:5% -46px;padding-left:2em;padding-right:1em;}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{background-position:95% -20px;padding-left:1em;padding-right:2em;}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{right:0;left:auto;}#wpadminbar .ab-top-secondary{float:left;right:auto;left:0;}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{border-left:0;}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-right:88px;margin-left:16px;}#wp-admin-bar-user-actions>li>.ab-item{padding-left:0;padding-right:8px;}#wp-admin-bar-user-info .avatar{left:auto;right:-72px;}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{margin-left:-1px;margin-right:4px;}#wpadminbar .quicklinks li img.blavatar{margin-right:0;margin-left:4px;}#wpadminbar #adminbarsearch .adminbar-input{font-family:Tahoma,Arial,Helvetica,sans-serif;padding:0 24px 0 3px;margin:0;background-position:50% 2px;}#wpadminbar #adminbarsearch .adminbar-input:focus,#wpadminbar.ie7 #adminbarsearch .adminbar-input{background-position:99% 2px;}#wpadminbar .ab-icon{float:right;}.ie7 #wp-admin-bar-wp-logo>.ab-item .ab-icon{position:static;}#wpadminbar.ie7 .ab-icon{float:left;left:12px;}#wpadminbar .ab-label{margin-left:0;margin-right:4px;float:left;}#wpadminbar.ie7 .ab-label{margin-right:0;}#wpadminbar.ie7 #wp-admin-bar-comments>a{min-width:25px;}#wpadminbar a:hover .ab-comments-icon-arrow{border-right-color:#bbb;}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{right:0;}#wpadminbar .quicklinks .menupop ul li a{position:relative;}* html #wpadminbar .quicklinks ul li a{float:right;} \ No newline at end of file +#wpadminbar *{font-family:Tahoma,Arial,Helvetica,sans-serif}#wpadminbar{direction:rtl;font-family:Tahoma,Arial,Helvetica,sans-serif;left:auto;right:0}#wpadminbar .quicklinks{border-left:0;border-right:1px solid transparent}#wpadminbar .quicklinks ul{text-align:right}#wpadminbar li{float:right}#wpadminbar .quicklinks>ul>li{border-right:0;border-left:1px solid #555}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks>ul>li>.ab-empty-item{border-right:0;border-left:1px solid #333}#wpadminbar .quicklinks .ab-top-secondary>li{border-left:0;border-right:1px solid #333;float:left}#wpadminbar .quicklinks .ab-top-secondary>li>a,#wpadminbar .quicklinks .ab-top-secondary>li>.ab-empty-item{border-right:1px solid #555;border-left:0}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0 -1px 0 0}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{left:auto;right:0}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{right:auto;left:0;margin:0 0 0 -1px}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-left:0;margin-right:100%}#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper{margin-left:inherit;margin-right:0;left:100%;right:inherit}#wpadminbar .menupop .menupop>.ab-item{background-position:5% -46px;padding-left:2em;padding-right:1em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{background-position:95% -20px;padding-left:1em;padding-right:2em}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{right:0;left:auto}#wpadminbar .ab-top-secondary{float:left;right:auto;left:0}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{border-left:0}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-right:88px;margin-left:16px}#wp-admin-bar-user-actions>li>.ab-item{padding-left:0;padding-right:8px}#wp-admin-bar-user-info .avatar{left:auto;right:-72px}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{margin-left:-1px;margin-right:4px}#wpadminbar .quicklinks li img.blavatar{margin-right:0;margin-left:4px}#wpadminbar #adminbarsearch .adminbar-input{font-family:Tahoma,Arial,Helvetica,sans-serif;padding:0 24px 0 3px;margin:0;background-position:50% 2px}#wpadminbar #adminbarsearch .adminbar-input:focus,#wpadminbar.ie7 #adminbarsearch .adminbar-input{background-position:99% 2px}#wpadminbar .ab-icon{float:right}.ie7 #wp-admin-bar-wp-logo>.ab-item .ab-icon{position:static}#wpadminbar.ie7 .ab-icon{float:left;left:12px}#wpadminbar .ab-label{margin-left:0;margin-right:4px;float:left}#wpadminbar.ie7 .ab-label{margin-right:0}#wpadminbar.ie7 #wp-admin-bar-comments>a{min-width:25px}#wpadminbar a:hover .ab-comments-icon-arrow{border-right-color:#bbb}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{right:0}#wpadminbar .quicklinks .menupop ul li a{position:relative}* html #wpadminbar .quicklinks ul li a{float:right} \ No newline at end of file diff --git a/wp-includes/css/admin-bar.css b/wp-includes/css/admin-bar.css index 5e35f59fe..1838d2f02 100644 --- a/wp-includes/css/admin-bar.css +++ b/wp-includes/css/admin-bar.css @@ -1 +1 @@ -#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-transform:none;letter-spacing:normal;line-height:1;font:normal 13px/28px sans-serif;color:#ccc;text-shadow:#444 0 -1px 0;}#wpadminbar ul li:before,#wpadminbar ul li:after{content:normal;}#wpadminbar a,#wpadminbar a:hover,#wpadminbar a img,#wpadminbar a img:hover{outline:none;border:none;text-decoration:none;background:none;}#wpadminbar{direction:ltr;color:#ccc;font:normal 13px/28px sans-serif;height:28px;position:fixed;top:0;left:0;width:100%;min-width:600px;z-index:99999;background-color:#464646;background-image:-ms-linear-gradient(bottom,#373737,#464646 5px);background-image:-moz-linear-gradient(bottom,#373737,#464646 5px);background-image:-o-linear-gradient(bottom,#373737,#464646 5px);background-image:-webkit-gradient(linear,left bottom,left top,from(#373737),to(#464646));background-image:-webkit-linear-gradient(bottom,#373737,#464646 5px);background-image:linear-gradient(bottom,#373737,#464646 5px);}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:none;clear:none;list-style:none;margin:0;padding:0;position:relative;z-index:99999;}#wpadminbar .quicklinks{border-left:1px solid transparent;}#wpadminbar .quicklinks ul{text-align:left;}#wpadminbar li{float:left;}#wpadminbar .ab-empty-item{outline:none;}#wpadminbar .quicklinks>ul>li{border-right:1px solid #555;}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks>ul>li>.ab-empty-item{border-right:1px solid #333;}#wpadminbar .quicklinks .ab-top-secondary>li{border-left:1px solid #333;border-right:0;float:right;}#wpadminbar .quicklinks .ab-top-secondary>li>a,#wpadminbar .quicklinks .ab-top-secondary>li>.ab-empty-item{border-left:1px solid #555;border-right:0;}#wpadminbar .quicklinks a,#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .shortlink-input{height:28px;display:block;padding:0 12px;margin:0;}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0 0 0 -1px;padding:0;-moz-box-shadow:0 4px 4px rgba(0,0,0,0.2);-webkit-box-shadow:0 4px 4px rgba(0,0,0,0.2);box-shadow:0 4px 4px rgba(0,0,0,0.2);background:#fff;display:none;position:absolute;float:none;border-width:0 1px 1px 1px;border-style:solid;border-color:#dfdfdf;}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{top:28px;left:0;}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{right:0;left:auto;margin:0 -1px 0 0;}#wpadminbar .ab-sub-wrapper>.ab-submenu:first-child{border-top:none;}#wpadminbar .ab-submenu{padding:6px 0;border-top:1px solid #dfdfdf;}#wpadminbar .selected .shortlink-input{display:block;}#wpadminbar .quicklinks .menupop ul li{float:none;}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:bold;}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,#wpadminbar .shortlink-input{line-height:26px;height:26px;text-shadow:none;white-space:nowrap;min-width:140px;}#wpadminbar .shortlink-input{width:200px;}#wpadminbar.nojs li:hover>.ab-sub-wrapper,#wpadminbar li.hover>.ab-sub-wrapper{display:block;}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-left:100%;margin-top:-33px;border-width:1px;}#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper{margin-left:0;left:inherit;right:100%;}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#fafafa;background-color:#3a3a3a;background-image:-ms-linear-gradient(bottom,#3a3a3a,#222);background-image:-moz-linear-gradient(bottom,#3a3a3a,#222);background-image:-o-linear-gradient(bottom,#3a3a3a,#222);background-image:-webkit-gradient(linear,left bottom,left top,from(#3a3a3a),to(#222));background-image:-webkit-linear-gradient(bottom,#3a3a3a,#222);background-image:linear-gradient(bottom,#3a3a3a,#222);}#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{background:#fff;color:#333;text-shadow:none;}#wpadminbar .hover .ab-label,#wpadminbar.nojq .ab-item:focus .ab-label{color:#fafafa;}#wpadminbar .menupop.hover .ab-label{color:#333;text-shadow:none;}#wpadminbar .menupop li:hover,#wpadminbar .menupop li.hover,#wpadminbar .quicklinks .menupop .ab-item:focus,#wpadminbar .quicklinks .ab-top-menu .menupop .ab-item:focus{background-color:#eaf2fa;}#wpadminbar .ab-submenu .ab-item{color:#333;text-shadow:none;}#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#21759B;}#wpadminbar .menupop .menupop>.ab-item{display:block;background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:95% -20px;background-repeat:no-repeat;padding-right:2em;}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:5% -46px;background-repeat:no-repeat;padding-left:2em;padding-right:1em;}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;right:auto;margin:0;background:#eee;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li:hover,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li.hover,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus{background-color:#dfdfdf;}#wpadminbar .quicklinks a span#ab-updates{background:#eee;color:#333;text-shadow:none;display:inline;padding:2px 5px;font-size:10px;font-weight:bold;-webkit-border-radius:10px;border-radius:10px;}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000;}#wpadminbar .ab-top-secondary{float:right;background-color:#464646;background-image:-ms-linear-gradient(bottom,#373737,#464646 5px);background-image:-moz-linear-gradient(bottom,#373737,#464646 5px);background-image:-o-linear-gradient(bottom,#373737,#464646 5px);background-image:-webkit-gradient(linear,left bottom,left top,from(#373737),to(#464646));background-image:-webkit-linear-gradient(bottom,#373737,#464646 5px);background-image:linear-gradient(bottom,#373737,#464646 5px);}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{border-right:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}#wp-admin-bar-my-account>ul{min-width:198px;}#wp-admin-bar-my-account.with-avatar>ul{min-width:270px;}#wpadminbar #wp-admin-bar-user-actions>li{margin-left:16px;margin-right:16px;}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-left:88px;}#wp-admin-bar-user-actions>li>.ab-item{padding-left:8px;}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:none;}#wp-admin-bar-user-info .avatar{position:absolute;left:-72px;top:4px;}#wpadminbar #wp-admin-bar-user-info a{background:none;height:auto;}#wpadminbar #wp-admin-bar-user-info span{background:none;padding:0;height:18px;}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{text-shadow:none;display:block;}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333;}#wpadminbar #wp-admin-bar-user-info .username{color:#999;font-size:11px;}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{width:16px;height:16px;border:1px solid #999;padding:0;background:#eee;line-height:24px;vertical-align:middle;margin:-3px 0 0 6px;float:none;display:inline;}#wpadminbar .quicklinks li img.blavatar{vertical-align:middle;margin:-3px 4px 0 0;padding:0;}#wpadminbar #wp-admin-bar-search .ab-item{padding:0;}#wpadminbar #wp-admin-bar-search .ab-item{background:transparent;}#wpadminbar #adminbarsearch{height:28px;padding:0 2px;}#wpadminbar #adminbarsearch .adminbar-input{font:13px/24px sans-serif;height:24px;width:24px;border:none;padding:0 3px 0 23px;margin:0;color:#ccc;text-shadow:#444 0 -1px 0;background-color:rgba(255,255,255,0);background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:3px 2px;background-repeat:no-repeat;outline:none;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition-duration:400ms;-webkit-transition-property:width,background;-webkit-transition-timing-function:ease;-moz-transition-duration:400ms;-moz-transition-property:width,background;-moz-transition-timing-function:ease;-o-transition-duration:400ms;-o-transition-property:width,background;-o-transition-timing-function:ease;}#wpadminbar.ie7 #adminbarsearch .adminbar-input{margin-top:1px;width:120px;}#wpadminbar #adminbarsearch .adminbar-input:focus{color:#555;text-shadow:0 1px 0 #fff;width:200px;background-color:rgba(255,255,255,0.9);}#wpadminbar.ie8 #adminbarsearch .adminbar-input{background-color:#464646;}#wpadminbar.ie8 #adminbarsearch .adminbar-input:focus{background-color:#fff;}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#ddd;}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#ddd;}#wpadminbar #adminbarsearch .adminbar-button{display:none;}#wpadminbar #wp-admin-bar-appearance{border-top:none;margin-top:-12px;}#wpadminbar #wp-admin-bar-appearance{border-top:none;margin-top:-12px;}#wpadminbar .ab-icon{position:relative;float:left;width:16px;height:16px;margin-top:6px;}#wpadminbar .ab-label{margin-left:4px;}#wp-admin-bar-wp-logo>.ab-item .ab-icon{width:20px;height:20px;margin-top:4px;background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:0 -76px;background-repeat:no-repeat;}#wpadminbar.nojs #wp-admin-bar-wp-logo:hover>.ab-item .ab-icon,#wpadminbar #wp-admin-bar-wp-logo.hover>.ab-item .ab-icon{background-position:0 -104px;}#wp-admin-bar-updates>.ab-item .ab-icon{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:-2px -159px;background-repeat:no-repeat;}#wp-admin-bar-comments>.ab-item .ab-icon{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:-1px -134px;background-repeat:no-repeat;}#wpadminbar span.count-0{display:none;}#wpadminbar #wp-admin-bar-new-content>.ab-item .ab-icon{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:-2px -182px;background-repeat:no-repeat;}#wpadminbar.nojs #wp-admin-bar-new-content:hover>.ab-item .ab-icon,#wpadminbar #wp-admin-bar-new-content.hover>.ab-item .ab-icon{background-position:-2px -203px;}* html #wpadminbar{overflow:hidden;position:absolute;}* html #wpadminbar .quicklinks ul li a{float:left;}* html #wpadminbar .menupop a span{background-image:none;} \ No newline at end of file +#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-transform:none;letter-spacing:normal;line-height:1;font:normal 13px/28px sans-serif;color:#ccc;text-shadow:#444 0 -1px 0}#wpadminbar ul li:before,#wpadminbar ul li:after{content:normal}#wpadminbar a,#wpadminbar a:hover,#wpadminbar a img,#wpadminbar a img:hover{outline:0;border:0;text-decoration:none;background:0}#wpadminbar{direction:ltr;color:#ccc;font:normal 13px/28px sans-serif;height:28px;position:fixed;top:0;left:0;width:100%;min-width:600px;z-index:99999;background-color:#464646;background-image:-ms-linear-gradient(bottom,#373737,#464646 5px);background-image:-moz-linear-gradient(bottom,#373737,#464646 5px);background-image:-o-linear-gradient(bottom,#373737,#464646 5px);background-image:-webkit-gradient(linear,left bottom,left top,from(#373737),to(#464646));background-image:-webkit-linear-gradient(bottom,#373737,#464646 5px);background-image:linear-gradient(bottom,#373737,#464646 5px)}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:0;clear:none;list-style:none;margin:0;padding:0;position:relative;z-index:99999}#wpadminbar .quicklinks{border-left:1px solid transparent}#wpadminbar .quicklinks ul{text-align:left}#wpadminbar li{float:left}#wpadminbar .ab-empty-item{outline:0}#wpadminbar .quicklinks>ul>li{border-right:1px solid #555}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks>ul>li>.ab-empty-item{border-right:1px solid #333}#wpadminbar .quicklinks .ab-top-secondary>li{border-left:1px solid #333;border-right:0;float:right}#wpadminbar .quicklinks .ab-top-secondary>li>a,#wpadminbar .quicklinks .ab-top-secondary>li>.ab-empty-item{border-left:1px solid #555;border-right:0}#wpadminbar .quicklinks a,#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .shortlink-input{height:28px;display:block;padding:0 12px;margin:0}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0 0 0 -1px;padding:0;-moz-box-shadow:0 4px 4px rgba(0,0,0,0.2);-webkit-box-shadow:0 4px 4px rgba(0,0,0,0.2);box-shadow:0 4px 4px rgba(0,0,0,0.2);background:#fff;display:none;position:absolute;float:none;border-width:0 1px 1px 1px;border-style:solid;border-color:#dfdfdf}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{top:28px;left:0}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:100%}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{right:0;left:auto;margin:0 -1px 0 0}#wpadminbar .ab-sub-wrapper>.ab-submenu:first-child{border-top:0}#wpadminbar .ab-submenu{padding:6px 0;border-top:1px solid #dfdfdf}#wpadminbar .selected .shortlink-input{display:block}#wpadminbar .quicklinks .menupop ul li{float:none}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:bold}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,#wpadminbar .shortlink-input{line-height:26px;height:26px;text-shadow:none;white-space:nowrap;min-width:140px}#wpadminbar .shortlink-input{width:200px}#wpadminbar.nojs li:hover>.ab-sub-wrapper,#wpadminbar li.hover>.ab-sub-wrapper{display:block}#wpadminbar .menupop li:hover>.ab-sub-wrapper,#wpadminbar .menupop li.hover>.ab-sub-wrapper{margin-left:100%;margin-top:-33px;border-width:1px}#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper{margin-left:0;left:inherit;right:100%}#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#fafafa;background-color:#3a3a3a;background-image:-ms-linear-gradient(bottom,#3a3a3a,#222);background-image:-moz-linear-gradient(bottom,#3a3a3a,#222);background-image:-o-linear-gradient(bottom,#3a3a3a,#222);background-image:-webkit-gradient(linear,left bottom,left top,from(#3a3a3a),to(#222));background-image:-webkit-linear-gradient(bottom,#3a3a3a,#222);background-image:linear-gradient(bottom,#3a3a3a,#222)}#wpadminbar.nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item{background:#fff;color:#333;text-shadow:none;border-right-color:transparent;border-left-color:transparent}#wpadminbar .hover .ab-label,#wpadminbar.nojq .ab-item:focus .ab-label{color:#fafafa}#wpadminbar .menupop.hover .ab-label{color:#333;text-shadow:none}#wpadminbar .menupop li:hover,#wpadminbar .menupop li.hover,#wpadminbar .quicklinks .menupop .ab-item:focus,#wpadminbar .quicklinks .ab-top-menu .menupop .ab-item:focus{background-color:#eaf2fa}#wpadminbar .ab-submenu .ab-item{color:#333;text-shadow:none}#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#21759b}#wpadminbar .menupop .menupop>.ab-item{display:block;background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:95% -20px;background-repeat:no-repeat;padding-right:2em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:5% -46px;background-repeat:no-repeat;padding-left:2em;padding-right:1em}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;right:auto;margin:0;background:#eee;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li:hover,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li.hover,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus{background-color:#dfdfdf}#wpadminbar .quicklinks a span#ab-updates{background:#eee;color:#333;text-shadow:none;display:inline;padding:2px 5px;font-size:10px;font-weight:bold;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000}#wpadminbar .ab-top-secondary{float:right;background-color:#464646;background-image:-ms-linear-gradient(bottom,#373737,#464646 5px);background-image:-moz-linear-gradient(bottom,#373737,#464646 5px);background-image:-o-linear-gradient(bottom,#373737,#464646 5px);background-image:-webkit-gradient(linear,left bottom,left top,from(#373737),to(#464646));background-image:-webkit-linear-gradient(bottom,#373737,#464646 5px);background-image:linear-gradient(bottom,#373737,#464646 5px)}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{border-right:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#wp-admin-bar-my-account>ul{min-width:198px}#wp-admin-bar-my-account.with-avatar>ul{min-width:270px}#wpadminbar #wp-admin-bar-user-actions>li{margin-left:16px;margin-right:16px}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-left:88px}#wp-admin-bar-user-actions>li>.ab-item{padding-left:8px}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:0}#wp-admin-bar-user-info .avatar{position:absolute;left:-72px;top:4px;width:64px;height:64px}#wpadminbar #wp-admin-bar-user-info a{background:0;height:auto}#wpadminbar #wp-admin-bar-user-info span{background:0;padding:0;height:18px}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{text-shadow:none;display:block}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333}#wpadminbar #wp-admin-bar-user-info .username{color:#999;font-size:11px}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{width:16px;height:16px;border:1px solid #999;padding:0;background:#eee;line-height:24px;vertical-align:middle;margin:-3px 0 0 6px;float:none;display:inline}#wpadminbar .quicklinks li img.blavatar{vertical-align:middle;margin:-3px 4px 0 0;padding:0}#wpadminbar #wp-admin-bar-search .ab-item{padding:0}#wpadminbar #wp-admin-bar-search .ab-item{background:transparent}#wpadminbar #adminbarsearch{height:28px;padding:0 2px}#wpadminbar #adminbarsearch .adminbar-input{font:13px/24px sans-serif;height:24px;width:24px;border:0;padding:0 3px 0 23px;margin:0;color:#ccc;text-shadow:#444 0 -1px 0;background-color:rgba(255,255,255,0);background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:3px 2px;background-repeat:no-repeat;outline:0;cursor:pointer;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition-duration:400ms;-webkit-transition-property:width,background;-webkit-transition-timing-function:ease;-moz-transition-duration:400ms;-moz-transition-property:width,background;-moz-transition-timing-function:ease;-o-transition-duration:400ms;-o-transition-property:width,background;-o-transition-timing-function:ease}#wpadminbar.ie7 #adminbarsearch .adminbar-input{margin-top:1px;width:120px}#wpadminbar #adminbarsearch .adminbar-input:focus{color:#555;text-shadow:0 1px 0 #fff;width:200px;background-color:rgba(255,255,255,0.9);cursor:text}#wpadminbar.ie8 #adminbarsearch .adminbar-input{background-color:#464646}#wpadminbar.ie8 #adminbarsearch .adminbar-input:focus{background-color:#fff}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#ddd}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#ddd}#wpadminbar #adminbarsearch .adminbar-button{display:none}#wpadminbar #wp-admin-bar-appearance{border-top:0;margin-top:-12px}#wpadminbar #wp-admin-bar-appearance{border-top:0;margin-top:-12px}#wpadminbar .ab-icon{position:relative;float:left;width:16px;height:16px;margin-top:6px}#wpadminbar .ab-label{margin-left:4px}#wp-admin-bar-wp-logo>.ab-item .ab-icon{width:20px;height:20px;margin-top:4px;background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:0 -76px;background-repeat:no-repeat}#wpadminbar.nojs #wp-admin-bar-wp-logo:hover>.ab-item .ab-icon,#wpadminbar #wp-admin-bar-wp-logo.hover>.ab-item .ab-icon{background-position:0 -104px}#wp-admin-bar-updates>.ab-item .ab-icon{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:-2px -159px;background-repeat:no-repeat}#wp-admin-bar-comments>.ab-item .ab-icon{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:-1px -134px;background-repeat:no-repeat}#wpadminbar span.count-0{display:none}#wpadminbar #wp-admin-bar-new-content>.ab-item .ab-icon{background-image:url(../images/admin-bar-sprite.png?d=20111130);background-position:-2px -182px;background-repeat:no-repeat}#wpadminbar.nojs #wp-admin-bar-new-content:hover>.ab-item .ab-icon,#wpadminbar #wp-admin-bar-new-content.hover>.ab-item .ab-icon{background-position:-2px -203px}.no-customize-support .hide-if-no-customize,.customize-support .hide-if-customize{display:none}@media only screen and (-webkit-min-device-pixel-ratio:1.5){#wpadminbar .menupop .menupop>.ab-item,#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item,#wpadminbar #adminbarsearch .adminbar-input,#wp-admin-bar-wp-logo>.ab-item .ab-icon,#wp-admin-bar-updates>.ab-item .ab-icon,#wp-admin-bar-comments>.ab-item .ab-icon,#wpadminbar #wp-admin-bar-new-content>.ab-item .ab-icon{background-image:url(../images/admin-bar-sprite-2x.png?d=20120516);background-size:20px 220px}}* html #wpadminbar{overflow:hidden;position:absolute}* html #wpadminbar .quicklinks ul li a{float:left}* html #wpadminbar .menupop a span{background-image:none} \ No newline at end of file diff --git a/wp-includes/css/admin-bar.dev.css b/wp-includes/css/admin-bar.dev.css index b257056e0..d4e2309a8 100644 --- a/wp-includes/css/admin-bar.dev.css +++ b/wp-includes/css/admin-bar.dev.css @@ -48,7 +48,6 @@ background-image: linear-gradient(bottom, #373737, #464646 5px); /* proposed W3C Markup */ } - #wpadminbar .ab-sub-wrapper, #wpadminbar ul, #wpadminbar ul li { @@ -129,6 +128,10 @@ left: 0; } +#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: 100%; +} + #wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper { right: 0; left: auto; @@ -210,6 +213,8 @@ background: #fff; color: #333; text-shadow: none; + border-right-color: transparent; + border-left-color: transparent; } #wpadminbar .hover .ab-label, @@ -347,6 +352,8 @@ position: absolute; left: -72px; top: 4px; + width: 64px; + height: 64px; } #wpadminbar #wp-admin-bar-user-info a { @@ -365,6 +372,7 @@ text-shadow: none; display: block; } + #wpadminbar #wp-admin-bar-user-info .display-name { color: #333; } @@ -427,6 +435,7 @@ background-position: 3px 2px; background-repeat: no-repeat; outline: none; + cursor: pointer; -webkit-border-radius: 3px; border-radius: 3px; @@ -461,6 +470,7 @@ text-shadow: 0 1px 0 #fff; width: 200px; background-color: rgba( 255, 255, 255, 0.9 ); + cursor: text; } #wpadminbar.ie8 #adminbarsearch .adminbar-input { @@ -571,6 +581,30 @@ background-position: -2px -203px; } +/** + * Customize support classes + */ +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize { + display: none; +} + +/** + * Retina display 2x icons + */ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { + #wpadminbar .menupop .menupop > .ab-item, + #wpadminbar .ab-top-secondary .menupop .menupop > .ab-item, + #wpadminbar #adminbarsearch .adminbar-input, + #wp-admin-bar-wp-logo > .ab-item .ab-icon, + #wp-admin-bar-updates > .ab-item .ab-icon, + #wp-admin-bar-comments > .ab-item .ab-icon, + #wpadminbar #wp-admin-bar-new-content > .ab-item .ab-icon { + background-image: url(../images/admin-bar-sprite-2x.png?d=20120516); + background-size: 20px 220px; + } +} + /** * IE 6-targeted rules */ diff --git a/wp-includes/css/editor.css b/wp-includes/css/editor.css new file mode 100644 index 000000000..922bfb425 --- /dev/null +++ b/wp-includes/css/editor.css @@ -0,0 +1 @@ +.wp_themeSkin table,.wp_themeSkin tbody,.wp_themeSkin a,.wp_themeSkin img,.wp_themeSkin tr,.wp_themeSkin div,.wp_themeSkin td,.wp_themeSkin iframe,.wp_themeSkin span,.wp_themeSkin *,.wp_themeSkin .mceText{border:0;margin:0;padding:0;white-space:nowrap;text-decoration:none;font-weight:normal;cursor:default;vertical-align:baseline;width:auto;border-collapse:separate}.wp_themeSkin a:hover,.wp_themeSkin a:link,.wp_themeSkin a:visited,.wp_themeSkin a:active{text-decoration:none;font-weight:normal;cursor:default}.wp_themeSkin table td{vertical-align:middle}.wp_themeSkin *,.wp_themeSkin a:hover,.wp_themeSkin a:link,.wp_themeSkin a:visited,.wp_themeSkin a:active{color:#000}.wp_themeSkin iframe{display:block}.wp_themeSkin #mce_fullscreen_ifr{background-color:#fff}.wp_themeSkin .mceToolbar{padding:1px}.wp_themeSkin .mceExternalToolbar{position:absolute;border-bottom:0;display:none}.wp_themeSkin .mceExternalToolbar td.mceToolbar{padding-right:13px}.wp_themeSkin .mceExternalClose{position:absolute;top:3px;right:3px;width:7px;height:7px;background:url("../js/tinymce/themes/advanced/img/icons.gif") -820px 0}.wp_themeSkin table.mceToolbar,.wp_themeSkin tr.mceFirst .mceToolbar tr td,.wp_themeSkin tr.mceLast .mceToolbar tr td{border:0;margin:0;padding:0}.wp_themeSkin table.mceLayout{border:0}.wp_themeSkin .mceStatusbar{display:block;font-family:Arial,"Bitstream Vera Sans",Helvetica,Verdana,sans-serif;font-size:12px;line-height:16px;padding:0 0 0 8px;overflow:visible;height:20px;border-top:1px solid #dfdfdf;color:#000;background-color:#f5f5f5}.rtl .wp_themeSkin .mceStatusbar{padding:0 8px 0 0}.wp_themeSkin .mceStatusbar *{color:#555}.wp_themeSkin .mceStatusbar div{float:left;padding:2px}.rtl .wp_themeSkin .mceStatusbar div{float:right}.wp_themeSkin .mceStatusbar a.mceResize{display:block;float:right;background:url("../js/tinymce/themes/advanced/img/icons.gif") -800px 0;width:20px;height:20px;cursor:se-resize}.rtl .wp_themeSkin .mceStatusbar a.mceResize{float:left}.wp_themeSkin .mceStatusbar a:hover{text-decoration:underline}.wp_themeSkin table.mceToolbar{margin:0 6px 2px}.wp_themeSkin #content_toolbar1{margin-top:2px}.wp_themeSkin .mceToolbar .mceToolbarEndListBox span{display:none}.wp_themeSkin span.mceIcon,.wp_themeSkin img.mceIcon{display:block;width:20px;height:20px}.wp_themeSkin .mceIcon{background:url("../js/tinymce/themes/advanced/img/icons.gif") no-repeat 20px 20px}.wp_themeSkin .mceButton{display:block;width:20px;height:20px;cursor:default;padding:1px 2px;margin:1px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff}.wp_themeSkin a.mceButtonEnabled:hover{background-image:inherit 0 -10px}.wp_themeSkin .mceOldBoxModel a.mceButton span,.wp_themeSkin .mceOldBoxModel a.mceButton img{margin:0 0 0 1px}.wp_themeSkin a.mceButton:active,.wp_themeSkin a.mceButtonActive,.wp_themeSkin a.mceButtonActive:hover,.wp_themeSkin a.mceButtonSelected{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff}.wp_themeSkin .mceButtonDisabled .mceIcon{opacity:.5;filter:alpha(opacity=50)}.wp_themeSkin .mceSeparator{height:24px;width:1px;display:block;background:transparent;overflow:hidden;margin:0 2px}.wp_themeSkin .mceListBox,.wp_themeSkin .mceListBox a{display:block}.wp_themeSkin .mceListBox .mceText{padding:1px 2px 1px 5px;text-align:left;text-decoration:none;width:70px;-webkit-border-bottom-left-radius:2px;-webkit-border-top-left-radius:2px;border-bottom-left-radius:2px;border-top-left-radius:2px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;font-family:Arial,"Bitstream Vera Sans",Helvetica,Verdana,sans-serif;font-size:12px;height:20px;line-height:20px;overflow:hidden}.wp_themeSkin .mceListBox{margin:1px;direction:ltr}.wp_themeSkin .mceListBox .mceOpen{width:14px;height:20px;border-collapse:separate;padding:1px;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff}.wp_themeSkin .mceListBox .mceOpen span{display:block;width:14px;height:20px;background-image:url("../images/down_arrow.gif");background-position:2px 1px;background-repeat:no-repeat}.wp_themeSkin table.mceListBoxEnabled:hover .mceText,.wp_themeSkin .mceListBoxHover .mceText,.wp_themeSkin .mceListBoxSelected .mceText,.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen,.wp_themeSkin .mceListBoxSelected .mceOpen{background-image:none}.wp_themeSkin .mceListBoxDisabled .mceText{color:gray}.wp_themeSkin .mceListBoxMenu{overflow:auto;overflow-x:hidden}.wp_themeSkin .mceOldBoxModel .mceListBox .mceText{height:22px}.wp_themeSkin select.mceListBox{font-family:Arial,"Bitstream Vera Sans",Helvetica,Verdana,sans-serif;font-size:12px;border-color:#b2b2b2;background-color:#fff}.wp_themeSkin .mceSplitButton a,.wp_themeSkin .mceSplitButton span{display:block;height:20px}.wp_themeSkin .mceSplitButton{display:block;margin:1px;direction:ltr}.wp_themeSkin table.mceSplitButton td{padding:2px;-webkit-border-radius:2px;border-radius:2px}.wp_themeSkin table.mceSplitButton td a{-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff}.wp_themeSkin table.mceSplitButton:hover td{background-image:inherit 0 -10px}.wp_themeSkin .mceSplitButton a.mceAction{height:20px;width:20px;padding:1px 2px}.wp_themeSkin .mceSplitButton span.mceAction{background-image:url("../js/tinymce/themes/advanced/img/icons.gif");background-repeat:no-repeat;background-color:transparent;width:20px}.wp_themeSkin .mceSplitButton a.mceOpen{width:10px;height:20px;background-image:url("../images/down_arrow.gif");background-position:1px 2px;background-repeat:no-repeat;padding:1px;border-left:0 none!important}.wp_themeSkin .mceSplitButton span.mceOpen{display:none}.wp_themeSkin .mceSplitButtonDisabled .mceAction{opacity:.3;filter:alpha(opacity=30)}.wp_themeSkin .mceListBox a.mceText,.wp_themeSkin .mceSplitButton a.mceAction{-webkit-border-bottom-left-radius:2px;-webkit-border-top-left-radius:2px;border-bottom-left-radius:2px;border-top-left-radius:2px}.wp_themeSkin .mceSplitButton a.mceOpen,.wp_themeSkin .mceListBox a.mceOpen{-webkit-border-bottom-right-radius:2px;-webkit-border-top-right-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px}.wp_themeSkin span.mce_undo,.wp_themeSkin span.mce_redo,.wp_themeSkin span.mce_bullist,.wp_themeSkin span.mce_numlist,.wp_themeSkin span.mce_blockquote,.wp_themeSkin span.mce_charmap,.wp_themeSkin span.mce_bold,.wp_themeSkin span.mce_italic,.wp_themeSkin span.mce_underline,.wp_themeSkin span.mce_justifyleft,.wp_themeSkin span.mce_justifyright,.wp_themeSkin span.mce_justifycenter,.wp_themeSkin span.mce_justifyfull,.wp_themeSkin span.mce_indent,.wp_themeSkin span.mce_outdent,.wp_themeSkin span.mce_link,.wp_themeSkin span.mce_unlink,.wp_themeSkin span.mce_help,.wp_themeSkin span.mce_removeformat,.wp_themeSkin span.mce_fullscreen,.wp_themeSkin span.mce_wp_fullscreen,.wp_themeSkin span.mce_media,.wp_themeSkin span.mce_pastetext,.wp_themeSkin span.mce_pasteword,.wp_themeSkin span.mce_wp_help,.wp_themeSkin span.mce_wp_adv,.wp_themeSkin span.mce_wp_more,.wp_themeSkin span.mce_strikethrough,.wp_themeSkin span.mce_spellchecker,.wp_themeSkin span.mce_forecolor,.wp_themeSkin .mce_forecolorpicker,.wp_themeSkin .mceSplitButton .mce_spellchecker span.mce_spellchecker,.wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor,.wp_themeSkin .mceSplitButton span.mce_numlist,.wp_themeSkin .mceSplitButton span.mce_bullist{background-image:url(../images/wpicons.png)}.wp_themeSkin div.mceColorSplitMenu table{background-color:#ebebeb;border-color:#b2b2b2}.wp_themeSkin .mceColorSplitMenu td{padding:2px}.wp_themeSkin .mceColorSplitMenu a{display:block;width:9px;height:9px;overflow:hidden;border-color:#b2b2b2}.wp_themeSkin .mceColorSplitMenu td.mceMoreColors{padding:1px 3px 1px 1px}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors{width:100%;height:auto;text-align:center;font-family:Tahoma,Verdana,Arial,Helvetica;font-size:11px;line-height:20px;border-color:#fff}.wp_themeSkin .mceColorPreview{margin:-5px 0 0 2px;width:16px;height:4px;overflow:hidden}.wp_themeSkin .mceMenu{position:absolute;left:0;top:0;z-index:1000;border-color:#ddd}.wp_themeSkin .mceNoIcons span.mceIcon{width:0}.wp_themeSkin .mceNoIcons a .mceText{padding-left:10px}.wp_themeSkin .mceMenu table{background-color:#ebeaeb}.wp_themeSkin .mceMenu a,.wp_themeSkin .mceMenu span,.wp_themeSkin .mceMenu{display:block}.wp_themeSkin .mceMenu td{height:20px;overflow:hidden}.wp_themeSkin .mceMenu a{position:relative;padding:3px 0 4px 0;text-decoration:none!important}.wp_themeSkin .mceMenu .mceText{position:relative;display:block;font-family:Tahoma,Verdana,Arial,Helvetica;cursor:default;margin:0;padding:0 25px;color:#000}.wp_themeSkin .mceMenu span.mceText,.wp_themeSkin .mceMenu .mcePreview{font-size:12px}.wp_themeSkin .mceMenu pre.mceText{font-family:Monospace}.wp_themeSkin .mceMenu .mceIcon{position:absolute;top:0;left:0;width:22px}.wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover,.wp_themeSkin .mceMenu .mceMenuItemActive{background-color:#f5f5f5}.wp_themeSkin td.mceMenuItemSeparator{height:1px;background-color:#aaa}.wp_themeSkin .mceMenuItemTitle a{border-top:0;border-right:0;border-left:0;border-bottom:1px solid #aaa;text-decoration:none!important;background-color:#ccc}.wp_themeSkin .mceMenuItemTitle span.mceText{font-weight:bold;padding-left:4px;color:#000}.wp_themeSkin .mceMenuItemSelected .mceIcon{background:url("../js/tinymce/themes/advanced/skins/default/img/menu_check.gif");color:#888}.wp_themeSkin .mceNoIcons .mceMenuItemSelected a{background:url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat -6px center}.wp_themeSkin .mceMenu span.mceMenuLine{display:none}.wp_themeSkin .mceMenuItemSub a{background:url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat top right}.wp_themeSkin .mceBlocker{position:absolute;left:0;top:0;z-index:1000;opacity:.5;filter:alpha(opacity=50);background:#FFF}.wp_themeSkin .mceProgress{position:absolute;left:0;top:0;z-index:1001;background:url("../js/tinymce/themes/advanced/skins/default/img/progress.gif") no-repeat;width:32px;height:32px;margin:-16px 0 0 -16px}.wp_themeSkin .mcePlaceHolder{border:1px dotted gray}.wp_themeSkin .mce_address span.mceText{font-style:italic}.wp_themeSkin .mce_pre span.mceText{font-family:monospace}.wp_themeSkin .mce_h1 span.mceText{font-weight:bolder;font-size:17px}.wp_themeSkin .mce_h2 span.mceText{font-weight:bolder;font-size:16px}.wp_themeSkin .mce_h3 span.mceText{font-weight:bolder;font-size:15px}.wp_themeSkin .mce_h4 span.mceText{font-weight:bolder;font-size:14px}.wp_themeSkin .mce_h5 span.mceText{font-weight:bolder;font-size:13px}.wp_themeSkin .mce_h6 span.mceText{font-weight:bolder;font-size:12px}.wp_themeSkin span.mce_undo{background-position:-500px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_undo,.wp_themeSkin .mceButtonActive span.mce_undo{background-position:-500px 0}.wp_themeSkin span.mce_redo{background-position:-480px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_redo,.wp_themeSkin .mceButtonActive span.mce_redo{background-position:-480px 0}.wp_themeSkin span.mce_bullist{background-position:-40px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_bullist,.wp_themeSkin .mceButtonActive span.mce_bullist,.wp_themeSkin .mceSplitButton:hover span.mce_bullist{background-position:-40px 0}.wp_themeSkin span.mce_numlist{background-position:-61px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_numlist,.wp_themeSkin .mceButtonActive span.mce_numlist,.wp_themeSkin .mceSplitButton:hover span.mce_numlist{background-position:-61px 0}.wp_themeSkin span.mce_blockquote{background-position:-80px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_blockquote,.wp_themeSkin .mceButtonActive span.mce_blockquote{background-position:-80px 0}.wp_themeSkin span.mce_charmap{background-position:-420px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_charmap,.wp_themeSkin .mceButtonActive span.mce_charmap{background-position:-420px 0}.wp_themeSkin span.mce_bold{background-position:-1px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_bold,.wp_themeSkin .mceButtonActive span.mce_bold{background-position:-1px 0}.wp_themeSkin span.mce_italic{background-position:-21px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_italic,.wp_themeSkin .mceButtonActive span.mce_italic{background-position:-21px 0}.wp_themeSkin span.mce_underline{background-position:-280px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_underline,.wp_themeSkin .mceButtonActive span.mce_underline{background-position:-280px 1px}.wp_themeSkin span.mce_justifyleft{background-position:-100px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_justifyleft,.wp_themeSkin .mceButtonActive span.mce_justifyleft{background-position:-100px 1px}.wp_themeSkin span.mce_justifyright{background-position:-141px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_justifyright,.wp_themeSkin .mceButtonActive span.mce_justifyright{background-position:-141px 1px}.wp_themeSkin span.mce_justifycenter{background-position:-120px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_justifycenter,.wp_themeSkin .mceButtonActive span.mce_justifycenter{background-position:-120px 1px}.wp_themeSkin span.mce_justifyfull{background-position:-300px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_justifyfull,.wp_themeSkin .mceButtonActive span.mce_justifyfull{background-position:-300px 1px}.wp_themeSkin span.mce_indent{background-position:-461px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_indent,.wp_themeSkin .mceButtonActive span.mce_indent{background-position:-461px 1px}.wp_themeSkin span.mce_outdent{background-position:-440px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_outdent,.wp_themeSkin .mceButtonActive span.mce_outdent{background-position:-440px 1px}.wp_themeSkin span.mce_link{background-position:-161px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_link,.wp_themeSkin .mceButtonActive span.mce_link{background-position:-161px 0}.wp_themeSkin span.mce_unlink{background-position:-180px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_unlink,.wp_themeSkin .mceButtonActive span.mce_unlink{background-position:-180px 0}.wp_themeSkin span.mce_help{background-position:-521px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_help,.wp_themeSkin .mceButtonActive span.mce_help{background-position:-521px 0}.wp_themeSkin span.mce_removeformat{background-position:-381px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_removeformat,.wp_themeSkin .mceButtonActive span.mce_removeformat{background-position:-381px 0}.wp_themeSkin span.mce_strikethrough{background-position:-540px -18px}.wp_themeSkin .mceButtonEnabled:hover span.mce_strikethrough,.wp_themeSkin .mceButtonActive span.mce_strikethrough{background-position:-540px 0}.wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor{background-position:-321px -22px}.wp_themeSkin .mceSplitButtonEnabled:hover span.mce_forecolor,.wp_themeSkin .mceSplitButtonActive span.mce_forecolor{background-position:-321px -2px}.wp_themeSkin .mce_forecolorpicker{background-position:-320px -20px}.wp_themeSkin span.mce_fullscreen{background-position:-240px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_fullscreen,.wp_themeSkin .mceButtonActive span.mce_fullscreen{background-position:-240px 0}.wp_themeSkin span.mce_wp_fullscreen{background-position:-240px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_fullscreen,.wp_themeSkin .mceButtonActive span.mce_wp_fullscreen{background-position:-240px 0}.wp_themeSkin span.mce_media{background-position:-401px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_media,.wp_themeSkin .mceButtonActive span.mce_media{background-position:-401px 0}.wp_themeSkin span.mce_pastetext{background-position:-340px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_pastetext,.wp_themeSkin .mceButtonActive span.mce_pastetext{background-position:-340px 0}.wp_themeSkin span.mce_pasteword{background-position:-360px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_pasteword,.wp_themeSkin .mceButtonActive span.mce_pasteword{background-position:-360px 0}.wp_themeSkin span.mce_spellchecker{background-position:-220px -19px}.wp_themeSkin .mceButtonEnabled:hover span.mce_spellchecker,.wp_themeSkin .mceSplitButtonEnabled:hover span.mce_spellchecker,.wp_themeSkin .mceButtonActive span.mce_spellchecker,.wp_themeSkin .mceSplitButtonActive span.mce_spellchecker{background-position:-220px 1px}.wp_themeSkin span.mce_wp_help{background-position:-521px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_help,.wp_themeSkin .mceButtonActive span.mce_wp_help{background-position:-521px 0}.wp_themeSkin span.mce_wp_adv{background-position:-260px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_adv,.wp_themeSkin .mceButtonActive span.mce_wp_adv{background-position:-260px 0}.wp_themeSkin span.mce_wp_more{background-position:-201px -20px}.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_more,.wp_themeSkin .mceButtonActive span.mce_wp_more{background-position:-201px 0}.wp_themeSkin span.mce_cleanup{background-position:-380px -20px}.wp_themeSkin span.mce_anchor{background-position:-200px 0}.wp_themeSkin span.mce_sub{background-position:-600px 0}.wp_themeSkin span.mce_sup{background-position:-620px 0}.wp_themeSkin span.mce_newdocument{background-position:-520px 0}.wp_themeSkin span.mce_image{background-position:-380px 0}.wp_themeSkin span.mce_code{background-position:-260px 0}.wp_themeSkin span.mce_hr{background-position:-360px 0}.wp_themeSkin span.mce_visualaid{background-position:-660px 0}.wp_themeSkin span.mce_paste{background-position:-560px 0}.wp_themeSkin span.mce_copy{background-position:-700px 0}.wp_themeSkin span.mce_cut{background-position:-680px 0}.wp_themeSkin .mce_backcolor span.mceAction{background-position:-760px 0}.wp_themeSkin .mce_backcolorpicker{background-position:-760px 0}.wp_themeSkin span.mce_advhr{background-position:-0px -20px}.wp_themeSkin span.mce_ltr{background-position:-20px -20px}.wp_themeSkin span.mce_rtl{background-position:-40px -20px}.wp_themeSkin span.mce_emotions{background-position:-60px -20px}.wp_themeSkin span.mce_fullpage{background-position:-80px -20px}.wp_themeSkin span.mce_iespell{background-position:-120px -20px}.wp_themeSkin span.mce_insertdate{background-position:-140px -20px}.wp_themeSkin span.mce_inserttime{background-position:-160px -20px}.wp_themeSkin span.mce_absolute{background-position:-180px -20px}.wp_themeSkin span.mce_backward{background-position:-200px -20px}.wp_themeSkin span.mce_forward{background-position:-220px -20px}.wp_themeSkin span.mce_insert_layer{background-position:-240px -20px}.wp_themeSkin span.mce_insertlayer{background-position:-260px -20px}.wp_themeSkin span.mce_movebackward{background-position:-280px -20px}.wp_themeSkin span.mce_moveforward{background-position:-300px -20px}.wp_themeSkin span.mce_nonbreaking{background-position:-340px -20px}.wp_themeSkin span.mce_selectall{background-position:-400px -20px}.wp_themeSkin span.mce_preview{background-position:-420px -20px}.wp_themeSkin span.mce_print{background-position:-440px -20px}.wp_themeSkin span.mce_cancel{background-position:-460px -20px}.wp_themeSkin span.mce_save{background-position:-480px -20px}.wp_themeSkin span.mce_replace{background-position:-500px -20px}.wp_themeSkin span.mce_search{background-position:-520px -20px}.wp_themeSkin span.mce_styleprops{background-position:-560px -20px}.wp_themeSkin span.mce_table{background-position:-580px -20px}.wp_themeSkin span.mce_cell_props{background-position:-600px -20px}.wp_themeSkin span.mce_delete_table{background-position:-620px -20px}.wp_themeSkin span.mce_delete_col{background-position:-640px -20px}.wp_themeSkin span.mce_delete_row{background-position:-660px -20px}.wp_themeSkin span.mce_col_after{background-position:-680px -20px}.wp_themeSkin span.mce_col_before{background-position:-700px -20px}.wp_themeSkin span.mce_row_after{background-position:-720px -20px}.wp_themeSkin span.mce_row_before{background-position:-740px -20px}.wp_themeSkin span.mce_merge_cells{background-position:-760px -20px}.wp_themeSkin span.mce_table_props{background-position:-980px -20px}.wp_themeSkin span.mce_row_props{background-position:-780px -20px}.wp_themeSkin span.mce_split_cells{background-position:-800px -20px}.wp_themeSkin span.mce_template{background-position:-820px -20px}.wp_themeSkin span.mce_visualchars{background-position:-840px -20px}.wp_themeSkin span.mce_abbr{background-position:-860px -20px}.wp_themeSkin span.mce_acronym{background-position:-880px -20px}.wp_themeSkin span.mce_attribs{background-position:-900px -20px}.wp_themeSkin span.mce_cite{background-position:-920px -20px}.wp_themeSkin span.mce_del{background-position:-940px -20px}.wp_themeSkin span.mce_ins{background-position:-960px -20px}.wp_themeSkin span.mce_pagebreak{background-position:0 -40px}.wp_themeSkin .mceExternalToolbar,.wp_themeSkin .mceButton,.wp_themeSkin a.mceButtonEnabled:hover,.wp_themeSkin a.mceButtonActive,.wp_themeSkin a.mceButtonSelected,.wp_themeSkin .mceListBox .mceText,.wp_themeSkin .mceListBox .mceOpen,.wp_themeSkin table.mceListBoxEnabled:hover .mceText,.wp_themeSkin .mceListBoxHover .mceText,.wp_themeSkin .mceListBoxSelected .mceText,.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen,.wp_themeSkin .mceListBoxSelected .mceOpen,.wp_themeSkin select.mceListBox,.wp_themeSkin .mceSplitButton a.mceAction,.wp_themeSkin .mceSplitButton a.mceOpen,.wp_themeSkin .mceSplitButton a.mceOpen:hover,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction,.wp_themeSkin .mceSplitButton a.mceAction:hover,.wp_themeSkin div.mceColorSplitMenu table,.wp_themeSkin .mceColorSplitMenu a,.wp_themeSkin .mceColorSplitMenu a.mceMoreColors,.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover,.wp_themeSkin a.mceMoreColors:hover,.wp_themeSkin .mceMenu{border-style:solid;border-width:1px}.wp_themeSkin iframe{background:transparent}.wp_themeSkin .mceButton,.wp_themeSkin .mceListBox .mceText,.wp_themeSkin .mceListBox .mceOpen{border-color:#ccc;background-color:#eee;background-image:-ms-linear-gradient(bottom,#ddd,#fff);background-image:-moz-linear-gradient(bottom,#ddd,#fff);background-image:-o-linear-gradient(bottom,#ddd,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#ddd),to(#fff));background-image:-webkit-linear-gradient(bottom,#ddd,#fff);background-image:linear-gradient(bottom,#ddd,#fff)}.wp_themeSkin a.mceButtonEnabled:hover{border-color:#a0a0a0;background:#ddd;background-image:-ms-linear-gradient(bottom,#ccc,#fff);background-image:-moz-linear-gradient(bottom,#ccc,#fff);background-image:-o-linear-gradient(bottom,#ccc,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(bottom,#ccc,#fff);background-image:linear-gradient(bottom,#ccc,#fff)}.wp_themeSkin a.mceButton:active,.wp_themeSkin a.mceButtonEnabled:active,.wp_themeSkin a.mceButtonSelected:active,.wp_themeSkin a.mceButtonActive,.wp_themeSkin a.mceButtonActive:active,.wp_themeSkin a.mceButtonActive:hover{background-color:#ddd;background-image:-ms-linear-gradient(bottom,#eee,#bbb);background-image:-moz-linear-gradient(bottom,#eee,#bbb);background-image:-o-linear-gradient(bottom,#eee,#bbb);background-image:-webkit-gradient(linear,left bottom,left top,from(#eee),to(#bbb));background-image:-webkit-linear-gradient(bottom,#eee,#bbb);background-image:linear-gradient(bottom,#eee,#bbb);border-color:#909090}.wp_themeSkin .mceButtonDisabled{border-color:#ccc!important}.wp_themeSkin .mceListBox .mceOpen{border-left:0!important}.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen,.wp_themeSkin .mceListBoxHover:active .mceOpen,.wp_themeSkin .mceListBoxSelected .mceOpen,.wp_themeSkin .mceListBoxSelected .mceText,.wp_themeSkin table.mceListBoxEnabled:active .mceText{background:#ccc;border-color:#999}.wp_themeSkin table.mceListBoxEnabled:hover .mceText,.wp_themeSkin .mceListBoxHover .mceText,.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,.wp_themeSkin .mceListBoxHover .mceOpen{border-color:#909090;background-color:#eee;background-image:-ms-linear-gradient(bottom,#ccc,#fff);background-image:-moz-linear-gradient(bottom,#ccc,#fff);background-image:-o-linear-gradient(bottom,#ccc,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(bottom,#ccc,#fff);background-image:linear-gradient(bottom,#ccc,#fff)}.wp_themeSkin .mceSplitButton a.mceAction,.wp_themeSkin .mceSplitButton a.mceOpen{border-color:#ccc}.wp_themeSkin .mceSplitButton a.mceOpen:hover,.wp_themeSkin .mceSplitButtonSelected a.mceOpen,.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction,.wp_themeSkin .mceSplitButton a.mceAction:hover{border-color:#909090}.wp_themeSkin table.mceSplitButton td{background-color:#eee;background-image:-ms-linear-gradient(bottom,#ddd,#fff);background-image:-moz-linear-gradient(bottom,#ddd,#fff);background-image:-o-linear-gradient(bottom,#ddd,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#ddd),to(#fff));background-image:-webkit-linear-gradient(bottom,#ddd,#fff);background-image:linear-gradient(bottom,#ddd,#fff)}.wp_themeSkin table.mceSplitButton:hover td{background-image:-ms-linear-gradient(bottom,#ccc,#fff);background-image:-moz-linear-gradient(bottom,#ccc,#fff);background-image:-o-linear-gradient(bottom,#ccc,#fff);background-image:-webkit-gradient(linear,left bottom,left top,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(bottom,#ccc,#fff);background-image:linear-gradient(bottom,#ccc,#fff)}.wp_themeSkin .mceSplitButtonActive{background-color:#b2b2b2}.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover{border-color:#0a246a;background-color:#b6bdd2}.wp_themeSkin a.mceMoreColors:hover{border-color:#0a246a}.wp_themeSkin .mceMenuItemDisabled .mceText{color:#888}#mceModalBlocker{background:#000}.wp-editor-area{font-family:Consolas,Monaco,monospace;padding:10px;line-height:150%;border:0 none;outline:0;resize:vertical;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-editor-tools{height:30px;padding:0 10px}.wp-editor-container{border-width:1px;border-style:solid;-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px;border-color:#ccc #ccc #dfdfdf}.wp-editor-container textarea.wp-editor-area{width:99.9%}.quicktags-toolbar,.wp_themeSkin tr.mceFirst td.mceToolbar{border-bottom:1px solid #ccc;background-color:#e9e9e9;background-image:-ms-linear-gradient(bottom,#ddd,#e9e9e9);background-image:-moz-linear-gradient(bottom,#ddd,#e9e9e9);background-image:-o-linear-gradient(bottom,#ddd,#e9e9e9);background-image:-webkit-linear-gradient(bottom,#ddd,#e9e9e9);background-image:linear-gradient(bottom,#ddd,#e9e9e9)}.wp-switch-editor{height:18px;font:13px/18px Arial,Helvetica,sans-serif normal;margin:5px 5px 0 0;padding:4px 5px 2px;float:right;cursor:pointer;border-width:1px;border-style:solid;-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px;background-color:#f1f1f1;border-color:#dfdfdf #dfdfdf #ccc;color:#999}html[dir="rtl"] .wp-switch-editor{float:left}.wp-switch-editor:hover{text-decoration:none!important}.js .tmce-active .wp-editor-area{color:white}.tmce-active .quicktags-toolbar{display:none}.tmce-active .switch-tmce,.html-active .switch-html{border-color:#ccc #ccc #e9e9e9;background-color:#e9e9e9;color:#333}.wp-media-buttons{line-height:1;padding:9px 0 0}.wp-media-buttons a{text-decoration:none;color:#333;font-size:12px;vertical-align:bottom}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.quicktags-toolbar{border-bottom-style:solid;border-bottom-width:1px;-webkit-border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-right-radius:3px;border-top-left-radius:3px;padding:2px 8px 0;min-height:29px}.quicktags-toolbar>div{padding:2px 4px 0}.quicktags-toolbar input{margin:2px 1px 4px;line-height:18px;display:inline-block;min-width:26px;padding:2px 4px;font:12px/18px Arial,Helvetica,sans-serif normal;color:#464646;border:1px solid #c3c3c3;-webkit-border-radius:3px;border-radius:3px;background-color:#eee;background-image:-ms-linear-gradient(bottom,#e3e3e3,#fff);background-image:-moz-linear-gradient(bottom,#e3e3e3,#fff);background-image:-o-linear-gradient(bottom,#e3e3e3,#fff);background-image:-webkit-linear-gradient(bottom,#e3e3e3,#fff);background-image:linear-gradient(bottom,#e3e3e3,#fff)}.quicktags-toolbar input:hover{border-color:#aaa;background:#ddd}.quicktags-toolbar input[value="link"]{text-decoration:underline}.quicktags-toolbar input[value="del"]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:bold}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:999998}#wp_editimgbtn,#wp_delimgbtn,#wp_editgallery,#wp_delgallery{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;-webkit-border-radius:3px;border-radius:3px}#wp_editimgbtn:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_delgallery:hover{border-color:#555;background-color:#ccc}#wp-link{background-color:#f5f5f5;line-height:1.4em;font-size:12px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type="text"]{-webkit-box-sizing:border-box}#wp-link input[type="text"],#wp-link textarea{border-width:1px;border-style:solid;-webkit-border-radius:4px;border-radius:4px;font-size:12px;margin:1px;padding:3px}#wp-link #link-options{padding:10px 0 14px;border-bottom:1px solid #dfdfdf;margin:0 6px 14px}#wp-link p.howto{margin:3px}#wp-link #internal-toggle{display:inline-block;cursor:pointer;padding-left:18px}#wp-link .toggle-arrow{background:transparent url('../images/toggle-arrow.png') top left no-repeat;height:23px;line-height:23px}#wp-link .toggle-arrow-active{background-position:center left}#wp-link label input[type="text"]{width:360px;margin-top:5px}#wp-link label span{display:inline-block;width:80px;text-align:right;padding-right:5px}#wp-link .link-search-wrapper{margin:5px 6px 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:left;margin-top:6px}#wp-link .link-search-wrapper input[type="text"]{float:left;width:220px}#wp-link .link-search-wrapper img.waiting{margin:8px 1px 0 4px;float:left;display:none}#wp-link .link-target{width:auto;padding:3px 0 0;margin:0 0 0 87px;font-size:11px}#wp-link .query-results{border:1px #dfdfdf solid;margin:0 5px 5px;background:#fff;height:185px;overflow:auto;position:relative}#wp-link li,#wp-link .query-notice{clear:both;margin-bottom:0;border-bottom:1px solid #f1f1f1;color:#333;padding:4px 6px;cursor:pointer;position:relative}#wp-link li:hover{background:#eaf2fa;color:#151515}#wp-link li.unselectable{border-bottom:1px solid #dfdfdf}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#333}#wp-link li.selected{background:#ddd;color:#333}#wp-link li.selected .item-title{font-weight:bold}#wp-link .item-title{display:inline-block;width:80%}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;right:5px;top:4px;bottom:0}#wp-link #search-results{display:none}#wp-link #search-panel{float:left;width:100%}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .river-waiting img.waiting{margin:0 auto;display:block}#wp-link .submitbox{padding:5px 10px;font-size:11px;overflow:auto;height:29px}#wp-link-cancel{line-height:25px;float:left}#wp-link-update{line-height:23px;float:right}.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}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.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:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.wp-dialog{position:absolute;width:300px;overflow:hidden}.wp-dialog .ui-dialog-titlebar{position:relative}.wp-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.wp-dialog .ui-dialog-content{position:relative;border:0;padding:0;background:0;overflow:auto;zoom:1}.wp-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}.wp-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.wp-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.wp-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.wp-dialog{border:1px solid #999;-moz-box-shadow:0 0 16px rgba(0,0,0,0.3);-webkit-box-shadow:0 0 16px rgba(0,0,0,0.3);box-shadow:0 0 16px rgba(0,0,0,0.3)}.wp-dialog .ui-dialog-title{display:block;text-align:center;padding:1px 0 2px}.wp-dialog .ui-dialog-titlebar{padding:0 1em;background-color:#444;font-weight:bold;font-size:11px;line-height:18px;color:#e5e5e5}.wp-dialog{background-color:#fff;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-left-radius:4px;border-top-right-radius:4px}.wp-dialog .ui-dialog-titlebar{-webkit-border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-left-radius:3px;border-top-right-radius:3px}.wp-dialog .ui-dialog-titlebar-close{position:absolute;width:29px;height:16px;top:2px;right:6px;background:url('../js/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif') no-repeat -87px -16px;padding:0}.wp-dialog .ui-dialog-titlebar-close:hover,.wp-dialog .ui-dialog-titlebar-close:focus{background-position:-87px -32px}.ui-widget-overlay{background-color:#000;opacity:.6;filter:alpha(opacity=60)}.rtl #wp-link #internal-toggle{padding-right:18px;padding-left:0}.rtl #wp-link label span{text-align:left;padding-left:5px;padding-right:0}.rtl #wp-link .link-search-wrapper span{float:right}.rtl #wp-link .link-search-wrapper input[type="text"]{float:right}.rtl #wp-link .link-search-wrapper img.waiting{margin:8px 4px 0 1px;float:right}.rtl #wp-link .link-target{margin:0 87px 0 0}.rtl #wp-link .item-info{left:5px;right:auto;top:4px;bottom:0}.rtl #wp-link #search-panel{float:right}.rtl #wp-link-cancel{float:right}.rtl #wp-link-update{float:left}.rtl #wp-link .toggle-arrow{background-position:top right}.rtl #wp-link .toggle-arrow-active{background-position:center right}.rtl .wp_themeSkin .mceListBox .mceText{text-align:right}.rtl .wp_themeSkin .mceNoIcons a .mceText{padding-right:10px;padding-left:25px}.rtl .mceListBoxMenu.mceNoIcons{margin-left:-14px}.clearlooks2 .mceFocus .mceTop .mceLeft{background:#444;border-left:1px solid #999;border-top:1px solid #999;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.clearlooks2 .mceFocus .mceTop .mceRight{background:#444;border-right:1px solid #999;border-top:1px solid #999;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.clearlooks2 .mceMiddle .mceLeft{background:#f1f1f1;border-left:1px solid #999}.clearlooks2 .mceMiddle .mceRight{background:#f1f1f1;border-right:1px solid #999}.clearlooks2 .mceBottom{background:#f1f1f1;border-bottom:1px solid #999}.clearlooks2 .mceBottom .mceLeft{background:#f1f1f1;border-bottom:1px solid #999;border-left:1px solid #999}.clearlooks2 .mceBottom .mceCenter{background:#f1f1f1;border-bottom:1px solid #999}.clearlooks2 .mceBottom .mceRight{background:#f1f1f1;border-bottom:1px solid #999;border-right:1px solid #999}.clearlooks2 .mceFocus .mceTop span{color:#e5e5e5}.fullscreen-overlay{z-index:149999;display:none;position:fixed;top:0;bottom:0;left:0;right:0;filter:inherit}.fullscreen-active .fullscreen-overlay,.fullscreen-active #wp-fullscreen-body{display:block}.fullscreen-fader{z-index:200000}.fullscreen-active .fullscreen-fader{display:none}#wp-fullscreen-body{width:100%;z-index:150005;display:none;position:absolute;top:0;left:0;font-size:12px}#wp-fullscreen-wrap{margin:0 auto 50px;position:relative;padding-top:60px}#wp-fullscreen-title{font-size:1.7em;line-height:100%;outline:medium none;padding:6px 7px;width:100%;margin-bottom:30px}#wp-fullscreen-container{padding:4px 10px 50px}#wp-fullscreen-title,#wp-fullscreen-container{-webkit-border-radius:0;border-radius:0;border:1px dashed transparent;background:transparent;-moz-transition-property:border-color;-moz-transition-duration:.6s;-webkit-transition-property:border-color;-webkit-transition-duration:.6s;-o-transition-property:border-color;-o-transition-duration:.6s;transition-property:border-color;transition-duration:.6s}#wp_mce_fullscreen{width:100%;min-height:300px;border:0;background:transparent;font-family:Consolas,Monaco,monospace;line-height:1.6em;padding:0;overflow-y:hidden;outline:0;resize:none}#wp-fullscreen-tagline{color:#bbb;font-size:18px;float:right;padding-top:5px}#fullscreen-topbar{position:fixed;top:0;left:0;z-index:150050;border-bottom-style:solid;border-bottom-width:1px;min-width:800px;width:100%;height:40px}#wp-fullscreen-toolbar{padding:6px 10px 0;clear:both;max-width:1100px;min-width:820px;margin:0 auto}#wp-fullscreen-mode-bar,#wp-fullscreen-button-bar,#wp-fullscreen-close,#wp-fullscreen-count{float:left}#wp-fullscreen-save{float:right;padding:2px 2px 0 5px}#wp-fullscreen-count,#wp-fullscreen-close{padding-top:5px}#wp-fullscreen-central-toolbar{margin:auto;padding:0}#wp-fullscreen-buttons>div{float:left}#wp-fullscreen-mode-bar{padding:1px 14px 0 0}#wp-fullscreen-modes a{display:block;font-size:11px;text-decoration:none;float:left;margin:1px 0 0 0;padding:2px 6px 2px;border-width:1px 1px 1px 0;border-style:solid;border-color:#bbb;color:#777;text-shadow:0 1px 0 #fff;background-color:#f4f4f4;background-image:-moz-linear-gradient(bottom,#e4e4e4,#f9f9f9);background-image:-webkit-gradient(linear,left bottom,left top,from(#e4e4e4),to(#f9f9f9))}#wp-fullscreen-modes a:hover,.wp-html-mode #wp-fullscreen-modes a:last-child,.wp-tmce-mode #wp-fullscreen-modes a:first-child{color:#333;border-color:#999;background-color:#eee;background-image:-moz-linear-gradient(bottom,#f9f9f9,#e0e0e0);background-image:-webkit-gradient(linear,left bottom,left top,from(#f9f9f9),to(#e0e0e0))}#wp-fullscreen-modes a:first-child{border-width:1px;-webkit-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-top-left-radius:3px;border-bottom-left-radius:3px}#wp-fullscreen-modes a:last-child{-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px}#wp-fullscreen-buttons .active a{background:inherit}#wp-fullscreen-buttons .hidden{display:none}#wp-fullscreen-buttons .disabled{opacity:.5}.wp-html-mode #wp-fullscreen-buttons div{display:none}.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both{display:block}#fullscreen-topbar.fullscreen-make-sticky{display:block!important}#wp-fullscreen-save img{vertical-align:middle}#wp-fullscreen-save img,#wp-fullscreen-save span{padding-right:4px;display:none}#wp-fullscreen-buttons .mce_image .mce_image{background-image:url('../../wp-admin/images/media-button.png?ver=20120201');background-position:3px 3px}.fullscreen-active #TB_overlay{z-index:150100}.fullscreen-active #TB_window{z-index:150102}#wp_mce_fullscreen_ifr{background:transparent}#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst{display:none}#wp-fullscreen-container .wp_themeSkin table td{vertical-align:top}.fullscreen-overlay{background:#fff}.wp-fullscreen-focus #wp-fullscreen-title,.wp-fullscreen-focus #wp-fullscreen-container{border-color:#ccc}#fullscreen-topbar{border-bottom-color:#dfdfdf;background-color:#f1f1f1;background-image:-ms-linear-gradient(top,#f9f9f9,#ececec);background-image:-moz-linear-gradient(top,#f9f9f9,#ececec);background-image:-o-linear-gradient(top,#f9f9f9,#ececec);background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#ececec));background-image:-webkit-linear-gradient(top,#f9f9f9,#ececec);background-image:linear-gradient(top,#f9f9f9,#ececec)}.fade-1000,.fade-600,.fade-400,.fade-300{opacity:0;-moz-transition-property:opacity;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.fade-1000{-moz-transition-duration:1s;-webkit-transition-duration:1s;-o-transition-duration:1s;transition-duration:1s}.fade-600{-moz-transition-duration:.6s;-webkit-transition-duration:.6s;-o-transition-duration:.6s;transition-duration:.6s}.fade-400{-moz-transition-duration:.4s;-webkit-transition-duration:.4s;-o-transition-duration:.4s;transition-duration:.4s}.fade-300{-moz-transition-duration:.3s;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.fade-trigger{opacity:1}.rtl #wp-fullscreen-tagline{float:left}.rtl #fullscreen-topbar{left:auto;right:0}.rtl #wp-fullscreen-mode-bar,.rtl #wp-fullscreen-button-bar,.rtl #wp-fullscreen-close,.rtl #wp-fullscreen-count{float:right}.rtl #wp-fullscreen-save{float:left}.rtl #wp-fullscreen-save{padding:2px 5px 0 2px}.rtl #wp-fullscreen-buttons>div{float:right}.rtl #wp-fullscreen-mode-bar{padding:1px 0 0 14px}.rtl #wp-fullscreen-modes a{float:right;border-width:1px 0 1px 1px}.rtl #wp-fullscreen-modes a:first-child{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:3px;border-width:1px;border-top-left-radius:0;border-top-right-radius:3px;border-bottom-right-left:0;border-bottom-right-radius:3px}.rtl #wp-fullscreen-modes a:last-child{-webkit-border-top-right-radius:0;-webkit-border-top-left-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;border-top-right-radius:0;border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:3px}.rtl #wp-fullscreen-save img,.rtl #wp-fullscreen-save span{padding-right:0;padding-left:4px} \ No newline at end of file diff --git a/wp-includes/css/editor.dev.css b/wp-includes/css/editor.dev.css new file mode 100644 index 000000000..a7e14a80f --- /dev/null +++ b/wp-includes/css/editor.dev.css @@ -0,0 +1,2021 @@ + +/*------------------------------------------------------------------------------ + TinyMCE and Quicklinks toolbars +------------------------------------------------------------------------------*/ + +/* wp_theme/ui.css */ +.wp_themeSkin table, +.wp_themeSkin tbody, +.wp_themeSkin a, +.wp_themeSkin img, +.wp_themeSkin tr, +.wp_themeSkin div, +.wp_themeSkin td, +.wp_themeSkin iframe, +.wp_themeSkin span, +.wp_themeSkin *, +.wp_themeSkin .mceText { + border: 0; + margin: 0; + padding: 0; + white-space: nowrap; + text-decoration: none; + font-weight: normal; + cursor: default; + vertical-align: baseline; + width: auto; + border-collapse: separate; +} + +.wp_themeSkin a:hover, +.wp_themeSkin a:link, +.wp_themeSkin a:visited, +.wp_themeSkin a:active { + text-decoration: none; + font-weight: normal; + cursor: default; +} + +.wp_themeSkin table td { + vertical-align: middle; +} + +.wp_themeSkin *, +.wp_themeSkin a:hover, +.wp_themeSkin a:link, +.wp_themeSkin a:visited, +.wp_themeSkin a:active { + color: #000; +} + +/* Containers */ +.wp_themeSkin table {} + +.wp_themeSkin iframe { + display: block; +} + +.wp_themeSkin #mce_fullscreen_ifr { + background-color: #fff; +} + +.wp_themeSkin .mceToolbar { + padding: 1px; +} + +/* External */ +.wp_themeSkin .mceExternalToolbar { + position: absolute; + border-bottom: 0; + display: none; +} + +.wp_themeSkin .mceExternalToolbar td.mceToolbar { + padding-right: 13px; +} + +.wp_themeSkin .mceExternalClose { + position: absolute; + top: 3px; + right: 3px; + width: 7px; + height: 7px; + background: url("../js/tinymce/themes/advanced/img/icons.gif") -820px 0; +} + +/* Layout */ +.wp_themeSkin table.mceToolbar, +.wp_themeSkin tr.mceFirst .mceToolbar tr td, +.wp_themeSkin tr.mceLast .mceToolbar tr td { + border: 0; + margin: 0; + padding: 0; +} + +.wp_themeSkin table.mceLayout { + border: 0; +} + +.wp_themeSkin .mceStatusbar { + display: block; + font-family: Arial, "Bitstream Vera Sans", Helvetica, Verdana, sans-serif; + font-size: 12px; + line-height: 16px; + padding: 0 0 0 8px; + overflow: visible; + height: 20px; + border-top: 1px solid #dfdfdf; + color: #000; + background-color: #f5f5f5; +} + +.rtl .wp_themeSkin .mceStatusbar { + padding: 0 8px 0 0; +} + +.wp_themeSkin .mceStatusbar * { + color: #555; +} + +.wp_themeSkin .mceStatusbar div { + float: left; + padding: 2px; +} + +.rtl .wp_themeSkin .mceStatusbar div { + float: right; +} + +.wp_themeSkin .mceStatusbar a.mceResize { + display: block; + float: right; + background: url("../js/tinymce/themes/advanced/img/icons.gif") -800px 0; + width: 20px; + height: 20px; + cursor: se-resize; +} + +.rtl .wp_themeSkin .mceStatusbar a.mceResize { + float: left; +} + +.wp_themeSkin .mceStatusbar a:hover { + text-decoration: underline; +} + +.wp_themeSkin table.mceToolbar { + margin: 0 6px 2px; +} + +.wp_themeSkin #content_toolbar1 { + margin-top: 2px; +} + +.wp_themeSkin .mceToolbar .mceToolbarEndListBox span { + display: none; +} + +.wp_themeSkin span.mceIcon, +.wp_themeSkin img.mceIcon { + display: block; + width: 20px; + height: 20px; +} + +.wp_themeSkin .mceIcon { + background: url("../js/tinymce/themes/advanced/img/icons.gif") no-repeat 20px 20px; +} + +/* Button */ +.wp_themeSkin .mceButton { + display: block; + width: 20px; + height: 20px; + cursor: default; + padding: 1px 2px; + margin: 1px; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; +} + +.wp_themeSkin a.mceButtonEnabled:hover { + background-image: inherit 0 -10px; +} + +.wp_themeSkin .mceOldBoxModel a.mceButton span, .wp_themeSkin .mceOldBoxModel a.mceButton img { + margin: 0 0 0 1px; +} + +.wp_themeSkin a.mceButton:active, +.wp_themeSkin a.mceButtonActive, +.wp_themeSkin a.mceButtonActive:hover, +.wp_themeSkin a.mceButtonSelected { + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; +} + +.wp_themeSkin .mceButtonDisabled .mceIcon { + opacity: 0.5; + filter: alpha(opacity=50); +} + +/* Separator */ +.wp_themeSkin .mceSeparator { + height: 24px; + width: 1px; + display: block; + background: transparent; + overflow: hidden; + margin: 0 2px; +} + +/* ListBox */ +.wp_themeSkin .mceListBox, +.wp_themeSkin .mceListBox a { + display: block; +} + +.wp_themeSkin .mceListBox .mceText { + padding: 1px 2px 1px 5px; + text-align: left; + text-decoration: none; + width: 70px; + -webkit-border-bottom-left-radius: 2px; + -webkit-border-top-left-radius: 2px; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + font-family: Arial, "Bitstream Vera Sans", Helvetica, Verdana, sans-serif; + font-size: 12px; + height: 20px; + line-height: 20px; + overflow: hidden; +} + +.wp_themeSkin .mceListBox { + margin: 1px; + direction: ltr; +} + +.wp_themeSkin .mceListBox .mceOpen { + width: 14px; + height: 20px; + border-collapse: separate; + padding: 1px; + -webkit-border-bottom-left-radius: 0; + -webkit-border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; +} + +.wp_themeSkin .mceListBox .mceOpen span { + display: block; + width: 14px; + height: 20px; + background-image: url("../images/down_arrow.gif"); + background-position: 2px 1px; + background-repeat: no-repeat; +} + +.wp_themeSkin table.mceListBoxEnabled:hover .mceText, +.wp_themeSkin .mceListBoxHover .mceText, +.wp_themeSkin .mceListBoxSelected .mceText, +.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen, +.wp_themeSkin .mceListBoxHover .mceOpen, +.wp_themeSkin .mceListBoxSelected .mceOpen { + background-image: none; +} + +.wp_themeSkin .mceListBoxDisabled .mceText { + color: gray; +} + +.wp_themeSkin .mceListBoxMenu { + overflow: auto; + overflow-x: hidden; +} + +.wp_themeSkin .mceOldBoxModel .mceListBox .mceText { + height: 22px; +} + +.wp_themeSkin select.mceListBox { + font-family: Arial, "Bitstream Vera Sans", Helvetica, Verdana, sans-serif; + font-size: 12px; + border-color: #B2B2B2; + background-color: #fff; +} + +/* SplitButton */ +.wp_themeSkin .mceSplitButton a, +.wp_themeSkin .mceSplitButton span { + display: block; + height: 20px; +} + +.wp_themeSkin .mceSplitButton { + display: block; + margin: 1px; + direction: ltr; +} + +.wp_themeSkin table.mceSplitButton td { + padding: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +.wp_themeSkin table.mceSplitButton td a { + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 0 2px 1px #fff; +} + +.wp_themeSkin table.mceSplitButton:hover td { + background-image: inherit 0 -10px; +} + +.wp_themeSkin .mceSplitButton a.mceAction { + height: 20px; + width: 20px; + padding: 1px 2px; +} + +.wp_themeSkin .mceSplitButton span.mceAction { + background-image: url("../js/tinymce/themes/advanced/img/icons.gif"); + background-repeat: no-repeat; + background-color: transparent; + width: 20px; +} + +.wp_themeSkin .mceSplitButton a.mceOpen { + width: 10px; + height: 20px; + background-image: url("../images/down_arrow.gif"); + background-position: 1px 2px; + background-repeat: no-repeat; + padding: 1px; + border-left: 0 none !important; +} + +.wp_themeSkin .mceSplitButton span.mceOpen { + display: none; +} + +.wp_themeSkin .mceSplitButtonDisabled .mceAction { + opacity: 0.3; + filter: alpha(opacity=30); +} + +.wp_themeSkin .mceListBox a.mceText, +.wp_themeSkin .mceSplitButton a.mceAction { + -webkit-border-bottom-left-radius: 2px; + -webkit-border-top-left-radius: 2px; + border-bottom-left-radius: 2px; + border-top-left-radius: 2px; +} + +.wp_themeSkin .mceSplitButton a.mceOpen, +.wp_themeSkin .mceListBox a.mceOpen { + -webkit-border-bottom-right-radius: 2px; + -webkit-border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-top-right-radius: 2px; +} + +.wp_themeSkin span.mce_undo, +.wp_themeSkin span.mce_redo, +.wp_themeSkin span.mce_bullist, +.wp_themeSkin span.mce_numlist, +.wp_themeSkin span.mce_blockquote, +.wp_themeSkin span.mce_charmap, +.wp_themeSkin span.mce_bold, +.wp_themeSkin span.mce_italic, +.wp_themeSkin span.mce_underline, +.wp_themeSkin span.mce_justifyleft, +.wp_themeSkin span.mce_justifyright, +.wp_themeSkin span.mce_justifycenter, +.wp_themeSkin span.mce_justifyfull, +.wp_themeSkin span.mce_indent, +.wp_themeSkin span.mce_outdent, +.wp_themeSkin span.mce_link, +.wp_themeSkin span.mce_unlink, +.wp_themeSkin span.mce_help, +.wp_themeSkin span.mce_removeformat, +.wp_themeSkin span.mce_fullscreen, +.wp_themeSkin span.mce_wp_fullscreen, +.wp_themeSkin span.mce_media, +.wp_themeSkin span.mce_pastetext, +.wp_themeSkin span.mce_pasteword, +.wp_themeSkin span.mce_wp_help, +.wp_themeSkin span.mce_wp_adv, +.wp_themeSkin span.mce_wp_more, +.wp_themeSkin span.mce_strikethrough, +.wp_themeSkin span.mce_spellchecker, +.wp_themeSkin span.mce_forecolor, +.wp_themeSkin .mce_forecolorpicker, +.wp_themeSkin .mceSplitButton .mce_spellchecker span.mce_spellchecker, +.wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor, +.wp_themeSkin .mceSplitButton span.mce_numlist, +.wp_themeSkin .mceSplitButton span.mce_bullist { + background-image: url(../images/wpicons.png); +} + +/* ColorSplitButton */ +.wp_themeSkin div.mceColorSplitMenu table { + background-color: #ebebeb; + border-color: #B2B2B2; +} + +.wp_themeSkin .mceColorSplitMenu td { + padding: 2px; +} + +.wp_themeSkin .mceColorSplitMenu a { + display: block; + width: 9px; + height: 9px; + overflow: hidden; + border-color: #B2B2B2; +} + +.wp_themeSkin .mceColorSplitMenu td.mceMoreColors { + padding: 1px 3px 1px 1px; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors { + width: 100%; + height: auto; + text-align: center; + font-family: Tahoma,Verdana,Arial,Helvetica; + font-size: 11px; + line-height: 20px; + border-color: #fff; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover {} +.wp_themeSkin a.mceMoreColors:hover {} +.wp_themeSkin .mceColorPreview { + margin: -5px 0 0 2px; + width: 16px; + height: 4px; + overflow: hidden; +} + +/* Menu */ +.wp_themeSkin .mceMenu { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + border-color: #ddd; +} + +.wp_themeSkin .mceNoIcons span.mceIcon { + width: 0; +} + +.wp_themeSkin .mceNoIcons a .mceText { + padding-left: 10px; +} + +.wp_themeSkin .mceMenu table { + background-color: #ebeaeb; +} + +.wp_themeSkin .mceMenu a, +.wp_themeSkin .mceMenu span, +.wp_themeSkin .mceMenu { + display: block; +} + +.wp_themeSkin .mceMenu td { + height: 20px;overflow: hidden; +} + +.wp_themeSkin .mceMenu a { + position: relative; + padding: 3px 0 4px 0; + text-decoration: none !important; +} + +.wp_themeSkin .mceMenu .mceText { + position: relative; + display: block; + font-family: Tahoma,Verdana,Arial,Helvetica; + cursor: default; + margin: 0; + padding: 0 25px; + color: #000; +} + +.wp_themeSkin .mceMenu span.mceText, .wp_themeSkin .mceMenu .mcePreview { + font-size: 12px; +} + +.wp_themeSkin .mceMenu pre.mceText { + font-family: Monospace; +} + +.wp_themeSkin .mceMenu .mceIcon { + position: absolute; + top: 0; + left: 0; + width: 22px; +} + +.wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover, +.wp_themeSkin .mceMenu .mceMenuItemActive { + background-color: #f5f5f5; +} + +.wp_themeSkin td.mceMenuItemSeparator { + height: 1px; + background-color: #aaa; +} + +.wp_themeSkin .mceMenuItemTitle a { + border-top: 0; + border-right: 0; + border-left: 0; + border-bottom: 1px solid #aaa; + text-decoration: none !important; + background-color: #ccc; +} + +.wp_themeSkin .mceMenuItemTitle span.mceText { + font-weight: bold; + padding-left: 4px; + color: #000; +} + +.wp_themeSkin .mceMenuItemSelected .mceIcon { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_check.gif"); + color: #888; +} + +.wp_themeSkin .mceNoIcons .mceMenuItemSelected a { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat -6px center; +} + +.wp_themeSkin .mceMenu span.mceMenuLine { + display: none; +} + +.wp_themeSkin .mceMenuItemSub a { + background: url("../js/tinymce/themes/advanced/skins/default/img/menu_arrow.gif") no-repeat top right; +} + +/* Progress,Resize */ +.wp_themeSkin .mceBlocker { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + opacity: 0.5; + filter: alpha(opacity=50); + background: #FFF; +} + +.wp_themeSkin .mceProgress { + position: absolute; + left: 0; + top: 0; + z-index: 1001; + background: url("../js/tinymce/themes/advanced/skins/default/img/progress.gif") no-repeat; + width: 32px; + height: 32px; + margin: -16px 0 0 -16px; +} + +.wp_themeSkin .mcePlaceHolder { + border: 1px dotted gray; +} + +/* Formats */ +.wp_themeSkin .mce_p span.mceText {} +.wp_themeSkin .mce_address span.mceText { + font-style: italic; +} + +.wp_themeSkin .mce_pre span.mceText { + font-family: monospace; +} + +.wp_themeSkin .mce_h1 span.mceText { + font-weight: bolder; + font-size: 17px; +} + +.wp_themeSkin .mce_h2 span.mceText { + font-weight: bolder; + font-size: 16px; +} + +.wp_themeSkin .mce_h3 span.mceText { + font-weight: bolder; + font-size: 15px; +} + +.wp_themeSkin .mce_h4 span.mceText { + font-weight: bolder; + font-size: 14px; +} + +.wp_themeSkin .mce_h5 span.mceText { + font-weight: bolder; + font-size: 13px; +} + +.wp_themeSkin .mce_h6 span.mceText { + font-weight: bolder; + font-size: 12px; +} + +/* Theme */ +.wp_themeSkin span.mce_undo {background-position:-500px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_undo, +.wp_themeSkin .mceButtonActive span.mce_undo {background-position:-500px 0} + +.wp_themeSkin span.mce_redo {background-position:-480px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_redo, +.wp_themeSkin .mceButtonActive span.mce_redo {background-position:-480px 0} + +.wp_themeSkin span.mce_bullist {background-position:-40px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_bullist, +.wp_themeSkin .mceButtonActive span.mce_bullist, +.wp_themeSkin .mceSplitButton:hover span.mce_bullist {background-position:-40px 0} + +.wp_themeSkin span.mce_numlist {background-position:-61px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_numlist, +.wp_themeSkin .mceButtonActive span.mce_numlist, +.wp_themeSkin .mceSplitButton:hover span.mce_numlist {background-position:-61px 0} + +.wp_themeSkin span.mce_blockquote {background-position:-80px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_blockquote, +.wp_themeSkin .mceButtonActive span.mce_blockquote {background-position:-80px 0} + +.wp_themeSkin span.mce_charmap {background-position:-420px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_charmap, +.wp_themeSkin .mceButtonActive span.mce_charmap {background-position:-420px 0} + +.wp_themeSkin span.mce_bold {background-position:-1px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_bold, +.wp_themeSkin .mceButtonActive span.mce_bold {background-position:-1px 0} + +.wp_themeSkin span.mce_italic {background-position:-21px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_italic, +.wp_themeSkin .mceButtonActive span.mce_italic {background-position:-21px 0} + +.wp_themeSkin span.mce_underline {background-position:-280px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_underline, +.wp_themeSkin .mceButtonActive span.mce_underline {background-position:-280px 1px} + +.wp_themeSkin span.mce_justifyleft {background-position:-100px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_justifyleft, +.wp_themeSkin .mceButtonActive span.mce_justifyleft {background-position:-100px 1px} + +.wp_themeSkin span.mce_justifyright {background-position:-141px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_justifyright, +.wp_themeSkin .mceButtonActive span.mce_justifyright {background-position:-141px 1px} + +.wp_themeSkin span.mce_justifycenter {background-position:-120px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_justifycenter, +.wp_themeSkin .mceButtonActive span.mce_justifycenter {background-position:-120px 1px} + +.wp_themeSkin span.mce_justifyfull {background-position:-300px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_justifyfull, +.wp_themeSkin .mceButtonActive span.mce_justifyfull {background-position:-300px 1px} + +.wp_themeSkin span.mce_indent {background-position:-461px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_indent, +.wp_themeSkin .mceButtonActive span.mce_indent {background-position:-461px 1px} + +.wp_themeSkin span.mce_outdent {background-position:-440px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_outdent, +.wp_themeSkin .mceButtonActive span.mce_outdent {background-position:-440px 1px} + +.wp_themeSkin span.mce_link {background-position:-161px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_link, +.wp_themeSkin .mceButtonActive span.mce_link {background-position:-161px 0} + +.wp_themeSkin span.mce_unlink {background-position:-180px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_unlink, +.wp_themeSkin .mceButtonActive span.mce_unlink {background-position:-180px 0} + +.wp_themeSkin span.mce_help {background-position:-521px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_help, +.wp_themeSkin .mceButtonActive span.mce_help {background-position:-521px 0} + +.wp_themeSkin span.mce_removeformat {background-position:-381px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_removeformat, +.wp_themeSkin .mceButtonActive span.mce_removeformat {background-position:-381px 0} + +.wp_themeSkin span.mce_strikethrough {background-position:-540px -18px;} +.wp_themeSkin .mceButtonEnabled:hover span.mce_strikethrough, +.wp_themeSkin .mceButtonActive span.mce_strikethrough {background-position:-540px 0} + +.wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor {background-position:-321px -22px} +.wp_themeSkin .mceSplitButtonEnabled:hover span.mce_forecolor, +.wp_themeSkin .mceSplitButtonActive span.mce_forecolor {background-position:-321px -2px} + +.wp_themeSkin .mce_forecolorpicker {background-position:-320px -20px} + +/* Plugins in WP */ +.wp_themeSkin span.mce_fullscreen {background-position:-240px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_fullscreen, +.wp_themeSkin .mceButtonActive span.mce_fullscreen {background-position:-240px 0} + +.wp_themeSkin span.mce_wp_fullscreen {background-position:-240px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_fullscreen, +.wp_themeSkin .mceButtonActive span.mce_wp_fullscreen {background-position:-240px 0} + +.wp_themeSkin span.mce_media {background-position:-401px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_media, +.wp_themeSkin .mceButtonActive span.mce_media {background-position:-401px 0} + +.wp_themeSkin span.mce_pastetext {background-position:-340px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_pastetext, +.wp_themeSkin .mceButtonActive span.mce_pastetext {background-position:-340px 0} + +.wp_themeSkin span.mce_pasteword {background-position:-360px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_pasteword, +.wp_themeSkin .mceButtonActive span.mce_pasteword {background-position:-360px 0} + +.wp_themeSkin span.mce_spellchecker {background-position:-220px -19px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_spellchecker, +.wp_themeSkin .mceSplitButtonEnabled:hover span.mce_spellchecker, +.wp_themeSkin .mceButtonActive span.mce_spellchecker, +.wp_themeSkin .mceSplitButtonActive span.mce_spellchecker {background-position:-220px 1px} + +.wp_themeSkin span.mce_wp_help {background-position:-521px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_help, +.wp_themeSkin .mceButtonActive span.mce_wp_help {background-position:-521px 0} + +.wp_themeSkin span.mce_wp_adv {background-position:-260px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_adv, +.wp_themeSkin .mceButtonActive span.mce_wp_adv {background-position:-260px 0} + +.wp_themeSkin span.mce_wp_more {background-position:-201px -20px} +.wp_themeSkin .mceButtonEnabled:hover span.mce_wp_more, +.wp_themeSkin .mceButtonActive span.mce_wp_more {background-position:-201px 0} + +/* Default icons */ +.wp_themeSkin span.mce_cleanup {background-position:-380px -20px} +.wp_themeSkin span.mce_anchor {background-position:-200px 0} +.wp_themeSkin span.mce_sub {background-position:-600px 0} +.wp_themeSkin span.mce_sup {background-position:-620px 0} +.wp_themeSkin span.mce_newdocument {background-position:-520px 0} +.wp_themeSkin span.mce_image {background-position:-380px 0} +.wp_themeSkin span.mce_code {background-position:-260px 0} +.wp_themeSkin span.mce_hr {background-position:-360px 0} +.wp_themeSkin span.mce_visualaid {background-position:-660px 0} +.wp_themeSkin span.mce_paste {background-position:-560px 0} +.wp_themeSkin span.mce_copy {background-position:-700px 0} +.wp_themeSkin span.mce_cut {background-position:-680px 0} +.wp_themeSkin .mce_backcolor span.mceAction {background-position:-760px 0} +.wp_themeSkin .mce_backcolorpicker {background-position:-760px 0} + +/* Plugins */ +.wp_themeSkin span.mce_advhr {background-position:-0px -20px} +.wp_themeSkin span.mce_ltr {background-position:-20px -20px} +.wp_themeSkin span.mce_rtl {background-position:-40px -20px} +.wp_themeSkin span.mce_emotions {background-position:-60px -20px} +.wp_themeSkin span.mce_fullpage {background-position:-80px -20px} +.wp_themeSkin span.mce_iespell {background-position:-120px -20px} +.wp_themeSkin span.mce_insertdate {background-position:-140px -20px} +.wp_themeSkin span.mce_inserttime {background-position:-160px -20px} +.wp_themeSkin span.mce_absolute {background-position:-180px -20px} +.wp_themeSkin span.mce_backward {background-position:-200px -20px} +.wp_themeSkin span.mce_forward {background-position:-220px -20px} +.wp_themeSkin span.mce_insert_layer {background-position:-240px -20px} +.wp_themeSkin span.mce_insertlayer {background-position:-260px -20px} +.wp_themeSkin span.mce_movebackward {background-position:-280px -20px} +.wp_themeSkin span.mce_moveforward {background-position:-300px -20px} +.wp_themeSkin span.mce_nonbreaking {background-position:-340px -20px} +.wp_themeSkin span.mce_selectall {background-position:-400px -20px} +.wp_themeSkin span.mce_preview {background-position:-420px -20px} +.wp_themeSkin span.mce_print {background-position:-440px -20px} +.wp_themeSkin span.mce_cancel {background-position:-460px -20px} +.wp_themeSkin span.mce_save {background-position:-480px -20px} +.wp_themeSkin span.mce_replace {background-position:-500px -20px} +.wp_themeSkin span.mce_search {background-position:-520px -20px} +.wp_themeSkin span.mce_styleprops {background-position:-560px -20px} +.wp_themeSkin span.mce_table {background-position:-580px -20px} +.wp_themeSkin span.mce_cell_props {background-position:-600px -20px} +.wp_themeSkin span.mce_delete_table {background-position:-620px -20px} +.wp_themeSkin span.mce_delete_col {background-position:-640px -20px} +.wp_themeSkin span.mce_delete_row {background-position:-660px -20px} +.wp_themeSkin span.mce_col_after {background-position:-680px -20px} +.wp_themeSkin span.mce_col_before {background-position:-700px -20px} +.wp_themeSkin span.mce_row_after {background-position:-720px -20px} +.wp_themeSkin span.mce_row_before {background-position:-740px -20px} +.wp_themeSkin span.mce_merge_cells {background-position:-760px -20px} +.wp_themeSkin span.mce_table_props {background-position:-980px -20px} +.wp_themeSkin span.mce_row_props {background-position:-780px -20px} +.wp_themeSkin span.mce_split_cells {background-position:-800px -20px} +.wp_themeSkin span.mce_template {background-position:-820px -20px} +.wp_themeSkin span.mce_visualchars {background-position:-840px -20px} +.wp_themeSkin span.mce_abbr {background-position:-860px -20px} +.wp_themeSkin span.mce_acronym {background-position:-880px -20px} +.wp_themeSkin span.mce_attribs {background-position:-900px -20px} +.wp_themeSkin span.mce_cite {background-position:-920px -20px} +.wp_themeSkin span.mce_del {background-position:-940px -20px} +.wp_themeSkin span.mce_ins {background-position:-960px -20px} +.wp_themeSkin span.mce_pagebreak {background-position:0 -40px} + +/* border */ +.wp_themeSkin .mceExternalToolbar, +.wp_themeSkin .mceButton, +.wp_themeSkin a.mceButtonEnabled:hover, +.wp_themeSkin a.mceButtonActive, +.wp_themeSkin a.mceButtonSelected, +.wp_themeSkin .mceListBox .mceText, +.wp_themeSkin .mceListBox .mceOpen, +.wp_themeSkin table.mceListBoxEnabled:hover .mceText, +.wp_themeSkin .mceListBoxHover .mceText, +.wp_themeSkin .mceListBoxSelected .mceText, +.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen, +.wp_themeSkin .mceListBoxHover .mceOpen, +.wp_themeSkin .mceListBoxSelected .mceOpen, +.wp_themeSkin select.mceListBox, +.wp_themeSkin .mceSplitButton a.mceAction, +.wp_themeSkin .mceSplitButton a.mceOpen, +.wp_themeSkin .mceSplitButton a.mceOpen:hover, +.wp_themeSkin .mceSplitButtonSelected a.mceOpen, +.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction, +.wp_themeSkin .mceSplitButton a.mceAction:hover, +.wp_themeSkin div.mceColorSplitMenu table, +.wp_themeSkin .mceColorSplitMenu a, +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors, +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover, +.wp_themeSkin a.mceMoreColors:hover, +.wp_themeSkin .mceMenu { + border-style: solid; + border-width: 1px; +} + +.wp_themeSkin iframe { + background: transparent; +} + +.wp_themeSkin .mceButton, +.wp_themeSkin .mceListBox .mceText, +.wp_themeSkin .mceListBox .mceOpen { + border-color: #ccc; + background-color: #eee; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #ddd, #fff); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #ddd, #fff); /* Firefox */ + background-image: -o-linear-gradient(bottom, #ddd, #fff); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#ddd), to(#fff)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #ddd, #fff); /* new Webkit */ + background-image: linear-gradient(bottom, #ddd, #fff); /* proposed W3C Markup */ +} + +.wp_themeSkin a.mceButtonEnabled:hover { + border-color: #a0a0a0; + background: #ddd; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #ccc, #fff); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #ccc, #fff); /* Firefox */ + background-image: -o-linear-gradient(bottom, #ccc, #fff); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#ccc), to(#fff)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #ccc, #fff); /* new Webkit */ + background-image: linear-gradient(bottom, #ccc, #fff); /* proposed W3C Markup */ +} + +.wp_themeSkin a.mceButton:active, +.wp_themeSkin a.mceButtonEnabled:active, +.wp_themeSkin a.mceButtonSelected:active, +.wp_themeSkin a.mceButtonActive, +.wp_themeSkin a.mceButtonActive:active, +.wp_themeSkin a.mceButtonActive:hover { + background-color: #ddd; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #eee, #bbb); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #eee, #bbb); /* Firefox */ + background-image: -o-linear-gradient(bottom, #eee, #bbb); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#eee), to(#bbb)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #eee, #bbb); /* new Webkit */ + background-image: linear-gradient(bottom, #eee, #bbb); /* proposed W3C Markup */ + border-color: #909090; +} + +.wp_themeSkin .mceButtonDisabled { + border-color: #ccc !important; +} + +.wp_themeSkin .mceListBox .mceOpen { + border-left: 0 !important; +} + +.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen, +.wp_themeSkin .mceListBoxHover .mceOpen, +.wp_themeSkin .mceListBoxHover:active .mceOpen, +.wp_themeSkin .mceListBoxSelected .mceOpen, +.wp_themeSkin .mceListBoxSelected .mceText, +.wp_themeSkin table.mceListBoxEnabled:active .mceText { + background: #ccc; + border-color: #999; +} + +.wp_themeSkin table.mceListBoxEnabled:hover .mceText, +.wp_themeSkin .mceListBoxHover .mceText, +.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen, +.wp_themeSkin .mceListBoxHover .mceOpen { + border-color: #909090; + background-color: #eee; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #ccc, #fff); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #ccc, #fff); /* Firefox */ + background-image: -o-linear-gradient(bottom, #ccc, #fff); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#ccc), to(#fff)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #ccc, #fff); /* new Webkit */ + background-image: linear-gradient(bottom, #ccc, #fff); /* proposed W3C Markup */ +} + +/* SplitButton */ +.wp_themeSkin .mceSplitButton a.mceAction, +.wp_themeSkin .mceSplitButton a.mceOpen { + border-color: #ccc; +} + +.wp_themeSkin .mceSplitButton a.mceOpen:hover, +.wp_themeSkin .mceSplitButtonSelected a.mceOpen, +.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction, +.wp_themeSkin .mceSplitButton a.mceAction:hover { + border-color: #909090; +} + +.wp_themeSkin table.mceSplitButton td { + background-color: #eee; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #ddd, #fff); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #ddd, #fff); /* Firefox */ + background-image: -o-linear-gradient(bottom, #ddd, #fff); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#ddd), to(#fff)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #ddd, #fff); /* new Webkit */ + background-image: linear-gradient(bottom, #ddd, #fff); /* proposed W3C Markup */ +} + +.wp_themeSkin table.mceSplitButton:hover td { + background-image: -ms-linear-gradient(bottom, #ccc, #fff); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #ccc, #fff); /* Firefox */ + background-image: -o-linear-gradient(bottom, #ccc, #fff); /* Opera */ + background-image: -webkit-gradient(linear, left bottom, left top, from(#ccc), to(#fff)); /* old Webkit */ + background-image: -webkit-linear-gradient(bottom, #ccc, #fff); /* new Webkit */ + background-image: linear-gradient(bottom, #ccc, #fff); /* proposed W3C Markup */ +} + +.wp_themeSkin .mceSplitButtonActive { + background-color: #B2B2B2; +} + +.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover { + border-color: #0A246A; + background-color: #B6BDD2; +} + +.wp_themeSkin a.mceMoreColors:hover { + border-color: #0A246A; +} + +.wp_themeSkin .mceMenuItemDisabled .mceText { + color: #888; +} + +#mceModalBlocker { + background: #000; +} + +/* WP specific */ +.wp-editor-area { + font-family: Consolas, Monaco, monospace; + padding: 10px; + line-height: 150%; + border: 0 none; + outline: none; + resize: vertical; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.wp-editor-tools { + height: 30px; + padding: 0 10px; +} + +.wp-editor-container { + border-width: 1px; + border-style: solid; + -webkit-border-top-right-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-color: #ccc #ccc #dfdfdf; +} + +.wp-editor-container textarea.wp-editor-area { + width: 99.9%; +} + +.quicktags-toolbar, +.wp_themeSkin tr.mceFirst td.mceToolbar { + border-bottom: 1px solid #ccc; + background-color: #e9e9e9; /* Fallback */ + background-image: -ms-linear-gradient(bottom, #ddd, #e9e9e9); /* IE10 */ + background-image: -moz-linear-gradient(bottom, #ddd, #e9e9e9); /* Firefox */ + background-image: -o-linear-gradient(bottom, #ddd, #e9e9e9); /* Opera */ + background-image: -webkit-linear-gradient(bottom, #ddd, #e9e9e9); /* new Webkit */ + background-image: linear-gradient(bottom, #ddd, #e9e9e9); /* proposed W3C Markup */ +} + +.wp-switch-editor { + height: 18px; + font: 13px/18px Arial,Helvetica,sans-serif normal; + margin: 5px 5px 0 0; + padding: 4px 5px 2px; + float: right; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-border-top-right-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + background-color: #f1f1f1; + border-color: #dfdfdf #dfdfdf #ccc; + color: #999; +} + +html[dir="rtl"] .wp-switch-editor { + float: left; +} + +.wp-switch-editor:hover { + text-decoration: none !important; +} + +.js .tmce-active .wp-editor-area { + color: white; +} + +.tmce-active .quicktags-toolbar { + display: none; +} + +.tmce-active .switch-tmce, +.html-active .switch-html { + border-color: #ccc #ccc #e9e9e9; + background-color: #e9e9e9; + color: #333; +} + +.wp-media-buttons { + line-height: 1; + padding: 9px 0 0; +} + +.wp-media-buttons a { + text-decoration: none; + color: #333; + font-size: 12px; + vertical-align: bottom; +} + +.wp-media-buttons img { + padding: 0 4px; + vertical-align: middle; +} + +.quicktags-toolbar { + border-bottom-style: solid; + border-bottom-width: 1px; + -webkit-border-top-right-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + padding: 2px 8px 0; + min-height: 29px; +} + +.quicktags-toolbar > div { + padding: 2px 4px 0; +} + +.quicktags-toolbar input { + margin: 2px 1px 4px; + line-height: 18px; + display: inline-block; + min-width: 26px; + padding: 2px 4px; + font: 12px/18px Arial,Helvetica,sans-serif normal; + color: #464646; + border: 1px solid #C3C3C3; + -webkit-border-radius: 3px; + border-radius: 3px; + background-color: #eee; + background-image: -ms-linear-gradient(bottom, #e3e3e3, #fff); + background-image: -moz-linear-gradient(bottom, #e3e3e3, #fff); + background-image: -o-linear-gradient(bottom, #e3e3e3, #fff); + background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff); + background-image: linear-gradient(bottom, #e3e3e3, #fff); +} + +.quicktags-toolbar input:hover { + border-color: #aaa; + background: #ddd; +} + +.quicktags-toolbar input[value="link"] { + text-decoration: underline; +} + +.quicktags-toolbar input[value="del"] { + text-decoration: line-through; +} + +.quicktags-toolbar input[value="i"] { + font-style: italic; +} + +.quicktags-toolbar input[value="b"] { + font-weight: bold; +} + +#wp_editbtns, +#wp_gallerybtns { + padding: 2px; + position: absolute; + display: none; + z-index: 999998; +} + +#wp_editimgbtn, +#wp_delimgbtn, +#wp_editgallery, +#wp_delgallery { + border-color: #999; + background-color: #eee; + margin: 2px; + padding: 2px; + border-width: 1px; + border-style: solid; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +#wp_editimgbtn:hover, +#wp_delimgbtn:hover, +#wp_editgallery:hover, +#wp_delgallery:hover { + border-color: #555; + background-color: #ccc; +} + +/*------------------------------------------------------------------------------ + wp-link +------------------------------------------------------------------------------*/ + +#wp-link { + background-color: #F5F5F5; + line-height: 1.4em; + font-size: 12px; +} + +#wp-link ol, +#wp-link ul { + list-style: none; + margin: 0; + padding: 0; +} + +#wp-link input[type="text"] { + -webkit-box-sizing: border-box; +} + +#wp-link input[type="text"], +#wp-link textarea { + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + border-radius: 4px; + font-size: 12px; + margin: 1px; + padding: 3px; +} + +#wp-link #link-options { + padding: 10px 0 14px; + border-bottom: 1px solid #dfdfdf; + margin: 0 6px 14px; +} + +#wp-link p.howto { + margin: 3px; +} + +#wp-link #internal-toggle { + display: inline-block; + cursor: pointer; + padding-left: 18px; +} + +#wp-link .toggle-arrow { + background: transparent url( '../images/toggle-arrow.png' ) top left no-repeat; + height: 23px; + line-height: 23px; +} + +#wp-link .toggle-arrow-active { + background-position: center left; +} + +#wp-link label input[type="text"] { + width: 360px; + margin-top: 5px; +} + +#wp-link label span { + display: inline-block; + width: 80px; + text-align: right; + padding-right: 5px; +} + +#wp-link .link-search-wrapper { + margin: 5px 6px 9px; + display: block; + overflow: hidden; +} + +#wp-link .link-search-wrapper span { + float: left; + margin-top: 6px; +} + +#wp-link .link-search-wrapper input[type="text"] { + float: left; + width: 220px; +} + +#wp-link .link-search-wrapper img.waiting { + margin: 8px 1px 0 4px; + float: left; + display: none; +} + +#wp-link .link-target { + width: auto; + padding: 3px 0 0; + margin: 0 0 0 87px; + font-size: 11px; +} + +#wp-link .query-results { + border: 1px #dfdfdf solid; + margin: 0 5px 5px; + background: #fff; + height: 185px; + overflow: auto; + position: relative; +} + +#wp-link li, +#wp-link .query-notice { + clear: both; + margin-bottom: 0; + border-bottom: 1px solid #f1f1f1; + color: #333; + padding: 4px 6px; + cursor: pointer; + position: relative; +} + +#wp-link li:hover { + background: #eaf2fa; + color: #151515; +} + +#wp-link li.unselectable { + border-bottom: 1px solid #dfdfdf; +} + +#wp-link li.unselectable:hover { + background: #fff; + cursor: auto; + color: #333; +} + +#wp-link li.selected { + background: #ddd; + color: #333; +} + +#wp-link li.selected .item-title { + font-weight: bold; +} + +#wp-link .item-title { + display: inline-block; + width: 80%; +} + +#wp-link .item-info { + text-transform: uppercase; + color: #666; + font-size: 11px; + position: absolute; + right: 5px; + top: 4px; + bottom: 0; +} + +#wp-link #search-results { + display: none; +} + +#wp-link #search-panel { + float: left; + width: 100%; +} + +#wp-link .river-waiting { + display: none; + padding: 10px 0; +} + +#wp-link .river-waiting img.waiting { + margin: 0 auto; + display: block; +} + +#wp-link .submitbox { + padding: 5px 10px; + font-size: 11px; + overflow: auto; + height: 29px; +} + +#wp-link-cancel { + line-height: 25px; + float: left; +} + +#wp-link-update { + line-height: 23px; + float: right; +} + +/* + * Based on: + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* 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 Resizable + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.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: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} + +/* + * jQuery UI Dialog + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.wp-dialog { position: absolute; width: 300px; overflow: hidden; } +.wp-dialog .ui-dialog-titlebar { position: relative; } +.wp-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.wp-dialog .ui-dialog-content { position: relative; border: 0; padding: 0; background: none; overflow: auto; zoom: 1; } +.wp-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; } +.wp-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.wp-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.wp-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } + +/* WP jQuery Dialog Theme */ +.wp-dialog { + border: 1px solid #999; + -moz-box-shadow: 0px 0px 16px rgba( 0,0,0,0.3 ); + -webkit-box-shadow: 0px 0px 16px rgba( 0,0,0,0.3 ); + box-shadow: 0px 0px 16px rgba( 0,0,0,0.3 ); +} + +.wp-dialog .ui-dialog-title { + display: block; + text-align: center; + padding: 1px 0 2px; +} + +.wp-dialog .ui-dialog-titlebar { + padding: 0 1em; + background-color: #444; + font-weight: bold; + font-size: 11px; + line-height: 18px; + color: #e5e5e5; +} + +.wp-dialog { + background-color: #fff; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.wp-dialog .ui-dialog-titlebar { + -webkit-border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} + +.wp-dialog .ui-dialog-titlebar-close { + position: absolute; + width: 29px; + height: 16px; + top: 2px; + right: 6px; + background: url('../js/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif') no-repeat -87px -16px; + padding: 0; +} + +.wp-dialog .ui-dialog-titlebar-close:hover, +.wp-dialog .ui-dialog-titlebar-close:focus { + background-position: -87px -32px; +} + +.ui-widget-overlay { + background-color: #000; + opacity: 0.6; + filter: alpha(opacity=60); +} + +/* +RTL +*/ +.rtl #wp-link #internal-toggle { + padding-right: 18px; + padding-left: 0; +} + +.rtl #wp-link label span { + text-align: left; + padding-left: 5px; + padding-right: 0; +} + +.rtl #wp-link .link-search-wrapper span { + float: right; +} + +.rtl #wp-link .link-search-wrapper input[type="text"] { + float: right; +} + +.rtl #wp-link .link-search-wrapper img.waiting { + margin: 8px 4px 0 1px; + float: right; +} + +.rtl #wp-link .link-target { + margin: 0 87px 0 0; +} + +.rtl #wp-link .item-info { + left: 5px; + right: auto; + top: 4px; + bottom: 0; +} + +.rtl #wp-link #search-panel { + float: right; +} + +.rtl #wp-link-cancel { + float: right; +} + +.rtl #wp-link-update { + float: left; +} + +.rtl #wp-link .toggle-arrow { + background-position: top right; +} + +.rtl #wp-link .toggle-arrow-active { + background-position: center right; +} + +.rtl .wp_themeSkin .mceListBox .mceText { + text-align: right; +} + +.rtl .wp_themeSkin .mceNoIcons a .mceText { + padding-right: 10px; + padding-left: 25px; +} + +.rtl .mceListBoxMenu.mceNoIcons { + margin-left: -14px; +} + +.clearlooks2 .mceFocus .mceTop .mceLeft { + background: #444444; + border-left: 1px solid #999; + border-top: 1px solid #999; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; +} + +.clearlooks2 .mceFocus .mceTop .mceRight { + background: #444444; + border-right: 1px solid #999; + border-top: 1px solid #999; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; +} + +.clearlooks2 .mceMiddle .mceLeft { + background: #f1f1f1; + border-left: 1px solid #999; +} + +.clearlooks2 .mceMiddle .mceRight { + background: #f1f1f1; + border-right: 1px solid #999; +} + +.clearlooks2 .mceBottom { + background: #f1f1f1; + border-bottom: 1px solid #999; +} + +.clearlooks2 .mceBottom .mceLeft { + background: #f1f1f1; + border-bottom: 1px solid #999; + border-left: 1px solid #999; +} + +.clearlooks2 .mceBottom .mceCenter { + background: #f1f1f1; + border-bottom: 1px solid #999; +} + +.clearlooks2 .mceBottom .mceRight { + background: #f1f1f1; + border-bottom: 1px solid #999; + border-right: 1px solid #999; +} + +.clearlooks2 .mceFocus .mceTop span { + color: #e5e5e5; +} + + +/* Distraction Free Writing mode + * =Overlay Styles +-------------------------------------------------------------- */ +.fullscreen-overlay { + z-index: 149999; + display: none; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + filter: inherit; +} + +.fullscreen-active .fullscreen-overlay, +.fullscreen-active #wp-fullscreen-body { + display: block; +} + +.fullscreen-fader { + z-index: 200000; +} + +.fullscreen-active .fullscreen-fader { + display: none; +} + +/* =Overlay Body +-------------------------------------------------------------- */ +#wp-fullscreen-body { + width: 100%; + z-index: 150005; + display: none; + position: absolute; + top: 0; + left: 0; + font-size: 12px; +} + +#wp-fullscreen-wrap { + margin: 0 auto 50px; + position: relative; + padding-top: 60px; +} + +#wp-fullscreen-title { + font-size: 1.7em; + line-height: 100%; + outline: medium none; + padding: 6px 7px; + width: 100%; + margin-bottom: 30px; +} + +#wp-fullscreen-container { + padding: 4px 10px 50px; +} + +#wp-fullscreen-title, +#wp-fullscreen-container { + -webkit-border-radius: 0; + border-radius: 0; + border: 1px dashed transparent; + background: transparent; + -moz-transition-property: border-color; + -moz-transition-duration: 0.6s; + -webkit-transition-property: border-color; + -webkit-transition-duration: 0.6s; + -o-transition-property: border-color; + -o-transition-duration: 0.6s; + transition-property: border-color; + transition-duration: 0.6s; +} + +#wp_mce_fullscreen { + width: 100%; + min-height: 300px; + border: 0; + background: transparent; + font-family: Consolas, Monaco, monospace; + line-height: 1.6em; + padding: 0; + overflow-y: hidden; + outline: none; + resize: none; +} + +#wp-fullscreen-tagline { + color: #BBBBBB; + font-size: 18px; + float: right; + padding-top: 5px; +} + +/* =Top bar +-------------------------------------------------------------- */ +#fullscreen-topbar { + position: fixed; + top: 0; + left: 0; + z-index: 150050; + border-bottom-style: solid; + border-bottom-width: 1px; + min-width: 800px; + width: 100%; + height: 40px; +} + +#wp-fullscreen-toolbar { + padding: 6px 10px 0; + clear: both; + max-width: 1100px; + min-width: 820px; + margin: 0 auto; +} + +#wp-fullscreen-mode-bar, +#wp-fullscreen-button-bar, +#wp-fullscreen-close, +#wp-fullscreen-count { + float: left; +} + +#wp-fullscreen-save { + float: right; + padding: 2px 2px 0 5px; +} + +#wp-fullscreen-count, +#wp-fullscreen-close { + padding-top: 5px; +} + +#wp-fullscreen-central-toolbar { + margin: auto; + padding: 0; +} + +#wp-fullscreen-buttons > div { + float: left; +} + +#wp-fullscreen-mode-bar { + padding: 1px 14px 0 0; +} + +#wp-fullscreen-modes a { + display: block; + font-size: 11px; + text-decoration: none; + float: left; + margin: 1px 0 0 0; + padding: 2px 6px 2px; + border-width: 1px 1px 1px 0; + border-style: solid; + border-color: #bbb; + color: #777; + text-shadow: 0 1px 0 #fff; + background-color: #f4f4f4; + background-image: -moz-linear-gradient(bottom, #e4e4e4, #f9f9f9); + background-image: -webkit-gradient(linear, left bottom, left top, from(#e4e4e4), to(#f9f9f9)); +} + +#wp-fullscreen-modes a:hover, +.wp-html-mode #wp-fullscreen-modes a:last-child, +.wp-tmce-mode #wp-fullscreen-modes a:first-child { + color: #333; + border-color: #999; + background-color: #eee; + background-image: -moz-linear-gradient(bottom, #f9f9f9, #e0e0e0); + background-image: -webkit-gradient(linear, left bottom, left top, from(#f9f9f9), to(#e0e0e0)); +} + +#wp-fullscreen-modes a:first-child { + border-width: 1px; + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +#wp-fullscreen-modes a:last-child { + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +#wp-fullscreen-buttons .active a { + background: inherit; +} + +#wp-fullscreen-buttons .hidden { + display: none; +} + +#wp-fullscreen-buttons .disabled { + opacity: 0.5; +} + +.wp-html-mode #wp-fullscreen-buttons div { + display: none; +} + +.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both { + display: block; +} + +#fullscreen-topbar.fullscreen-make-sticky { + display: block !important; +} + +#wp-fullscreen-save img { + vertical-align: middle; +} + +#wp-fullscreen-save img, +#wp-fullscreen-save span { + padding-right: 4px; + display: none; +} + +#wp-fullscreen-buttons .mce_image .mce_image { + background-image: url('../../wp-admin/images/media-button.png?ver=20120201'); + background-position: 3px 3px; +} + +/* =Thickbox Adjustments +-------------------------------------------------------------- */ +.fullscreen-active #TB_overlay { + z-index: 150100; +} + +.fullscreen-active #TB_window { + z-index: 150102; +} + +/* =TinyMCE Adjustments +-------------------------------------------------------------- */ +#wp_mce_fullscreen_ifr { + background: transparent; +} + +#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst { + display : none; +} + +#wp-fullscreen-container .wp_themeSkin table td { + vertical-align: top; +} + +/* Colors */ +.fullscreen-overlay { + background: #fff; +} + +.wp-fullscreen-focus #wp-fullscreen-title, +.wp-fullscreen-focus #wp-fullscreen-container { + border-color: #ccc; +} + +#fullscreen-topbar { + border-bottom-color: #DFDFDF; + background-color: #f1f1f1; /* Fallback */ + background-image: -ms-linear-gradient(top, #f9f9f9, #ececec); /* IE10 */ + background-image: -moz-linear-gradient(top, #f9f9f9, #ececec); /* Firefox */ + background-image: -o-linear-gradient(top, #f9f9f9, #ececec); /* Opera */ + background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec)); /* old Webkit */ + background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec); /* new Webkit */ + background-image: linear-gradient(top, #f9f9f9, #ececec); /* proposed W3C Markup */ +} + +/* =CSS 3 transitions +-------------------------------------------------------------- */ + +.fade-1000, +.fade-600, +.fade-400, +.fade-300 { + opacity: 0; + -moz-transition-property: opacity; + -webkit-transition-property: opacity; + -o-transition-property: opacity; + transition-property: opacity; +} + +.fade-1000 { + -moz-transition-duration: 1s; + -webkit-transition-duration: 1s; + -o-transition-duration: 1s; + transition-duration: 1s; +} + +.fade-600 { + -moz-transition-duration: 0.6s; + -webkit-transition-duration: 0.6s; + -o-transition-duration: 0.6s; + transition-duration: 0.6s; +} + +.fade-400 { + -moz-transition-duration: 0.4s; + -webkit-transition-duration: 0.4s; + -o-transition-duration: 0.4s; + transition-duration: 0.4s; +} + +.fade-300 { + -moz-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + transition-duration: 0.3s; +} + +.fade-trigger { + opacity: 1; +} + +/* Distraction Free Writing - RTL + * =Overlay Styles +-------------------------------------------------------------- */ + +/* No RTL for now, this space intentionally left blank */ + +/* =Overlay Body +-------------------------------------------------------------- */ +.rtl #wp-fullscreen-tagline { + float: left; +} + +/* =Top bar +-------------------------------------------------------------- */ +.rtl #fullscreen-topbar { + left:auto; + right: 0; +} + +.rtl #wp-fullscreen-mode-bar, +.rtl #wp-fullscreen-button-bar, +.rtl #wp-fullscreen-close, +.rtl #wp-fullscreen-count { + float: right; +} + +.rtl #wp-fullscreen-save { + float: left; +} + +.rtl #wp-fullscreen-save { + padding: 2px 5px 0 2px; +} + +.rtl #wp-fullscreen-buttons > div { + float: right; +} + +.rtl #wp-fullscreen-mode-bar { + padding: 1px 0 0 14px; +} + +.rtl #wp-fullscreen-modes a { + float: right; + border-width: 1px 0 1px 1px; +} + +.rtl #wp-fullscreen-modes a:first-child { + -webkit-border-top-left-radius: 0; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-left-radius: 0; + -webkit-border-bottom-right-radius: 3px; + border-width: 1px; + border-top-left-radius: 0; + border-top-right-radius: 3px; + border-bottom-right-left: 0; + border-bottom-right-radius: 3px; +} + +.rtl #wp-fullscreen-modes a:last-child { + -webkit-border-top-right-radius: 0; + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-right-radius: 0; + -webkit-border-bottom-left-radius: 3px; + border-top-right-radius: 0; + border-top-left-radius: 3px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 3px; +} + +.rtl #wp-fullscreen-save img, +.rtl #wp-fullscreen-save span { + padding-right: 0; + padding-left: 4px; +} + +/* =Thickbox Adjustments +-------------------------------------------------------------- */ +/* No RTL for now, this space intentionally left blank */ + + +/* =TinyMCE Adjustments +-------------------------------------------------------------- */ +/* No RTL for now, this space intentionally left blank */ + diff --git a/wp-includes/css/jquery-ui-dialog.css b/wp-includes/css/jquery-ui-dialog.css index e9639244e..2998f9f3a 100644 --- a/wp-includes/css/jquery-ui-dialog.css +++ b/wp-includes/css/jquery-ui-dialog.css @@ -1 +1 @@ -.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);}.ui-state-disabled{cursor:default!important;}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%;}.ui-resizable{position:relative;}.ui-resizable-handle{position:absolute;font-size:.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:0;}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0;}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%;}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%;}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px;}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px;}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px;}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px;}.wp-dialog{position:absolute;width:300px;overflow:hidden;}.wp-dialog .ui-dialog-titlebar{position:relative;}.wp-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;}.wp-dialog .ui-dialog-content{position:relative;border:0;padding:0;background:none;overflow:auto;zoom:1;}.wp-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;}.wp-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right;}.wp-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer;}.wp-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;}.ui-draggable .ui-dialog-titlebar{cursor:move;}.wp-dialog{border:1px solid #999;-moz-box-shadow:0 0 16px rgba(0,0,0,0.3);-webkit-box-shadow:0 0 16px rgba(0,0,0,0.3);box-shadow:0 0 16px rgba(0,0,0,0.3);}.wp-dialog .ui-dialog-title{display:block;text-align:center;padding:1px 0 2px;}.wp-dialog .ui-dialog-titlebar{padding:0 1em;background-color:#444;font-weight:bold;font-size:11px;line-height:18px;color:#e5e5e5;}.wp-dialog{background-color:#f5f5f5;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;}.wp-dialog .ui-dialog-titlebar{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;}.wp-dialog .ui-dialog-titlebar-close{position:absolute;width:29px;height:16px;top:2px;right:6px;background:url('../js/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif') no-repeat -87px -16px;padding:0;}.wp-dialog .ui-dialog-titlebar-close:hover,.wp-dialog .ui-dialog-titlebar-close:focus{background-position:-87px -32px;}.ui-widget-overlay{background-color:#000;opacity:.6;filter:alpha(opacity=60);} \ No newline at end of file +.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}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.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:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.wp-dialog{position:absolute;width:300px;overflow:hidden}.wp-dialog .ui-dialog-titlebar{position:relative}.wp-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.wp-dialog .ui-dialog-content{position:relative;border:0;padding:0;background:0;overflow:auto;zoom:1}.wp-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}.wp-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.wp-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.wp-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.wp-dialog{border:1px solid #999;-moz-box-shadow:0 0 16px rgba(0,0,0,0.3);-webkit-box-shadow:0 0 16px rgba(0,0,0,0.3);box-shadow:0 0 16px rgba(0,0,0,0.3)}.wp-dialog .ui-dialog-title{display:block;text-align:center;padding:1px 0 2px}.wp-dialog .ui-dialog-titlebar{padding:0 1em;background-color:#444;font-weight:bold;font-size:11px;line-height:18px;color:#e5e5e5}.wp-dialog{background-color:#f5f5f5;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.wp-dialog .ui-dialog-titlebar{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.wp-dialog .ui-dialog-titlebar-close{position:absolute;width:29px;height:16px;top:2px;right:6px;background:url('../js/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif') no-repeat -87px -16px;padding:0}.wp-dialog .ui-dialog-titlebar-close:hover,.wp-dialog .ui-dialog-titlebar-close:focus{background-position:-87px -32px}.ui-widget-overlay{background-color:#000;opacity:.6;filter:alpha(opacity=60)} \ No newline at end of file diff --git a/wp-includes/css/jquery-ui-dialog.dev.css b/wp-includes/css/jquery-ui-dialog.dev.css index dc582f0bd..a6125b9ca 100644 --- a/wp-includes/css/jquery-ui-dialog.dev.css +++ b/wp-includes/css/jquery-ui-dialog.dev.css @@ -80,8 +80,6 @@ .wp-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } - - /* WP jQuery Dialog Theme */ .wp-dialog { border: 1px solid #999; diff --git a/wp-includes/css/wp-pointer.css b/wp-includes/css/wp-pointer.css index 4650ffe1e..46d95b978 100644 --- a/wp-includes/css/wp-pointer.css +++ b/wp-includes/css/wp-pointer.css @@ -1 +1 @@ -.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border-style:solid;border-width:1px;border-color:#dfdfdf;border-color:rgba(0,0,0,.125);-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.19);-moz-box-shadow:0 2px 4px rgba(0,0,0,.19);box-shadow:0 2px 4px rgba(0,0,0,.19);}.wp-pointer-content h3{position:relative;margin:0 0 5px;padding:15px 18px 14px 60px;line-height:1.4em;font-size:14px;color:#fff;border-radius:3px 3px 0 0;text-shadow:0 -1px 0 rgba(0,0,0,0.3);background-color:#8cc1e9;background-image:-webkit-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:-moz-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:-ms-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:-o-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);}.wp-pointer-content h3:before{position:absolute;top:0;left:15px;content:' ';width:36px;height:100%;background:url('../images/icon-pointer-flag.png') 0 50% no-repeat;}.wp-pointer-content p{padding:0 15px;}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto;}.wp-pointer-buttons a{float:right;display:inline-block;text-decoration:none;}.wp-pointer-buttons a.close{padding-left:3px;position:relative;}.wp-pointer-buttons a.close:before{content:' ';width:10px;height:100%;position:absolute;left:-10px;background:url('../images/xit.gif') 0 50% no-repeat;}.wp-pointer-buttons a.close:hover:before{background-position:100% 50%;}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0;}.wp-pointer-arrow{z-index:10;background:url('../images/arrow-pointer-blue.png') 0 0 no-repeat;}.wp-pointer-arrow-inner{z-index:20;}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px;}.wp-pointer-bottom{padding-bottom:13px;}.wp-pointer-left{padding-left:13px;}.wp-pointer-right{padding-right:13px;}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{left:50px;width:30px;height:14px;}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px;width:14px;height:30px;}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;background-position:0 0;}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;background-position:0 -46px;}.wp-pointer-left .wp-pointer-arrow{left:0;background-position:0 -15px;}.wp-pointer-right .wp-pointer-arrow{right:0;background-position:-16px -15px;}.rtl .wp-pointer-content h3{padding-right:60px;padding-left:18px;}.rtl .wp-pointer-content h3:before{right:15px;}.rtl .wp-pointer-buttons a{float:left;}.rtl .wp-pointer-buttons a.close{padding-right:3px;padding-left:0;}.rtl .wp-pointer-buttons a.close:before{right:-10px;}.rtl .wp-pointer-top .wp-pointer-arrow,.rtl .wp-pointer-bottom .wp-pointer-arrow,.rtl .wp-pointer-undefined .wp-pointer-arrow{right:50px;} \ No newline at end of file +.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border-style:solid;border-width:1px;border-color:#dfdfdf;border-color:rgba(0,0,0,.125);-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.19);-moz-box-shadow:0 2px 4px rgba(0,0,0,.19);box-shadow:0 2px 4px rgba(0,0,0,.19)}.wp-pointer-content h3{position:relative;margin:0 0 5px;padding:15px 18px 14px 60px;line-height:1.4em;font-size:14px;color:#fff;border-radius:3px 3px 0 0;text-shadow:0 -1px 0 rgba(0,0,0,0.3);background-color:#8cc1e9;background-image:-webkit-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:-moz-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:-ms-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:-o-linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%);background-image:linear-gradient(bottom,#72a7cf 0,#8cc1e9 100%)}.wp-pointer-content h3:before{position:absolute;top:0;left:15px;content:' ';width:36px;height:100%;background:url('../images/icon-pointer-flag.png') 0 50% no-repeat}.wp-pointer-content p{padding:0 15px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:right;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-left:3px;position:relative}.wp-pointer-buttons a.close:before{content:' ';width:10px;height:100%;position:absolute;left:-10px;background:url('../images/xit.gif') 0 50% no-repeat}.wp-pointer-buttons a.close:hover:before{background-position:100% 50%}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;background:url('../images/arrow-pointer-blue.png') 0 0 no-repeat}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{padding-right:13px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{left:50px;width:30px;height:14px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px;width:14px;height:30px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;background-position:0 0}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;background-position:0 -46px}.wp-pointer-left .wp-pointer-arrow{left:0;background-position:0 -15px}.wp-pointer-right .wp-pointer-arrow{right:0;background-position:-16px -15px}.rtl .wp-pointer-content h3{padding-right:60px;padding-left:18px}.rtl .wp-pointer-content h3:before{right:15px}.rtl .wp-pointer-buttons a{float:left}.rtl .wp-pointer-buttons a.close{padding-right:3px;padding-left:0}.rtl .wp-pointer-buttons a.close:before{right:-10px}.rtl .wp-pointer-top .wp-pointer-arrow,.rtl .wp-pointer-bottom .wp-pointer-arrow,.rtl .wp-pointer-undefined .wp-pointer-arrow{right:50px} \ No newline at end of file diff --git a/wp-includes/default-constants.php b/wp-includes/default-constants.php index 9c6535e21..4e5daabd4 100644 --- a/wp-includes/default-constants.php +++ b/wp-includes/default-constants.php @@ -105,7 +105,7 @@ function wp_plugin_directory_constants( ) { * @deprecated */ if ( !defined('PLUGINDIR') ) - define( 'PLUGINDIR', 'wp-content/plugins' ); // Relative to ABSPATH. For back compat. + define( 'PLUGINDIR', 'wp-content/plugins' ); // Relative to ABSPATH. For back compat. /** * Allows for the mu-plugins directory to be moved from the default location. @@ -130,7 +130,7 @@ function wp_plugin_directory_constants( ) { * @deprecated */ if ( !defined( 'MUPLUGINDIR' ) ) - define( 'MUPLUGINDIR', 'wp-content/mu-plugins' ); // Relative to ABSPATH. For back compat. + define( 'MUPLUGINDIR', 'wp-content/mu-plugins' ); // Relative to ABSPATH. For back compat. } /** @@ -140,8 +140,6 @@ function wp_plugin_directory_constants( ) { * @since 3.0.0 */ function wp_cookie_constants( ) { - global $wp_default_secret_key; - /** * Used to guarantee unique hash cookies * @since 1.5 @@ -154,12 +152,6 @@ function wp_cookie_constants( ) { define( 'COOKIEHASH', '' ); } - /** - * Should be exactly the same as the default value of SECRET_KEY in wp-config-sample.php - * @since 2.5.0 - */ - $wp_default_secret_key = 'put your unique phrase here'; - /** * @since 2.0.0 */ @@ -304,5 +296,3 @@ function wp_templating_constants( ) { define( 'WP_DEFAULT_THEME', 'twentyeleven' ); } - -?> diff --git a/wp-includes/default-filters.php b/wp-includes/default-filters.php index 7000c4f74..c1a1d9f67 100644 --- a/wp-includes/default-filters.php +++ b/wp-includes/default-filters.php @@ -79,10 +79,7 @@ foreach ( array( 'pre_term_slug' ) as $filter ) { } // Keys -foreach ( array( 'pre_post_type' ) as $filter ) { - add_filter( $filter, 'sanitize_user' ); -} -foreach ( array( 'pre_post_status', 'pre_post_comment_status', 'pre_post_ping_status' ) as $filter ) { +foreach ( array( 'pre_post_type', 'pre_post_status', 'pre_post_comment_status', 'pre_post_ping_status' ) as $filter ) { add_filter( $filter, 'sanitize_key' ); } @@ -193,6 +190,7 @@ add_filter( 'the_posts', '_close_comments_for_old_posts', 10, 2); add_filter( 'comments_open', '_close_comments_for_old_post', 10, 2 ); add_filter( 'pings_open', '_close_comments_for_old_post', 10, 2 ); add_filter( 'editable_slug', 'urldecode' ); +add_filter( 'editable_slug', 'esc_textarea' ); add_filter( 'nav_menu_meta_box_object', '_wp_nav_menu_meta_box_object' ); // Actions @@ -231,7 +229,7 @@ foreach ( array( 'rss2_head', 'commentsrss2_head', 'rss_head', 'rdf_header', 'at // WP Cron if ( !defined( 'DOING_CRON' ) ) - add_action( 'sanitize_comment_cookies', 'wp_cron' ); + add_action( 'init', 'wp_cron' ); // 2 Actions 2 Furious add_action( 'do_feed_rdf', 'do_feed_rdf', 10, 1 ); @@ -240,6 +238,7 @@ add_action( 'do_feed_rss2', 'do_feed_rss2', add_action( 'do_feed_atom', 'do_feed_atom', 10, 1 ); add_action( 'do_pings', 'do_all_pings', 10, 1 ); add_action( 'do_robots', 'do_robots' ); +add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 2 ); add_action( 'sanitize_comment_cookies', 'sanitize_comment_cookies' ); add_action( 'admin_print_scripts', 'print_head_scripts', 20 ); add_action( 'admin_print_footer_scripts', '_wp_footer_scripts' ); @@ -255,6 +254,7 @@ add_action( 'transition_post_status', '_transition_post_status', add_action( 'transition_post_status', '_update_term_count_on_transition_post_status', 10, 3 ); add_action( 'comment_form', 'wp_comment_form_unfiltered_html_nonce' ); add_action( 'wp_scheduled_delete', 'wp_scheduled_delete' ); +add_action( 'wp_scheduled_auto_draft_delete', 'wp_delete_auto_drafts' ); add_action( 'admin_init', 'send_frame_options_header', 10, 0 ); add_action( 'importer_scheduled_cleanup', 'wp_delete_attachment' ); add_action( 'upgrader_scheduled_cleanup', 'wp_delete_attachment' ); @@ -283,5 +283,3 @@ add_action( 'admin_init', 'register_admin_color_schemes', 1); add_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' ); unset($filter, $action); - -?> diff --git a/wp-includes/default-widgets.php b/wp-includes/default-widgets.php index df7ef39ac..e4856dac6 100644 --- a/wp-includes/default-widgets.php +++ b/wp-includes/default-widgets.php @@ -102,12 +102,9 @@ class WP_Widget_Links extends WP_Widget { $show_rating = isset($instance['rating']) ? $instance['rating'] : false; $show_images = isset($instance['images']) ? $instance['images'] : true; $category = isset($instance['category']) ? $instance['category'] : false; - - if ( is_admin() && !$category ) { - // Display All Links widget as such in the widgets screen - echo $before_widget . $before_title . _x('All Links', 'links widget') . $after_title . $after_widget; - return; - } + $orderby = isset( $instance['orderby'] ) ? $instance['orderby'] : 'name'; + $order = $orderby == 'rating' ? 'DESC' : 'ASC'; + $limit = isset( $instance['limit'] ) ? $instance['limit'] : -1; $before_widget = preg_replace('/id="[^"]*"/','id="%id"', $before_widget); wp_list_bookmarks(apply_filters('widget_links_args', array( @@ -115,18 +112,26 @@ class WP_Widget_Links extends WP_Widget { 'category_before' => $before_widget, 'category_after' => $after_widget, 'show_images' => $show_images, 'show_description' => $show_description, 'show_name' => $show_name, 'show_rating' => $show_rating, - 'category' => $category, 'class' => 'linkcat widget' + 'category' => $category, 'class' => 'linkcat widget', + 'orderby' => $orderby, 'order' => $order, + 'limit' => $limit, ))); } function update( $new_instance, $old_instance ) { $new_instance = (array) $new_instance; - $instance = array( 'images' => 0, 'name' => 0, 'description' => 0, 'rating' => 0); + $instance = array( 'images' => 0, 'name' => 0, 'description' => 0, 'rating' => 0 ); foreach ( $instance as $field => $val ) { if ( isset($new_instance[$field]) ) $instance[$field] = 1; } - $instance['category'] = intval($new_instance['category']); + + $instance['orderby'] = 'name'; + if ( in_array( $new_instance['orderby'], array( 'name', 'rating', 'id', 'rand' ) ) ) + $instance['orderby'] = $new_instance['orderby']; + + $instance['category'] = intval( $new_instance['category'] ); + $instance['limit'] = ! empty( $new_instance['limit'] ) ? intval( $new_instance['limit'] ) : -1; return $instance; } @@ -134,11 +139,13 @@ class WP_Widget_Links extends WP_Widget { function form( $instance ) { //Defaults - $instance = wp_parse_args( (array) $instance, array( 'images' => true, 'name' => true, 'description' => false, 'rating' => false, 'category' => false ) ); - $link_cats = get_terms( 'link_category'); + $instance = wp_parse_args( (array) $instance, array( 'images' => true, 'name' => true, 'description' => false, 'rating' => false, 'category' => false, 'orderby' => 'name', 'limit' => -1 ) ); + $link_cats = get_terms( 'link_category' ); + if ( ! $limit = intval( $instance['limit'] ) ) + $limit = -1; ?> <p> - <label for="<?php echo $this->get_field_id('category'); ?>" class="screen-reader-text"><?php _e('Select Link Category'); ?></label> + <label for="<?php echo $this->get_field_id('category'); ?>"><?php _e( 'Select Link Category:' ); ?></label> <select class="widefat" id="<?php echo $this->get_field_id('category'); ?>" name="<?php echo $this->get_field_name('category'); ?>"> <option value=""><?php _ex('All Links', 'links widget'); ?></option> <?php @@ -148,7 +155,15 @@ class WP_Widget_Links extends WP_Widget { . '>' . $link_cat->name . "</option>\n"; } ?> - </select></p> + </select> + <label for="<?php echo $this->get_field_id('orderby'); ?>"><?php _e( 'Sort by:' ); ?></label> + <select name="<?php echo $this->get_field_name('orderby'); ?>" id="<?php echo $this->get_field_id('orderby'); ?>" class="widefat"> + <option value="name"<?php selected( $instance['orderby'], 'name' ); ?>><?php _e( 'Link title' ); ?></option> + <option value="rating"<?php selected( $instance['orderby'], 'rating' ); ?>><?php _e( 'Link rating' ); ?></option> + <option value="id"<?php selected( $instance['orderby'], 'id' ); ?>><?php _e( 'Link ID' ); ?></option> + <option value="rand"<?php selected( $instance['orderby'], 'rand' ); ?>><?php _e( 'Random' ); ?></option> + </select> + </p> <p> <input class="checkbox" type="checkbox" <?php checked($instance['images'], true) ?> id="<?php echo $this->get_field_id('images'); ?>" name="<?php echo $this->get_field_name('images'); ?>" /> <label for="<?php echo $this->get_field_id('images'); ?>"><?php _e('Show Link Image'); ?></label><br /> @@ -159,6 +174,10 @@ class WP_Widget_Links extends WP_Widget { <input class="checkbox" type="checkbox" <?php checked($instance['rating'], true) ?> id="<?php echo $this->get_field_id('rating'); ?>" name="<?php echo $this->get_field_name('rating'); ?>" /> <label for="<?php echo $this->get_field_id('rating'); ?>"><?php _e('Show Link Rating'); ?></label> </p> + <p> + <label for="<?php echo $this->get_field_id('limit'); ?>"><?php _e( 'Number of links to show:' ); ?></label> + <input id="<?php echo $this->get_field_id('limit'); ?>" name="<?php echo $this->get_field_name('limit'); ?>" type="text" value="<?php echo $limit == -1 ? '' : intval( $limit ); ?>" size="3" /> + </p> <?php } } @@ -296,7 +315,10 @@ class WP_Widget_Meta extends WP_Widget { <li><?php wp_loginout(); ?></li> <li><a href="<?php bloginfo('rss2_url'); ?>" title="<?php echo esc_attr(__('Syndicate this site using RSS 2.0')); ?>"><?php _e('Entries <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li> <li><a href="<?php bloginfo('comments_rss2_url'); ?>" title="<?php echo esc_attr(__('The latest comments to all posts in RSS')); ?>"><?php _e('Comments <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li> - <li><a href="http://wordpress.org/" title="<?php echo esc_attr(__('Powered by WordPress, state-of-the-art semantic personal publishing platform.')); ?>">WordPress.org</a></li> + <li><a href="<?php esc_attr_e( 'http://wordpress.org/' ); ?>" title="<?php echo esc_attr(__('Powered by WordPress, state-of-the-art semantic personal publishing platform.')); ?>"><?php + /* translators: meta widget link text */ + _e( 'WordPress.org' ); + ?></a></li> <?php wp_meta(); ?> </ul> <?php @@ -540,7 +562,7 @@ class WP_Widget_Recent_Posts extends WP_Widget { if ( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) ) $number = 10; - $r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true)); + $r = new WP_Query( apply_filters( 'widget_posts_args', array( 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true ) ) ); if ($r->have_posts()) : ?> <?php echo $before_widget; ?> @@ -646,7 +668,7 @@ class WP_Widget_Recent_Comments extends WP_Widget { if ( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) ) $number = 5; - $comments = get_comments( array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' ) ); + $comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' ) ) ); $output .= $before_widget; if ( $title ) $output .= $before_title . $title . $after_title; @@ -869,8 +891,6 @@ function wp_widget_rss_output( $rss, $args = array() ) { unset($rss); } - - /** * Display RSS widget options form. * @@ -1033,7 +1053,7 @@ class WP_Widget_Tag_Cloud extends WP_Widget { <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php if (isset ( $instance['title'])) {echo esc_attr( $instance['title'] );} ?>" /></p> <p><label for="<?php echo $this->get_field_id('taxonomy'); ?>"><?php _e('Taxonomy:') ?></label> <select class="widefat" id="<?php echo $this->get_field_id('taxonomy'); ?>" name="<?php echo $this->get_field_name('taxonomy'); ?>"> - <?php foreach ( get_object_taxonomies('post') as $taxonomy ) : + <?php foreach ( get_taxonomies() as $taxonomy ) : $tax = get_taxonomy($taxonomy); if ( !$tax->show_tagcloud || empty($tax->labels->name) ) continue; diff --git a/wp-includes/deprecated.php b/wp-includes/deprecated.php index 1ccddba34..43523ca69 100644 --- a/wp-includes/deprecated.php +++ b/wp-includes/deprecated.php @@ -2029,7 +2029,6 @@ function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) if ( $innerHTML = get_attachment_icon($post->ID, $fullsize, $max_dims)) return $innerHTML; - $innerHTML = esc_attr($post->post_title); return apply_filters('attachment_innerHTML', $innerHTML, $post->ID); @@ -2129,7 +2128,6 @@ function wp_specialchars( $string, $quote_style = ENT_NOQUOTES, $charset = false } } - /** * Escaping for HTML attributes. * @@ -2566,7 +2564,7 @@ function is_term( $term, $taxonomy = '', $parent = 0 ) { * Is the current admin page generated by a plugin? * * @since 1.5.0 - * @deprecated 3.1 + * @deprecated 3.1.0 * @deprecated Use global $plugin_page and/or get_plugin_page_hookname() hooks. * * @global $plugin_page @@ -2592,7 +2590,7 @@ function is_plugin_page() { * for updating the category cache. * * @since 1.5.0 - * @deprecated 3.1 + * @deprecated 3.1.0 * * @return bool Always return True */ @@ -2606,7 +2604,7 @@ function update_category_cache() { * Check for PHP timezone support * * @since 2.9.0 - * @deprecated 3.2 + * @deprecated 3.2.0 * * @return bool */ @@ -2620,7 +2618,9 @@ function wp_timezone_supported() { * Display editor: TinyMCE, HTML, or both. * * @since 2.1.0 - * @deprecated 3.3 + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() * * @param string $content Textarea content. * @param string $id Optional, default is 'content'. HTML ID attribute value. @@ -2629,6 +2629,7 @@ function wp_timezone_supported() { * @param int $tab_index Optional, not used */ function the_editor($content, $id = 'content', $prev_id = 'title', $media_buttons = true, $tab_index = 2, $extended = true) { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); wp_editor( $content, $id, array( 'media_buttons' => $media_buttons ) ); return; @@ -2638,6 +2639,8 @@ function the_editor($content, $id = 'content', $prev_id = 'title', $media_button * Perform the query to get the $metavalues array(s) needed by _fill_user and _fill_many_users * * @since 3.0.0 + * @deprecated 3.3.0 + * * @param array $ids User ID numbers list. * @return array of arrays. The array is indexed by user_id, containing $metavalues object arrays. */ @@ -2670,7 +2673,6 @@ function get_user_metavalues($ids) { * * @since 2.3.0 * @deprecated 3.3.0 - * @uses sanitize_user_field() Used to sanitize the fields. * * @param object|array $user The User Object or Array * @param string $context Optional, default is 'display'. How to sanitize user fields. @@ -2707,7 +2709,7 @@ function sanitize_user_object($user, $context = 'display') { * Can either be start or end post relational link. * * @since 2.8.0 - * @deprecated 3.3 + * @deprecated 3.3.0 * * @param string $title Optional. Link title format. * @param bool $in_same_cat Optional. Whether link should be in a same category. @@ -2747,7 +2749,7 @@ function get_boundary_post_rel_link($title = '%title', $in_same_cat = false, $ex * Display relational link for the first post. * * @since 2.8.0 - * @deprecated 3.3 + * @deprecated 3.3.0 * * @param string $title Optional. Link title format. * @param bool $in_same_cat Optional. Whether link should be in a same category. @@ -2763,7 +2765,7 @@ function start_post_rel_link($title = '%title', $in_same_cat = false, $excluded_ * Get site index relational link. * * @since 2.8.0 - * @deprecated 3.3 + * @deprecated 3.3.0 * * @return string */ @@ -2778,7 +2780,7 @@ function get_index_rel_link() { * Display relational link for the site index. * * @since 2.8.0 - * @deprecated 3.3 + * @deprecated 3.3.0 */ function index_rel_link() { _deprecated_function( __FUNCTION__, '3.3' ); @@ -2790,7 +2792,7 @@ function index_rel_link() { * Get parent post relational link. * * @since 2.8.0 - * @deprecated 3.3 + * @deprecated 3.3.0 * * @param string $title Optional. Link title format. * @return string @@ -2821,7 +2823,7 @@ function get_parent_post_rel_link($title = '%title') { * Display relational link for parent item * * @since 2.8.0 - * @deprecated 3.3 + * @deprecated 3.3.0 */ function parent_post_rel_link($title = '%title') { _deprecated_function( __FUNCTION__, '3.3' ); @@ -2833,7 +2835,7 @@ function parent_post_rel_link($title = '%title') { * Add the "Dashboard"/"Visit Site" menu. * * @since 3.2.0 - * @deprecated 3.3 + * @deprecated 3.3.0 */ function wp_admin_bar_dashboard_view_site_menu( $wp_admin_bar ) { _deprecated_function( __FUNCTION__, '3.3' ); @@ -2854,7 +2856,7 @@ function wp_admin_bar_dashboard_view_site_menu( $wp_admin_bar ) { * Checks if the current user belong to a given blog. * * @since MU - * @deprecated 3.3 + * @deprecated 3.3.0 * @deprecated Use is_user_member_of_blog() * @see is_user_member_of_blog() * @@ -2866,3 +2868,291 @@ function is_blog_user( $blog_id = 0 ) { return is_user_member_of_blog( get_current_user_id(), $blog_id ); } + +/** + * Open the file handle for debugging. + * + * @since 0.71 + * @deprecated Use error_log() + * @link http://www.php.net/manual/en/function.error-log.php + * @deprecated 3.4.0 + */ +function debug_fopen( $filename, $mode ) { + _deprecated_function( __FUNCTION__, 'error_log()' ); + return false; +} + +/** + * Write contents to the file used for debugging. + * + * @since 0.71 + * @deprecated Use error_log() instead. + * @link http://www.php.net/manual/en/function.error-log.php + * @deprecated 3.4.0 + */ +function debug_fwrite( $fp, $string ) { + _deprecated_function( __FUNCTION__, 'error_log()' ); + if ( ! empty( $GLOBALS['debug'] ) ) + error_log( $string ); +} + +/** + * Close the debugging file handle. + * + * @since 0.71 + * @deprecated Use error_log() + * @link http://www.php.net/manual/en/function.error-log.php + * @deprecated 3.4.0 + */ +function debug_fclose( $fp ) { + _deprecated_function( __FUNCTION__, 'error_log()' ); +} + +/** + * Retrieve list of themes with theme data in theme directory. + * + * The theme is broken, if it doesn't have a parent theme and is missing either + * style.css and, or index.php. If the theme has a parent theme then it is + * broken, if it is missing style.css; index.php is optional. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_themes() + * @see wp_get_themes() + * + * @return array Theme list with theme data. + */ +function get_themes() { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_themes()' ); + + global $wp_themes; + if ( isset( $wp_themes ) ) + return $wp_themes; + + $themes = wp_get_themes(); + $wp_themes = array(); + + foreach ( $themes as $theme ) { + $name = $theme->get('Name'); + if ( isset( $wp_themes[ $name ] ) ) + $wp_themes[ $name . '/' . $theme->get_stylesheet() ] = $theme; + else + $wp_themes[ $name ] = $theme; + } + + return $wp_themes; +} + +/** + * Retrieve theme data. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_theme() + * @see wp_get_theme() + * + * @param string $theme Theme name. + * @return array|null Null, if theme name does not exist. Theme data, if exists. + */ +function get_theme( $theme ) { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme( $stylesheet )' ); + + $themes = get_themes(); + if ( is_array( $themes ) && array_key_exists( $theme, $themes ) ) + return $themes[ $theme ]; + return null; +} + +/** + * Retrieve current theme name. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use (string) wp_get_theme() + * @see wp_get_theme() + * + * @return string + */ +function get_current_theme() { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' ); + + if ( $theme = get_option( 'current_theme' ) ) + return $theme; + + return wp_get_theme()->get('Name'); +} + +/** + * Accepts matches array from preg_replace_callback in wpautop() or a string. + * + * Ensures that the contents of a <<pre>>...<</pre>> HTML block are not + * converted into paragraphs or line-breaks. + * + * @since 1.2.0 + * @deprecated 3.4.0 + * + * @param array|string $matches The array or string + * @return string The pre block without paragraph/line-break conversion. + */ +function clean_pre($matches) { + _deprecated_function( __FUNCTION__, '3.4' ); + + if ( is_array($matches) ) + $text = $matches[1] . $matches[2] . "</pre>"; + else + $text = $matches; + + $text = str_replace(array('<br />', '<br/>', '<br>'), array('', '', ''), $text); + $text = str_replace('<p>', "\n", $text); + $text = str_replace('</p>', '', $text); + + return $text; +} + + +/** + * Add callbacks for image header display. + * + * @since 2.1.0 + * @deprecated 3.4.0 + * @deprecated Use add_theme_support('custom-header', $args) + * @see add_theme_support() + * + * @param callback $wp_head_callback Call on 'wp_head' action. + * @param callback $admin_head_callback Call on custom header administration screen. + * @param callback $admin_preview_callback Output a custom header image div on the custom header administration screen. Optional. + */ +function add_custom_image_header( $wp_head_callback, $admin_head_callback, $admin_preview_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.4', 'add_theme_support( \'custom-header\', $args )' ); + $args = array( + 'wp-head-callback' => $wp_head_callback, + 'admin-head-callback' => $admin_head_callback, + ); + if ( $admin_preview_callback ) + $args['admin-preview-callback'] = $admin_preview_callback; + return add_theme_support( 'custom-header', $args ); +} + +/** + * Remove image header support. + * + * @since 3.1.0 + * @deprecated 3.4.0 + * @deprecated Use remove_theme_support('custom-header') + * @see remove_theme_support() + * + * @return bool Whether support was removed. + */ +function remove_custom_image_header() { + _deprecated_function( __FUNCTION__, '3.4', 'remove_theme_support( \'custom-header\' )' ); + return remove_theme_support( 'custom-header' ); +} + +/** + * Add callbacks for background image display. + * + * @since 3.0.0 + * @deprecated 3.4.0 + * @deprecated Use add_theme_support('custom-background, $args) + * @see add_theme_support() + * + * @param callback $wp_head_callback Call on 'wp_head' action. + * @param callback $admin_head_callback Call on custom background administration screen. + * @param callback $admin_preview_callback Output a custom background image div on the custom background administration screen. Optional. + */ +function add_custom_background( $wp_head_callback = '', $admin_head_callback = '', $admin_preview_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.4', 'add_theme_support( \'custom-background\', $args )' ); + $args = array(); + if ( $wp_head_callback ) + $args['wp-head-callback'] = $wp_head_callback; + if ( $admin_head_callback ) + $args['admin-head-callback'] = $admin_head_callback; + if ( $admin_preview_callback ) + $args['admin-preview-callback'] = $admin_preview_callback; + return add_theme_support( 'custom-background', $args ); +} + +/** + * Remove custom background support. + * + * @since 3.1.0 + * @see add_custom_background() + * + * @return bool Whether support was removed. + */ +function remove_custom_background() { + _deprecated_function( __FUNCTION__, '3.4', 'remove_theme_support( \'custom-background\' )' ); + return remove_theme_support( 'custom-background' ); +} + +/** + * Retrieve theme data from parsed theme file. + * + * @since 1.5.0 + * @deprecated 3.4.0 + * @deprecated Use wp_get_theme() + * @see wp_get_theme() + * + * @param string $theme_file Theme file path. + * @return array Theme data. + */ +function get_theme_data( $theme_file ) { + _deprecated_function( __FUNCTION__, 3.4, 'wp_get_theme()' ); + $theme = new WP_Theme( basename( dirname( $theme_file ) ), dirname( dirname( $theme_file ) ) ); + + $theme_data = array( + 'Name' => $theme->get('Name'), + 'URI' => $theme->display('ThemeURI', true, false), + 'Description' => $theme->display('Description', true, false), + 'Author' => $theme->display('Author', true, false), + 'AuthorURI' => $theme->display('AuthorURI', true, false), + 'Version' => $theme->get('Version'), + 'Template' => $theme->get('Template'), + 'Status' => $theme->get('Status'), + 'Tags' => $theme->get('Tags'), + 'Title' => $theme->get('Name'), + 'AuthorName' => $theme->get('Author'), + ); + + foreach ( apply_filters( 'extra_theme_headers', array() ) as $extra_header ) { + if ( ! isset( $theme_data[ $extra_header ] ) ) + $theme_data[ $extra_header ] = $theme->get( $extra_header ); + } + + return $theme_data; +} + +/** + * Alias of update_post_cache(). + * + * @see update_post_cache() Posts and pages are the same, alias is intentional + * + * @since 1.5.1 + * @deprecated 3.4.0 + * + * @param array $pages list of page objects + */ +function update_page_cache( &$pages ) { + _deprecated_function( __FUNCTION__, 3.4, 'update_post_cache()' ); + + update_post_cache( $pages ); +} + +/** + * Will clean the page in the cache. + * + * Clean (read: delete) page from cache that matches $id. Will also clean cache + * associated with 'all_page_ids' and 'get_pages'. + * + * @since 2.0.0 + * @deprecated 3.4.0 + * + * @uses do_action() Will call the 'clean_page_cache' hook action. + * + * @param int $id Page ID to clean + */ +function clean_page_cache( $id ) { + _deprecated_function( __FUNCTION__, 3.4, 'clean_post_cache()' ); + + clean_post_cache( $id ); +} diff --git a/wp-includes/feed-atom-comments.php b/wp-includes/feed-atom-comments.php index aca98bdb3..94e89f52c 100644 --- a/wp-includes/feed-atom-comments.php +++ b/wp-includes/feed-atom-comments.php @@ -10,7 +10,7 @@ echo '<?xml version="1.0" encoding="' . get_option('blog_charset') . '" ?' . '>' ?> <feed xmlns="http://www.w3.org/2005/Atom" - xml:lang="<?php echo get_option('rss_language'); ?>" + xml:lang="<?php bloginfo_rss( 'language' ); ?>" xmlns:thr="http://purl.org/syndication/thread/1.0" <?php do_action('atom_ns'); do_action('atom_comments_ns'); ?> > diff --git a/wp-includes/feed-atom.php b/wp-includes/feed-atom.php index db8d66b80..f8f08c87e 100644 --- a/wp-includes/feed-atom.php +++ b/wp-includes/feed-atom.php @@ -12,7 +12,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" - xml:lang="<?php echo get_option('rss_language'); ?>" + xml:lang="<?php bloginfo_rss( 'language' ); ?>" xml:base="<?php bloginfo_rss('url') ?>/wp-atom.php" <?php do_action('atom_ns'); ?> > diff --git a/wp-includes/feed-rss.php b/wp-includes/feed-rss.php index b26897d3e..2e6c93384 100644 --- a/wp-includes/feed-rss.php +++ b/wp-includes/feed-rss.php @@ -16,7 +16,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?> <description><?php bloginfo_rss('description') ?></description> <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate> <docs>http://backend.userland.com/rss092</docs> - <language><?php echo get_option('rss_language'); ?></language> + <language><?php bloginfo_rss( 'language' ); ?></language> <?php do_action('rss_head'); ?> <?php while (have_posts()) : the_post(); ?> diff --git a/wp-includes/feed-rss2.php b/wp-includes/feed-rss2.php index 5bf67f2f7..8fc51d55a 100644 --- a/wp-includes/feed-rss2.php +++ b/wp-includes/feed-rss2.php @@ -26,7 +26,7 @@ echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?> <link><?php bloginfo_rss('url') ?></link> <description><?php bloginfo_rss("description") ?></description> <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate> - <language><?php echo get_option('rss_language'); ?></language> + <language><?php bloginfo_rss( 'language' ); ?></language> <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod> <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency> <?php do_action('rss2_head'); ?> diff --git a/wp-includes/feed.php b/wp-includes/feed.php index 34d8652b2..988f6b22c 100644 --- a/wp-includes/feed.php +++ b/wp-includes/feed.php @@ -424,7 +424,7 @@ function atom_enclosure() { foreach ( (array) get_post_custom() as $key => $val ) { if ($key == 'enclosure') { foreach ( (array) $val as $enc ) { - $enclosure = split("\n", $enc); + $enclosure = explode("\n", $enc); echo apply_filters('atom_enclosure', '<link href="' . trim(htmlspecialchars($enclosure[0])) . '" rel="enclosure" length="' . trim($enclosure[1]) . '" type="' . trim($enclosure[2]) . '" />' . "\n"); } } @@ -489,8 +489,7 @@ function self_link() { $host = @parse_url(home_url()); $host = $host['host']; echo esc_url( - 'http' - . ( (isset($_SERVER['https']) && $_SERVER['https'] == 'on') ? 's' : '' ) . '://' + ( is_ssl() ? 'https' : 'http' ) . '://' . $host . stripslashes($_SERVER['REQUEST_URI']) ); diff --git a/wp-includes/formatting.php b/wp-includes/formatting.php index d43e848fe..f69c9382b 100644 --- a/wp-includes/formatting.php +++ b/wp-includes/formatting.php @@ -28,18 +28,33 @@ */ function wptexturize($text) { global $wp_cockneyreplace; - static $opening_quote, $closing_quote, $en_dash, $em_dash, $default_no_texturize_tags, $default_no_texturize_shortcodes, $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements; + static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements, + $default_no_texturize_tags, $default_no_texturize_shortcodes; // No need to set up these static variables more than once - if ( empty( $opening_quote ) ) { - /* translators: opening curly quote */ - $opening_quote = _x('“', 'opening curly quote'); - /* translators: closing curly quote */ - $closing_quote = _x('”', 'closing curly quote'); + if ( ! isset( $static_characters ) ) { + /* translators: opening curly double quote */ + $opening_quote = _x( '“', 'opening curly double quote' ); + /* translators: closing curly double quote */ + $closing_quote = _x( '”', 'closing curly double quote' ); + + /* translators: apostrophe, for example in 'cause or can't */ + $apos = _x( '’', 'apostrophe' ); + + /* translators: prime, for example in 9' (nine feet) */ + $prime = _x( '′', 'prime' ); + /* translators: double prime, for example in 9" (nine inches) */ + $double_prime = _x( '″', 'double prime' ); + + /* translators: opening curly single quote */ + $opening_single_quote = _x( '‘', 'opening curly single quote' ); + /* translators: closing curly single quote */ + $closing_single_quote = _x( '’', 'closing curly single quote' ); + /* translators: en dash */ - $en_dash = _x('–', 'en dash'); + $en_dash = _x( '–', 'en dash' ); /* translators: em dash */ - $em_dash = _x('—', 'em dash'); + $em_dash = _x( '—', 'em dash' ); $default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt'); $default_no_texturize_shortcodes = array('code'); @@ -48,16 +63,40 @@ function wptexturize($text) { if ( isset($wp_cockneyreplace) ) { $cockney = array_keys($wp_cockneyreplace); $cockneyreplace = array_values($wp_cockneyreplace); + } elseif ( "'" != $apos ) { // Only bother if we're doing a replacement. + $cockney = array( "'tain't", "'twere", "'twas", "'tis", "'twill", "'til", "'bout", "'nuff", "'round", "'cause" ); + $cockneyreplace = array( $apos . "tain" . $apos . "t", $apos . "twere", $apos . "twas", $apos . "tis", $apos . "twill", $apos . "til", $apos . "bout", $apos . "nuff", $apos . "round", $apos . "cause" ); } else { - $cockney = array("'tain't","'twere","'twas","'tis","'twill","'til","'bout","'nuff","'round","'cause"); - $cockneyreplace = array("’tain’t","’twere","’twas","’tis","’twill","’til","’bout","’nuff","’round","’cause"); + $cockney = $cockneyreplace = array(); } - $static_characters = array_merge( array('---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'\'', ' (tm)'), $cockney ); - $static_replacements = array_merge( array($em_dash, ' ' . $em_dash . ' ', $en_dash, ' ' . $en_dash . ' ', 'xn--', '…', $opening_quote, $closing_quote, ' ™'), $cockneyreplace ); + $static_characters = array_merge( array( '---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'\'', ' (tm)' ), $cockney ); + $static_replacements = array_merge( array( $em_dash, ' ' . $em_dash . ' ', $en_dash, ' ' . $en_dash . ' ', 'xn--', '…', $opening_quote, $closing_quote, ' ™' ), $cockneyreplace ); - $dynamic_characters = array('/\'(\d\d(?:’|\')?s)/', '/\'(\d)/', '/(\s|\A|[([{<]|")\'/', '/(\d)"/', '/(\d)\'/', '/(\S)\'([^\'\s])/', '/(\s|\A|[([{<])"(?!\s)/', '/"(\s|\S|\Z)/', '/\'([\s.]|\Z)/', '/\b(\d+)x(\d+)\b/'); - $dynamic_replacements = array('’$1','’$1', '$1‘', '$1″', '$1′', '$1’$2', '$1' . $opening_quote . '$2', $closing_quote . '$1', '’$1', '$1×$2'); + $dynamic = array(); + if ( "'" != $apos ) { + $dynamic[ '/\'(\d\d(?:’|\')?s)/' ] = $apos . '$1'; // '99's + $dynamic[ '/\'(\d)/' ] = $apos . '$1'; // '99 + } + if ( "'" != $opening_single_quote ) + $dynamic[ '/(\s|\A|[([{<]|")\'/' ] = '$1' . $opening_single_quote; // opening single quote, even after (, {, <, [ + if ( '"' != $double_prime ) + $dynamic[ '/(\d)"/' ] = '$1' . $double_prime; // 9" (double prime) + if ( "'" != $prime ) + $dynamic[ '/(\d)\'/' ] = '$1' . $prime; // 9' (prime) + if ( "'" != $apos ) + $dynamic[ '/(\S)\'([^\'\s])/' ] = '$1' . $apos . '$2'; // apostrophe in a word + if ( '"' != $opening_quote ) + $dynamic[ '/(\s|\A|[([{<])"(?!\s)/' ] = '$1' . $opening_quote . '$2'; // opening double quote, even after (, {, <, [ + if ( '"' != $closing_quote ) + $dynamic[ '/"(\s|\S|\Z)/' ] = $closing_quote . '$1'; // closing double quote + if ( "'" != $closing_single_quote ) + $dynamic[ '/\'([\s.]|\Z)/' ] = $closing_single_quote . '$1'; // closing single quote + + $dynamic[ '/\b(\d+)x(\d+)\b/' ] = '$1×$2'; // 9x9 (times) + + $dynamic_characters = array_keys( $dynamic ); + $dynamic_replacements = array_values( $dynamic ); } // Transform into regexp sub-expression used in _wptexturize_pushpop_element @@ -133,30 +172,6 @@ function _wptexturize_pushpop_element($text, &$stack, $disabled_elements, $openi } } -/** - * Accepts matches array from preg_replace_callback in wpautop() or a string. - * - * Ensures that the contents of a <<pre>>...<</pre>> HTML block are not - * converted into paragraphs or line-breaks. - * - * @since 1.2.0 - * - * @param array|string $matches The array or string - * @return string The pre block without paragraph/line-break conversion. - */ -function clean_pre($matches) { - if ( is_array($matches) ) - $text = $matches[1] . $matches[2] . "</pre>"; - else - $text = $matches; - - $text = str_replace('<br />', '', $text); - $text = str_replace('<p>', "\n", $text); - $text = str_replace('</p>', '', $text); - - return $text; -} - /** * Replaces double line-breaks with paragraph elements. * @@ -168,17 +183,45 @@ function clean_pre($matches) { * @since 0.71 * * @param string $pee The text which has to be formatted. - * @param int|bool $br Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true. + * @param bool $br Optional. If set, this will convert all remaining line-breaks after paragraphing. Default true. * @return string Text which has been converted into correct paragraph tags. */ -function wpautop($pee, $br = 1) { +function wpautop($pee, $br = true) { + $pre_tags = array(); if ( trim($pee) === '' ) return ''; + $pee = $pee . "\n"; // just to make things a little easier, pad the end + + if ( strpos($pee, '<pre') !== false ) { + $pee_parts = explode( '</pre>', $pee ); + $last_pee = array_pop($pee_parts); + $pee = ''; + $i = 0; + + foreach ( $pee_parts as $pee_part ) { + $start = strpos($pee_part, '<pre'); + + // Malformed html? + if ( $start === false ) { + $pee .= $pee_part; + continue; + } + + $name = "<pre wp-pre-tag-$i></pre>"; + $pre_tags[$name] = substr( $pee_part, $start ) . '</pre>'; + + $pee .= substr( $pee_part, 0, $start ) . $name; + $i++; + } + + $pee .= $last_pee; + } + $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee); // Space things out a little - $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; + $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|option|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee); $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee); $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines @@ -200,17 +243,18 @@ function wpautop($pee, $br = 1) { $pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee); $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee); $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); - if ($br) { + if ( $br ) { $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee); $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks $pee = str_replace('<WPPreserveNewline />', "\n", $pee); } $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee); $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee); - if (strpos($pee, '<pre') !== false) - $pee = preg_replace_callback('!(<pre[^>]*>)(.*?)</pre>!is', 'clean_pre', $pee ); $pee = preg_replace( "|\n</p>$|", '</p>', $pee ); + if ( !empty($pre_tags) ) + $pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee); + return $pee; } @@ -671,7 +715,62 @@ function remove_accents($string) { // Euro Sign chr(226).chr(130).chr(172) => 'E', // GBP (Pound) Sign - chr(194).chr(163) => ''); + chr(194).chr(163) => '', + // Vowels with diacritic (Vietnamese) + // unmarked + chr(198).chr(160) => 'O', chr(198).chr(161) => 'o', + chr(198).chr(175) => 'U', chr(198).chr(176) => 'u', + // grave accent + chr(225).chr(186).chr(166) => 'A', chr(225).chr(186).chr(167) => 'a', + chr(225).chr(186).chr(176) => 'A', chr(225).chr(186).chr(177) => 'a', + chr(225).chr(187).chr(128) => 'E', chr(225).chr(187).chr(129) => 'e', + chr(225).chr(187).chr(146) => 'O', chr(225).chr(187).chr(147) => 'o', + chr(225).chr(187).chr(156) => 'O', chr(225).chr(187).chr(157) => 'o', + chr(225).chr(187).chr(170) => 'U', chr(225).chr(187).chr(171) => 'u', + chr(225).chr(187).chr(178) => 'Y', chr(225).chr(187).chr(179) => 'y', + // hook + chr(225).chr(186).chr(162) => 'A', chr(225).chr(186).chr(163) => 'a', + chr(225).chr(186).chr(168) => 'A', chr(225).chr(186).chr(169) => 'a', + chr(225).chr(186).chr(178) => 'A', chr(225).chr(186).chr(179) => 'a', + chr(225).chr(186).chr(186) => 'E', chr(225).chr(186).chr(187) => 'e', + chr(225).chr(187).chr(130) => 'E', chr(225).chr(187).chr(131) => 'e', + chr(225).chr(187).chr(136) => 'I', chr(225).chr(187).chr(137) => 'i', + chr(225).chr(187).chr(142) => 'O', chr(225).chr(187).chr(143) => 'o', + chr(225).chr(187).chr(148) => 'O', chr(225).chr(187).chr(149) => 'o', + chr(225).chr(187).chr(158) => 'O', chr(225).chr(187).chr(159) => 'o', + chr(225).chr(187).chr(166) => 'U', chr(225).chr(187).chr(167) => 'u', + chr(225).chr(187).chr(172) => 'U', chr(225).chr(187).chr(173) => 'u', + chr(225).chr(187).chr(182) => 'Y', chr(225).chr(187).chr(183) => 'y', + // tilde + chr(225).chr(186).chr(170) => 'A', chr(225).chr(186).chr(171) => 'a', + chr(225).chr(186).chr(180) => 'A', chr(225).chr(186).chr(181) => 'a', + chr(225).chr(186).chr(188) => 'E', chr(225).chr(186).chr(189) => 'e', + chr(225).chr(187).chr(132) => 'E', chr(225).chr(187).chr(133) => 'e', + chr(225).chr(187).chr(150) => 'O', chr(225).chr(187).chr(151) => 'o', + chr(225).chr(187).chr(160) => 'O', chr(225).chr(187).chr(161) => 'o', + chr(225).chr(187).chr(174) => 'U', chr(225).chr(187).chr(175) => 'u', + chr(225).chr(187).chr(184) => 'Y', chr(225).chr(187).chr(185) => 'y', + // acute accent + chr(225).chr(186).chr(164) => 'A', chr(225).chr(186).chr(165) => 'a', + chr(225).chr(186).chr(174) => 'A', chr(225).chr(186).chr(175) => 'a', + chr(225).chr(186).chr(190) => 'E', chr(225).chr(186).chr(191) => 'e', + chr(225).chr(187).chr(144) => 'O', chr(225).chr(187).chr(145) => 'o', + chr(225).chr(187).chr(154) => 'O', chr(225).chr(187).chr(155) => 'o', + chr(225).chr(187).chr(168) => 'U', chr(225).chr(187).chr(169) => 'u', + // dot below + chr(225).chr(186).chr(160) => 'A', chr(225).chr(186).chr(161) => 'a', + chr(225).chr(186).chr(172) => 'A', chr(225).chr(186).chr(173) => 'a', + chr(225).chr(186).chr(182) => 'A', chr(225).chr(186).chr(183) => 'a', + chr(225).chr(186).chr(184) => 'E', chr(225).chr(186).chr(185) => 'e', + chr(225).chr(187).chr(134) => 'E', chr(225).chr(187).chr(135) => 'e', + chr(225).chr(187).chr(138) => 'I', chr(225).chr(187).chr(139) => 'i', + chr(225).chr(187).chr(140) => 'O', chr(225).chr(187).chr(141) => 'o', + chr(225).chr(187).chr(152) => 'O', chr(225).chr(187).chr(153) => 'o', + chr(225).chr(187).chr(162) => 'O', chr(225).chr(187).chr(163) => 'o', + chr(225).chr(187).chr(164) => 'U', chr(225).chr(187).chr(165) => 'u', + chr(225).chr(187).chr(176) => 'U', chr(225).chr(187).chr(177) => 'u', + chr(225).chr(187).chr(180) => 'Y', chr(225).chr(187).chr(181) => 'y', + ); $string = strtr($string, $chars); } else { @@ -732,7 +831,7 @@ function sanitize_file_name( $filename ) { $extension = array_pop($parts); $mimes = get_allowed_mime_types(); - // Loop over any intermediate extensions. Munge them with a trailing underscore if they are a 2 - 5 character + // Loop over any intermediate extensions. Munge them with a trailing underscore if they are a 2 - 5 character // long alpha string not in the extension whitelist. foreach ( (array) $parts as $part) { $filename .= '.' . $part; @@ -873,16 +972,24 @@ function sanitize_title_with_dashes($title, $raw_title = '', $context = 'display $title = str_replace('.', '-', $title); if ( 'save' == $context ) { - // nbsp, ndash and mdash + // Convert nbsp, ndash and mdash to hyphens $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title ); - // iexcl and iquest - $title = str_replace( array( '%c2%a1', '%c2%bf' ), '', $title ); - // angle quotes - $title = str_replace( array( '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba' ), '', $title ); - // curly quotes - $title = str_replace( array( '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d' ), '', $title ); - // copy, reg, deg, hellip and trade - $title = str_replace( array( '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2' ), '', $title ); + + // Strip these characters entirely + $title = str_replace( array( + // iexcl and iquest + '%c2%a1', '%c2%bf', + // angle quotes + '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba', + // curly quotes + '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d', + '%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f', + // copy, reg, deg, hellip and trade + '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2', + ), '', $title ); + + // Convert times to x + $title = str_replace( '%c3%97', 'x', $title ); } $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); @@ -972,7 +1079,7 @@ function convert_chars($content, $deprecated = '') { '‹' => '‹', 'Œ' => 'Œ', '' => '', - 'Ž' => 'ž', + 'Ž' => 'Ž', '' => '', '' => '', '‘' => '‘', @@ -988,7 +1095,7 @@ function convert_chars($content, $deprecated = '') { '›' => '›', 'œ' => 'œ', '' => '', - 'ž' => '', + 'ž' => 'ž', 'Ÿ' => 'Ÿ' ); @@ -1012,14 +1119,12 @@ function convert_chars($content, $deprecated = '') { /** * Will only balance the tags if forced to and the option is set to balance tags. * - * The option 'use_balanceTags' is used for whether the tags will be balanced. - * Both the $force parameter and 'use_balanceTags' option will have to be true - * before the tags will be balanced. + * The option 'use_balanceTags' is used to determine whether the tags will be balanced. * * @since 0.71 * * @param string $text Text to be balanced - * @param bool $force Forces balancing, ignoring the value of the option. Default false. + * @param bool $force If true, forces balancing, ignoring the value of the option. Default false. * @return string Balanced text */ function balanceTags( $text, $force = false ) { @@ -1151,14 +1256,14 @@ function force_balance_tags( $text ) { /** * Acts on text which is about to be edited. * - * Unless $richedit is set, it is simply a holder for the 'format_to_edit' - * filter. If $richedit is set true htmlspecialchars(), through esc_textarea(), - * will be run on the content, converting special characters to HTML entities. + * The $content is run through esc_textarea(), which uses htmlspecialchars() + * to convert special characters to HTML entities. If $richedit is set to true, + * it is simply a holder for the 'format_to_edit' filter. * * @since 0.71 * * @param string $content The text about to be edited. - * @param bool $richedit Whether the $content should pass through htmlspecialchars(). Default false. + * @param bool $richedit Whether the $content should not pass through htmlspecialchars(). Default false (meaning it will be passed). * @return string The text after the filter (and possibly htmlspecialchars()) has been run. */ function format_to_edit( $content, $richedit = false ) { @@ -1297,8 +1402,6 @@ function stripslashes_deep($value) { /** * Navigates through an array and encodes the values to be used in a URL. * - * Uses a callback to pass the value of the array back to the function as a - * string. * * @since 2.2.0 * @@ -1310,6 +1413,18 @@ function urlencode_deep($value) { return $value; } +/** + * Navigates through an array and raw encodes the values to be used in a URL. + * + * @since 3.4.0 + * + * @param array|string $value The array or string to be encoded. + * @return array|string $value The encoded array (or string from the callback). + */ +function rawurlencode_deep( $value ) { + return is_array( $value ) ? array_map( 'rawurlencode_deep', $value ) : rawurlencode( $value ); +} + /** * Converts email addresses characters to HTML entities to block spam bots. * @@ -2012,6 +2127,10 @@ function wp_trim_excerpt($text = '') { /** * Trims text to a certain number of words. * + * This function is localized. For languages that count 'words' by the individual + * character (such as East Asian languages), the $num_words argument will apply + * to the number of individual characters. + * * @since 3.3.0 * * @param string $text Text to trim. @@ -2024,13 +2143,23 @@ function wp_trim_words( $text, $num_words = 55, $more = null ) { $more = __( '…' ); $original_text = $text; $text = wp_strip_all_tags( $text ); - $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY ); + /* translators: If your word count is based on single characters (East Asian characters), + enter 'characters'. Otherwise, enter 'words'. Do not translate into your own language. */ + if ( 'characters' == _x( 'words', 'word count: words or characters?' ) && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) { + $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' ); + preg_match_all( '/./u', $text, $words_array ); + $words_array = array_slice( $words_array[0], 0, $num_words + 1 ); + $sep = ''; + } else { + $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY ); + $sep = ' '; + } if ( count( $words_array ) > $num_words ) { array_pop( $words_array ); - $text = implode( ' ', $words_array ); + $text = implode( $sep, $words_array ); $text = $text . $more; } else { - $text = implode( ' ', $words_array ); + $text = implode( $sep, $words_array ); } return apply_filters( 'wp_trim_words', $text, $num_words, $more, $original_text ); } @@ -2593,21 +2722,13 @@ function wp_make_link_relative( $link ) { function sanitize_option($option, $value) { switch ( $option ) { - case 'admin_email': - $value = sanitize_email($value); - if ( !is_email($value) ) { + case 'admin_email' : + case 'new_admin_email' : + $value = sanitize_email( $value ); + if ( ! is_email( $value ) ) { $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization - if ( function_exists('add_settings_error') ) - add_settings_error('admin_email', 'invalid_admin_email', __('The email address entered did not appear to be a valid email address. Please enter a valid email address.')); - } - break; - - case 'new_admin_email': - $value = sanitize_email($value); - if ( !is_email($value) ) { - $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization - if ( function_exists('add_settings_error') ) - add_settings_error('new_admin_email', 'invalid_admin_email', __('The email address entered did not appear to be a valid email address. Please enter a valid email address.')); + if ( function_exists( 'add_settings_error' ) ) + add_settings_error( $option, 'invalid_admin_email', __( 'The email address entered did not appear to be a valid email address. Please enter a valid email address.' ) ); } break; @@ -2947,9 +3068,9 @@ function _links_add_base($m) { global $_links_add_base; //1 = attribute name 2 = quotation mark 3 = URL return $m[1] . '=' . $m[2] . - (strpos($m[3], 'http://') === false ? - path_join($_links_add_base, $m[3]) : - $m[3]) + ( preg_match( '#^(\w{1,20}):#', $m[3], $protocol ) && in_array( $protocol[1], wp_allowed_protocols() ) ? + $m[3] : + path_join( $_links_add_base, $m[3] ) ) . $m[2]; } @@ -3015,7 +3136,7 @@ function wp_strip_all_tags($string, $remove_breaks = false) { if ( $remove_breaks ) $string = preg_replace('/[\r\n\t ]+/', ' ', $string); - return trim($string); + return trim( $string ); } /** @@ -3106,4 +3227,21 @@ function sanitize_mime_type( $mime_type ) { return apply_filters( 'sanitize_mime_type', $sani_mime_type, $mime_type ); } -?> +/** + * Sanitize space or carriage return separated URLs that are used to send trackbacks. + * + * @since 3.4.0 + * + * @param string $to_ping Space or carriage return separated URLs + * @return string URLs starting with the http or https protocol, separated by a carriage return. + */ +function sanitize_trackback_urls( $to_ping ) { + $urls_to_ping = preg_split( '/\r\n\t /', trim( $to_ping ), -1, PREG_SPLIT_NO_EMPTY ); + foreach ( $urls_to_ping as $k => $url ) { + if ( !preg_match( '#^https?://.#i', $url ) ) + unset( $urls_to_ping[$k] ); + } + $urls_to_ping = array_map( 'esc_url_raw', $urls_to_ping ); + $urls_to_ping = implode( "\n", $urls_to_ping ); + return apply_filters( 'sanitize_trackback_urls', $urls_to_ping, $to_ping ); +} diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 521b0dd01..24e1a29c8 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -5,40 +5,40 @@ * @package WordPress */ +require( ABSPATH . WPINC . '/option.php' ); + /** - * Converts MySQL DATETIME field to user specified date format. + * Converts given date string into a different format. * - * If $dateformatstring has 'G' value, then gmmktime() function will be used to - * make the time. If $dateformatstring is set to 'U', then mktime() function - * will be used to make the time. + * $format should be either a PHP date format string, e.g. 'U' for a Unix + * timestamp, or 'G' for a Unix timestamp assuming that $date is GMT. * - * The $translate will only be used, if it is set to true and it is by default - * and if the $wp_locale object has the month and weekday set. + * If $translate is true then the given date and format string will + * be passed to date_i18n() for translation. * * @since 0.71 * - * @param string $dateformatstring Either 'G', 'U', or php date format. - * @param string $mysqlstring Time from mysql DATETIME field. - * @param bool $translate Optional. Default is true. Will switch format to locale. - * @return string Date formatted by $dateformatstring or locale (if available). + * @param string $format Format of the date to return. + * @param string $date Date string to convert. + * @param bool $translate Whether the return date should be translated. Default is true. + * @return string|int Formatted date string, or Unix timestamp. */ -function mysql2date( $dateformatstring, $mysqlstring, $translate = true ) { - $m = $mysqlstring; - if ( empty( $m ) ) +function mysql2date( $format, $date, $translate = true ) { + if ( empty( $date ) ) return false; - if ( 'G' == $dateformatstring ) - return strtotime( $m . ' +0000' ); + if ( 'G' == $format ) + return strtotime( $date . ' +0000' ); - $i = strtotime( $m ); + $i = strtotime( $date ); - if ( 'U' == $dateformatstring ) + if ( 'U' == $format ) return $i; if ( $translate ) - return date_i18n( $dateformatstring, $i ); + return date_i18n( $format, $i ); else - return date( $dateformatstring, $i ); + return date( $format, $i ); } /** @@ -279,750 +279,28 @@ function is_serialized( $data ) { * Check whether serialized data is of string type. * * @since 2.0.5 - * - * @param mixed $data Serialized data - * @return bool False if not a serialized string, true if it is. - */ -function is_serialized_string( $data ) { - // if it isn't a string, it isn't a serialized string - if ( !is_string( $data ) ) - return false; - $data = trim( $data ); - $length = strlen( $data ); - if ( $length < 4 ) - return false; - elseif ( ':' !== $data[1] ) - return false; - elseif ( ';' !== $data[$length-1] ) - return false; - elseif ( $data[0] !== 's' ) - return false; - elseif ( '"' !== $data[$length-2] ) - return false; - else - return true; -} - -/** - * Retrieve option value based on name of option. - * - * If the option does not exist or does not have a value, then the return value - * will be false. This is useful to check whether you need to install an option - * and is commonly used during installation of plugin options and to test - * whether upgrading is required. - * - * If the option was serialized then it will be unserialized when it is returned. - * - * @since 1.5.0 - * @package WordPress - * @subpackage Option - * @uses apply_filters() Calls 'pre_option_$option' before checking the option. - * Any value other than false will "short-circuit" the retrieval of the option - * and return the returned value. You should not try to override special options, - * but you will not be prevented from doing so. - * @uses apply_filters() Calls 'option_$option', after checking the option, with - * the option value. - * - * @param string $option Name of option to retrieve. Expected to not be SQL-escaped. - * @param mixed $default Optional. Default value to return if the option does not exist. - * @return mixed Value set for the option. - */ -function get_option( $option, $default = false ) { - global $wpdb; - - // Allow plugins to short-circuit options. - $pre = apply_filters( 'pre_option_' . $option, false ); - if ( false !== $pre ) - return $pre; - - $option = trim($option); - if ( empty($option) ) - return false; - - if ( defined( 'WP_SETUP_CONFIG' ) ) - return false; - - if ( ! defined( 'WP_INSTALLING' ) ) { - // prevent non-existent options from triggering multiple queries - $notoptions = wp_cache_get( 'notoptions', 'options' ); - if ( isset( $notoptions[$option] ) ) - return $default; - - $alloptions = wp_load_alloptions(); - - if ( isset( $alloptions[$option] ) ) { - $value = $alloptions[$option]; - } else { - $value = wp_cache_get( $option, 'options' ); - - if ( false === $value ) { - $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) ); - - // Has to be get_row instead of get_var because of funkiness with 0, false, null values - if ( is_object( $row ) ) { - $value = $row->option_value; - wp_cache_add( $option, $value, 'options' ); - } else { // option does not exist, so we must cache its non-existence - $notoptions[$option] = true; - wp_cache_set( 'notoptions', $notoptions, 'options' ); - return $default; - } - } - } - } else { - $suppress = $wpdb->suppress_errors(); - $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) ); - $wpdb->suppress_errors( $suppress ); - if ( is_object( $row ) ) - $value = $row->option_value; - else - return $default; - } - - // If home is not set use siteurl. - if ( 'home' == $option && '' == $value ) - return get_option( 'siteurl' ); - - if ( in_array( $option, array('siteurl', 'home', 'category_base', 'tag_base') ) ) - $value = untrailingslashit( $value ); - - return apply_filters( 'option_' . $option, maybe_unserialize( $value ) ); -} - -/** - * Protect WordPress special option from being modified. - * - * Will die if $option is in protected list. Protected options are 'alloptions' - * and 'notoptions' options. - * - * @since 2.2.0 - * @package WordPress - * @subpackage Option - * - * @param string $option Option name. - */ -function wp_protect_special_option( $option ) { - $protected = array( 'alloptions', 'notoptions' ); - if ( in_array( $option, $protected ) ) - wp_die( sprintf( __( '%s is a protected WP option and may not be modified' ), esc_html( $option ) ) ); -} - -/** - * Print option value after sanitizing for forms. - * - * @uses attr Sanitizes value. - * @since 1.5.0 - * @package WordPress - * @subpackage Option - * - * @param string $option Option name. - */ -function form_option( $option ) { - echo esc_attr( get_option( $option ) ); -} - -/** - * Loads and caches all autoloaded options, if available or all options. - * - * @since 2.2.0 - * @package WordPress - * @subpackage Option - * - * @return array List of all options. - */ -function wp_load_alloptions() { - global $wpdb; - - if ( !defined( 'WP_INSTALLING' ) || !is_multisite() ) - $alloptions = wp_cache_get( 'alloptions', 'options' ); - else - $alloptions = false; - - if ( !$alloptions ) { - $suppress = $wpdb->suppress_errors(); - if ( !$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'" ) ) - $alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" ); - $wpdb->suppress_errors($suppress); - $alloptions = array(); - foreach ( (array) $alloptions_db as $o ) { - $alloptions[$o->option_name] = $o->option_value; - } - if ( !defined( 'WP_INSTALLING' ) || !is_multisite() ) - wp_cache_add( 'alloptions', $alloptions, 'options' ); - } - - return $alloptions; -} - -/** - * Loads and caches certain often requested site options if is_multisite() and a persistent cache is not being used. - * - * @since 3.0.0 - * @package WordPress - * @subpackage Option - * - * @param int $site_id Optional site ID for which to query the options. Defaults to the current site. - */ -function wp_load_core_site_options( $site_id = null ) { - global $wpdb, $_wp_using_ext_object_cache; - - if ( !is_multisite() || $_wp_using_ext_object_cache || defined( 'WP_INSTALLING' ) ) - return; - - if ( empty($site_id) ) - $site_id = $wpdb->siteid; - - $core_options = array('site_name', 'siteurl', 'active_sitewide_plugins', '_site_transient_timeout_theme_roots', '_site_transient_theme_roots', 'site_admins', 'can_compress_scripts', 'global_terms_enabled' ); - - $core_options_in = "'" . implode("', '", $core_options) . "'"; - $options = $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value FROM $wpdb->sitemeta WHERE meta_key IN ($core_options_in) AND site_id = %d", $site_id) ); - - foreach ( $options as $option ) { - $key = $option->meta_key; - $cache_key = "{$site_id}:$key"; - $option->meta_value = maybe_unserialize( $option->meta_value ); - - wp_cache_set( $cache_key, $option->meta_value, 'site-options' ); - } -} - -/** - * Update the value of an option that was already added. - * - * You do not need to serialize values. If the value needs to be serialized, then - * it will be serialized before it is inserted into the database. Remember, - * resources can not be serialized or added as an option. - * - * If the option does not exist, then the option will be added with the option - * value, but you will not be able to set whether it is autoloaded. If you want - * to set whether an option is autoloaded, then you need to use the add_option(). - * - * @since 1.0.0 - * @package WordPress - * @subpackage Option - * - * @uses apply_filters() Calls 'pre_update_option_$option' hook to allow overwriting the - * option value to be stored. - * @uses do_action() Calls 'update_option' hook before updating the option. - * @uses do_action() Calls 'update_option_$option' and 'updated_option' hooks on success. - * - * @param string $option Option name. Expected to not be SQL-escaped. - * @param mixed $newvalue Option value. Expected to not be SQL-escaped. - * @return bool False if value was not updated and true if value was updated. - */ -function update_option( $option, $newvalue ) { - global $wpdb; - - $option = trim($option); - if ( empty($option) ) - return false; - - wp_protect_special_option( $option ); - - if ( is_object($newvalue) ) - $newvalue = clone $newvalue; - - $newvalue = sanitize_option( $option, $newvalue ); - $oldvalue = get_option( $option ); - $newvalue = apply_filters( 'pre_update_option_' . $option, $newvalue, $oldvalue ); - - // If the new and old values are the same, no need to update. - if ( $newvalue === $oldvalue ) - return false; - - if ( false === $oldvalue ) - return add_option( $option, $newvalue ); - - $notoptions = wp_cache_get( 'notoptions', 'options' ); - if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) { - unset( $notoptions[$option] ); - wp_cache_set( 'notoptions', $notoptions, 'options' ); - } - - $_newvalue = $newvalue; - $newvalue = maybe_serialize( $newvalue ); - - do_action( 'update_option', $option, $oldvalue, $_newvalue ); - if ( ! defined( 'WP_INSTALLING' ) ) { - $alloptions = wp_load_alloptions(); - if ( isset( $alloptions[$option] ) ) { - $alloptions[$option] = $_newvalue; - wp_cache_set( 'alloptions', $alloptions, 'options' ); - } else { - wp_cache_set( $option, $_newvalue, 'options' ); - } - } - - $result = $wpdb->update( $wpdb->options, array( 'option_value' => $newvalue ), array( 'option_name' => $option ) ); - - if ( $result ) { - do_action( "update_option_{$option}", $oldvalue, $_newvalue ); - do_action( 'updated_option', $option, $oldvalue, $_newvalue ); - return true; - } - return false; -} - -/** - * Add a new option. - * - * You do not need to serialize values. If the value needs to be serialized, then - * it will be serialized before it is inserted into the database. Remember, - * resources can not be serialized or added as an option. - * - * You can create options without values and then update the values later. - * Existing options will not be updated and checks are performed to ensure that you - * aren't adding a protected WordPress option. Care should be taken to not name - * options the same as the ones which are protected. - * - * @package WordPress - * @subpackage Option - * @since 1.0.0 - * - * @uses do_action() Calls 'add_option' hook before adding the option. - * @uses do_action() Calls 'add_option_$option' and 'added_option' hooks on success. - * - * @param string $option Name of option to add. Expected to not be SQL-escaped. - * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped. - * @param mixed $deprecated Optional. Description. Not used anymore. - * @param bool $autoload Optional. Default is enabled. Whether to load the option when WordPress starts up. - * @return bool False if option was not added and true if option was added. - */ -function add_option( $option, $value = '', $deprecated = '', $autoload = 'yes' ) { - global $wpdb; - - if ( !empty( $deprecated ) ) - _deprecated_argument( __FUNCTION__, '2.3' ); - - $option = trim($option); - if ( empty($option) ) - return false; - - wp_protect_special_option( $option ); - - if ( is_object($value) ) - $value = clone $value; - - $value = sanitize_option( $option, $value ); - - // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query - $notoptions = wp_cache_get( 'notoptions', 'options' ); - if ( !is_array( $notoptions ) || !isset( $notoptions[$option] ) ) - if ( false !== get_option( $option ) ) - return false; - - $_value = $value; - $value = maybe_serialize( $value ); - $autoload = ( 'no' === $autoload ) ? 'no' : 'yes'; - do_action( 'add_option', $option, $_value ); - if ( ! defined( 'WP_INSTALLING' ) ) { - if ( 'yes' == $autoload ) { - $alloptions = wp_load_alloptions(); - $alloptions[$option] = $value; - wp_cache_set( 'alloptions', $alloptions, 'options' ); - } else { - wp_cache_set( $option, $value, 'options' ); - } - } - - // This option exists now - $notoptions = wp_cache_get( 'notoptions', 'options' ); // yes, again... we need it to be fresh - if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) { - unset( $notoptions[$option] ); - wp_cache_set( 'notoptions', $notoptions, 'options' ); - } - - $result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $value, $autoload ) ); - - if ( $result ) { - do_action( "add_option_{$option}", $option, $_value ); - do_action( 'added_option', $option, $_value ); - return true; - } - return false; -} - -/** - * Removes option by name. Prevents removal of protected WordPress options. - * - * @package WordPress - * @subpackage Option - * @since 1.2.0 - * - * @uses do_action() Calls 'delete_option' hook before option is deleted. - * @uses do_action() Calls 'deleted_option' and 'delete_option_$option' hooks on success. - * - * @param string $option Name of option to remove. Expected to not be SQL-escaped. - * @return bool True, if option is successfully deleted. False on failure. - */ -function delete_option( $option ) { - global $wpdb; - - wp_protect_special_option( $option ); - - // Get the ID, if no ID then return - $row = $wpdb->get_row( $wpdb->prepare( "SELECT autoload FROM $wpdb->options WHERE option_name = %s", $option ) ); - if ( is_null( $row ) ) - return false; - do_action( 'delete_option', $option ); - $result = $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->options WHERE option_name = %s", $option) ); - if ( ! defined( 'WP_INSTALLING' ) ) { - if ( 'yes' == $row->autoload ) { - $alloptions = wp_load_alloptions(); - if ( is_array( $alloptions ) && isset( $alloptions[$option] ) ) { - unset( $alloptions[$option] ); - wp_cache_set( 'alloptions', $alloptions, 'options' ); - } - } else { - wp_cache_delete( $option, 'options' ); - } - } - if ( $result ) { - do_action( "delete_option_$option", $option ); - do_action( 'deleted_option', $option ); - return true; - } - return false; -} - -/** - * Delete a transient. - * - * @since 2.8.0 - * @package WordPress - * @subpackage Transient - * - * @uses do_action() Calls 'delete_transient_$transient' hook before transient is deleted. - * @uses do_action() Calls 'deleted_transient' hook on success. - * - * @param string $transient Transient name. Expected to not be SQL-escaped. - * @return bool true if successful, false otherwise - */ -function delete_transient( $transient ) { - global $_wp_using_ext_object_cache; - - do_action( 'delete_transient_' . $transient, $transient ); - - if ( $_wp_using_ext_object_cache ) { - $result = wp_cache_delete( $transient, 'transient' ); - } else { - $option_timeout = '_transient_timeout_' . $transient; - $option = '_transient_' . $transient; - $result = delete_option( $option ); - if ( $result ) - delete_option( $option_timeout ); - } - - if ( $result ) - do_action( 'deleted_transient', $transient ); - return $result; -} - -/** - * Get the value of a transient. - * - * If the transient does not exist or does not have a value, then the return value - * will be false. - * - * @uses apply_filters() Calls 'pre_transient_$transient' hook before checking the transient. - * Any value other than false will "short-circuit" the retrieval of the transient - * and return the returned value. - * @uses apply_filters() Calls 'transient_$option' hook, after checking the transient, with - * the transient value. - * - * @since 2.8.0 - * @package WordPress - * @subpackage Transient - * - * @param string $transient Transient name. Expected to not be SQL-escaped - * @return mixed Value of transient - */ -function get_transient( $transient ) { - global $_wp_using_ext_object_cache; - - $pre = apply_filters( 'pre_transient_' . $transient, false ); - if ( false !== $pre ) - return $pre; - - if ( $_wp_using_ext_object_cache ) { - $value = wp_cache_get( $transient, 'transient' ); - } else { - $transient_option = '_transient_' . $transient; - if ( ! defined( 'WP_INSTALLING' ) ) { - // If option is not in alloptions, it is not autoloaded and thus has a timeout - $alloptions = wp_load_alloptions(); - if ( !isset( $alloptions[$transient_option] ) ) { - $transient_timeout = '_transient_timeout_' . $transient; - if ( get_option( $transient_timeout ) < time() ) { - delete_option( $transient_option ); - delete_option( $transient_timeout ); - return false; - } - } - } - - $value = get_option( $transient_option ); - } - - return apply_filters( 'transient_' . $transient, $value ); -} - -/** - * Set/update the value of a transient. - * - * You do not need to serialize values. If the value needs to be serialized, then - * it will be serialized before it is set. - * - * @since 2.8.0 - * @package WordPress - * @subpackage Transient - * - * @uses apply_filters() Calls 'pre_set_transient_$transient' hook to allow overwriting the - * transient value to be stored. - * @uses do_action() Calls 'set_transient_$transient' and 'setted_transient' hooks on success. - * - * @param string $transient Transient name. Expected to not be SQL-escaped. - * @param mixed $value Transient value. Expected to not be SQL-escaped. - * @param int $expiration Time until expiration in seconds, default 0 - * @return bool False if value was not set and true if value was set. - */ -function set_transient( $transient, $value, $expiration = 0 ) { - global $_wp_using_ext_object_cache; - - $value = apply_filters( 'pre_set_transient_' . $transient, $value ); - - if ( $_wp_using_ext_object_cache ) { - $result = wp_cache_set( $transient, $value, 'transient', $expiration ); - } else { - $transient_timeout = '_transient_timeout_' . $transient; - $transient = '_transient_' . $transient; - if ( false === get_option( $transient ) ) { - $autoload = 'yes'; - if ( $expiration ) { - $autoload = 'no'; - add_option( $transient_timeout, time() + $expiration, '', 'no' ); - } - $result = add_option( $transient, $value, '', $autoload ); - } else { - if ( $expiration ) - update_option( $transient_timeout, time() + $expiration ); - $result = update_option( $transient, $value ); - } - } - if ( $result ) { - do_action( 'set_transient_' . $transient ); - do_action( 'setted_transient', $transient ); - } - return $result; -} - -/** - * Saves and restores user interface settings stored in a cookie. - * - * Checks if the current user-settings cookie is updated and stores it. When no - * cookie exists (different browser used), adds the last saved cookie restoring - * the settings. - * - * @package WordPress - * @subpackage Option - * @since 2.7.0 - */ -function wp_user_settings() { - - if ( ! is_admin() ) - return; - - if ( defined('DOING_AJAX') ) - return; - - if ( ! $user = wp_get_current_user() ) - return; - - $settings = get_user_option( 'user-settings', $user->ID ); - - if ( isset( $_COOKIE['wp-settings-' . $user->ID] ) ) { - $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] ); - - if ( ! empty( $cookie ) && strpos( $cookie, '=' ) ) { - if ( $cookie == $settings ) - return; - - $last_time = (int) get_user_option( 'user-settings-time', $user->ID ); - $saved = isset( $_COOKIE['wp-settings-time-' . $user->ID]) ? preg_replace( '/[^0-9]/', '', $_COOKIE['wp-settings-time-' . $user->ID] ) : 0; - - if ( $saved > $last_time ) { - update_user_option( $user->ID, 'user-settings', $cookie, false ); - update_user_option( $user->ID, 'user-settings-time', time() - 5, false ); - return; - } - } - } - - setcookie( 'wp-settings-' . $user->ID, $settings, time() + 31536000, SITECOOKIEPATH ); - setcookie( 'wp-settings-time-' . $user->ID, time(), time() + 31536000, SITECOOKIEPATH ); - $_COOKIE['wp-settings-' . $user->ID] = $settings; -} - -/** - * Retrieve user interface setting value based on setting name. - * - * @package WordPress - * @subpackage Option - * @since 2.7.0 - * - * @param string $name The name of the setting. - * @param string $default Optional default value to return when $name is not set. - * @return mixed the last saved user setting or the default value/false if it doesn't exist. - */ -function get_user_setting( $name, $default = false ) { - - $all = get_all_user_settings(); - - return isset($all[$name]) ? $all[$name] : $default; -} - -/** - * Add or update user interface setting. - * - * Both $name and $value can contain only ASCII letters, numbers and underscores. - * This function has to be used before any output has started as it calls setcookie(). - * - * @package WordPress - * @subpackage Option - * @since 2.8.0 - * - * @param string $name The name of the setting. - * @param string $value The value for the setting. - * @return bool true if set successfully/false if not. - */ -function set_user_setting( $name, $value ) { - - if ( headers_sent() ) - return false; - - $all = get_all_user_settings(); - $name = preg_replace( '/[^A-Za-z0-9_]+/', '', $name ); - - if ( empty($name) ) - return false; - - $all[$name] = $value; - - return wp_set_all_user_settings($all); -} - -/** - * Delete user interface settings. - * - * Deleting settings would reset them to the defaults. - * This function has to be used before any output has started as it calls setcookie(). - * - * @package WordPress - * @subpackage Option - * @since 2.7.0 - * - * @param mixed $names The name or array of names of the setting to be deleted. - * @return bool true if deleted successfully/false if not. - */ -function delete_user_setting( $names ) { - - if ( headers_sent() ) - return false; - - $all = get_all_user_settings(); - $names = (array) $names; - - foreach ( $names as $name ) { - if ( isset($all[$name]) ) { - unset($all[$name]); - $deleted = true; - } - } - - if ( isset($deleted) ) - return wp_set_all_user_settings($all); - - return false; -} - -/** - * Retrieve all user interface settings. - * - * @package WordPress - * @subpackage Option - * @since 2.7.0 - * - * @return array the last saved user settings or empty array. - */ -function get_all_user_settings() { - global $_updated_user_settings; - - if ( ! $user = wp_get_current_user() ) - return array(); - - if ( isset($_updated_user_settings) && is_array($_updated_user_settings) ) - return $_updated_user_settings; - - $all = array(); - if ( isset($_COOKIE['wp-settings-' . $user->ID]) ) { - $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] ); - - if ( $cookie && strpos($cookie, '=') ) // the '=' cannot be 1st char - parse_str($cookie, $all); - - } else { - $option = get_user_option('user-settings', $user->ID); - if ( $option && is_string($option) ) - parse_str( $option, $all ); - } - - return $all; -} - -/** - * Private. Set all user interface settings. - * - * @package WordPress - * @subpackage Option - * @since 2.8.0 - * - * @param unknown $all - * @return bool - */ -function wp_set_all_user_settings($all) { - global $_updated_user_settings; - - if ( ! $user = wp_get_current_user() ) - return false; - - $_updated_user_settings = $all; - $settings = ''; - foreach ( $all as $k => $v ) { - $v = preg_replace( '/[^A-Za-z0-9_]+/', '', $v ); - $settings .= $k . '=' . $v . '&'; - } - - $settings = rtrim($settings, '&'); - - update_user_option( $user->ID, 'user-settings', $settings, false ); - update_user_option( $user->ID, 'user-settings-time', time(), false ); - - return true; -} - -/** - * Delete the user settings of the current user. - * - * @package WordPress - * @subpackage Option - * @since 2.7.0 + * + * @param mixed $data Serialized data + * @return bool False if not a serialized string, true if it is. */ -function delete_all_user_settings() { - if ( ! $user = wp_get_current_user() ) - return; - - update_user_option( $user->ID, 'user-settings', '', false ); - setcookie('wp-settings-' . $user->ID, ' ', time() - 31536000, SITECOOKIEPATH); +function is_serialized_string( $data ) { + // if it isn't a string, it isn't a serialized string + if ( !is_string( $data ) ) + return false; + $data = trim( $data ); + $length = strlen( $data ); + if ( $length < 4 ) + return false; + elseif ( ':' !== $data[1] ) + return false; + elseif ( ';' !== $data[$length-1] ) + return false; + elseif ( $data[0] !== 's' ) + return false; + elseif ( '"' !== $data[$length-2] ) + return false; + else + return true; } /** @@ -1114,71 +392,6 @@ function xmlrpc_removepostdata( $content ) { return $content; } -/** - * Open the file handle for debugging. - * - * This function is used for XMLRPC feature, but it is general purpose enough - * to be used in anywhere. - * - * @see fopen() for mode options. - * @package WordPress - * @subpackage Debug - * @since 0.71 - * @uses $debug Used for whether debugging is enabled. - * - * @param string $filename File path to debug file. - * @param string $mode Same as fopen() mode parameter. - * @return bool|resource File handle. False on failure. - */ -function debug_fopen( $filename, $mode ) { - global $debug; - if ( 1 == $debug ) { - $fp = fopen( $filename, $mode ); - return $fp; - } else { - return false; - } -} - -/** - * Write contents to the file used for debugging. - * - * Technically, this can be used to write to any file handle when the global - * $debug is set to 1 or true. - * - * @package WordPress - * @subpackage Debug - * @since 0.71 - * @uses $debug Used for whether debugging is enabled. - * - * @param resource $fp File handle for debugging file. - * @param string $string Content to write to debug file. - */ -function debug_fwrite( $fp, $string ) { - global $debug; - if ( 1 == $debug ) - fwrite( $fp, $string ); -} - -/** - * Close the debugging file handle. - * - * Technically, this can be used to close any file handle when the global $debug - * is set to 1 or true. - * - * @package WordPress - * @subpackage Debug - * @since 0.71 - * @uses $debug Used for whether debugging is enabled. - * - * @param resource $fp Debug File handle. - */ -function debug_fclose( $fp ) { - global $debug; - if ( 1 == $debug ) - fclose( $fp ); -} - /** * Check content for video and audio links to add as enclosures. * @@ -1200,9 +413,7 @@ function do_enclose( $content, $post_ID ) { //TODO: Tidy this ghetto code up and make the debug code optional include_once( ABSPATH . WPINC . '/class-IXR.php' ); - $log = debug_fopen( ABSPATH . 'enclosures.log', 'a' ); $post_links = array(); - debug_fwrite( $log, 'BEGIN ' . date( 'YmdHis', time() ) . "\n" ); $pung = get_enclosed( $post_ID ); @@ -1213,15 +424,11 @@ function do_enclose( $content, $post_ID ) { preg_match_all( "{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp ); - debug_fwrite( $log, 'Post contents:' ); - debug_fwrite( $log, $content . "\n" ); - foreach ( $pung as $link_test ) { if ( !in_array( $link_test, $post_links_temp[0] ) ) { // link no longer in post - $mid = $wpdb->get_col( $wpdb->prepare("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE (%s)", $post_ID, like_escape( $link_test ) . '%') ); - do_action( 'delete_postmeta', $mid ); - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->postmeta WHERE meta_id IN(%s)", implode( ',', $mid ) ) ); - do_action( 'deleted_postmeta', $mid ); + $mids = $wpdb->get_col( $wpdb->prepare("SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE (%s)", $post_ID, like_escape( $link_test ) . '%') ); + foreach ( $mids as $mid ) + delete_metadata_by_mid( 'post', $mid ); } } @@ -1241,8 +448,8 @@ function do_enclose( $content, $post_ID ) { if ( $url != '' && !$wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE (%s)", $post_ID, like_escape( $url ) . '%' ) ) ) { if ( $headers = wp_get_http_headers( $url) ) { - $len = (int) $headers['content-length']; - $type = $headers['content-type']; + $len = isset( $headers['content-length'] ) ? (int) $headers['content-length'] : 0; + $type = isset( $headers['content-type'] ) ? $headers['content-type'] : ''; $allowed_types = array( 'video', 'audio' ); // Check to see if we can figure out the mime type from @@ -1261,9 +468,7 @@ function do_enclose( $content, $post_ID ) { } if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) { - $meta_value = "$url\n$len\n$type\n"; - $wpdb->insert($wpdb->postmeta, array('post_id' => $post_ID, 'meta_key' => 'enclosure', 'meta_value' => $meta_value) ); - do_action( 'added_postmeta', $wpdb->insert_id, $post_ID, 'enclosure', $meta_value ); + add_post_meta( $post_ID, 'enclosure', "$url\n$len\n$mime\n" ); } } } @@ -1393,7 +598,7 @@ function _http_build_query($data, $prefix=null, $sep=null, $key='', $urlencode=t $k = $prefix.$k; if ( !empty($key) ) $k = $key . '%5B' . $k . '%5D'; - if ( $v === NULL ) + if ( $v === null ) continue; elseif ( $v === FALSE ) $v = '0'; @@ -1406,7 +611,7 @@ function _http_build_query($data, $prefix=null, $sep=null, $key='', $urlencode=t array_push($ret, $k.'='.$v); } - if ( NULL === $sep ) + if ( null === $sep ) $sep = ini_get('arg_separator.output'); return implode($sep, $ret); @@ -1905,7 +1110,7 @@ function is_blog_installed() { $suppress = $wpdb->suppress_errors(); - // Loop over the WP tables. If none exist, then scratch install is allowed. + // Loop over the WP tables. If none exist, then scratch install is allowed. // If one or more exist, suggest table repair since we got here because the options // table could not be accessed. $wp_tables = $wpdb->tables(); @@ -1921,8 +1126,10 @@ function is_blog_installed() { // One or more tables exist. We are insane. + wp_load_translations_early(); + // Die with a DB error. - $wpdb->error = sprintf( /*WP_I18N_NO_TABLES*/'One or more database tables are unavailable. The database may need to be <a href="%s">repaired</a>.'/*/WP_I18N_NO_TABLES*/, 'maint/repair.php?referrer=is_blog_installed' ); + $wpdb->error = sprintf( __( 'One or more database tables are unavailable. The database may need to be <a href="%s">repaired</a>.' ), 'maint/repair.php?referrer=is_blog_installed' ); dead_db(); } @@ -2746,7 +1953,6 @@ function wp_nonce_ays( $action ) { wp_die( $html, $title, array('response' => 403) ); } - /** * Kill WordPress execution and display HTML message with error message. * @@ -2762,15 +1968,15 @@ function wp_nonce_ays( $action ) { * @param string $title Error title. * @param string|array $args Optional arguments to control behavior. */ -function wp_die( $message, $title = '', $args = array() ) { +function wp_die( $message = '', $title = '', $args = array() ) { if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) - die('-1'); - - if ( function_exists( 'apply_filters' ) ) { - $function = apply_filters( 'wp_die_handler', '_default_wp_die_handler'); - } else { - $function = '_default_wp_die_handler'; - } + $function = apply_filters( 'wp_die_ajax_handler', '_ajax_wp_die_handler' ); + elseif ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) + $function = apply_filters( 'wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler' ); + elseif ( defined( 'APP_REQUEST' ) && APP_REQUEST ) + $function = apply_filters( 'wp_die_app_handler', '_scalar_wp_die_handler' ); + else + $function = apply_filters( 'wp_die_handler', '_default_wp_die_handler' ); call_user_func( $function, $message, $title, $args ); } @@ -2821,7 +2027,7 @@ function _default_wp_die_handler( $message, $title = '', $args = array() ) { $message .= "\n<p><a href='javascript:history.back()'>$back_text</a></p>"; } - if ( !function_exists( 'did_action' ) || !did_action( 'admin_head' ) ) : + if ( ! did_action( 'admin_head' ) ) : if ( !headers_sent() ) { status_header( $r['response'] ); nocache_headers(); @@ -2859,6 +2065,15 @@ function _default_wp_die_handler( $message, $title = '', $args = array() ) { border: 1px solid #dfdfdf; max-width: 700px; } + h1 { + border-bottom: 1px solid #dadada; + clear: both; + color: #666; + font: 24px Georgia, "Times New Roman", Times, serif; + margin: 30px 0 0 0; + padding: 0; + padding-bottom: 7px; + } #error-page { margin-top: 50px; } @@ -2925,7 +2140,7 @@ function _default_wp_die_handler( $message, $title = '', $args = array() ) { </style> </head> <body id="error-page"> -<?php endif; // !function_exists( 'did_action' ) || !did_action( 'admin_head' ) ?> +<?php endif; // ! did_action( 'admin_head' ) ?> <?php echo $message; ?> </body> </html> @@ -2959,15 +2174,36 @@ function _xmlrpc_wp_die_handler( $message, $title = '', $args = array() ) { } /** - * Filter to enable special wp_die handler for xmlrpc requests. + * Kill WordPress ajax execution. * - * @since 3.2.0 + * This is the handler for wp_die when processing Ajax requests. + * + * @since 3.4.0 * @access private + * + * @param string $message Optional. Response to print. */ -function _xmlrpc_wp_die_filter() { - return '_xmlrpc_wp_die_handler'; +function _ajax_wp_die_handler( $message = '' ) { + if ( is_scalar( $message ) ) + die( (string) $message ); + die( '0' ); } +/** + * Kill WordPress execution. + * + * This is the handler for wp_die when processing APP requests. + * + * @since 3.4.0 + * @access private + * + * @param string $message Optional. Response to print. + */ +function _scalar_wp_die_handler( $message = '' ) { + if ( is_scalar( $message ) ) + die( (string) $message ); + die(); +} /** * Retrieve the WordPress home page URL. @@ -3036,7 +2272,6 @@ function _mce_set_direction( $input ) { return $input; } - /** * Convert smiley code to the icon graphic file equivalent. * @@ -3098,7 +2333,8 @@ function smilies_init() { ':-x' => 'icon_mad.gif', ':-|' => 'icon_neutral.gif', ';-)' => 'icon_wink.gif', - '8)' => 'icon_cool.gif', + // This one transformation breaks regular text with frequency. + // '8)' => 'icon_cool.gif', '8O' => 'icon_eek.gif', ':(' => 'icon_sad.gif', ':)' => 'icon_smile.gif', @@ -3369,16 +2605,18 @@ function dead_db() { status_header( 500 ); nocache_headers(); header( 'Content-Type: text/html; charset=utf-8' ); + + wp_load_translations_early(); ?> <!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>> +<html xmlns="http://www.w3.org/1999/xhtml"<?php if ( is_rtl() ) echo ' dir="rtl"'; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title><?php echo /*WP_I18N_DB_ERROR*/'Database Error'/*/WP_I18N_DB_ERROR*/; ?></title> + <title><?php _e( 'Database Error' ); ?></title> </head> <body> - <h1><?php echo /*WP_I18N_DB_CONNECTION_ERROR*/'Error establishing a database connection'/*/WP_I18N_DB_CONNECTION_ERROR*/; ?></h1> + <h1><?php _e( 'Error establishing a database connection' ); ?></h1> </body> </html> <?php @@ -3762,7 +3000,7 @@ function wp_guess_url() { $url = WP_SITEURL; } else { $schema = is_ssl() ? 'https://' : 'http://'; - $url = preg_replace('|/wp-admin/.*|i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); + $url = preg_replace('#/(wp-admin/.*|wp-login.php)#i', '', $schema . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); } return rtrim($url, '/'); } @@ -3794,8 +3032,8 @@ function wp_suspend_cache_addition( $suspend = null ) { /** * Suspend cache invalidation. * - * Turns cache invalidation on and off. Useful during imports where you don't wont to do invalidations - * every time a post is inserted. Callers must be sure that what they are doing won't lead to an inconsistent + * Turns cache invalidation on and off. Useful during imports where you don't wont to do invalidations + * every time a post is inserted. Callers must be sure that what they are doing won't lead to an inconsistent * cache when invalidation is suspended. * * @since 2.7.0 @@ -3811,323 +3049,6 @@ function wp_suspend_cache_invalidation($suspend = true) { return $current_suspend; } -/** - * Retrieve site option value based on name of option. - * - * @see get_option() - * @package WordPress - * @subpackage Option - * @since 2.8.0 - * - * @uses apply_filters() Calls 'pre_site_option_$option' before checking the option. - * Any value other than false will "short-circuit" the retrieval of the option - * and return the returned value. - * @uses apply_filters() Calls 'site_option_$option', after checking the option, with - * the option value. - * - * @param string $option Name of option to retrieve. Expected to not be SQL-escaped. - * @param mixed $default Optional value to return if option doesn't exist. Default false. - * @param bool $use_cache Whether to use cache. Multisite only. Default true. - * @return mixed Value set for the option. - */ -function get_site_option( $option, $default = false, $use_cache = true ) { - global $wpdb; - - // Allow plugins to short-circuit site options. - $pre = apply_filters( 'pre_site_option_' . $option, false ); - if ( false !== $pre ) - return $pre; - - if ( !is_multisite() ) { - $value = get_option($option, $default); - } else { - $cache_key = "{$wpdb->siteid}:$option"; - if ( $use_cache ) - $value = wp_cache_get($cache_key, 'site-options'); - - if ( !isset($value) || (false === $value) ) { - $row = $wpdb->get_row( $wpdb->prepare("SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) ); - - // Has to be get_row instead of get_var because of funkiness with 0, false, null values - if ( is_object( $row ) ) { - $value = $row->meta_value; - $value = maybe_unserialize( $value ); - wp_cache_set( $cache_key, $value, 'site-options' ); - } else { - $value = $default; - } - } - } - - return apply_filters( 'site_option_' . $option, $value ); -} - -/** - * Add a new site option. - * - * Existing options will not be updated. Note that prior to 3.3 this wasn't the case. - * - * @see add_option() - * @package WordPress - * @subpackage Option - * @since 2.8.0 - * - * @uses apply_filters() Calls 'pre_add_site_option_$option' hook to allow overwriting the - * option value to be stored. - * @uses do_action() Calls 'add_site_option_$option' and 'add_site_option' hooks on success. - * - * @param string $option Name of option to add. Expected to not be SQL-escaped. - * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped. - * @return bool False if option was not added and true if option was added. - */ -function add_site_option( $option, $value ) { - global $wpdb; - - $value = apply_filters( 'pre_add_site_option_' . $option, $value ); - - if ( !is_multisite() ) { - $result = add_option( $option, $value ); - } else { - $cache_key = "{$wpdb->siteid}:$option"; - - if ( false !== get_site_option( $option ) ) - return false; - - $value = sanitize_option( $option, $value ); - wp_cache_set( $cache_key, $value, 'site-options' ); - - $_value = $value; - $value = maybe_serialize( $value ); - $result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) ); - $value = $_value; - } - - if ( $result ) { - do_action( "add_site_option_{$option}", $option, $value ); - do_action( "add_site_option", $option, $value ); - return true; - } - return false; -} - -/** - * Removes site option by name. - * - * @see delete_option() - * @package WordPress - * @subpackage Option - * @since 2.8.0 - * - * @uses do_action() Calls 'pre_delete_site_option_$option' hook before option is deleted. - * @uses do_action() Calls 'delete_site_option' and 'delete_site_option_$option' - * hooks on success. - * - * @param string $option Name of option to remove. Expected to not be SQL-escaped. - * @return bool True, if succeed. False, if failure. - */ -function delete_site_option( $option ) { - global $wpdb; - - // ms_protect_special_option( $option ); @todo - - do_action( 'pre_delete_site_option_' . $option ); - - if ( !is_multisite() ) { - $result = delete_option( $option ); - } else { - $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) ); - if ( is_null( $row ) || !$row->meta_id ) - return false; - $cache_key = "{$wpdb->siteid}:$option"; - wp_cache_delete( $cache_key, 'site-options' ); - - $result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) ); - } - - if ( $result ) { - do_action( "delete_site_option_{$option}", $option ); - do_action( "delete_site_option", $option ); - return true; - } - return false; -} - -/** - * Update the value of a site option that was already added. - * - * @see update_option() - * @since 2.8.0 - * @package WordPress - * @subpackage Option - * - * @uses apply_filters() Calls 'pre_update_site_option_$option' hook to allow overwriting the - * option value to be stored. - * @uses do_action() Calls 'update_site_option_$option' and 'update_site_option' hooks on success. - * - * @param string $option Name of option. Expected to not be SQL-escaped. - * @param mixed $value Option value. Expected to not be SQL-escaped. - * @return bool False if value was not updated and true if value was updated. - */ -function update_site_option( $option, $value ) { - global $wpdb; - - $oldvalue = get_site_option( $option ); - $value = apply_filters( 'pre_update_site_option_' . $option, $value, $oldvalue ); - - if ( $value === $oldvalue ) - return false; - - if ( false === $oldvalue ) - return add_site_option( $option, $value ); - - if ( !is_multisite() ) { - $result = update_option( $option, $value ); - } else { - $value = sanitize_option( $option, $value ); - $cache_key = "{$wpdb->siteid}:$option"; - wp_cache_set( $cache_key, $value, 'site-options' ); - - $_value = $value; - $value = maybe_serialize( $value ); - $result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $value ), array( 'site_id' => $wpdb->siteid, 'meta_key' => $option ) ); - $value = $_value; - } - - if ( $result ) { - do_action( "update_site_option_{$option}", $option, $value, $oldvalue ); - do_action( "update_site_option", $option, $value, $oldvalue ); - return true; - } - return false; -} - -/** - * Delete a site transient. - * - * @since 2.9.0 - * @package WordPress - * @subpackage Transient - * - * @uses do_action() Calls 'delete_site_transient_$transient' hook before transient is deleted. - * @uses do_action() Calls 'deleted_site_transient' hook on success. - * - * @param string $transient Transient name. Expected to not be SQL-escaped. - * @return bool True if successful, false otherwise - */ -function delete_site_transient( $transient ) { - global $_wp_using_ext_object_cache; - - do_action( 'delete_site_transient_' . $transient, $transient ); - if ( $_wp_using_ext_object_cache ) { - $result = wp_cache_delete( $transient, 'site-transient' ); - } else { - $option_timeout = '_site_transient_timeout_' . $transient; - $option = '_site_transient_' . $transient; - $result = delete_site_option( $option ); - if ( $result ) - delete_site_option( $option_timeout ); - } - if ( $result ) - do_action( 'deleted_site_transient', $transient ); - return $result; -} - -/** - * Get the value of a site transient. - * - * If the transient does not exist or does not have a value, then the return value - * will be false. - * - * @see get_transient() - * @since 2.9.0 - * @package WordPress - * @subpackage Transient - * - * @uses apply_filters() Calls 'pre_site_transient_$transient' hook before checking the transient. - * Any value other than false will "short-circuit" the retrieval of the transient - * and return the returned value. - * @uses apply_filters() Calls 'site_transient_$option' hook, after checking the transient, with - * the transient value. - * - * @param string $transient Transient name. Expected to not be SQL-escaped. - * @return mixed Value of transient - */ -function get_site_transient( $transient ) { - global $_wp_using_ext_object_cache; - - $pre = apply_filters( 'pre_site_transient_' . $transient, false ); - if ( false !== $pre ) - return $pre; - - if ( $_wp_using_ext_object_cache ) { - $value = wp_cache_get( $transient, 'site-transient' ); - } else { - // Core transients that do not have a timeout. Listed here so querying timeouts can be avoided. - $no_timeout = array('update_core', 'update_plugins', 'update_themes'); - $transient_option = '_site_transient_' . $transient; - if ( ! in_array( $transient, $no_timeout ) ) { - $transient_timeout = '_site_transient_timeout_' . $transient; - $timeout = get_site_option( $transient_timeout ); - if ( false !== $timeout && $timeout < time() ) { - delete_site_option( $transient_option ); - delete_site_option( $transient_timeout ); - return false; - } - } - - $value = get_site_option( $transient_option ); - } - - return apply_filters( 'site_transient_' . $transient, $value ); -} - -/** - * Set/update the value of a site transient. - * - * You do not need to serialize values, if the value needs to be serialize, then - * it will be serialized before it is set. - * - * @see set_transient() - * @since 2.9.0 - * @package WordPress - * @subpackage Transient - * - * @uses apply_filters() Calls 'pre_set_site_transient_$transient' hook to allow overwriting the - * transient value to be stored. - * @uses do_action() Calls 'set_site_transient_$transient' and 'setted_site_transient' hooks on success. - * - * @param string $transient Transient name. Expected to not be SQL-escaped. - * @param mixed $value Transient value. Expected to not be SQL-escaped. - * @param int $expiration Time until expiration in seconds, default 0 - * @return bool False if value was not set and true if value was set. - */ -function set_site_transient( $transient, $value, $expiration = 0 ) { - global $_wp_using_ext_object_cache; - - $value = apply_filters( 'pre_set_site_transient_' . $transient, $value ); - - if ( $_wp_using_ext_object_cache ) { - $result = wp_cache_set( $transient, $value, 'site-transient', $expiration ); - } else { - $transient_timeout = '_site_transient_timeout_' . $transient; - $transient = '_site_transient_' . $transient; - if ( false === get_site_option( $transient ) ) { - if ( $expiration ) - add_site_option( $transient_timeout, time() + $expiration ); - $result = add_site_option( $transient, $value ); - } else { - if ( $expiration ) - update_site_option( $transient_timeout, time() + $expiration ); - $result = update_site_option( $transient, $value ); - } - } - if ( $result ) { - do_action( 'set_site_transient_' . $transient ); - do_action( 'setted_site_transient', $transient ); - } - return $result; -} - /** * Is main site? * @@ -4457,29 +3378,24 @@ function get_file_data( $file, $default_headers, $context = '' ) { // PHP will close file handle, but we are good citizens. fclose( $fp ); - if ( $context != '' ) { - $extra_headers = apply_filters( "extra_{$context}_headers", array() ); + // Make sure we catch CR-only line endings. + $file_data = str_replace( "\r", "\n", $file_data ); - $extra_headers = array_flip( $extra_headers ); - foreach( $extra_headers as $key=>$value ) { - $extra_headers[$key] = $key; - } + if ( $context && $extra_headers = apply_filters( "extra_{$context}_headers", array() ) ) { + $extra_headers = array_combine( $extra_headers, $extra_headers ); // keys equal values $all_headers = array_merge( $extra_headers, (array) $default_headers ); } else { $all_headers = $default_headers; } foreach ( $all_headers as $field => $regex ) { - preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, ${$field}); - if ( !empty( ${$field} ) ) - ${$field} = _cleanup_header_comment( ${$field}[1] ); + if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] ) + $all_headers[ $field ] = _cleanup_header_comment( $match[1] ); else - ${$field} = ''; + $all_headers[ $field ] = ''; } - $file_data = compact( array_keys( $all_headers ) ); - - return $file_data; + return $all_headers; } /** @@ -4547,6 +3463,18 @@ function __return_empty_array() { return array(); } +/** + * Returns null. + * + * Useful for returning null to filters easily. + * + * @since 3.4.0 + * @return null + */ +function __return_null() { + return null; +} + /** * Send a HTTP header to disable content type sniffing in browsers which support it. * @@ -4682,4 +3610,89 @@ function wp_allowed_protocols() { return $protocols; } -?> +/** + * Return a comma separated string of functions that have been called to get to the current point in code. + * + * @link http://core.trac.wordpress.org/ticket/19589 + * @since 3.4 + * + * @param string $ignore_class A class to ignore all function calls within - useful when you want to just give info about the callee + * @param int $skip_frames A number of stack frames to skip - useful for unwinding back to the source of the issue + * @param bool $pretty Whether or not you want a comma separated string or raw array returned + * @return string|array Either a string containing a reversed comma separated trace or an array of individual calls. + */ +function wp_debug_backtrace_summary( $ignore_class = null, $skip_frames = 0, $pretty = true ) { + $trace = debug_backtrace( false ); + $caller = array(); + $check_class = ! is_null( $ignore_class ); + $skip_frames++; // skip this function + + foreach ( $trace as $call ) { + if ( $skip_frames > 0 ) { + $skip_frames--; + } elseif ( isset( $call['class'] ) ) { + if ( $check_class && $ignore_class == $call['class'] ) + continue; // Filter out calls + + $caller[] = "{$call['class']}{$call['type']}{$call['function']}"; + } else { + if ( in_array( $call['function'], array( 'do_action', 'apply_filters' ) ) ) { + $caller[] = "{$call['function']}('{$call['args'][0]}')"; + } elseif ( in_array( $call['function'], array( 'include', 'include_once', 'require', 'require_once' ) ) ) { + $caller[] = $call['function'] . "('" . str_replace( array( WP_CONTENT_DIR, ABSPATH ) , '', $call['args'][0] ) . "')"; + } else { + $caller[] = $call['function']; + } + } + } + if ( $pretty ) + return join( ', ', array_reverse( $caller ) ); + else + return $caller; +} + +/** + * Retrieve ids that are not already present in the cache + * + * @since 3.4.0 + * + * @param array $object_ids ID list + * @param string $cache_key The cache bucket to check against + * + * @return array + */ +function _get_non_cached_ids( $object_ids, $cache_key ) { + $clean = array(); + foreach ( $object_ids as $id ) { + $id = (int) $id; + if ( !wp_cache_get( $id, $cache_key ) ) { + $clean[] = $id; + } + } + + return $clean; +} + +/** + * Test if the current device has the capability to upload files. + * + * @since 3.4.0 + * @access private + * + * @return bool true|false + */ +function _device_can_upload() { + if ( ! wp_is_mobile() ) + return true; + + $ua = $_SERVER['HTTP_USER_AGENT']; + + if ( strpos($ua, 'iPhone') !== false + || strpos($ua, 'iPad') !== false + || strpos($ua, 'iPod') !== false ) { + return false; + } else { + return true; + } +} + diff --git a/wp-includes/functions.wp-scripts.php b/wp-includes/functions.wp-scripts.php index 228a3bfe1..a8dac35c2 100644 --- a/wp-includes/functions.wp-scripts.php +++ b/wp-includes/functions.wp-scripts.php @@ -45,7 +45,7 @@ function wp_print_scripts( $handles = false ) { * @param string $handle Script name * @param string $src Script url * @param array $deps (optional) Array of script names on which this script depends - * @param string|bool $ver (optional) Script version (used for cache busting), set to NULL to disable + * @param string|bool $ver (optional) Script version (used for cache busting), set to null to disable * @param bool $in_footer (optional) Whether to enqueue the script before </head> or before </body> * @return null */ diff --git a/wp-includes/functions.wp-styles.php b/wp-includes/functions.wp-styles.php index db8b583e9..889661543 100644 --- a/wp-includes/functions.wp-styles.php +++ b/wp-includes/functions.wp-styles.php @@ -47,7 +47,7 @@ function wp_print_styles( $handles = false ) { * added to the same stylesheet $handle, they will be printed in the order * they were added, i.e. the latter added styles can redeclare the previous. * - * @since 3.3 + * @since 3.3.0 * @see WP_Scripts::add_inline_style() */ function wp_add_inline_style( $handle, $data ) { @@ -74,7 +74,7 @@ function wp_add_inline_style( $handle, $data ) { * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '/css/mystyle.css'. * @param array $deps Array of handles of any stylesheet that this stylesheet depends on. * (Stylesheets that must be loaded before this stylesheet.) Pass an empty array if there are no dependencies. - * @param string|bool $ver String specifying the stylesheet version number. Set to NULL to disable. + * @param string|bool $ver String specifying the stylesheet version number. Set to null to disable. * Used to ensure that the correct version is sent to the client regardless of caching. * @param string $media The media for which this stylesheet has been defined. */ diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php index d855ef52b..19726961e 100644 --- a/wp-includes/general-template.php +++ b/wp-includes/general-template.php @@ -1229,7 +1229,6 @@ function get_calendar($initial = true, $echo = true) { } } - // See how much we should pad in the beginning $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins); if ( 0 != $pad ) @@ -1747,15 +1746,14 @@ function rich_edit_exists() { * @return bool */ function user_can_richedit() { - global $wp_rich_edit, $is_gecko, $is_opera, $is_safari, $is_chrome, $is_iphone, $is_IE; + global $wp_rich_edit, $is_gecko, $is_opera, $is_safari, $is_chrome, $is_IE; if ( !isset($wp_rich_edit) ) { $wp_rich_edit = false; - if ( get_user_option( 'rich_editing' ) == 'true' || !is_user_logged_in() ) { // default to 'true' for logged out users + if ( get_user_option( 'rich_editing' ) == 'true' || ! is_user_logged_in() ) { // default to 'true' for logged out users if ( $is_safari ) { - if ( !$is_iphone || ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && intval($match[1]) >= 534 ) ) - $wp_rich_edit = true; + $wp_rich_edit = ! wp_is_mobile() || ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && intval( $match[1] ) >= 534 ); } elseif ( $is_gecko || $is_opera || $is_chrome || $is_IE ) { $wp_rich_edit = true; } @@ -1797,7 +1795,7 @@ function wp_default_editor() { * See http://core.trac.wordpress.org/ticket/19173 for more information. * * @see wp-includes/class-wp-editor.php - * @since 3.3 + * @since 3.3.0 * * @param string $content Initial content for the editor. * @param string $editor_id HTML ID attribute value for the textarea and TinyMCE. Can only be /[a-z]+/. @@ -2037,7 +2035,7 @@ function register_admin_color_schemes() { wp_admin_css_color( 'classic', _x( 'Blue', 'admin color scheme' ), admin_url( 'css/colors-classic.css' ), array( '#5589aa', '#cfdfe9', '#d1e5ee', '#eff8ff' ) ); wp_admin_css_color( 'fresh', _x( 'Gray', 'admin color scheme' ), admin_url( 'css/colors-fresh.css' ), - array( '#7c7976', '#c6c6c6', '#e0e0e0', '#f1f1f1' ) ); + array( '#555', '#a0a0a0', '#ccc', '#f1f1f1' ) ); } /** @@ -2066,7 +2064,7 @@ function wp_admin_css_uri( $file = 'wp-admin' ) { * "Intelligently" decides to enqueue or to print the CSS file. If the * 'wp_print_styles' action has *not* yet been called, the CSS file will be * enqueued. If the wp_print_styles action *has* been called, the CSS link will - * be printed. Printing may be forced by passing TRUE as the $force_echo + * be printed. Printing may be forced by passing true as the $force_echo * (second) parameter. * * For backward compatibility with WordPress 2.3 calling method: If the $file @@ -2080,7 +2078,7 @@ function wp_admin_css_uri( $file = 'wp-admin' ) { * * @param string $file Optional. Style handle name or file name (without ".css" extension) relative * to wp-admin/. Defaults to 'wp-admin'. - * @param bool $force_echo Optional. Force the stylesheet link to be printed rather than enqueued. + * @param bool $force_echo Optional. Force the stylesheet link to be printed rather than enqueued. */ function wp_admin_css( $file = 'wp-admin', $force_echo = false ) { global $wp_styles; @@ -2091,7 +2089,7 @@ function wp_admin_css( $file = 'wp-admin', $force_echo = false ) { $handle = 0 === strpos( $file, 'css/' ) ? substr( $file, 4 ) : $file; if ( $wp_styles->query( $handle ) ) { - if ( $force_echo || did_action( 'wp_print_styles' ) ) // we already printed the style queue. Print this one immediately + if ( $force_echo || did_action( 'wp_print_styles' ) ) // we already printed the style queue. Print this one immediately wp_print_styles( $handle ); else // Add to style queue wp_enqueue_style( $handle ); @@ -2099,7 +2097,7 @@ function wp_admin_css( $file = 'wp-admin', $force_echo = false ) { } echo apply_filters( 'wp_admin_css', "<link rel='stylesheet' href='" . esc_url( wp_admin_css_uri( $file ) ) . "' type='text/css' />\n", $file ); - if ( is_rtl() ) + if ( function_exists( 'is_rtl' ) && is_rtl() ) echo apply_filters( 'wp_admin_css', "<link rel='stylesheet' href='" . esc_url( wp_admin_css_uri( "$file-rtl" ) ) . "' type='text/css' />\n", "$file-rtl" ); } @@ -2107,7 +2105,7 @@ function wp_admin_css( $file = 'wp-admin', $force_echo = false ) { * Enqueues the default ThickBox js and css. * * If any of the settings need to be changed, this can be done with another js - * file similar to media-upload.js and theme-preview.js. That file should + * file similar to media-upload.js. That file should * require array('thickbox') to ensure it is loaded after. * * @since 2.5.0 @@ -2283,5 +2281,3 @@ function __checked_selected_helper( $helper, $current, $echo, $type ) { return $result; } - -?> diff --git a/wp-includes/http.php b/wp-includes/http.php index 02b875084..dd9df6e73 100644 --- a/wp-includes/http.php +++ b/wp-includes/http.php @@ -197,7 +197,7 @@ function wp_remote_retrieve_body(&$response) { * @since 3.2.0 * * @param array $capabilities Array of capabilities to test or a wp_remote_request() $args array. - * @param string $url Optional. If given, will check if the URL requires SSL and adds that requirement to the capabilities array. + * @param string $url Optional. If given, will check if the URL requires SSL and adds that requirement to the capabilities array. * * @return bool */ @@ -222,3 +222,80 @@ function wp_http_supports( $capabilities = array(), $url = null ) { return (bool) $objFetchSite->_get_first_available_transport( $capabilities ); } + +/** + * Get the HTTP Origin of the current request. + * + * @since 3.4.0 + * + * @return string URL of the origin. Empty string if no origin. + */ +function get_http_origin() { + $origin = ''; + if ( ! empty ( $_SERVER[ 'HTTP_ORIGIN' ] ) ) + $origin = $_SERVER[ 'HTTP_ORIGIN' ]; + + return apply_filters( 'http_origin', $origin ); +} + +/** + * Retrieve list of allowed http origins. + * + * @since 3.4.0 + * + * @return array Array of origin URLs. + */ +function get_allowed_http_origins() { + $admin_origin = parse_url( admin_url() ); + $home_origin = parse_url( home_url() ); + + // @todo preserve port? + $allowed_origins = array_unique( array( + 'http://' . $admin_origin[ 'host' ], + 'https://' . $admin_origin[ 'host' ], + 'http://' . $home_origin[ 'host' ], + 'https://' . $home_origin[ 'host' ], + ) ); + + return apply_filters( 'allowed_http_origins' , $allowed_origins ); +} + +/** + * Determines if the http origin is an authorized one. + * + * @since 3.4.0 + * + * @param string Origin URL. If not provided, the value of get_http_origin() is used. + * @return bool True if the origin is allowed. False otherwise. + */ +function is_allowed_http_origin( $origin = null ) { + $origin_arg = $origin; + + if ( null === $origin ) + $origin = get_http_origin(); + + if ( $origin && ! in_array( $origin, get_allowed_http_origins() ) ) + $origin = ''; + + return apply_filters( 'allowed_http_origin', $origin, $origin_arg ); +} + +/** + * Send Access-Control-Allow-Origin and related headers if the current request + * is from an allowed origin. + * + * @since 3.4.0 + * + * @return bool|string Returns the origin URL if headers are sent. Returns false + * if headers are not sent. + */ +function send_origin_headers() { + $origin = get_http_origin(); + if ( ! is_allowed_http_origin( $origin ) ) + return false; + + @header( 'Access-Control-Allow-Origin: ' . $origin ); + @header( 'Access-Control-Allow-Credentials: true' ); + + return $origin; +} \ No newline at end of file diff --git a/wp-includes/images/admin-bar-sprite-2x.png b/wp-includes/images/admin-bar-sprite-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f329c86e52698262b18839923fca9165049c139e GIT binary patch literal 4160 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 Q1_lNOPgg&ebxsLQ0NIJjfdBvi literal 0 HcmV?d00001 diff --git a/wp-includes/js/admin-bar.dev.js b/wp-includes/js/admin-bar.dev.js index 57f4a854b..0479c56cd 100644 --- a/wp-includes/js/admin-bar.dev.js +++ b/wp-includes/js/admin-bar.dev.js @@ -59,6 +59,14 @@ if ( typeof(jQuery) != 'undefined' ) { target.siblings('.ab-sub-wrapper').find('.ab-item').each(refresh); }); + $('#wpadminbar').click( function(e) { + if ( e.target.id != 'wpadminbar' && e.target.id != 'wp-admin-bar-top-secondary' ) + return; + + e.preventDefault(); + $('html, body').animate({ scrollTop: 0 }, 'fast'); + }); + }); } else { (function(d, w) { @@ -178,6 +186,40 @@ if ( typeof(jQuery) != 'undefined' ) { } } return false; + }, + + scrollToTop = function(t) { + var distance, speed, step, steps, timer, speed_step; + + // Ensure that the #wpadminbar was the target of the click. + if ( t.id != 'wpadminbar' && t.id != 'wp-admin-bar-top-secondary' ) + return; + + distance = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; + + if ( distance < 1 ) + return; + + speed_step = distance > 800 ? 130 : 100; + speed = Math.min( 12, Math.round( distance / speed_step ) ); + step = distance > 800 ? Math.round( distance / 30 ) : Math.round( distance / 20 ); + steps = []; + timer = 0; + + // Animate scrolling to the top of the page by generating steps to + // the top of the page and shifting to each step at a set interval. + while ( distance ) { + distance -= step; + if ( distance < 0 ) + distance = 0; + steps.push( distance ); + + setTimeout( function() { + window.scrollTo( 0, steps.shift() ); + }, timer * speed ); + + timer++; + } }; addEvent(w, 'load', function() { @@ -198,6 +240,10 @@ if ( typeof(jQuery) != 'undefined' ) { }); addEvent(aB, 'click', clickShortlink ); + + addEvent(aB, 'click', function(e) { + scrollToTop( e.target || e.srcElement ); + }); } if ( w.location.hash ) @@ -206,4 +252,3 @@ if ( typeof(jQuery) != 'undefined' ) { })(document, window); } - diff --git a/wp-includes/js/admin-bar.js b/wp-includes/js/admin-bar.js index 8856c1b48..b9600f22e 100644 --- a/wp-includes/js/admin-bar.js +++ b/wp-includes/js/admin-bar.js @@ -1 +1 @@ -if(typeof(jQuery)!="undefined"){if(typeof(jQuery.fn.hoverIntent)=="undefined"){(function(b){b.fn.hoverIntent=function(p,r){var g={sensitivity:7,interval:100,timeout:0};g=b.extend(g,r?{over:p,out:r}:p);var a,f,t,v;var u=function(c){a=c.pageX;f=c.pageY};var w=function(c,d){d.hoverIntent_t=clearTimeout(d.hoverIntent_t);if((Math.abs(t-a)+Math.abs(v-f))<g.sensitivity){b(d).unbind("mousemove",u);d.hoverIntent_s=1;return g.over.apply(d,[c])}else{t=a;v=f;d.hoverIntent_t=setTimeout(function(){w(c,d)},g.interval)}};var s=function(c,d){d.hoverIntent_t=clearTimeout(d.hoverIntent_t);d.hoverIntent_s=0;return g.out.apply(d,[c])};var x=function(e){var d=this;var c=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(c&&c!=this){try{c=c.parentNode}catch(e){c=this}}if(c==this){if(b.browser.mozilla){if(e.type=="mouseout"){d.mtout=setTimeout(function(){q(e,d)},30)}else{if(d.mtout){d.mtout=clearTimeout(d.mtout)}}}return}else{if(d.mtout){d.mtout=clearTimeout(d.mtout)}q(e,d)}};var q=function(e,d){var c=jQuery.extend({},e);if(d.hoverIntent_t){d.hoverIntent_t=clearTimeout(d.hoverIntent_t)}if(e.type=="mouseover"){t=c.pageX;v=c.pageY;b(d).bind("mousemove",u);if(d.hoverIntent_s!=1){d.hoverIntent_t=setTimeout(function(){w(c,d)},g.interval)}}else{b(d).unbind("mousemove",u);if(d.hoverIntent_s==1){d.hoverIntent_t=setTimeout(function(){s(c,d)},g.timeout)}}};return this.mouseover(x).mouseout(x)}})(jQuery)}jQuery(document).ready(function(b){var a=function(c,e){var f=b(e),d=f.attr("tabindex");if(d){f.attr("tabindex","0").attr("tabindex",d)}};b("#wpadminbar").removeClass("nojq").removeClass("nojs").find("li.menupop").hoverIntent({over:function(c){b(this).addClass("hover")},out:function(c){b(this).removeClass("hover")},timeout:180,sensitivity:7,interval:100});b("#wp-admin-bar-get-shortlink").click(function(c){c.preventDefault();b(this).addClass("selected").children(".shortlink-input").blur(function(){b(this).parents("#wp-admin-bar-get-shortlink").removeClass("selected")}).focus().select()});b("#wpadminbar li.menupop > .ab-item").bind("keydown.adminbar",function(f){if(f.which!=13){return}var d=b(f.target),c=d.closest("ab-sub-wrapper");f.stopPropagation();f.preventDefault();if(!c.length){c=b("#wpadminbar .quicklinks")}c.find(".menupop").removeClass("hover");d.parent().toggleClass("hover");d.siblings(".ab-sub-wrapper").find(".ab-item").each(a)}).each(a);b("#wpadminbar .ab-item").bind("keydown.adminbar",function(d){if(d.which!=27){return}var c=b(d.target);d.stopPropagation();d.preventDefault();c.closest(".hover").removeClass("hover").children(".ab-item").focus();c.siblings(".ab-sub-wrapper").find(".ab-item").each(a)})})}else{(function(i,k){var c=function(n,m,d){if(n.addEventListener){n.addEventListener(m,d,false)}else{if(n.attachEvent){n.attachEvent("on"+m,function(){return d.call(n,window.event)})}}},e,f=new RegExp("\\bhover\\b","g"),a=[],j=new RegExp("\\bselected\\b","g"),g=function(m){var d=a.length;while(d--){if(a[d]&&m==a[d][1]){return a[d][0]}}return false},h=function(s){var n,d,q,m,p,r,u=[],o=0;while(s&&s!=e&&s!=i){if("LI"==s.nodeName.toUpperCase()){u[u.length]=s;d=g(s);if(d){clearTimeout(d)}s.className=s.className?(s.className.replace(f,"")+" hover"):"hover";m=s}s=s.parentNode}if(m&&m.parentNode){p=m.parentNode;if(p&&"UL"==p.nodeName.toUpperCase()){n=p.childNodes.length;while(n--){r=p.childNodes[n];if(r!=m){r.className=r.className?r.className.replace(j,""):""}}}}n=a.length;while(n--){q=false;o=u.length;while(o--){if(u[o]==a[n][1]){q=true}}if(!q){a[n][1].className=a[n][1].className?a[n][1].className.replace(f,""):""}}},l=function(d){while(d&&d!=e&&d!=i){if("LI"==d.nodeName.toUpperCase()){(function(m){var n=setTimeout(function(){m.className=m.className?m.className.replace(f,""):""},500);a[a.length]=[n,m]})(d)}d=d.parentNode}},b=function(p){var n,d,o,m=p.target||p.srcElement;while(true){if(!m||m==i||m==e){return}if(m.id&&m.id=="wp-admin-bar-get-shortlink"){break}m=m.parentNode}if(p.preventDefault){p.preventDefault()}p.returnValue=false;if(-1==m.className.indexOf("selected")){m.className+=" selected"}for(n=0,d=m.childNodes.length;n<d;n++){o=m.childNodes[n];if(o.className&&-1!=o.className.indexOf("shortlink-input")){o.focus();o.select();o.onblur=function(){m.className=m.className?m.className.replace(j,""):""};break}}return false};c(k,"load",function(){e=i.getElementById("wpadminbar");if(i.body&&e){i.body.appendChild(e);if(e.className){e.className=e.className.replace(/nojs/,"")}c(e,"mouseover",function(d){h(d.target||d.srcElement)});c(e,"mouseout",function(d){l(d.target||d.srcElement)});c(e,"click",b)}if(k.location.hash){k.scrollBy(0,-32)}})})(document,window)}; \ No newline at end of file +if(typeof(jQuery)!="undefined"){if(typeof(jQuery.fn.hoverIntent)=="undefined"){(function(b){b.fn.hoverIntent=function(p,r){var g={sensitivity:7,interval:100,timeout:0};g=b.extend(g,r?{over:p,out:r}:p);var a,f,t,v;var u=function(c){a=c.pageX;f=c.pageY};var w=function(c,d){d.hoverIntent_t=clearTimeout(d.hoverIntent_t);if((Math.abs(t-a)+Math.abs(v-f))<g.sensitivity){b(d).unbind("mousemove",u);d.hoverIntent_s=1;return g.over.apply(d,[c])}else{t=a;v=f;d.hoverIntent_t=setTimeout(function(){w(c,d)},g.interval)}};var s=function(c,d){d.hoverIntent_t=clearTimeout(d.hoverIntent_t);d.hoverIntent_s=0;return g.out.apply(d,[c])};var x=function(e){var d=this;var c=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(c&&c!=this){try{c=c.parentNode}catch(e){c=this}}if(c==this){if(b.browser.mozilla){if(e.type=="mouseout"){d.mtout=setTimeout(function(){q(e,d)},30)}else{if(d.mtout){d.mtout=clearTimeout(d.mtout)}}}return}else{if(d.mtout){d.mtout=clearTimeout(d.mtout)}q(e,d)}};var q=function(e,d){var c=jQuery.extend({},e);if(d.hoverIntent_t){d.hoverIntent_t=clearTimeout(d.hoverIntent_t)}if(e.type=="mouseover"){t=c.pageX;v=c.pageY;b(d).bind("mousemove",u);if(d.hoverIntent_s!=1){d.hoverIntent_t=setTimeout(function(){w(c,d)},g.interval)}}else{b(d).unbind("mousemove",u);if(d.hoverIntent_s==1){d.hoverIntent_t=setTimeout(function(){s(c,d)},g.timeout)}}};return this.mouseover(x).mouseout(x)}})(jQuery)}jQuery(document).ready(function(b){var a=function(c,e){var f=b(e),d=f.attr("tabindex");if(d){f.attr("tabindex","0").attr("tabindex",d)}};b("#wpadminbar").removeClass("nojq").removeClass("nojs").find("li.menupop").hoverIntent({over:function(c){b(this).addClass("hover")},out:function(c){b(this).removeClass("hover")},timeout:180,sensitivity:7,interval:100});b("#wp-admin-bar-get-shortlink").click(function(c){c.preventDefault();b(this).addClass("selected").children(".shortlink-input").blur(function(){b(this).parents("#wp-admin-bar-get-shortlink").removeClass("selected")}).focus().select()});b("#wpadminbar li.menupop > .ab-item").bind("keydown.adminbar",function(f){if(f.which!=13){return}var d=b(f.target),c=d.closest("ab-sub-wrapper");f.stopPropagation();f.preventDefault();if(!c.length){c=b("#wpadminbar .quicklinks")}c.find(".menupop").removeClass("hover");d.parent().toggleClass("hover");d.siblings(".ab-sub-wrapper").find(".ab-item").each(a)}).each(a);b("#wpadminbar .ab-item").bind("keydown.adminbar",function(d){if(d.which!=27){return}var c=b(d.target);d.stopPropagation();d.preventDefault();c.closest(".hover").removeClass("hover").children(".ab-item").focus();c.siblings(".ab-sub-wrapper").find(".ab-item").each(a)});b("#wpadminbar").click(function(c){if(c.target.id!="wpadminbar"&&c.target.id!="wp-admin-bar-top-secondary"){return}c.preventDefault();b("html, body").animate({scrollTop:0},"fast")})})}else{(function(j,l){var e=function(o,n,d){if(o.addEventListener){o.addEventListener(n,d,false)}else{if(o.attachEvent){o.attachEvent("on"+n,function(){return d.call(o,window.event)})}}},f,g=new RegExp("\\bhover\\b","g"),b=[],k=new RegExp("\\bselected\\b","g"),h=function(n){var d=b.length;while(d--){if(b[d]&&n==b[d][1]){return b[d][0]}}return false},i=function(u){var o,d,r,n,q,s,v=[],p=0;while(u&&u!=f&&u!=j){if("LI"==u.nodeName.toUpperCase()){v[v.length]=u;d=h(u);if(d){clearTimeout(d)}u.className=u.className?(u.className.replace(g,"")+" hover"):"hover";n=u}u=u.parentNode}if(n&&n.parentNode){q=n.parentNode;if(q&&"UL"==q.nodeName.toUpperCase()){o=q.childNodes.length;while(o--){s=q.childNodes[o];if(s!=n){s.className=s.className?s.className.replace(k,""):""}}}}o=b.length;while(o--){r=false;p=v.length;while(p--){if(v[p]==b[o][1]){r=true}}if(!r){b[o][1].className=b[o][1].className?b[o][1].className.replace(g,""):""}}},m=function(d){while(d&&d!=f&&d!=j){if("LI"==d.nodeName.toUpperCase()){(function(n){var o=setTimeout(function(){n.className=n.className?n.className.replace(g,""):""},500);b[b.length]=[o,n]})(d)}d=d.parentNode}},c=function(q){var o,d,p,n=q.target||q.srcElement;while(true){if(!n||n==j||n==f){return}if(n.id&&n.id=="wp-admin-bar-get-shortlink"){break}n=n.parentNode}if(q.preventDefault){q.preventDefault()}q.returnValue=false;if(-1==n.className.indexOf("selected")){n.className+=" selected"}for(o=0,d=n.childNodes.length;o<d;o++){p=n.childNodes[o];if(p.className&&-1!=p.className.indexOf("shortlink-input")){p.focus();p.select();p.onblur=function(){n.className=n.className?n.className.replace(k,""):""};break}}return false},a=function(n){var s,q,p,d,r,o;if(n.id!="wpadminbar"&&n.id!="wp-admin-bar-top-secondary"){return}s=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;if(s<1){return}o=s>800?130:100;q=Math.min(12,Math.round(s/o));p=s>800?Math.round(s/30):Math.round(s/20);d=[];r=0;while(s){s-=p;if(s<0){s=0}d.push(s);setTimeout(function(){window.scrollTo(0,d.shift())},r*q);r++}};e(l,"load",function(){f=j.getElementById("wpadminbar");if(j.body&&f){j.body.appendChild(f);if(f.className){f.className=f.className.replace(/nojs/,"")}e(f,"mouseover",function(d){i(d.target||d.srcElement)});e(f,"mouseout",function(d){m(d.target||d.srcElement)});e(f,"click",c);e(f,"click",function(d){a(d.target||d.srcElement)})}if(l.location.hash){l.scrollBy(0,-32)}})})(document,window)}; \ No newline at end of file diff --git a/wp-includes/js/autosave.dev.js b/wp-includes/js/autosave.dev.js index f1b373835..66e3bbc68 100644 --- a/wp-includes/js/autosave.dev.js +++ b/wp-includes/js/autosave.dev.js @@ -229,7 +229,7 @@ function autosave_enable_buttons() { function autosave_disable_buttons() { jQuery(':button, :submit', '#submitpost').prop('disabled', true); - // Re-enable 5 sec later. Just gives autosave a head start to avoid collisions. + // Re-enable 5 sec later. Just gives autosave a head start to avoid collisions. setTimeout(autosave_enable_buttons, 5000); } diff --git a/wp-includes/js/customize-base.dev.js b/wp-includes/js/customize-base.dev.js new file mode 100644 index 000000000..d25ec31f6 --- /dev/null +++ b/wp-includes/js/customize-base.dev.js @@ -0,0 +1,586 @@ +if ( typeof wp === 'undefined' ) + var wp = {}; + +(function( exports, $ ){ + var api, extend, ctor, inherits, + slice = Array.prototype.slice; + + /* ===================================================================== + * Micro-inheritance - thank you, backbone.js. + * ===================================================================== */ + + extend = function( protoProps, classProps ) { + var child = inherits( this, protoProps, classProps ); + child.extend = this.extend; + return child; + }; + + // Shared empty constructor function to aid in prototype-chain creation. + ctor = function() {}; + + // Helper function to correctly set up the prototype chain, for subclasses. + // Similar to `goog.inherits`, but uses a hash of prototype properties and + // class properties to be extended. + inherits = function( parent, protoProps, staticProps ) { + var child; + + // The constructor function for the new subclass is either defined by you + // (the "constructor" property in your `extend` definition), or defaulted + // by us to simply call `super()`. + if ( protoProps && protoProps.hasOwnProperty( 'constructor' ) ) { + child = protoProps.constructor; + } else { + child = function() { + // Storing the result `super()` before returning the value + // prevents a bug in Opera where, if the constructor returns + // a function, Opera will reject the return value in favor of + // the original object. This causes all sorts of trouble. + var result = parent.apply( this, arguments ); + return result; + }; + } + + // Inherit class (static) properties from parent. + $.extend( child, parent ); + + // Set the prototype chain to inherit from `parent`, without calling + // `parent`'s constructor function. + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + + // Add prototype properties (instance properties) to the subclass, + // if supplied. + if ( protoProps ) + $.extend( child.prototype, protoProps ); + + // Add static properties to the constructor function, if supplied. + if ( staticProps ) + $.extend( child, staticProps ); + + // Correctly set child's `prototype.constructor`. + child.prototype.constructor = child; + + // Set a convenience property in case the parent's prototype is needed later. + child.__super__ = parent.prototype; + + return child; + }; + + api = {}; + + /* ===================================================================== + * Base class. + * ===================================================================== */ + + api.Class = function( applicator, argsArray, options ) { + var magic, args = arguments; + + if ( applicator && argsArray && api.Class.applicator === applicator ) { + args = argsArray; + $.extend( this, options || {} ); + } + + magic = this; + if ( this.instance ) { + magic = function() { + return magic.instance.apply( magic, arguments ); + }; + + $.extend( magic, this ); + } + + magic.initialize.apply( magic, args ); + return magic; + }; + + api.Class.applicator = {}; + + api.Class.prototype.initialize = function() {}; + + /* + * Checks whether a given instance extended a constructor. + * + * The magic surrounding the instance parameter causes the instanceof + * keyword to return inaccurate results; it defaults to the function's + * prototype instead of the constructor chain. Hence this function. + */ + api.Class.prototype.extended = function( constructor ) { + var proto = this; + + while ( typeof proto.constructor !== 'undefined' ) { + if ( proto.constructor === constructor ) + return true; + if ( typeof proto.constructor.__super__ === 'undefined' ) + return false; + proto = proto.constructor.__super__; + } + return false; + }; + + api.Class.extend = extend; + + /* ===================================================================== + * Events mixin. + * ===================================================================== */ + + api.Events = { + trigger: function( id ) { + if ( this.topics && this.topics[ id ] ) + this.topics[ id ].fireWith( this, slice.call( arguments, 1 ) ); + return this; + }, + + bind: function( id, callback ) { + this.topics = this.topics || {}; + this.topics[ id ] = this.topics[ id ] || $.Callbacks(); + this.topics[ id ].add.apply( this.topics[ id ], slice.call( arguments, 1 ) ); + return this; + }, + + unbind: function( id, callback ) { + if ( this.topics && this.topics[ id ] ) + this.topics[ id ].remove.apply( this.topics[ id ], slice.call( arguments, 1 ) ); + return this; + } + }; + + /* ===================================================================== + * Observable values that support two-way binding. + * ===================================================================== */ + + api.Value = api.Class.extend({ + initialize: function( initial, options ) { + this._value = initial; // @todo: potentially change this to a this.set() call. + this.callbacks = $.Callbacks(); + + $.extend( this, options || {} ); + + this.set = $.proxy( this.set, this ); + }, + + /* + * Magic. Returns a function that will become the instance. + * Set to null to prevent the instance from extending a function. + */ + instance: function() { + return arguments.length ? this.set.apply( this, arguments ) : this.get(); + }, + + get: function() { + return this._value; + }, + + set: function( to ) { + var from = this._value; + + to = this._setter.apply( this, arguments ); + to = this.validate( to ); + + // Bail if the sanitized value is null or unchanged. + if ( null === to || this._value === to ) + return this; + + this._value = to; + + this.callbacks.fireWith( this, [ to, from ] ); + + return this; + }, + + _setter: function( to ) { + return to; + }, + + setter: function( callback ) { + var from = this.get(); + this._setter = callback; + // Temporarily clear value so setter can decide if it's valid. + this._value = null; + this.set( from ); + return this; + }, + + resetSetter: function() { + this._setter = this.constructor.prototype._setter; + this.set( this.get() ); + return this; + }, + + validate: function( value ) { + return value; + }, + + bind: function( callback ) { + this.callbacks.add.apply( this.callbacks, arguments ); + return this; + }, + + unbind: function( callback ) { + this.callbacks.remove.apply( this.callbacks, arguments ); + return this; + }, + + link: function() { // values* + var set = this.set; + $.each( arguments, function() { + this.bind( set ); + }); + return this; + }, + + unlink: function() { // values* + var set = this.set; + $.each( arguments, function() { + this.unbind( set ); + }); + return this; + }, + + sync: function() { // values* + var that = this; + $.each( arguments, function() { + that.link( this ); + this.link( that ); + }); + return this; + }, + + unsync: function() { // values* + var that = this; + $.each( arguments, function() { + that.unlink( this ); + this.unlink( that ); + }); + return this; + } + }); + + /* ===================================================================== + * A collection of observable values. + * ===================================================================== */ + + api.Values = api.Class.extend({ + defaultConstructor: api.Value, + + initialize: function( options ) { + $.extend( this, options || {} ); + + this._value = {}; + this._deferreds = {}; + }, + + instance: function( id ) { + if ( arguments.length === 1 ) + return this.value( id ); + + return this.when.apply( this, arguments ); + }, + + value: function( id ) { + return this._value[ id ]; + }, + + has: function( id ) { + return typeof this._value[ id ] !== 'undefined'; + }, + + add: function( id, value ) { + if ( this.has( id ) ) + return this.value( id ); + + this._value[ id ] = value; + value.parent = this; + if ( value.extended( api.Value ) ) + value.bind( this._change ); + + this.trigger( 'add', value ); + + if ( this._deferreds[ id ] ) + this._deferreds[ id ].resolve(); + + return this._value[ id ]; + }, + + create: function( id ) { + return this.add( id, new this.defaultConstructor( api.Class.applicator, slice.call( arguments, 1 ) ) ); + }, + + each: function( callback, context ) { + context = typeof context === 'undefined' ? this : context; + + $.each( this._value, function( key, obj ) { + callback.call( context, obj, key ); + }); + }, + + remove: function( id ) { + var value; + + if ( this.has( id ) ) { + value = this.value( id ); + this.trigger( 'remove', value ); + if ( value.extended( api.Value ) ) + value.unbind( this._change ); + delete value.parent; + } + + delete this._value[ id ]; + delete this._deferreds[ id ]; + }, + + /** + * Runs a callback once all requested values exist. + * + * when( ids*, [callback] ); + * + * For example: + * when( id1, id2, id3, function( value1, value2, value3 ) {} ); + * + * @returns $.Deferred.promise(); + */ + when: function() { + var self = this, + ids = slice.call( arguments ), + dfd = $.Deferred(); + + // If the last argument is a callback, bind it to .done() + if ( $.isFunction( ids[ ids.length - 1 ] ) ) + dfd.done( ids.pop() ); + + $.when.apply( $, $.map( ids, function( id ) { + if ( self.has( id ) ) + return; + + return self._deferreds[ id ] = self._deferreds[ id ] || $.Deferred(); + })).done( function() { + var values = $.map( ids, function( id ) { + return self( id ); + }); + + // If a value is missing, we've used at least one expired deferred. + // Call Values.when again to generate a new deferred. + if ( values.length !== ids.length ) { + // ids.push( callback ); + self.when.apply( self, ids ).done( function() { + dfd.resolveWith( self, values ); + }); + return; + } + + dfd.resolveWith( self, values ); + }); + + return dfd.promise(); + }, + + _change: function() { + this.parent.trigger( 'change', this ); + } + }); + + $.extend( api.Values.prototype, api.Events ); + + /* ===================================================================== + * An observable value that syncs with an element. + * + * Handles inputs, selects, and textareas by default. + * ===================================================================== */ + + api.ensure = function( element ) { + return typeof element == 'string' ? $( element ) : element; + }; + + api.Element = api.Value.extend({ + initialize: function( element, options ) { + var self = this, + synchronizer = api.Element.synchronizer.html, + type, update, refresh; + + this.element = api.ensure( element ); + this.events = ''; + + if ( this.element.is('input, select, textarea') ) { + this.events += 'change'; + synchronizer = api.Element.synchronizer.val; + + if ( this.element.is('input') ) { + type = this.element.prop('type'); + if ( api.Element.synchronizer[ type ] ) + synchronizer = api.Element.synchronizer[ type ]; + if ( 'text' === type || 'password' === type ) + this.events += ' keyup'; + } else if ( this.element.is('textarea') ) { + this.events += ' keyup'; + } + } + + api.Value.prototype.initialize.call( this, null, $.extend( options || {}, synchronizer ) ); + this._value = this.get(); + + update = this.update; + refresh = this.refresh; + + this.update = function( to ) { + if ( to !== refresh.call( self ) ) + update.apply( this, arguments ); + }; + this.refresh = function() { + self.set( refresh.call( self ) ); + }; + + this.bind( this.update ); + this.element.bind( this.events, this.refresh ); + }, + + find: function( selector ) { + return $( selector, this.element ); + }, + + refresh: function() {}, + + update: function() {} + }); + + api.Element.synchronizer = {}; + + $.each( [ 'html', 'val' ], function( i, method ) { + api.Element.synchronizer[ method ] = { + update: function( to ) { + this.element[ method ]( to ); + }, + refresh: function() { + return this.element[ method ](); + } + }; + }); + + api.Element.synchronizer.checkbox = { + update: function( to ) { + this.element.prop( 'checked', to ); + }, + refresh: function() { + return this.element.prop( 'checked' ); + } + }; + + api.Element.synchronizer.radio = { + update: function( to ) { + this.element.filter( function() { + return this.value === to; + }).prop( 'checked', true ); + }, + refresh: function() { + return this.element.filter( ':checked' ).val(); + } + }; + + /* ===================================================================== + * Messenger for postMessage. + * ===================================================================== */ + + $.support.postMessage = !! window.postMessage; + + api.Messenger = api.Class.extend({ + add: function( key, initial, options ) { + return this[ key ] = new api.Value( initial, options ); + }, + + /** + * Initialize Messenger. + * + * @param {object} params Parameters to configure the messenger. + * {string} .url The URL to communicate with. + * {window} .targetWindow The window instance to communicate with. Default window.parent. + * {string} .channel If provided, will send the channel with each message and only accept messages a matching channel. + * @param {object} options Extend any instance parameter or method with this object. + */ + initialize: function( params, options ) { + // Target the parent frame by default, but only if a parent frame exists. + var defaultTarget = window.parent == window ? null : window.parent; + + $.extend( this, options || {} ); + + this.add( 'channel', params.channel ); + this.add( 'url', params.url || '' ); + this.add( 'targetWindow', params.targetWindow || defaultTarget ); + this.add( 'origin', this.url() ).link( this.url ).setter( function( to ) { + return to.replace( /([^:]+:\/\/[^\/]+).*/, '$1' ); + }); + + // Since we want jQuery to treat the receive function as unique + // to this instance, we give the function a new guid. + // + // This will prevent every Messenger's receive function from being + // unbound when calling $.off( 'message', this.receive ); + this.receive = $.proxy( this.receive, this ); + this.receive.guid = $.guid++; + + $( window ).on( 'message', this.receive ); + }, + + destroy: function() { + $( window ).off( 'message', this.receive ); + }, + + receive: function( event ) { + var message; + + event = event.originalEvent; + + if ( ! this.targetWindow() ) + return; + + // Check to make sure the origin is valid. + if ( this.origin() && event.origin !== this.origin() ) + return; + + message = JSON.parse( event.data ); + + // Check required message properties. + if ( ! message || ! message.id || typeof message.data === 'undefined' ) + return; + + // Check if channel names match. + if ( ( message.channel || this.channel() ) && this.channel() !== message.channel ) + return; + + this.trigger( message.id, message.data ); + }, + + send: function( id, data ) { + var message; + + data = typeof data === 'undefined' ? null : data; + + if ( ! this.url() || ! this.targetWindow() ) + return; + + message = { id: id, data: data }; + if ( this.channel() ) + message.channel = this.channel(); + + this.targetWindow().postMessage( JSON.stringify( message ), this.origin() ); + } + }); + + // Add the Events mixin to api.Messenger. + $.extend( api.Messenger.prototype, api.Events ); + + /* ===================================================================== + * Core customize object. + * ===================================================================== */ + + api = $.extend( new api.Values(), api ); + api.get = function() { + var result = {}; + + this.each( function( obj, key ) { + result[ key ] = obj.get(); + }); + + return result; + }; + + // Expose the API to the world. + exports.customize = api; +})( wp, jQuery ); diff --git a/wp-includes/js/customize-base.js b/wp-includes/js/customize-base.js new file mode 100644 index 000000000..951494999 --- /dev/null +++ b/wp-includes/js/customize-base.js @@ -0,0 +1 @@ +if(typeof wp==="undefined"){var wp={}}(function(a,d){var b,g,c,f,e=Array.prototype.slice;g=function(h,i){var j=f(this,h,i);j.extend=this.extend;return j};c=function(){};f=function(i,h,j){var k;if(h&&h.hasOwnProperty("constructor")){k=h.constructor}else{k=function(){var l=i.apply(this,arguments);return l}}d.extend(k,i);c.prototype=i.prototype;k.prototype=new c();if(h){d.extend(k.prototype,h)}if(j){d.extend(k,j)}k.prototype.constructor=k;k.__super__=i.prototype;return k};b={};b.Class=function(l,k,i){var j,h=arguments;if(l&&k&&b.Class.applicator===l){h=k;d.extend(this,i||{})}j=this;if(this.instance){j=function(){return j.instance.apply(j,arguments)};d.extend(j,this)}j.initialize.apply(j,h);return j};b.Class.applicator={};b.Class.prototype.initialize=function(){};b.Class.prototype.extended=function(h){var i=this;while(typeof i.constructor!=="undefined"){if(i.constructor===h){return true}if(typeof i.constructor.__super__==="undefined"){return false}i=i.constructor.__super__}return false};b.Class.extend=g;b.Events={trigger:function(h){if(this.topics&&this.topics[h]){this.topics[h].fireWith(this,e.call(arguments,1))}return this},bind:function(i,h){this.topics=this.topics||{};this.topics[i]=this.topics[i]||d.Callbacks();this.topics[i].add.apply(this.topics[i],e.call(arguments,1));return this},unbind:function(i,h){if(this.topics&&this.topics[i]){this.topics[i].remove.apply(this.topics[i],e.call(arguments,1))}return this}};b.Value=b.Class.extend({initialize:function(i,h){this._value=i;this.callbacks=d.Callbacks();d.extend(this,h||{});this.set=d.proxy(this.set,this)},instance:function(){return arguments.length?this.set.apply(this,arguments):this.get()},get:function(){return this._value},set:function(i){var h=this._value;i=this._setter.apply(this,arguments);i=this.validate(i);if(null===i||this._value===i){return this}this._value=i;this.callbacks.fireWith(this,[i,h]);return this},_setter:function(h){return h},setter:function(i){var h=this.get();this._setter=i;this._value=null;this.set(h);return this},resetSetter:function(){this._setter=this.constructor.prototype._setter;this.set(this.get());return this},validate:function(h){return h},bind:function(h){this.callbacks.add.apply(this.callbacks,arguments);return this},unbind:function(h){this.callbacks.remove.apply(this.callbacks,arguments);return this},link:function(){var h=this.set;d.each(arguments,function(){this.bind(h)});return this},unlink:function(){var h=this.set;d.each(arguments,function(){this.unbind(h)});return this},sync:function(){var h=this;d.each(arguments,function(){h.link(this);this.link(h)});return this},unsync:function(){var h=this;d.each(arguments,function(){h.unlink(this);this.unlink(h)});return this}});b.Values=b.Class.extend({defaultConstructor:b.Value,initialize:function(h){d.extend(this,h||{});this._value={};this._deferreds={}},instance:function(h){if(arguments.length===1){return this.value(h)}return this.when.apply(this,arguments)},value:function(h){return this._value[h]},has:function(h){return typeof this._value[h]!=="undefined"},add:function(i,h){if(this.has(i)){return this.value(i)}this._value[i]=h;h.parent=this;if(h.extended(b.Value)){h.bind(this._change)}this.trigger("add",h);if(this._deferreds[i]){this._deferreds[i].resolve()}return this._value[i]},create:function(h){return this.add(h,new this.defaultConstructor(b.Class.applicator,e.call(arguments,1)))},each:function(i,h){h=typeof h==="undefined"?this:h;d.each(this._value,function(j,k){i.call(h,k,j)})},remove:function(i){var h;if(this.has(i)){h=this.value(i);this.trigger("remove",h);if(h.extended(b.Value)){h.unbind(this._change)}delete h.parent}delete this._value[i];delete this._deferreds[i]},when:function(){var i=this,j=e.call(arguments),h=d.Deferred();if(d.isFunction(j[j.length-1])){h.done(j.pop())}d.when.apply(d,d.map(j,function(k){if(i.has(k)){return}return i._deferreds[k]=i._deferreds[k]||d.Deferred()})).done(function(){var k=d.map(j,function(l){return i(l)});if(k.length!==j.length){i.when.apply(i,j).done(function(){h.resolveWith(i,k)});return}h.resolveWith(i,k)});return h.promise()},_change:function(){this.parent.trigger("change",this)}});d.extend(b.Values.prototype,b.Events);b.ensure=function(h){return typeof h=="string"?d(h):h};b.Element=b.Value.extend({initialize:function(j,i){var h=this,m=b.Element.synchronizer.html,l,n,k;this.element=b.ensure(j);this.events="";if(this.element.is("input, select, textarea")){this.events+="change";m=b.Element.synchronizer.val;if(this.element.is("input")){l=this.element.prop("type");if(b.Element.synchronizer[l]){m=b.Element.synchronizer[l]}if("text"===l||"password"===l){this.events+=" keyup"}}else{if(this.element.is("textarea")){this.events+=" keyup"}}}b.Value.prototype.initialize.call(this,null,d.extend(i||{},m));this._value=this.get();n=this.update;k=this.refresh;this.update=function(o){if(o!==k.call(h)){n.apply(this,arguments)}};this.refresh=function(){h.set(k.call(h))};this.bind(this.update);this.element.bind(this.events,this.refresh)},find:function(h){return d(h,this.element)},refresh:function(){},update:function(){}});b.Element.synchronizer={};d.each(["html","val"],function(h,j){b.Element.synchronizer[j]={update:function(i){this.element[j](i)},refresh:function(){return this.element[j]()}}});b.Element.synchronizer.checkbox={update:function(h){this.element.prop("checked",h)},refresh:function(){return this.element.prop("checked")}};b.Element.synchronizer.radio={update:function(h){this.element.filter(function(){return this.value===h}).prop("checked",true)},refresh:function(){return this.element.filter(":checked").val()}};d.support.postMessage=!!window.postMessage;b.Messenger=b.Class.extend({add:function(j,i,h){return this[j]=new b.Value(i,h)},initialize:function(j,h){var i=window.parent==window?null:window.parent;d.extend(this,h||{});this.add("channel",j.channel);this.add("url",j.url||"");this.add("targetWindow",j.targetWindow||i);this.add("origin",this.url()).link(this.url).setter(function(k){return k.replace(/([^:]+:\/\/[^\/]+).*/,"$1")});this.receive=d.proxy(this.receive,this);this.receive.guid=d.guid++;d(window).on("message",this.receive)},destroy:function(){d(window).off("message",this.receive)},receive:function(i){var h;i=i.originalEvent;if(!this.targetWindow()){return}if(this.origin()&&i.origin!==this.origin()){return}h=JSON.parse(i.data);if(!h||!h.id||typeof h.data==="undefined"){return}if((h.channel||this.channel())&&this.channel()!==h.channel){return}this.trigger(h.id,h.data)},send:function(j,i){var h;i=typeof i==="undefined"?null:i;if(!this.url()||!this.targetWindow()){return}h={id:j,data:i};if(this.channel()){h.channel=this.channel()}this.targetWindow().postMessage(JSON.stringify(h),this.origin())}});d.extend(b.Messenger.prototype,b.Events);b=d.extend(new b.Values(),b);b.get=function(){var h={};this.each(function(j,i){h[i]=j.get()});return h};a.customize=b})(wp,jQuery); \ No newline at end of file diff --git a/wp-includes/js/customize-loader.dev.js b/wp-includes/js/customize-loader.dev.js new file mode 100644 index 000000000..01cec6aca --- /dev/null +++ b/wp-includes/js/customize-loader.dev.js @@ -0,0 +1,159 @@ +if ( typeof wp === 'undefined' ) + var wp = {}; + +(function( exports, $ ){ + var api = wp.customize, + Loader; + + $.extend( $.support, { + history: !! ( window.history && history.pushState ), + hashchange: ('onhashchange' in window) && (document.documentMode === undefined || document.documentMode > 7) + }); + + Loader = $.extend( {}, api.Events, { + initialize: function() { + this.body = $( document.body ); + + // Ensure the loader is supported. + // Check for settings, postMessage support, and whether we require CORS support. + if ( ! Loader.settings || ! $.support.postMessage || ( ! $.support.cors && Loader.settings.isCrossDomain ) ) { + return; + } + + this.window = $( window ); + this.element = $( '<div id="customize-container" />' ).appendTo( this.body ); + + this.bind( 'open', this.overlay.show ); + this.bind( 'close', this.overlay.hide ); + + $('#wpbody').on( 'click', '.load-customize', function( event ) { + event.preventDefault(); + + // Load the theme. + Loader.open( $(this).attr('href') ); + }); + + // Add navigation listeners. + if ( $.support.history ) + this.window.on( 'popstate', Loader.popstate ); + + if ( $.support.hashchange ) { + this.window.on( 'hashchange', Loader.hashchange ); + this.window.triggerHandler( 'hashchange' ); + } + }, + + popstate: function( e ) { + var state = e.originalEvent.state; + if ( state && state.customize ) + Loader.open( state.customize ); + else if ( Loader.active ) + Loader.close(); + }, + + hashchange: function( e ) { + var hash = window.location.toString().split('#')[1]; + + if ( hash && 0 === hash.indexOf( 'wp_customize=on' ) ) + Loader.open( Loader.settings.url + '?' + hash ); + + if ( ! hash && ! $.support.history ) + Loader.close(); + }, + + open: function( src ) { + var hash; + + if ( this.active ) + return; + + // Load the full page on mobile devices. + if ( Loader.settings.browser.mobile ) + return window.location = src; + + this.active = true; + this.body.addClass('customize-loading'); + + this.iframe = $( '<iframe />', { src: src }).appendTo( this.element ); + this.iframe.one( 'load', this.loaded ); + + // Create a postMessage connection with the iframe. + this.messenger = new api.Messenger({ + url: src, + channel: 'loader', + targetWindow: this.iframe[0].contentWindow + }); + + // Wait for the connection from the iframe before sending any postMessage events. + this.messenger.bind( 'ready', function() { + Loader.messenger.send( 'back' ); + }); + + this.messenger.bind( 'close', function() { + if ( $.support.history ) + history.back(); + else if ( $.support.hashchange ) + window.location.hash = ''; + else + Loader.close(); + }); + + this.messenger.bind( 'activated', function( location ) { + if ( location ) + window.location = location; + }); + + hash = src.split('?')[1]; + + // Ensure we don't call pushState if the user hit the forward button. + if ( $.support.history && window.location.href !== src ) + history.pushState( { customize: src }, '', src ); + else if ( ! $.support.history && $.support.hashchange && hash ) + window.location.hash = 'wp_customize=on&' + hash; + + this.trigger( 'open' ); + }, + + opened: function() { + Loader.body.addClass( 'customize-active full-overlay-active' ); + }, + + close: function() { + if ( ! this.active ) + return; + this.active = false; + + this.trigger( 'close' ); + }, + + closed: function() { + Loader.iframe.remove(); + Loader.messenger.destroy(); + Loader.iframe = null; + Loader.messenger = null; + Loader.body.removeClass( 'customize-active full-overlay-active' ).removeClass( 'customize-loading' ); + }, + + loaded: function() { + Loader.body.removeClass('customize-loading'); + }, + + overlay: { + show: function() { + this.element.fadeIn( 200, Loader.opened ); + }, + + hide: function() { + this.element.fadeOut( 200, Loader.closed ); + } + } + }); + + $( function() { + Loader.settings = _wpCustomizeLoaderSettings; + Loader.initialize(); + }); + + // Expose the API to the world. + api.Loader = Loader; +})( wp, jQuery ); diff --git a/wp-includes/js/customize-loader.js b/wp-includes/js/customize-loader.js new file mode 100644 index 000000000..4c7e0853b --- /dev/null +++ b/wp-includes/js/customize-loader.js @@ -0,0 +1 @@ +if(typeof wp==="undefined"){var wp={}}(function(a,c){var b=wp.customize,d;c.extend(c.support,{history:!!(window.history&&history.pushState),hashchange:("onhashchange" in window)&&(document.documentMode===undefined||document.documentMode>7)});d=c.extend({},b.Events,{initialize:function(){this.body=c(document.body);if(!d.settings||!c.support.postMessage||(!c.support.cors&&d.settings.isCrossDomain)){return}this.window=c(window);this.element=c('<div id="customize-container" />').appendTo(this.body);this.bind("open",this.overlay.show);this.bind("close",this.overlay.hide);c("#wpbody").on("click",".load-customize",function(e){e.preventDefault();d.open(c(this).attr("href"))});if(c.support.history){this.window.on("popstate",d.popstate)}if(c.support.hashchange){this.window.on("hashchange",d.hashchange);this.window.triggerHandler("hashchange")}},popstate:function(g){var f=g.originalEvent.state;if(f&&f.customize){d.open(f.customize)}else{if(d.active){d.close()}}},hashchange:function(g){var f=window.location.toString().split("#")[1];if(f&&0===f.indexOf("wp_customize=on")){d.open(d.settings.url+"?"+f)}if(!f&&!c.support.history){d.close()}},open:function(f){var e;if(this.active){return}if(d.settings.browser.mobile){return window.location=f}this.active=true;this.body.addClass("customize-loading");this.iframe=c("<iframe />",{src:f}).appendTo(this.element);this.iframe.one("load",this.loaded);this.messenger=new b.Messenger({url:f,channel:"loader",targetWindow:this.iframe[0].contentWindow});this.messenger.bind("ready",function(){d.messenger.send("back")});this.messenger.bind("close",function(){if(c.support.history){history.back()}else{if(c.support.hashchange){window.location.hash=""}else{d.close()}}});this.messenger.bind("activated",function(g){if(g){window.location=g}});e=f.split("?")[1];if(c.support.history&&window.location.href!==f){history.pushState({customize:f},"",f)}else{if(!c.support.history&&c.support.hashchange&&e){window.location.hash="wp_customize=on&"+e}}this.trigger("open")},opened:function(){d.body.addClass("customize-active full-overlay-active")},close:function(){if(!this.active){return}this.active=false;this.trigger("close")},closed:function(){d.iframe.remove();d.messenger.destroy();d.iframe=null;d.messenger=null;d.body.removeClass("customize-active full-overlay-active").removeClass("customize-loading")},loaded:function(){d.body.removeClass("customize-loading")},overlay:{show:function(){this.element.fadeIn(200,d.opened)},hide:function(){this.element.fadeOut(200,d.closed)}}});c(function(){d.settings=_wpCustomizeLoaderSettings;d.initialize()});b.Loader=d})(wp,jQuery); \ No newline at end of file diff --git a/wp-includes/js/customize-preview.dev.js b/wp-includes/js/customize-preview.dev.js new file mode 100644 index 000000000..28af66b8d --- /dev/null +++ b/wp-includes/js/customize-preview.dev.js @@ -0,0 +1,141 @@ +(function( exports, $ ){ + var api = wp.customize, + debounce; + + debounce = function( fn, delay, context ) { + var timeout; + return function() { + var args = arguments; + + context = context || this; + + clearTimeout( timeout ); + timeout = setTimeout( function() { + timeout = null; + fn.apply( context, args ); + }, delay ); + }; + }; + + api.Preview = api.Messenger.extend({ + /** + * Requires params: + * - url - the URL of preview frame + */ + initialize: function( params, options ) { + var self = this; + + api.Messenger.prototype.initialize.call( this, params, options ); + + this.body = $( document.body ); + this.body.on( 'click.preview', 'a', function( event ) { + event.preventDefault(); + self.send( 'scroll', 0 ); + self.send( 'url', $(this).prop('href') ); + }); + + // You cannot submit forms. + // @todo: Allow form submissions by mixing $_POST data with the customize setting $_POST data. + this.body.on( 'submit.preview', 'form', function( event ) { + event.preventDefault(); + }); + + this.window = $( window ); + this.window.on( 'scroll.preview', debounce( function() { + self.send( 'scroll', self.window.scrollTop() ); + }, 200 )); + + this.bind( 'scroll', function( distance ) { + self.window.scrollTop( distance ); + }); + } + }); + + $( function() { + api.settings = window._wpCustomizeSettings; + if ( ! api.settings ) + return; + + var preview, bg; + + preview = new api.Preview({ + url: window.location.href, + channel: api.settings.channel + }); + + preview.bind( 'settings', function( values ) { + $.each( values, function( id, value ) { + if ( api.has( id ) ) + api( id ).set( value ); + else + api.create( id, value ); + }); + }); + + preview.trigger( 'settings', api.settings.values ); + + preview.bind( 'setting', function( args ) { + var value; + + args = args.slice(); + + if ( value = api( args.shift() ) ) + value.set.apply( value, args ); + }); + + preview.bind( 'sync', function( events ) { + $.each( events, function( event, args ) { + preview.trigger( event, args ); + }); + preview.send( 'synced' ); + }) + + preview.send( 'ready' ); + + /* Custom Backgrounds */ + bg = $.map(['color', 'image', 'position_x', 'repeat', 'attachment'], function( prop ) { + return 'background_' + prop; + }); + + api.when.apply( api, bg ).done( function( color, image, position_x, repeat, attachment ) { + var body = $(document.body), + head = $('head'), + style = $('#custom-background-css'), + update; + + // If custom backgrounds are active and we can't find the + // default output, bail. + if ( body.hasClass('custom-background') && ! style.length ) + return; + + update = function() { + var css = ''; + + // The body will support custom backgrounds if either + // the color or image are set. + // + // See get_body_class() in /wp-includes/post-template.php + body.toggleClass( 'custom-background', !! ( color() || image() ) ); + + if ( color() ) + css += 'background-color: ' + color() + ';'; + + if ( image() ) { + css += 'background-image: url("' + image() + '");'; + css += 'background-position: top ' + position_x() + ';'; + css += 'background-repeat: ' + repeat() + ';'; + css += 'background-position: top ' + attachment() + ';'; + } + + // Refresh the stylesheet by removing and recreating it. + style.remove(); + style = $('<style type="text/css" id="custom-background-css">body.custom-background { ' + css + ' }</style>').appendTo( head ); + }; + + $.each( arguments, function() { + this.bind( update ); + }); + }); + }); + +})( wp, jQuery ); diff --git a/wp-includes/js/customize-preview.js b/wp-includes/js/customize-preview.js new file mode 100644 index 000000000..e982809af --- /dev/null +++ b/wp-includes/js/customize-preview.js @@ -0,0 +1 @@ +(function(b,d){var c=wp.customize,a;a=function(g,e,f){var h;return function(){var i=arguments;f=f||this;clearTimeout(h);h=setTimeout(function(){h=null;g.apply(f,i)},e)}};c.Preview=c.Messenger.extend({initialize:function(g,f){var e=this;c.Messenger.prototype.initialize.call(this,g,f);this.body=d(document.body);this.body.on("click.preview","a",function(h){h.preventDefault();e.send("scroll",0);e.send("url",d(this).prop("href"))});this.body.on("submit.preview","form",function(h){h.preventDefault()});this.window=d(window);this.window.on("scroll.preview",a(function(){e.send("scroll",e.window.scrollTop())},200));this.bind("scroll",function(h){e.window.scrollTop(h)})}});d(function(){c.settings=window._wpCustomizeSettings;if(!c.settings){return}var f,e;f=new c.Preview({url:window.location.href,channel:c.settings.channel});f.bind("settings",function(g){d.each(g,function(i,h){if(c.has(i)){c(i).set(h)}else{c.create(i,h)}})});f.trigger("settings",c.settings.values);f.bind("setting",function(g){var h;g=g.slice();if(h=c(g.shift())){h.set.apply(h,g)}});f.bind("sync",function(g){d.each(g,function(i,h){f.trigger(i,h)});f.send("synced")});f.send("ready");e=d.map(["color","image","position_x","repeat","attachment"],function(g){return"background_"+g});c.when.apply(c,e).done(function(j,i,m,h,l){var n=d(document.body),o=d("head"),g=d("#custom-background-css"),k;if(n.hasClass("custom-background")&&!g.length){return}k=function(){var p="";n.toggleClass("custom-background",!!(j()||i()));if(j()){p+="background-color: "+j()+";"}if(i()){p+='background-image: url("'+i()+'");';p+="background-position: top "+m()+";";p+="background-repeat: "+h()+";";p+="background-position: top "+l()+";"}g.remove();g=d('<style type="text/css" id="custom-background-css">body.custom-background { '+p+" }</style>").appendTo(o)};d.each(arguments,function(){this.bind(k)})})})})(wp,jQuery); \ No newline at end of file diff --git a/wp-includes/js/hoverIntent.dev.js b/wp-includes/js/hoverIntent.dev.js index 5cbf9782b..3dcff261f 100644 --- a/wp-includes/js/hoverIntent.dev.js +++ b/wp-includes/js/hoverIntent.dev.js @@ -4,7 +4,7 @@ * to see if the user's mouse has slowed down (beneath the sensitivity * threshold) before firing the onMouseOver event. * -* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+ +* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+ * <http://cherne.net/brian/resources/jquery.hoverIntent.html> * * hoverIntent is currently available for use in all personal or commercial @@ -25,7 +25,7 @@ * * @param f onMouseOver function || An object with configuration options * @param g onMouseOut function || Nothing (use configuration options object) -* @author Brian Cherne <brian@cherne.net> +* @author Brian Cherne brian(at)cherne(dot)net */ (function($) { $.fn.hoverIntent = function(f,g) { @@ -72,40 +72,18 @@ ob.hoverIntent_s = 0; return cfg.out.apply(ob,[ev]); }; - - // workaround for Mozilla bug: not firing mouseout/mouseleave on absolute positioned elements over textareas and input type="text" - var handleHover = function(e) { - var t = this; - - // next two 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 ) { - if ( $.browser.mozilla ) { - if ( e.type == "mouseout" ) { - t.mtout = setTimeout( function(){doHover(e,t);}, 30 ); - } else { - if (t.mtout) { t.mtout = clearTimeout(t.mtout); } - } - } - return; - } else { - if (t.mtout) { t.mtout = clearTimeout(t.mtout); } - doHover(e,t); - } - }; // A private function for handling mouse 'hovering' - var doHover = function(e,ob) { - + var handleHover = function(e) { // 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") { + // if e.type == "mouseenter" + if (e.type == "mouseenter") { // 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 @@ -113,7 +91,7 @@ // 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 e.type == "mouseleave" } else { // unbind expensive mousemove event $(ob).unbind("mousemove",track); @@ -123,6 +101,6 @@ }; // bind the function to the two event listeners - return this.mouseover(handleHover).mouseout(handleHover); + return this.bind('mouseenter',handleHover).bind('mouseleave',handleHover); }; })(jQuery); \ No newline at end of file diff --git a/wp-includes/js/hoverIntent.js b/wp-includes/js/hoverIntent.js index bed4129c9..1576592de 100644 --- a/wp-includes/js/hoverIntent.js +++ b/wp-includes/js/hoverIntent.js @@ -1 +1 @@ -(function(a){a.fn.hoverIntent=function(l,j){var m={sensitivity:7,interval:100,timeout:0};m=a.extend(m,j?{over:l,out:j}:l);var o,n,h,d;var e=function(f){o=f.pageX;n=f.pageY};var c=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);if((Math.abs(h-o)+Math.abs(d-n))<m.sensitivity){a(f).unbind("mousemove",e);f.hoverIntent_s=1;return m.over.apply(f,[g])}else{h=o;d=n;f.hoverIntent_t=setTimeout(function(){c(g,f)},m.interval)}};var i=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);f.hoverIntent_s=0;return m.out.apply(f,[g])};var b=function(q){var f=this;var g=(q.type=="mouseover"?q.fromElement:q.toElement)||q.relatedTarget;while(g&&g!=this){try{g=g.parentNode}catch(q){g=this}}if(g==this){if(a.browser.mozilla){if(q.type=="mouseout"){f.mtout=setTimeout(function(){k(q,f)},30)}else{if(f.mtout){f.mtout=clearTimeout(f.mtout)}}}return}else{if(f.mtout){f.mtout=clearTimeout(f.mtout)}k(q,f)}};var k=function(p,f){var g=jQuery.extend({},p);if(f.hoverIntent_t){f.hoverIntent_t=clearTimeout(f.hoverIntent_t)}if(p.type=="mouseover"){h=g.pageX;d=g.pageY;a(f).bind("mousemove",e);if(f.hoverIntent_s!=1){f.hoverIntent_t=setTimeout(function(){c(g,f)},m.interval)}}else{a(f).unbind("mousemove",e);if(f.hoverIntent_s==1){f.hoverIntent_t=setTimeout(function(){i(g,f)},m.timeout)}}};return this.mouseover(b).mouseout(b)}})(jQuery); \ No newline at end of file +(function(a){a.fn.hoverIntent=function(k,j){var l={sensitivity:7,interval:100,timeout:0};l=a.extend(l,j?{over:k,out:j}:k);var n,m,h,d;var e=function(f){n=f.pageX;m=f.pageY};var c=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);if((Math.abs(h-n)+Math.abs(d-m))<l.sensitivity){a(f).unbind("mousemove",e);f.hoverIntent_s=1;return l.over.apply(f,[g])}else{h=n;d=m;f.hoverIntent_t=setTimeout(function(){c(g,f)},l.interval)}};var i=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);f.hoverIntent_s=0;return l.out.apply(f,[g])};var b=function(o){var g=jQuery.extend({},o);var f=this;if(f.hoverIntent_t){f.hoverIntent_t=clearTimeout(f.hoverIntent_t)}if(o.type=="mouseenter"){h=g.pageX;d=g.pageY;a(f).bind("mousemove",e);if(f.hoverIntent_s!=1){f.hoverIntent_t=setTimeout(function(){c(g,f)},l.interval)}}else{a(f).unbind("mousemove",e);if(f.hoverIntent_s==1){f.hoverIntent_t=setTimeout(function(){i(g,f)},l.timeout)}}};return this.bind("mouseenter",b).bind("mouseleave",b)}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/imgareaselect/imgareaselect.css b/wp-includes/js/imgareaselect/imgareaselect.css index 325e2b172..fd587a69d 100644 --- a/wp-includes/js/imgareaselect/imgareaselect.css +++ b/wp-includes/js/imgareaselect/imgareaselect.css @@ -20,21 +20,21 @@ .imgareaselect-border1, .imgareaselect-border2, .imgareaselect-border3, .imgareaselect-border4 { - opacity: 0.5; filter: alpha(opacity=50); + opacity: 0.5; } .imgareaselect-handle { background-color: #fff; border: solid 1px #000; - opacity: 0.4; - filter: alpha(opacity=40); + filter: alpha(opacity=50); + opacity: 0.5; } .imgareaselect-outer { background-color: #000; - opacity: 0.4; - filter: alpha(opacity=40); + filter: alpha(opacity=50); + opacity: 0.5; } .imgareaselect-selection { diff --git a/wp-includes/js/imgareaselect/jquery.imgareaselect.dev.js b/wp-includes/js/imgareaselect/jquery.imgareaselect.dev.js index 5fc41c7b5..d349d0532 100644 --- a/wp-includes/js/imgareaselect/jquery.imgareaselect.dev.js +++ b/wp-includes/js/imgareaselect/jquery.imgareaselect.dev.js @@ -1,6 +1,6 @@ /* * imgAreaSelect jQuery plugin - * version 0.9.6 + * version 0.9.8 * * Copyright (c) 2008-2011 Michal Wojciechowski (odyniec.net) * @@ -13,90 +13,201 @@ (function($) { +/* + * Math functions will be used extensively, so it's convenient to make a few + * shortcuts + */ var abs = Math.abs, max = Math.max, min = Math.min, round = Math.round; +/** + * Create a new HTML div element + * + * @return A jQuery object representing the new element + */ function div() { return $('<div/>'); } +/** + * imgAreaSelect initialization + * + * @param img + * A HTML image element to attach the plugin to + * @param options + * An options object + */ $.imgAreaSelect = function (img, options) { var - + /* jQuery object representing the image */ $img = $(img), + /* Has the image finished loading? */ imgLoaded, + /* Plugin elements */ + + /* Container box */ $box = div(), + /* Selection area */ $area = div(), + /* Border (four divs) */ $border = div().add(div()).add(div()).add(div()), + /* Outer area (four divs) */ $outer = div().add(div()).add(div()).add(div()), + /* Handles (empty by default, initialized in setOptions()) */ $handles = $([]), + /* + * Additional element to work around a cursor problem in Opera + * (explained later) + */ $areaOpera, + /* Image position (relative to viewport) */ left, top, + /* Image offset (as returned by .offset()) */ imgOfs = { left: 0, top: 0 }, + /* Image dimensions (as returned by .width() and .height()) */ imgWidth, imgHeight, + /* + * jQuery object representing the parent element that the plugin + * elements are appended to + */ $parent, + /* Parent element offset (as returned by .offset()) */ parOfs = { left: 0, top: 0 }, + /* Base z-index for plugin elements */ zIndex = 0, + /* Plugin elements position */ position = 'absolute', + /* X/Y coordinates of the starting point for move/resize operations */ startX, startY, + /* Horizontal and vertical scaling factors */ scaleX, scaleY, - resizeMargin = 10, - + /* Current resize mode ("nw", "se", etc.) */ resize, + /* Selection area constraints */ minWidth, minHeight, maxWidth, maxHeight, + /* Aspect ratio to maintain (floating point number) */ aspectRatio, + /* Are the plugin elements currently displayed? */ shown, + /* Current selection (relative to parent element) */ x1, y1, x2, y2, + /* Current selection (relative to scaled image) */ selection = { x1: 0, y1: 0, x2: 0, y2: 0, width: 0, height: 0 }, + /* Document element */ docElem = document.documentElement, + /* Various helper variables used throughout the code */ $p, d, i, o, w, h, adjusted; + /* + * Translate selection coordinates (relative to scaled image) to viewport + * coordinates (relative to parent element) + */ + + /** + * Translate selection X to viewport X + * + * @param x + * Selection X + * @return Viewport X + */ function viewX(x) { return x + imgOfs.left - parOfs.left; } + /** + * Translate selection Y to viewport Y + * + * @param y + * Selection Y + * @return Viewport Y + */ function viewY(y) { return y + imgOfs.top - parOfs.top; } + /* + * Translate viewport coordinates to selection coordinates + */ + + /** + * Translate viewport X to selection X + * + * @param x + * Viewport X + * @return Selection X + */ function selX(x) { return x - imgOfs.left + parOfs.left; } + /** + * Translate viewport Y to selection Y + * + * @param y + * Viewport Y + * @return Selection Y + */ function selY(y) { return y - imgOfs.top + parOfs.top; } + /* + * Translate event coordinates (relative to document) to viewport + * coordinates + */ + + /** + * Get event X and translate it to viewport X + * + * @param event + * The event object + * @return Viewport X + */ function evX(event) { return event.pageX - parOfs.left; } + /** + * Get event Y and translate it to viewport Y + * + * @param event + * The event object + * @return Viewport Y + */ function evY(event) { return event.pageY - parOfs.top; } + /** + * Get the current selection + * + * @param noScale + * If set to <code>true</code>, scaling is not applied to the + * returned selection + * @return Selection object + */ function getSelection(noScale) { var sx = noScale || scaleX, sy = noScale || scaleY; @@ -108,6 +219,21 @@ $.imgAreaSelect = function (img, options) { height: round(selection.y2 * sy) - round(selection.y1 * sy) }; } + /** + * Set the current selection + * + * @param x1 + * X coordinate of the upper left corner of the selection area + * @param y1 + * Y coordinate of the upper left corner of the selection area + * @param x2 + * X coordinate of the lower right corner of the selection area + * @param y2 + * Y coordinate of the lower right corner of the selection area + * @param noScale + * If set to <code>true</code>, scaling is not applied to the + * new selection + */ function setSelection(x1, y1, x2, y2, noScale) { var sx = noScale || scaleX, sy = noScale || scaleY; @@ -122,23 +248,41 @@ $.imgAreaSelect = function (img, options) { selection.height = selection.y2 - selection.y1; } + /** + * Recalculate image and parent offsets + */ function adjust() { + /* + * Do not adjust if image width is not a positive number. This might + * happen when imgAreaSelect is put on a parent element which is then + * hidden. + */ if (!$img.width()) return; + /* + * Get image offset. The .offset() method returns float values, so they + * need to be rounded. + */ imgOfs = { left: round($img.offset().left), top: round($img.offset().top) }; + /* Get image dimensions */ imgWidth = $img.innerWidth(); imgHeight = $img.innerHeight(); imgOfs.top += ($img.outerHeight() - imgHeight) >> 1; imgOfs.left += ($img.outerWidth() - imgWidth) >> 1; - minWidth = options.minWidth || 0; - minHeight = options.minHeight || 0; - maxWidth = min(options.maxWidth || 1<<24, imgWidth); - maxHeight = min(options.maxHeight || 1<<24, imgHeight); + /* Set minimum and maximum selection area dimensions */ + minWidth = round(options.minWidth / scaleX) || 0; + minHeight = round(options.minHeight / scaleY) || 0; + maxWidth = round(min(options.maxWidth / scaleX || 1<<24, imgWidth)); + maxHeight = round(min(options.maxHeight / scaleY || 1<<24, imgHeight)); + /* + * Workaround for jQuery 1.3.2 incorrect offset calculation, originally + * observed in Safari 3. Firefox 2 is also affected. + */ if ($().jquery == '1.3.2' && position == 'fixed' && !docElem['getBoundingClientRect']) { @@ -146,7 +290,8 @@ $.imgAreaSelect = function (img, options) { imgOfs.left += max(document.body.scrollLeft, docElem.scrollLeft); } - parOfs = $.inArray($parent.css('position'), ['absolute', 'relative']) + 1 ? + /* Determine parent element offset */ + parOfs = /absolute|relative/.test($parent.css('position')) ? { left: round($parent.offset().left) - $parent.scrollLeft(), top: round($parent.offset().top) - $parent.scrollTop() } : position == 'fixed' ? @@ -156,22 +301,44 @@ $.imgAreaSelect = function (img, options) { left = viewX(0); top = viewY(0); + /* + * Check if selection area is within image boundaries, adjust if + * necessary + */ if (selection.x2 > imgWidth || selection.y2 > imgHeight) doResize(); } + /** + * Update plugin elements + * + * @param resetKeyPress + * If set to <code>false</code>, this instance's keypress + * event handler is not activated + */ function update(resetKeyPress) { + /* If plugin elements are hidden, do nothing */ if (!shown) return; + /* + * Set the position and size of the container box and the selection area + * inside it + */ $box.css({ left: viewX(selection.x1), top: viewY(selection.y1) }) .add($area).width(w = selection.width).height(h = selection.height); + /* + * Reset the position of selection area, borders, and handles (IE6/IE7 + * position them incorrectly if we don't do this) + */ $area.add($border).add($handles).css({ left: 0, top: 0 }); + /* Set border dimensions */ $border .width(max(w - $border.outerWidth() + $border.innerWidth(), 0)) .height(max(h - $border.outerHeight() + $border.innerHeight(), 0)); + /* Arrange the outer area elements */ $($outer[0]).css({ left: left, top: top, width: selection.x1, height: imgHeight }); $($outer[1]).css({ left: left + selection.x1, top: top, @@ -184,6 +351,7 @@ $.imgAreaSelect = function (img, options) { w -= $handles.outerWidth(); h -= $handles.outerHeight(); + /* Arrange handles */ switch ($handles.length) { case 8: $($handles[4]).css({ left: w >> 1 }); @@ -196,21 +364,49 @@ $.imgAreaSelect = function (img, options) { } if (resetKeyPress !== false) { + /* + * Need to reset the document keypress event handler -- unbind the + * current handler + */ if ($.imgAreaSelect.keyPress != docKeyPress) $(document).unbind($.imgAreaSelect.keyPress, $.imgAreaSelect.onKeyPress); if (options.keys) + /* + * Set the document keypress event handler to this instance's + * docKeyPress() function + */ $(document)[$.imgAreaSelect.keyPress]( $.imgAreaSelect.onKeyPress = docKeyPress); } + /* + * Internet Explorer displays 1px-wide dashed borders incorrectly by + * filling the spaces between dashes with white. Toggling the margin + * property between 0 and "auto" fixes this in IE6 and IE7 (IE8 is still + * broken). This workaround is not perfect, as it requires setTimeout() + * and thus causes the border to flicker a bit, but I haven't found a + * better solution. + * + * Note: This only happens with CSS borders, set with the borderWidth, + * borderOpacity, borderColor1, and borderColor2 options (which are now + * deprecated). Borders created with GIF background images are fine. + */ if ($.browser.msie && $border.outerWidth() - $border.innerWidth() == 2) { $border.css('margin', 0); setTimeout(function () { $border.css('margin', 'auto'); }, 0); } } + /** + * Do the complete update sequence: recalculate offsets, update the + * elements, and set the correct values of x1, y1, x2, and y2. + * + * @param resetKeyPress + * If set to <code>false</code>, this instance's keypress + * event handler is not activated + */ function doUpdate(resetKeyPress) { adjust(); update(resetKeyPress); @@ -218,11 +414,24 @@ $.imgAreaSelect = function (img, options) { x2 = viewX(selection.x2); y2 = viewY(selection.y2); } + /** + * Hide or fade out an element (or multiple elements) + * + * @param $elem + * A jQuery object containing the element(s) to hide/fade out + * @param fn + * Callback function to be called when fadeOut() completes + */ function hide($elem, fn) { options.fadeSpeed ? $elem.fadeOut(options.fadeSpeed, fn) : $elem.hide(); - } + /** + * Selection area mousemove event handler + * + * @param event + * The event object + */ function areaMouseMove(event) { var x = selX(evX(event)) - selection.x1, y = selY(evY(event)) - selection.y1; @@ -234,9 +443,14 @@ $.imgAreaSelect = function (img, options) { $box.one('mouseout', function () { adjusted = false; }); } + /* Clear the resize mode */ resize = ''; if (options.resizable) { + /* + * Check if the mouse pointer is over the resize margin area and set + * the resize mode accordingly + */ if (y <= options.resizeMargin) resize = 'n'; else if (y >= selection.height - options.resizeMargin) @@ -253,8 +467,19 @@ $.imgAreaSelect = function (img, options) { $areaOpera.toggle(); } + /** + * Document mouseup event handler + * + * @param event + * The event object + */ function docMouseUp(event) { + /* Set back the default cursor */ $('body').css('cursor', ''); + /* + * If autoHide is enabled, or if the selection has zero width/height, + * hide the selection and the outer area + */ if (options.autoHide || selection.width * selection.height == 0) hide($box.add($outer), function () { $(this).hide(); }); @@ -264,12 +489,20 @@ $.imgAreaSelect = function (img, options) { options.onSelectEnd(img, getSelection()); } + /** + * Selection area mousedown event handler + * + * @param event + * The event object + * @return false + */ function areaMouseDown(event) { if (event.which != 1) return false; adjust(); if (resize) { + /* Resize mode is in effect */ $('body').css('cursor', resize + '-resize'); x1 = viewX(selection[/w/.test(resize) ? 'x2' : 'x1']); @@ -299,12 +532,18 @@ $.imgAreaSelect = function (img, options) { return false; } + /** + * Adjust the x2/y2 coordinates to maintain aspect ratio (if defined) + * + * @param xFirst + * If set to <code>true</code>, calculate x2 first. Otherwise, + * calculate y2 first. + */ function fixAspectRatio(xFirst) { if (aspectRatio) if (xFirst) { x2 = max(left, min(left + imgWidth, x1 + abs(y2 - y1) * aspectRatio * (x2 > x1 || -1))); - y2 = round(max(top, min(top + imgHeight, y1 + abs(x2 - x1) / aspectRatio * (y2 > y1 || -1)))); x2 = round(x2); @@ -318,11 +557,21 @@ $.imgAreaSelect = function (img, options) { } } + /** + * Resize the selection area respecting the minimum/maximum dimensions and + * aspect ratio + */ function doResize() { + /* + * Make sure the top left corner of the selection area stays within + * image boundaries (it might not if the image source was dynamically + * changed). + */ x1 = min(x1, left + imgWidth); y1 = min(y1, top + imgHeight); if (abs(x2 - x1) < minWidth) { + /* Selection width is smaller than minWidth */ x2 = x1 - minWidth * (x2 < x1 || -1); if (x2 < left) @@ -332,6 +581,7 @@ $.imgAreaSelect = function (img, options) { } if (abs(y2 - y1) < minHeight) { + /* Selection height is smaller than minHeight */ y2 = y1 - minHeight * (y2 < y1 || -1); if (y2 < top) @@ -346,11 +596,13 @@ $.imgAreaSelect = function (img, options) { fixAspectRatio(abs(x2 - x1) < abs(y2 - y1) * aspectRatio); if (abs(x2 - x1) > maxWidth) { + /* Selection width is greater than maxWidth */ x2 = x1 - maxWidth * (x2 < x1 || -1); fixAspectRatio(); } if (abs(y2 - y1) > maxHeight) { + /* Selection height is greater than maxHeight */ y2 = y1 - maxHeight * (y2 < y1 || -1); fixAspectRatio(true); } @@ -364,16 +616,30 @@ $.imgAreaSelect = function (img, options) { options.onSelectChange(img, getSelection()); } + /** + * Mousemove event handler triggered when the user is selecting an area + * + * @param event + * The event object + * @return false + */ function selectingMouseMove(event) { - x2 = resize == '' || /w|e/.test(resize) || aspectRatio ? evX(event) : viewX(selection.x2); - y2 = resize == '' || /n|s/.test(resize) || aspectRatio ? evY(event) : viewY(selection.y2); + x2 = /w|e|^$/.test(resize) || aspectRatio ? evX(event) : viewX(selection.x2); + y2 = /n|s|^$/.test(resize) || aspectRatio ? evY(event) : viewY(selection.y2); doResize(); return false; - } + /** + * Move the selection area + * + * @param newX1 + * New viewport X1 + * @param newY1 + * New viewport Y1 + */ function doMove(newX1, newY1) { x2 = (x1 = newX1) + selection.width; y2 = (y1 = newY1) + selection.height; @@ -386,6 +652,13 @@ $.imgAreaSelect = function (img, options) { options.onSelectChange(img, getSelection()); } + /** + * Mousemove event handler triggered when the selection area is being moved + * + * @param event + * The event object + * @return false + */ function movingMouseMove(event) { x1 = max(left, min(startX + evX(event), left + imgWidth - selection.width)); y1 = max(top, min(startY + evY(event), top + imgHeight - selection.height)); @@ -393,22 +666,24 @@ $.imgAreaSelect = function (img, options) { doMove(x1, y1); event.preventDefault(); - return false; } + /** + * Start selection + */ function startSelection() { $(document).unbind('mousemove', startSelection); adjust(); x2 = x1; y2 = y1; - doResize(); resize = ''; - if ($outer.is(':not(:visible)')) + if (!$outer.is(':visible')) + /* Show the plugin elements */ $box.add($outer).hide().fadeIn(options.fadeSpeed||0); shown = true; @@ -420,6 +695,9 @@ $.imgAreaSelect = function (img, options) { options.onSelectStart(img, getSelection()); } + /** + * Cancel selection + */ function cancelSelection() { $(document).unbind('mousemove', startSelection) .unbind('mouseup', cancelSelection); @@ -427,29 +705,49 @@ $.imgAreaSelect = function (img, options) { setSelection(selX(x1), selY(y1), selX(x1), selY(y1)); - options.onSelectChange(img, getSelection()); - options.onSelectEnd(img, getSelection()); + /* If this is an API call, callback functions should not be triggered */ + if (!this instanceof $.imgAreaSelect) { + options.onSelectChange(img, getSelection()); + options.onSelectEnd(img, getSelection()); + } } + /** + * Image mousedown event handler + * + * @param event + * The event object + * @return false + */ function imgMouseDown(event) { + /* Ignore the event if animation is in progress */ if (event.which != 1 || $outer.is(':animated')) return false; adjust(); startX = x1 = evX(event); startY = y1 = evY(event); + /* Selection will start when the mouse is moved */ $(document).mousemove(startSelection).mouseup(cancelSelection); return false; } + /** + * Window resize event handler + */ function windowResize() { doUpdate(false); } + /** + * Image load event handler. This is the final part of the initialization + * process. + */ function imgLoad() { imgLoaded = true; + /* Set options */ setOptions(options = $.extend({ classPrefix: 'imgareaselect', movable: true, @@ -471,9 +769,21 @@ $.imgAreaSelect = function (img, options) { $box.add($outer).hide().fadeIn(options.fadeSpeed||0); } + /* + * Call the onInit callback. The setTimeout() call is used to ensure + * that the plugin has been fully initialized and the object instance is + * available (so that it can be obtained in the callback). + */ setTimeout(function () { options.onInit(img, getSelection()); }, 0); } + /** + * Document keypress event handler + * + * @param event + * The event object + * @return false + */ var docKeyPress = function(event) { var k = options.keys, d, t, key = event.keyCode; @@ -486,18 +796,24 @@ $.imgAreaSelect = function (img, options) { (k.ctrl == 'resize' && event.ctrlKey) || (k.alt == 'resize' && (event.altKey || event.originalEvent.altKey))) { + /* Resize selection */ + switch (key) { case 37: + /* Left */ d = -d; case 39: + /* Right */ t = max(x1, x2); x1 = min(x1, x2); x2 = max(t + d, x1); fixAspectRatio(); break; case 38: + /* Up */ d = -d; case 40: + /* Down */ t = max(y1, y2); y1 = min(y1, y2); y2 = max(t + d, y1); @@ -510,20 +826,26 @@ $.imgAreaSelect = function (img, options) { doResize(); } else { + /* Move selection */ + x1 = min(x1, x2); y1 = min(y1, y2); switch (key) { case 37: + /* Left */ doMove(max(x1 - d, left), y1); break; case 38: + /* Up */ doMove(x1, max(y1 - d, top)); break; case 39: + /* Right */ doMove(x1 + min(d, imgWidth - selX(x2)), y1); break; case 40: + /* Down */ doMove(x1, y1 + min(d, imgHeight - selY(y2))); break; default: @@ -534,21 +856,38 @@ $.imgAreaSelect = function (img, options) { return false; }; + /** + * Apply style options to plugin element (or multiple elements) + * + * @param $elem + * A jQuery object representing the element(s) to style + * @param props + * An object that maps option names to corresponding CSS + * properties + */ function styleOptions($elem, props) { for (option in props) if (options[option] !== undefined) $elem.css(props[option], options[option]); } + /** + * Set plugin options + * + * @param newOptions + * The new options object + */ function setOptions(newOptions) { if (newOptions.parent) ($parent = $(newOptions.parent)).append($box.add($outer)); + /* Merge the new options with the existing ones */ $.extend(options, newOptions); adjust(); if (newOptions.handles != null) { + /* Recreate selection area handles */ $handles.remove(); $handles = $([]); @@ -557,26 +896,42 @@ $.imgAreaSelect = function (img, options) { while (i--) $handles = $handles.add(div()); + /* Add a class to handles and set the CSS properties */ $handles.addClass(options.classPrefix + '-handle').css({ position: 'absolute', + /* + * The font-size property needs to be set to zero, otherwise + * Internet Explorer makes the handles too large + */ fontSize: 0, zIndex: zIndex + 1 || 1 }); + /* + * If handle width/height has not been set with CSS rules, set the + * default 5px + */ if (!parseInt($handles.css('width')) >= 0) $handles.width(5).height(5); + /* + * If the borderWidth option is in use, add a solid border to + * handles + */ if (o = options.borderWidth) $handles.css({ borderWidth: o, borderStyle: 'solid' }); + /* Apply other style options */ styleOptions($handles, { borderColor1: 'border-color', borderColor2: 'background-color', borderOpacity: 'opacity' }); } + /* Calculate scale factors */ scaleX = options.imageWidth / imgWidth || 1; scaleY = options.imageHeight / imgHeight || 1; + /* Set selection */ if (newOptions.x1 != null) { setSelection(newOptions.x1, newOptions.y1, newOptions.x2, newOptions.y2); @@ -584,14 +939,17 @@ $.imgAreaSelect = function (img, options) { } if (newOptions.keys) + /* Enable keyboard support */ options.keys = $.extend({ shift: 1, ctrl: 'resize' }, newOptions.keys); + /* Add classes to plugin elements */ $outer.addClass(options.classPrefix + '-outer'); $area.addClass(options.classPrefix + '-selection'); for (i = 0; i++ < 4;) $($border[i-1]).addClass(options.classPrefix + '-border' + i); + /* Apply style options */ styleOptions($area, { selectionColor: 'background-color', selectionOpacity: 'opacity' }); styleOptions($border, { borderOpacity: 'opacity', @@ -603,12 +961,13 @@ $.imgAreaSelect = function (img, options) { if (o = options.borderColor2) $($border[1]).css({ borderStyle: 'dashed', borderColor: o }); + /* Append all the selection area elements to the container box */ $box.append($area.add($border).add($areaOpera).add($handles)); if ($.browser.msie) { - if (o = $outer.css('filter').match(/opacity=([0-9]+)/)) + if (o = $outer.css('filter').match(/opacity=(\d+)/)) $outer.css('opacity', o[1]/100); - if (o = $border.css('filter').match(/opacity=([0-9]+)/)) + if (o = $border.css('filter').match(/opacity=(\d+)/)) $border.css('opacity', o[1]/100); } @@ -620,16 +979,19 @@ $.imgAreaSelect = function (img, options) { doUpdate(); } + /* Calculate the aspect ratio factor */ aspectRatio = (d = (options.aspectRatio || '').split(/:/))[0] / d[1]; $img.add($outer).unbind('mousedown', imgMouseDown); if (options.disable || options.enable === false) { + /* Disable the plugin */ $box.unbind('mousemove', areaMouseMove).unbind('mousedown', areaMouseDown); $(window).unbind('resize', windowResize); } else { if (options.enable || options.disable === false) { + /* Enable the plugin */ if (options.resizable || options.movable) $box.mousemove(areaMouseMove).mousedown(areaMouseDown); @@ -643,69 +1005,179 @@ $.imgAreaSelect = function (img, options) { options.enable = options.disable = undefined; } + /** + * Remove plugin completely + */ this.remove = function () { + /* + * Call setOptions with { disable: true } to unbind the event handlers + */ setOptions({ disable: true }); $box.add($outer).remove(); }; + /* + * Public API + */ + + /** + * Get current options + * + * @return An object containing the set of options currently in use + */ this.getOptions = function () { return options; }; + /** + * Set plugin options + * + * @param newOptions + * The new options object + */ this.setOptions = setOptions; + /** + * Get the current selection + * + * @param noScale + * If set to <code>true</code>, scaling is not applied to the + * returned selection + * @return Selection object + */ this.getSelection = getSelection; + /** + * Set the current selection + * + * @param x1 + * X coordinate of the upper left corner of the selection area + * @param y1 + * Y coordinate of the upper left corner of the selection area + * @param x2 + * X coordinate of the lower right corner of the selection area + * @param y2 + * Y coordinate of the lower right corner of the selection area + * @param noScale + * If set to <code>true</code>, scaling is not applied to the + * new selection + */ this.setSelection = setSelection; + /** + * Cancel selection + */ + this.cancelSelection = cancelSelection; + + /** + * Update plugin elements + * + * @param resetKeyPress + * If set to <code>false</code>, this instance's keypress + * event handler is not activated + */ this.update = doUpdate; + /* + * Traverse the image's parent elements (up to <body>) and find the + * highest z-index + */ $p = $img; while ($p.length) { zIndex = max(zIndex, !isNaN($p.css('z-index')) ? $p.css('z-index') : zIndex); + /* Also check if any of the ancestor elements has fixed position */ if ($p.css('position') == 'fixed') position = 'fixed'; $p = $p.parent(':not(body)'); } + /* + * If z-index is given as an option, it overrides the one found by the + * above loop + */ zIndex = options.zIndex || zIndex; if ($.browser.msie) $img.attr('unselectable', 'on'); + /* + * In MSIE and WebKit, we need to use the keydown event instead of keypress + */ $.imgAreaSelect.keyPress = $.browser.msie || $.browser.safari ? 'keydown' : 'keypress'; + /* + * There is a bug affecting the CSS cursor property in Opera (observed in + * versions up to 10.00) that prevents the cursor from being updated unless + * the mouse leaves and enters the element again. To trigger the mouseover + * event, we're adding an additional div to $box and we're going to toggle + * it when mouse moves inside the selection area. + */ if ($.browser.opera) $areaOpera = div().css({ width: '100%', height: '100%', position: 'absolute', zIndex: zIndex + 2 || 2 }); + /* + * We initially set visibility to "hidden" as a workaround for a weird + * behaviour observed in Google Chrome 1.0.154.53 (on Windows XP). Normally + * we would just set display to "none", but, for some reason, if we do so + * then Chrome refuses to later display the element with .show() or + * .fadeIn(). + */ $box.add($outer).css({ visibility: 'hidden', position: position, overflow: 'hidden', zIndex: zIndex || '0' }); $box.css({ zIndex: zIndex + 2 || 2 }); $area.add($border).css({ position: 'absolute', fontSize: 0 }); + /* + * If the image has been fully loaded, or if it is not really an image (eg. + * a div), call imgLoad() immediately; otherwise, bind it to be called once + * on image load event. + */ img.complete || img.readyState == 'complete' || !$img.is('img') ? imgLoad() : $img.one('load', imgLoad); - if ($.browser.msie && $.browser.version >= 9) + /* + * MSIE 9.0 doesn't always fire the image load event -- resetting the src + * attribute seems to trigger it. The check is for version 7 and above to + * accommodate for MSIE 9 running in compatibility mode. + */ + if ($.browser.msie && $.browser.version >= 7) img.src = img.src; }; +/** + * Invoke imgAreaSelect on a jQuery object containing the image(s) + * + * @param options + * Options object + * @return The jQuery object or a reference to imgAreaSelect instance (if the + * <code>instance</code> option was specified) + */ $.fn.imgAreaSelect = function (options) { options = options || {}; this.each(function () { + /* Is there already an imgAreaSelect instance bound to this element? */ if ($(this).data('imgAreaSelect')) { + /* Yes there is -- is it supposed to be removed? */ if (options.remove) { + /* Remove the plugin */ $(this).data('imgAreaSelect').remove(); $(this).removeData('imgAreaSelect'); } else + /* Reset options */ $(this).data('imgAreaSelect').setOptions(options); } else if (!options.remove) { + /* No exising instance -- create a new one */ + + /* + * If neither the "enable" nor the "disable" option is present, add + * "enable" as the default + */ if (options.enable === undefined && options.disable === undefined) options.enable = true; @@ -714,6 +1186,10 @@ $.fn.imgAreaSelect = function (options) { }); if (options.instance) + /* + * Return the imgAreaSelect instance bound to the first element in the + * set + */ return $(this).data('imgAreaSelect'); return this; diff --git a/wp-includes/js/imgareaselect/jquery.imgareaselect.js b/wp-includes/js/imgareaselect/jquery.imgareaselect.js index a29d6678f..f35fa1868 100644 --- a/wp-includes/js/imgareaselect/jquery.imgareaselect.js +++ b/wp-includes/js/imgareaselect/jquery.imgareaselect.js @@ -1 +1 @@ -(function(e){var b=Math.abs,a=Math.max,d=Math.min,c=Math.round;function f(){return e("<div/>")}e.imgAreaSelect=function(Q,ad){var M=e(Q),u,B=f(),E=f(),ap=f().add(f()).add(f()).add(f()),v=f().add(f()).add(f()).add(f()),ax=e([]),aj,T,ao,ay={left:0,top:0},S,aA,p,V={left:0,top:0},g=0,ak="absolute",an,am,ab,aa,az=10,t,q,al,k,x,aE,ah,D,n,C,l,aC={x1:0,y1:0,x2:0,y2:0,width:0,height:0},F=document.documentElement,Z,R,O,N,K,P,I;function Y(h){return h+ay.left-V.left}function X(h){return h+ay.top-V.top}function au(h){return h-ay.left+V.left}function at(h){return h-ay.top+V.top}function A(h){return h.pageX-V.left}function z(h){return h.pageY-V.top}function ar(h){var o=h||ab,i=h||aa;return{x1:c(aC.x1*o),y1:c(aC.y1*i),x2:c(aC.x2*o),y2:c(aC.y2*i),width:c(aC.x2*o)-c(aC.x1*o),height:c(aC.y2*i)-c(aC.y1*i)}}function aq(i,w,h,o,aF){var aH=aF||ab,aG=aF||aa;aC={x1:c(i/aH||0),y1:c(w/aG||0),x2:c(h/aH||0),y2:c(o/aG||0)};aC.width=aC.x2-aC.x1;aC.height=aC.y2-aC.y1}function m(){if(!M.width()){return}ay={left:c(M.offset().left),top:c(M.offset().top)};S=M.innerWidth();aA=M.innerHeight();ay.top+=(M.outerHeight()-aA)>>1;ay.left+=(M.outerWidth()-S)>>1;q=ad.minWidth||0;al=ad.minHeight||0;k=d(ad.maxWidth||1<<24,S);x=d(ad.maxHeight||1<<24,aA);if(e().jquery=="1.3.2"&&ak=="fixed"&&!F.getBoundingClientRect){ay.top+=a(document.body.scrollTop,F.scrollTop);ay.left+=a(document.body.scrollLeft,F.scrollLeft)}V=e.inArray(p.css("position"),["absolute","relative"])+1?{left:c(p.offset().left)-p.scrollLeft(),top:c(p.offset().top)-p.scrollTop()}:ak=="fixed"?{left:e(document).scrollLeft(),top:e(document).scrollTop()}:{left:0,top:0};T=Y(0);ao=X(0);if(aC.x2>S||aC.y2>aA){aB()}}function J(h){if(!ah){return}B.css({left:Y(aC.x1),top:X(aC.y1)}).add(E).width(K=aC.width).height(P=aC.height);E.add(ap).add(ax).css({left:0,top:0});ap.width(a(K-ap.outerWidth()+ap.innerWidth(),0)).height(a(P-ap.outerHeight()+ap.innerHeight(),0));e(v[0]).css({left:T,top:ao,width:aC.x1,height:aA});e(v[1]).css({left:T+aC.x1,top:ao,width:K,height:aC.y1});e(v[2]).css({left:T+aC.x2,top:ao,width:S-aC.x2,height:aA});e(v[3]).css({left:T+aC.x1,top:ao+aC.y2,width:K,height:aA-aC.y2});K-=ax.outerWidth();P-=ax.outerHeight();switch(ax.length){case 8:e(ax[4]).css({left:K>>1});e(ax[5]).css({left:K,top:P>>1});e(ax[6]).css({left:K>>1,top:P});e(ax[7]).css({top:P>>1});case 4:ax.slice(1,3).css({left:K});ax.slice(2,4).css({top:P})}if(h!==false){if(e.imgAreaSelect.keyPress!=av){e(document).unbind(e.imgAreaSelect.keyPress,e.imgAreaSelect.onKeyPress)}if(ad.keys){e(document)[e.imgAreaSelect.keyPress](e.imgAreaSelect.onKeyPress=av)}}if(e.browser.msie&&ap.outerWidth()-ap.innerWidth()==2){ap.css("margin",0);setTimeout(function(){ap.css("margin","auto")},0)}}function y(h){m();J(h);D=Y(aC.x1);n=X(aC.y1);C=Y(aC.x2);l=X(aC.y2)}function ag(h,i){ad.fadeSpeed?h.fadeOut(ad.fadeSpeed,i):h.hide()}function H(i){var h=au(A(i))-aC.x1,o=at(z(i))-aC.y1;if(!I){m();I=true;B.one("mouseout",function(){I=false})}t="";if(ad.resizable){if(o<=ad.resizeMargin){t="n"}else{if(o>=aC.height-ad.resizeMargin){t="s"}}if(h<=ad.resizeMargin){t+="w"}else{if(h>=aC.width-ad.resizeMargin){t+="e"}}}B.css("cursor",t?t+"-resize":ad.movable?"move":"");if(aj){aj.toggle()}}function j(h){e("body").css("cursor","");if(ad.autoHide||aC.width*aC.height==0){ag(B.add(v),function(){e(this).hide()})}e(document).unbind("mousemove",ae);B.mousemove(H);ad.onSelectEnd(Q,ar())}function aw(h){if(h.which!=1){return false}m();if(t){e("body").css("cursor",t+"-resize");D=Y(aC[/w/.test(t)?"x2":"x1"]);n=X(aC[/n/.test(t)?"y2":"y1"]);e(document).mousemove(ae).one("mouseup",j);B.unbind("mousemove",H)}else{if(ad.movable){an=T+aC.x1-A(h);am=ao+aC.y1-z(h);B.unbind("mousemove",H);e(document).mousemove(ac).one("mouseup",function(){ad.onSelectEnd(Q,ar());e(document).unbind("mousemove",ac);B.mousemove(H)})}else{M.mousedown(h)}}return false}function L(h){if(aE){if(h){C=a(T,d(T+S,D+b(l-n)*aE*(C>D||-1)));l=c(a(ao,d(ao+aA,n+b(C-D)/aE*(l>n||-1))));C=c(C)}else{l=a(ao,d(ao+aA,n+b(C-D)/aE*(l>n||-1)));C=c(a(T,d(T+S,D+b(l-n)*aE*(C>D||-1))));l=c(l)}}}function aB(){D=d(D,T+S);n=d(n,ao+aA);if(b(C-D)<q){C=D-q*(C<D||-1);if(C<T){D=T+q}else{if(C>T+S){D=T+S-q}}}if(b(l-n)<al){l=n-al*(l<n||-1);if(l<ao){n=ao+al}else{if(l>ao+aA){n=ao+aA-al}}}C=a(T,d(C,T+S));l=a(ao,d(l,ao+aA));L(b(C-D)<b(l-n)*aE);if(b(C-D)>k){C=D-k*(C<D||-1);L()}if(b(l-n)>x){l=n-x*(l<n||-1);L(true)}aC={x1:au(d(D,C)),x2:au(a(D,C)),y1:at(d(n,l)),y2:at(a(n,l)),width:b(C-D),height:b(l-n)};J();ad.onSelectChange(Q,ar())}function ae(h){C=t==""||/w|e/.test(t)||aE?A(h):Y(aC.x2);l=t==""||/n|s/.test(t)||aE?z(h):X(aC.y2);aB();return false}function U(h,i){C=(D=h)+aC.width;l=(n=i)+aC.height;e.extend(aC,{x1:au(D),y1:at(n),x2:au(C),y2:at(l)});J();ad.onSelectChange(Q,ar())}function ac(h){D=a(T,d(an+A(h),T+S-aC.width));n=a(ao,d(am+z(h),ao+aA-aC.height));U(D,n);h.preventDefault();return false}function r(){e(document).unbind("mousemove",r);m();C=D;l=n;aB();t="";if(v.is(":not(:visible)")){B.add(v).hide().fadeIn(ad.fadeSpeed||0)}ah=true;e(document).unbind("mouseup",W).mousemove(ae).one("mouseup",j);B.unbind("mousemove",H);ad.onSelectStart(Q,ar())}function W(){e(document).unbind("mousemove",r).unbind("mouseup",W);ag(B.add(v));aq(au(D),at(n),au(D),at(n));ad.onSelectChange(Q,ar());ad.onSelectEnd(Q,ar())}function aD(h){if(h.which!=1||v.is(":animated")){return false}m();an=D=A(h);am=n=z(h);e(document).mousemove(r).mouseup(W);return false}function ai(){y(false)}function s(){u=true;af(ad=e.extend({classPrefix:"imgareaselect",movable:true,parent:"body",resizable:true,resizeMargin:10,onInit:function(){},onSelectStart:function(){},onSelectChange:function(){},onSelectEnd:function(){}},ad));B.add(v).css({visibility:""});if(ad.show){ah=true;m();J();B.add(v).hide().fadeIn(ad.fadeSpeed||0)}setTimeout(function(){ad.onInit(Q,ar())},0)}var av=function(w){var h=ad.keys,aF,o,i=w.keyCode;aF=!isNaN(h.alt)&&(w.altKey||w.originalEvent.altKey)?h.alt:!isNaN(h.ctrl)&&w.ctrlKey?h.ctrl:!isNaN(h.shift)&&w.shiftKey?h.shift:!isNaN(h.arrows)?h.arrows:10;if(h.arrows=="resize"||(h.shift=="resize"&&w.shiftKey)||(h.ctrl=="resize"&&w.ctrlKey)||(h.alt=="resize"&&(w.altKey||w.originalEvent.altKey))){switch(i){case 37:aF=-aF;case 39:o=a(D,C);D=d(D,C);C=a(o+aF,D);L();break;case 38:aF=-aF;case 40:o=a(n,l);n=d(n,l);l=a(o+aF,n);L(true);break;default:return}aB()}else{D=d(D,C);n=d(n,l);switch(i){case 37:U(a(D-aF,T),n);break;case 38:U(D,a(n-aF,ao));break;case 39:U(D+d(aF,S-au(C)),n);break;case 40:U(D,n+d(aF,aA-at(l)));break;default:return}}return false};function G(h,i){for(option in i){if(ad[option]!==undefined){h.css(i[option],ad[option])}}}function af(h){if(h.parent){(p=e(h.parent)).append(B.add(v))}e.extend(ad,h);m();if(h.handles!=null){ax.remove();ax=e([]);O=h.handles?h.handles=="corners"?4:8:0;while(O--){ax=ax.add(f())}ax.addClass(ad.classPrefix+"-handle").css({position:"absolute",fontSize:0,zIndex:g+1||1});if(!parseInt(ax.css("width"))>=0){ax.width(5).height(5)}if(N=ad.borderWidth){ax.css({borderWidth:N,borderStyle:"solid"})}G(ax,{borderColor1:"border-color",borderColor2:"background-color",borderOpacity:"opacity"})}ab=ad.imageWidth/S||1;aa=ad.imageHeight/aA||1;if(h.x1!=null){aq(h.x1,h.y1,h.x2,h.y2);h.show=!h.hide}if(h.keys){ad.keys=e.extend({shift:1,ctrl:"resize"},h.keys)}v.addClass(ad.classPrefix+"-outer");E.addClass(ad.classPrefix+"-selection");for(O=0;O++<4;){e(ap[O-1]).addClass(ad.classPrefix+"-border"+O)}G(E,{selectionColor:"background-color",selectionOpacity:"opacity"});G(ap,{borderOpacity:"opacity",borderWidth:"border-width"});G(v,{outerColor:"background-color",outerOpacity:"opacity"});if(N=ad.borderColor1){e(ap[0]).css({borderStyle:"solid",borderColor:N})}if(N=ad.borderColor2){e(ap[1]).css({borderStyle:"dashed",borderColor:N})}B.append(E.add(ap).add(aj).add(ax));if(e.browser.msie){if(N=v.css("filter").match(/opacity=([0-9]+)/)){v.css("opacity",N[1]/100)}if(N=ap.css("filter").match(/opacity=([0-9]+)/)){ap.css("opacity",N[1]/100)}}if(h.hide){ag(B.add(v))}else{if(h.show&&u){ah=true;B.add(v).fadeIn(ad.fadeSpeed||0);y()}}aE=(R=(ad.aspectRatio||"").split(/:/))[0]/R[1];M.add(v).unbind("mousedown",aD);if(ad.disable||ad.enable===false){B.unbind("mousemove",H).unbind("mousedown",aw);e(window).unbind("resize",ai)}else{if(ad.enable||ad.disable===false){if(ad.resizable||ad.movable){B.mousemove(H).mousedown(aw)}e(window).resize(ai)}if(!ad.persistent){M.add(v).mousedown(aD)}}ad.enable=ad.disable=undefined}this.remove=function(){af({disable:true});B.add(v).remove()};this.getOptions=function(){return ad};this.setOptions=af;this.getSelection=ar;this.setSelection=aq;this.update=y;Z=M;while(Z.length){g=a(g,!isNaN(Z.css("z-index"))?Z.css("z-index"):g);if(Z.css("position")=="fixed"){ak="fixed"}Z=Z.parent(":not(body)")}g=ad.zIndex||g;if(e.browser.msie){M.attr("unselectable","on")}e.imgAreaSelect.keyPress=e.browser.msie||e.browser.safari?"keydown":"keypress";if(e.browser.opera){aj=f().css({width:"100%",height:"100%",position:"absolute",zIndex:g+2||2})}B.add(v).css({visibility:"hidden",position:ak,overflow:"hidden",zIndex:g||"0"});B.css({zIndex:g+2||2});E.add(ap).css({position:"absolute",fontSize:0});Q.complete||Q.readyState=="complete"||!M.is("img")?s():M.one("load",s);if(e.browser.msie&&e.browser.version>=9){Q.src=Q.src}};e.fn.imgAreaSelect=function(g){g=g||{};this.each(function(){if(e(this).data("imgAreaSelect")){if(g.remove){e(this).data("imgAreaSelect").remove();e(this).removeData("imgAreaSelect")}else{e(this).data("imgAreaSelect").setOptions(g)}}else{if(!g.remove){if(g.enable===undefined&&g.disable===undefined){g.enable=true}e(this).data("imgAreaSelect",new e.imgAreaSelect(this,g))}}});if(g.instance){return e(this).data("imgAreaSelect")}return this}})(jQuery); \ No newline at end of file +(function(e){var b=Math.abs,a=Math.max,d=Math.min,c=Math.round;function f(){return e("<div/>")}e.imgAreaSelect=function(s,X){var az=e(s),Z,av=f(),ai=f(),K=f().add(f()).add(f()).add(f()),ab=f().add(f()).add(f()).add(f()),O=e([]),V,n,q,aC={left:0,top:0},Q,j,C,P={left:0,top:0},D=0,ag="absolute",T,S,ad,ac,L,E,U,W,am,Y,N,A,aD,z,aB,y={x1:0,y1:0,x2:0,y2:0,width:0,height:0},p=document.documentElement,l,au,ap,aj,af,aq,x;function J(h){return h+aC.left-P.left}function I(h){return h+aC.top-P.top}function H(h){return h-aC.left+P.left}function B(h){return h-aC.top+P.top}function ao(h){return h.pageX-P.left}function al(h){return h.pageY-P.top}function G(h){var o=h||ad,i=h||ac;return{x1:c(y.x1*o),y1:c(y.y1*i),x2:c(y.x2*o),y2:c(y.y2*i),width:c(y.x2*o)-c(y.x1*o),height:c(y.y2*i)-c(y.y1*i)}}function ah(i,w,h,o,aE){var aG=aE||ad,aF=aE||ac;y={x1:c(i/aG||0),y1:c(w/aF||0),x2:c(h/aG||0),y2:c(o/aF||0)};y.width=y.x2-y.x1;y.height=y.y2-y.y1}function ar(){if(!az.width()){return}aC={left:c(az.offset().left),top:c(az.offset().top)};Q=az.innerWidth();j=az.innerHeight();aC.top+=(az.outerHeight()-j)>>1;aC.left+=(az.outerWidth()-Q)>>1;E=c(X.minWidth/ad)||0;U=c(X.minHeight/ac)||0;W=c(d(X.maxWidth/ad||1<<24,Q));am=c(d(X.maxHeight/ac||1<<24,j));if(e().jquery=="1.3.2"&&ag=="fixed"&&!p.getBoundingClientRect){aC.top+=a(document.body.scrollTop,p.scrollTop);aC.left+=a(document.body.scrollLeft,p.scrollLeft)}P=/absolute|relative/.test(C.css("position"))?{left:c(C.offset().left)-C.scrollLeft(),top:c(C.offset().top)-C.scrollTop()}:ag=="fixed"?{left:e(document).scrollLeft(),top:e(document).scrollTop()}:{left:0,top:0};n=J(0);q=I(0);if(y.x2>Q||y.y2>j){ay()}}function aa(h){if(!N){return}av.css({left:J(y.x1),top:I(y.y1)}).add(ai).width(af=y.width).height(aq=y.height);ai.add(K).add(O).css({left:0,top:0});K.width(a(af-K.outerWidth()+K.innerWidth(),0)).height(a(aq-K.outerHeight()+K.innerHeight(),0));e(ab[0]).css({left:n,top:q,width:y.x1,height:j});e(ab[1]).css({left:n+y.x1,top:q,width:af,height:y.y1});e(ab[2]).css({left:n+y.x2,top:q,width:Q-y.x2,height:j});e(ab[3]).css({left:n+y.x1,top:q+y.y2,width:af,height:j-y.y2});af-=O.outerWidth();aq-=O.outerHeight();switch(O.length){case 8:e(O[4]).css({left:af>>1});e(O[5]).css({left:af,top:aq>>1});e(O[6]).css({left:af>>1,top:aq});e(O[7]).css({top:aq>>1});case 4:O.slice(1,3).css({left:af});O.slice(2,4).css({top:aq})}if(h!==false){if(e.imgAreaSelect.keyPress!=aw){e(document).unbind(e.imgAreaSelect.keyPress,e.imgAreaSelect.onKeyPress)}if(X.keys){e(document)[e.imgAreaSelect.keyPress](e.imgAreaSelect.onKeyPress=aw)}}if(e.browser.msie&&K.outerWidth()-K.innerWidth()==2){K.css("margin",0);setTimeout(function(){K.css("margin","auto")},0)}}function u(h){ar();aa(h);A=J(y.x1);aD=I(y.y1);z=J(y.x2);aB=I(y.y2)}function ak(h,i){X.fadeSpeed?h.fadeOut(X.fadeSpeed,i):h.hide()}function F(i){var h=H(ao(i))-y.x1,o=B(al(i))-y.y1;if(!x){ar();x=true;av.one("mouseout",function(){x=false})}L="";if(X.resizable){if(o<=X.resizeMargin){L="n"}else{if(o>=y.height-X.resizeMargin){L="s"}}if(h<=X.resizeMargin){L+="w"}else{if(h>=y.width-X.resizeMargin){L+="e"}}}av.css("cursor",L?L+"-resize":X.movable?"move":"");if(V){V.toggle()}}function an(h){e("body").css("cursor","");if(X.autoHide||y.width*y.height==0){ak(av.add(ab),function(){e(this).hide()})}e(document).unbind("mousemove",ae);av.mousemove(F);X.onSelectEnd(s,G())}function t(h){if(h.which!=1){return false}ar();if(L){e("body").css("cursor",L+"-resize");A=J(y[/w/.test(L)?"x2":"x1"]);aD=I(y[/n/.test(L)?"y2":"y1"]);e(document).mousemove(ae).one("mouseup",an);av.unbind("mousemove",F)}else{if(X.movable){T=n+y.x1-ao(h);S=q+y.y1-al(h);av.unbind("mousemove",F);e(document).mousemove(g).one("mouseup",function(){X.onSelectEnd(s,G());e(document).unbind("mousemove",g);av.mousemove(F)})}else{az.mousedown(h)}}return false}function r(h){if(Y){if(h){z=a(n,d(n+Q,A+b(aB-aD)*Y*(z>A||-1)));aB=c(a(q,d(q+j,aD+b(z-A)/Y*(aB>aD||-1))));z=c(z)}else{aB=a(q,d(q+j,aD+b(z-A)/Y*(aB>aD||-1)));z=c(a(n,d(n+Q,A+b(aB-aD)*Y*(z>A||-1))));aB=c(aB)}}}function ay(){A=d(A,n+Q);aD=d(aD,q+j);if(b(z-A)<E){z=A-E*(z<A||-1);if(z<n){A=n+E}else{if(z>n+Q){A=n+Q-E}}}if(b(aB-aD)<U){aB=aD-U*(aB<aD||-1);if(aB<q){aD=q+U}else{if(aB>q+j){aD=q+j-U}}}z=a(n,d(z,n+Q));aB=a(q,d(aB,q+j));r(b(z-A)<b(aB-aD)*Y);if(b(z-A)>W){z=A-W*(z<A||-1);r()}if(b(aB-aD)>am){aB=aD-am*(aB<aD||-1);r(true)}y={x1:H(d(A,z)),x2:H(a(A,z)),y1:B(d(aD,aB)),y2:B(a(aD,aB)),width:b(z-A),height:b(aB-aD)};aa();X.onSelectChange(s,G())}function ae(h){z=/w|e|^$/.test(L)||Y?ao(h):J(y.x2);aB=/n|s|^$/.test(L)||Y?al(h):I(y.y2);ay();return false}function R(h,i){z=(A=h)+y.width;aB=(aD=i)+y.height;e.extend(y,{x1:H(A),y1:B(aD),x2:H(z),y2:B(aB)});aa();X.onSelectChange(s,G())}function g(h){A=a(n,d(T+ao(h),n+Q-y.width));aD=a(q,d(S+al(h),q+j-y.height));R(A,aD);h.preventDefault();return false}function aA(){e(document).unbind("mousemove",aA);ar();z=A;aB=aD;ay();L="";if(!ab.is(":visible")){av.add(ab).hide().fadeIn(X.fadeSpeed||0)}N=true;e(document).unbind("mouseup",at).mousemove(ae).one("mouseup",an);av.unbind("mousemove",F);X.onSelectStart(s,G())}function at(){e(document).unbind("mousemove",aA).unbind("mouseup",at);ak(av.add(ab));ah(H(A),B(aD),H(A),B(aD));if(!this instanceof e.imgAreaSelect){X.onSelectChange(s,G());X.onSelectEnd(s,G())}}function m(h){if(h.which!=1||ab.is(":animated")){return false}ar();T=A=ao(h);S=aD=al(h);e(document).mousemove(aA).mouseup(at);return false}function v(){u(false)}function ax(){Z=true;M(X=e.extend({classPrefix:"imgareaselect",movable:true,parent:"body",resizable:true,resizeMargin:10,onInit:function(){},onSelectStart:function(){},onSelectChange:function(){},onSelectEnd:function(){}},X));av.add(ab).css({visibility:""});if(X.show){N=true;ar();aa();av.add(ab).hide().fadeIn(X.fadeSpeed||0)}setTimeout(function(){X.onInit(s,G())},0)}var aw=function(w){var h=X.keys,aE,o,i=w.keyCode;aE=!isNaN(h.alt)&&(w.altKey||w.originalEvent.altKey)?h.alt:!isNaN(h.ctrl)&&w.ctrlKey?h.ctrl:!isNaN(h.shift)&&w.shiftKey?h.shift:!isNaN(h.arrows)?h.arrows:10;if(h.arrows=="resize"||(h.shift=="resize"&&w.shiftKey)||(h.ctrl=="resize"&&w.ctrlKey)||(h.alt=="resize"&&(w.altKey||w.originalEvent.altKey))){switch(i){case 37:aE=-aE;case 39:o=a(A,z);A=d(A,z);z=a(o+aE,A);r();break;case 38:aE=-aE;case 40:o=a(aD,aB);aD=d(aD,aB);aB=a(o+aE,aD);r(true);break;default:return}ay()}else{A=d(A,z);aD=d(aD,aB);switch(i){case 37:R(a(A-aE,n),aD);break;case 38:R(A,a(aD-aE,q));break;case 39:R(A+d(aE,Q-H(z)),aD);break;case 40:R(A,aD+d(aE,j-B(aB)));break;default:return}}return false};function k(h,i){for(option in i){if(X[option]!==undefined){h.css(i[option],X[option])}}}function M(h){if(h.parent){(C=e(h.parent)).append(av.add(ab))}e.extend(X,h);ar();if(h.handles!=null){O.remove();O=e([]);ap=h.handles?h.handles=="corners"?4:8:0;while(ap--){O=O.add(f())}O.addClass(X.classPrefix+"-handle").css({position:"absolute",fontSize:0,zIndex:D+1||1});if(!parseInt(O.css("width"))>=0){O.width(5).height(5)}if(aj=X.borderWidth){O.css({borderWidth:aj,borderStyle:"solid"})}k(O,{borderColor1:"border-color",borderColor2:"background-color",borderOpacity:"opacity"})}ad=X.imageWidth/Q||1;ac=X.imageHeight/j||1;if(h.x1!=null){ah(h.x1,h.y1,h.x2,h.y2);h.show=!h.hide}if(h.keys){X.keys=e.extend({shift:1,ctrl:"resize"},h.keys)}ab.addClass(X.classPrefix+"-outer");ai.addClass(X.classPrefix+"-selection");for(ap=0;ap++<4;){e(K[ap-1]).addClass(X.classPrefix+"-border"+ap)}k(ai,{selectionColor:"background-color",selectionOpacity:"opacity"});k(K,{borderOpacity:"opacity",borderWidth:"border-width"});k(ab,{outerColor:"background-color",outerOpacity:"opacity"});if(aj=X.borderColor1){e(K[0]).css({borderStyle:"solid",borderColor:aj})}if(aj=X.borderColor2){e(K[1]).css({borderStyle:"dashed",borderColor:aj})}av.append(ai.add(K).add(V).add(O));if(e.browser.msie){if(aj=ab.css("filter").match(/opacity=(\d+)/)){ab.css("opacity",aj[1]/100)}if(aj=K.css("filter").match(/opacity=(\d+)/)){K.css("opacity",aj[1]/100)}}if(h.hide){ak(av.add(ab))}else{if(h.show&&Z){N=true;av.add(ab).fadeIn(X.fadeSpeed||0);u()}}Y=(au=(X.aspectRatio||"").split(/:/))[0]/au[1];az.add(ab).unbind("mousedown",m);if(X.disable||X.enable===false){av.unbind("mousemove",F).unbind("mousedown",t);e(window).unbind("resize",v)}else{if(X.enable||X.disable===false){if(X.resizable||X.movable){av.mousemove(F).mousedown(t)}e(window).resize(v)}if(!X.persistent){az.add(ab).mousedown(m)}}X.enable=X.disable=undefined}this.remove=function(){M({disable:true});av.add(ab).remove()};this.getOptions=function(){return X};this.setOptions=M;this.getSelection=G;this.setSelection=ah;this.cancelSelection=at;this.update=u;l=az;while(l.length){D=a(D,!isNaN(l.css("z-index"))?l.css("z-index"):D);if(l.css("position")=="fixed"){ag="fixed"}l=l.parent(":not(body)")}D=X.zIndex||D;if(e.browser.msie){az.attr("unselectable","on")}e.imgAreaSelect.keyPress=e.browser.msie||e.browser.safari?"keydown":"keypress";if(e.browser.opera){V=f().css({width:"100%",height:"100%",position:"absolute",zIndex:D+2||2})}av.add(ab).css({visibility:"hidden",position:ag,overflow:"hidden",zIndex:D||"0"});av.css({zIndex:D+2||2});ai.add(K).css({position:"absolute",fontSize:0});s.complete||s.readyState=="complete"||!az.is("img")?ax():az.one("load",ax);if(e.browser.msie&&e.browser.version>=7){s.src=s.src}};e.fn.imgAreaSelect=function(g){g=g||{};this.each(function(){if(e(this).data("imgAreaSelect")){if(g.remove){e(this).data("imgAreaSelect").remove();e(this).removeData("imgAreaSelect")}else{e(this).data("imgAreaSelect").setOptions(g)}}else{if(!g.remove){if(g.enable===undefined&&g.disable===undefined){g.enable=true}e(this).data("imgAreaSelect",new e.imgAreaSelect(this,g))}}});if(g.instance){return e(this).data("imgAreaSelect")}return this}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/jquery.form.dev.js b/wp-includes/js/jquery/jquery.form.dev.js index 006580752..d0cb23c23 100644 --- a/wp-includes/js/jquery/jquery.form.dev.js +++ b/wp-includes/js/jquery/jquery.form.dev.js @@ -823,4 +823,3 @@ function log() { }; })(jQuery); - diff --git a/wp-includes/js/jquery/jquery.form.js b/wp-includes/js/jquery/jquery.form.js index 43c37ab65..45ddd2f6c 100644 --- a/wp-includes/js/jquery/jquery.form.js +++ b/wp-includes/js/jquery/jquery.form.js @@ -1,4 +1,4 @@ -/* +/*! * jQuery Form Plugin * version: 2.73 (03-MAY-2011) * @requires jQuery v1.3.2 or later diff --git a/wp-includes/js/jquery/jquery.hotkeys.dev.js b/wp-includes/js/jquery/jquery.hotkeys.dev.js index 750863092..85fa1ffcb 100644 --- a/wp-includes/js/jquery/jquery.hotkeys.dev.js +++ b/wp-includes/js/jquery/jquery.hotkeys.dev.js @@ -51,10 +51,12 @@ USAGE: // inspect if keystroke matches var inspector = function(event) { - event = jQuery.event.fix(event); // jQuery event normalization. + // WP: not needed with newer jQuery + // event = jQuery.event.fix(event); // jQuery event normalization. var element = event.target; // @ TextNode -> nodeType == 3 - element = (element.nodeType==3) ? element.parentNode : element; + // WP: not needed with newer jQuery + // element = (element.nodeType==3) ? element.parentNode : element; if(opt['disableInInput']) { // Disable shortcut keys in Input, Textarea fields var target = jQuery(element); @@ -76,11 +78,12 @@ USAGE: // in opera + safari, the event.target is unpredictable. // for example: 'keydown' might be associated with HtmlBodyElement // or the element where you last clicked with your mouse. - if (jQuery.browser.opera || jQuery.browser.safari){ + // WP: needed for all browsers + // if (jQuery.browser.opera || jQuery.browser.safari){ while (!that.all[element] && element.parentNode){ element = element.parentNode; } - } + // } var cbMap = that.all[element].events[type].callbackMap; if(!shift && !ctrl && !alt && !meta) { // No Modifiers mapPoint = cbMap[special] || cbMap[character] diff --git a/wp-includes/js/jquery/jquery.hotkeys.js b/wp-includes/js/jquery/jquery.hotkeys.js index f6a328121..3c2f66aa6 100644 --- a/wp-includes/js/jquery/jquery.hotkeys.js +++ b/wp-includes/js/jquery/jquery.hotkeys.js @@ -1 +1 @@ -(function(a){this.version="(beta)(0.0.3)";this.all={};this.special_keys={27:"esc",9:"tab",32:"space",13:"return",8:"backspace",145:"scroll",20:"capslock",144:"numlock",19:"pause",45:"insert",36:"home",46:"del",35:"end",33:"pageup",34:"pagedown",37:"left",38:"up",39:"right",40:"down",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12"};this.shift_nums={"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":'"',",":"<",".":">","/":"?","\\":"|"};this.add=function(c,b,h){if(a.isFunction(b)){h=b;b={}}var d={},f={type:"keydown",propagate:false,disableInInput:false,target:a("html")[0]},e=this;d=a.extend(d,f,b||{});c=c.toLowerCase();var g=function(j){j=a.event.fix(j);var o=j.target;o=(o.nodeType==3)?o.parentNode:o;if(d.disableInInput){var s=a(o);if(s.is("input")||s.is("textarea")){return}}var l=j.which,u=j.type,r=String.fromCharCode(l).toLowerCase(),t=e.special_keys[l],m=j.shiftKey,i=j.ctrlKey,p=j.altKey,w=j.metaKey,q=true,k=null;if(a.browser.opera||a.browser.safari){while(!e.all[o]&&o.parentNode){o=o.parentNode}}var v=e.all[o].events[u].callbackMap;if(!m&&!i&&!p&&!w){k=v[t]||v[r]}else{var n="";if(p){n+="alt+"}if(i){n+="ctrl+"}if(m){n+="shift+"}if(w){n+="meta+"}k=v[n+t]||v[n+r]||v[n+e.shift_nums[r]]}if(k){k.cb(j);if(!k.propagate){j.stopPropagation();j.preventDefault();return false}}};if(!this.all[d.target]){this.all[d.target]={events:{}}}if(!this.all[d.target].events[d.type]){this.all[d.target].events[d.type]={callbackMap:{}};a.event.add(d.target,d.type,g)}this.all[d.target].events[d.type].callbackMap[c]={cb:h,propagate:d.propagate};return a};this.remove=function(c,b){b=b||{};target=b.target||a("html")[0];type=b.type||"keydown";c=c.toLowerCase();delete this.all[target].events[type].callbackMap[c];return a};a.hotkeys=this;return a})(jQuery); \ No newline at end of file +(function(a){this.version="(beta)(0.0.3)";this.all={};this.special_keys={27:"esc",9:"tab",32:"space",13:"return",8:"backspace",145:"scroll",20:"capslock",144:"numlock",19:"pause",45:"insert",36:"home",46:"del",35:"end",33:"pageup",34:"pagedown",37:"left",38:"up",39:"right",40:"down",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12"};this.shift_nums={"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":'"',",":"<",".":">","/":"?","\\":"|"};this.add=function(c,b,h){if(a.isFunction(b)){h=b;b={}}var d={},f={type:"keydown",propagate:false,disableInInput:false,target:a("html")[0]},e=this;d=a.extend(d,f,b||{});c=c.toLowerCase();var g=function(j){var o=j.target;if(d.disableInInput){var s=a(o);if(s.is("input")||s.is("textarea")){return}}var l=j.which,u=j.type,r=String.fromCharCode(l).toLowerCase(),t=e.special_keys[l],m=j.shiftKey,i=j.ctrlKey,p=j.altKey,w=j.metaKey,q=true,k=null;while(!e.all[o]&&o.parentNode){o=o.parentNode}var v=e.all[o].events[u].callbackMap;if(!m&&!i&&!p&&!w){k=v[t]||v[r]}else{var n="";if(p){n+="alt+"}if(i){n+="ctrl+"}if(m){n+="shift+"}if(w){n+="meta+"}k=v[n+t]||v[n+r]||v[n+e.shift_nums[r]]}if(k){k.cb(j);if(!k.propagate){j.stopPropagation();j.preventDefault();return false}}};if(!this.all[d.target]){this.all[d.target]={events:{}}}if(!this.all[d.target].events[d.type]){this.all[d.target].events[d.type]={callbackMap:{}};a.event.add(d.target,d.type,g)}this.all[d.target].events[d.type].callbackMap[c]={cb:h,propagate:d.propagate};return a};this.remove=function(c,b){b=b||{};target=b.target||a("html")[0];type=b.type||"keydown";c=c.toLowerCase();delete this.all[target].events[type].callbackMap[c];return a};a.hotkeys=this;return a})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/jquery.js b/wp-includes/js/jquery/jquery.js index 806a97482..8348c9781 100644 --- a/wp-includes/js/jquery/jquery.js +++ b/wp-includes/js/jquery/jquery.js @@ -1,5 +1,5 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); +/*! jQuery v1.7.2 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); jQuery.noConflict(); diff --git a/wp-includes/js/jquery/jquery.ui.touch-punch.js b/wp-includes/js/jquery/jquery.ui.touch-punch.js new file mode 100644 index 000000000..e10607a8f --- /dev/null +++ b/wp-includes/js/jquery/jquery.ui.touch-punch.js @@ -0,0 +1,11 @@ +/*! + * jQuery UI Touch Punch 0.2.2 + * + * Copyright 2011, Dave Furfero + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Depends: + * jquery.ui.widget.js + * jquery.ui.mouse.js + */ +(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var c=b.ui.mouse.prototype,e=c._mouseInit,a;function d(g,h){if(g.originalEvent.touches.length>1){return}g.preventDefault();var i=g.originalEvent.changedTouches[0],f=document.createEvent("MouseEvents");f.initMouseEvent(h,true,true,window,1,i.screenX,i.screenY,i.clientX,i.clientY,false,false,false,false,0,null);g.target.dispatchEvent(f)}c._touchStart=function(g){var f=this;if(a||!f._mouseCapture(g.originalEvent.changedTouches[0])){return}a=true;f._touchMoved=false;d(g,"mouseover");d(g,"mousemove");d(g,"mousedown")};c._touchMove=function(f){if(!a){return}this._touchMoved=true;d(f,"mousemove")};c._touchEnd=function(f){if(!a){return}d(f,"mouseup");d(f,"mouseout");if(!this._touchMoved){d(f,"click")}a=false};c._mouseInit=function(){var f=this;f.element.bind("touchstart",b.proxy(f,"_touchStart")).bind("touchmove",b.proxy(f,"_touchMove")).bind("touchend",b.proxy(f,"_touchEnd"));e.call(f)}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.blind.min.js b/wp-includes/js/jquery/ui/jquery.effects.blind.min.js index 1f80e26a5..4182718cb 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.blind.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.blind.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Blind 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Blind - * - * Depends: - * jquery.effects.core.js - */ -(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a, -g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.blind.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.bounce.min.js b/wp-includes/js/jquery/ui/jquery.effects.bounce.min.js index af330e4c7..008892b6c 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.bounce.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.bounce.min.js @@ -1,15 +1,5 @@ -/* - * jQuery UI Effects Bounce 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Bounce - * - * Depends: - * jquery.effects.core.js - */ -(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/ -3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a); -b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.bounce.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m<h;m++){var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing),g=e=="hide"?g*2:g/2}if(e=="hide"){var l={opacity:0};l[j]=(k=="pos"?"-=":"+=")+g,c.animate(l,i/2,b.options.easing,function(){c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}else{var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.clip.min.js b/wp-includes/js/jquery/ui/jquery.effects.clip.min.js index 4869b6bcc..aedbc111e 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.clip.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.clip.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Clip 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Clip - * - * Depends: - * jquery.effects.core.js - */ -(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position, -c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.clip.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.clip=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","height","width"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=c[0].tagName=="IMG"?g:c,i={size:f=="vertical"?"height":"width",position:f=="vertical"?"top":"left"},j=f=="vertical"?h.height():h.width();e=="show"&&(h.css(i.size,0),h.css(i.position,j/2));var k={};k[i.size]=e=="show"?j:0,k[i.position]=e=="show"?0:j/2,h.animate(k,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()}})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.core.min.js b/wp-includes/js/jquery/ui/jquery.effects.core.min.js index a2bec4544..5d7766d91 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.core.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.core.min.js @@ -1,31 +1,5 @@ -/* - * jQuery UI Effects 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/ - */ -jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1], -16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle, -a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d= -a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor", -"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={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]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b, -d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})}; -f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this, -[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b= -0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}), -d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement; -if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)}); -return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this, -arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/ -2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b, -d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c, -a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b, -d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g= -0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158; -if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c, -a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +jQuery.effects||function(a,b){function c(b){var c;return b&&b.constructor==Array&&b.length==3?b:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))?[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))?[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:(c=/rgba\(0, 0, 0, 0\)/.exec(b))?e.transparent:e[a.trim(b).toLowerCase()]}function d(b,d){var e;do{e=a.curCSS(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};return a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete,[b,c,d,e]}function l(b){return!b||typeof b=="number"||a.fx.speeds[b]?!0:typeof b=="string"&&!a.effects[b]?!0:!1}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={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]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){return a.isFunction(d)&&(e=d,d=null),this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class")||"";a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.20",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){return b=="toggle"&&(b=a.is(":hidden")?"show":"hide"),b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;return b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;return b.parent().is(".ui-effects-wrapper")?(c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus(),c):b},setTransition:function(b,c,d,e){return e=e||{},a.each(c,function(a,c){var f=b.cssUnit(c);f[0]>0&&(e[c]=f[0]*d+f[1])}),e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];return a.fx.off||!i?h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)}):i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="show",this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="hide",this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);return c[1].mode="toggle",this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];return a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])}),d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return b==0?c:b==e?c+d:(b/=e/2)<1?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){return(b/=e/2)<1?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin((b*e-f)*2*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e/2)==2)return c+d;g||(g=e*.3*1.5);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return b<1?-0.5*h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)+c:h*Math.pow(2,-10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)*.5+d+c},easeInBack:function(a,c,d,e,f,g){return g==b&&(g=1.70158),e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(a,c,d,e,f,g){return g==b&&(g=1.70158),e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(a,c,d,e,f,g){return g==b&&(g=1.70158),(c/=f/2)<1?e/2*c*c*(((g*=1.525)+1)*c-g)+d:e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(b,c,d,e,f){return e-a.easing.easeOutBounce(b,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(b,c,d,e,f){return c<f/2?a.easing.easeInBounce(b,c*2,0,e,f)*.5+d:a.easing.easeOutBounce(b,c*2-f,0,e,f)*.5+e*.5+d}})}(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.drop.min.js b/wp-includes/js/jquery/ui/jquery.effects.drop.min.js index dc893d547..e440577f8 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.drop.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.drop.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Drop 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Drop - * - * Depends: - * jquery.effects.core.js - */ -(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e== -"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.drop.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.drop=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","opacity"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);e=="show"&&c.css("opacity",0).css(g,h=="pos"?-i:i);var j={opacity:e=="show"?1:0};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.explode.min.js b/wp-includes/js/jquery/ui/jquery.effects.explode.min.js index f83305890..06f53c796 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.explode.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.explode.min.js @@ -1,15 +1,5 @@ -/* - * jQuery UI Effects Explode 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Explode - * - * Depends: - * jquery.effects.core.js - */ -(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f= -0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+ -e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.explode.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.explode=function(b){return this.queue(function(){var c=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3,d=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":b.options.mode;var e=a(this).show().css("visibility","hidden"),f=e.offset();f.top-=parseInt(e.css("marginTop"),10)||0,f.left-=parseInt(e.css("marginLeft"),10)||0;var g=e.outerWidth(!0),h=e.outerHeight(!0);for(var i=0;i<c;i++)for(var j=0;j<d;j++)e.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.fade.min.js b/wp-includes/js/jquery/ui/jquery.effects.fade.min.js index 2469821f5..d36845b63 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.fade.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.fade.min.js @@ -1,13 +1,5 @@ -/* - * jQuery UI Effects Fade 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Fade - * - * Depends: - * jquery.effects.core.js - */ -(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.fade.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.fold.min.js b/wp-includes/js/jquery/ui/jquery.effects.fold.min.js index 67ff80c00..ecc9d0ad0 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.fold.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.fold.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Fold 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * jquery.effects.core.js - */ -(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1], -10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.fold.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.highlight.min.js b/wp-includes/js/jquery/ui/jquery.effects.highlight.min.js index a6cbe7bd2..8cf0a2565 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.highlight.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.highlight.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Highlight 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * jquery.effects.core.js - */ -(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&& -this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.highlight.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.pulsate.min.js b/wp-includes/js/jquery/ui/jquery.effects.pulsate.min.js index eac51f6f8..41e07ba64 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.pulsate.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.pulsate.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Pulsate 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * jquery.effects.core.js - */ -(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration, -a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.pulsate.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show"),e=(b.options.times||5)*2-1,f=b.duration?b.duration/2:a.fx.speeds._default/2,g=c.is(":visible"),h=0;g||(c.css("opacity",0).show(),h=1),(d=="hide"&&g||d=="show"&&!g)&&e--;for(var i=0;i<e;i++)c.animate({opacity:h},f,b.options.easing),h=(h+1)%2;c.animate({opacity:h},f,b.options.easing,function(){h==0&&c.hide(),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.scale.min.js b/wp-includes/js/jquery/ui/jquery.effects.scale.min.js index a902d8718..955a51fcf 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.scale.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.scale.min.js @@ -1,20 +1,5 @@ -/* - * jQuery UI Effects Scale 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Scale - * - * Depends: - * jquery.effects.core.js - */ -(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a, -b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity= -1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"], -p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}}; -if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a); -a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from); -child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a, -n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.scale.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.puff=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,f=e/100,g={height:c.height(),width:c.width()};a.extend(b.options,{fade:!0,mode:d,percent:d=="hide"?e:100,from:d=="hide"?g:{height:g.height*f,width:g.width*f}}),c.effect("scale",b.options,b.duration,b.callback),c.dequeue()})},a.effects.scale=function(b){return this.queue(function(){var c=a(this),d=a.extend(!0,{},b.options),e=a.effects.setMode(c,b.options.mode||"effect"),f=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:e=="hide"?0:100),g=b.options.direction||"both",h=b.options.origin;e!="effect"&&(d.origin=h||["middle","center"],d.restore=!0);var i={height:c.height(),width:c.width()};c.from=b.options.from||(e=="show"?{height:0,width:0}:i);var j={y:g!="horizontal"?f/100:1,x:g!="vertical"?f/100:1};c.to={height:i.height*j.y,width:i.width*j.x},b.options.fade&&(e=="show"&&(c.from.opacity=0,c.to.opacity=1),e=="hide"&&(c.from.opacity=1,c.to.opacity=0)),d.from=c.from,d.to=c.to,d.mode=e,c.effect("size",d,b.duration,b.callback),c.dequeue()})},a.effects.size=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","width","height","overflow","opacity"],e=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],g=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=a.effects.setMode(c,b.options.mode||"effect"),k=b.options.restore||!1,l=b.options.scale||"both",m=b.options.origin,n={height:c.height(),width:c.width()};c.from=b.options.from||n,c.to=b.options.to||n;if(m){var p=a.effects.getBaseline(m,n);c.from.top=(n.height-c.from.height)*p.y,c.from.left=(n.width-c.from.width)*p.x,c.to.top=(n.height-c.to.height)*p.y,c.to.left=(n.width-c.to.width)*p.x}var q={from:{y:c.from.height/n.height,x:c.from.width/n.width},to:{y:c.to.height/n.height,x:c.to.width/n.width}};if(l=="box"||l=="both")q.from.y!=q.to.y&&(d=d.concat(h),c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(d=d.concat(i),c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to));(l=="content"||l=="both")&&q.from.y!=q.to.y&&(d=d.concat(g),c.from=a.effects.setTransition(c,g,q.from.y,c.from),c.to=a.effects.setTransition(c,g,q.to.y,c.to)),a.effects.save(c,k?d:e),c.show(),a.effects.createWrapper(c),c.css("overflow","hidden").css(c.from);if(l=="content"||l=="both")h=h.concat(["marginTop","marginBottom"]).concat(g),i=i.concat(["marginLeft","marginRight"]),f=d.concat(h).concat(i),c.find("*[width]").each(function(){var c=a(this);k&&a.effects.save(c,f);var d={height:c.height(),width:c.width()};c.from={height:d.height*q.from.y,width:d.width*q.from.x},c.to={height:d.height*q.to.y,width:d.width*q.to.x},q.from.y!=q.to.y&&(c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to)),c.css(c.from),c.animate(c.to,b.duration,b.options.easing,function(){k&&a.effects.restore(c,f)})});c.animate(c.to,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity),j=="hide"&&c.hide(),a.effects.restore(c,k?d:e),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.shake.min.js b/wp-includes/js/jquery/ui/jquery.effects.shake.min.js index f9fbca49d..2c83b7a4f 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.shake.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.shake.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Shake 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Shake - * - * Depends: - * jquery.effects.core.js - */ -(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]= -(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.shake.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.shake=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"left",g=b.options.distance||20,h=b.options.times||3,i=b.duration||b.options.duration||140;a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",l={},m={},n={};l[j]=(k=="pos"?"-=":"+=")+g,m[j]=(k=="pos"?"+=":"-=")+g*2,n[j]=(k=="pos"?"-=":"+=")+g*2,c.animate(l,i,b.options.easing);for(var p=1;p<h;p++)c.animate(m,i,b.options.easing).animate(n,i,b.options.easing);c.animate(m,i,b.options.easing).animate(l,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.slide.min.js b/wp-includes/js/jquery/ui/jquery.effects.slide.min.js index 24e5b4838..4275a59bf 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.slide.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.slide.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Slide 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Slide - * - * Depends: - * jquery.effects.core.js - */ -(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e); -var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.slide.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.effects.transfer.min.js b/wp-includes/js/jquery/ui/jquery.effects.transfer.min.js index 925650be6..b8231847e 100644 --- a/wp-includes/js/jquery/ui/jquery.effects.transfer.min.js +++ b/wp-includes/js/jquery/ui/jquery.effects.transfer.min.js @@ -1,14 +1,5 @@ -/* - * jQuery UI Effects Transfer 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Transfer - * - * Depends: - * jquery.effects.core.js - */ -(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments); -b.dequeue()})})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.transfer.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.transfer=function(b){return this.queue(function(){var c=a(this),d=a(b.options.to),e=d.offset(),f={top:e.top,left:e.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.accordion.min.js b/wp-includes/js/jquery/ui/jquery.ui.accordion.min.js index f8d83dd84..3679011eb 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.accordion.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.accordion.min.js @@ -1,30 +1,5 @@ -/* - * jQuery UI Accordion 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(c){c.widget("ui.accordion",{options:{active:0,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()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"); -a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); -if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion", -function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a= -this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); -this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons(); -b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target); -a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+ -c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options; -if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header); -if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(), -e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight|| -e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false", -"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.16", -animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/); -f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide", -paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.accordion.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){if(c.disabled)return;a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){if(c.disabled)return;a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");return(b.autoHeight||b.fillHeight)&&c.css("height",""),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(this.options.disabled||b.altKey||b.ctrlKey)return;var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}return f?(a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus(),!1):!0},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];return this._clickHandler({target:b},b),this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(d.disabled)return;if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!g)return;return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(this.running)return;this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data)}}),a.extend(a.ui.accordion,{version:"1.8.20",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size()){b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);return}if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.autocomplete.min.js b/wp-includes/js/jquery/ui/jquery.ui.autocomplete.min.js index 795fab731..689479c9f 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.autocomplete.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.autocomplete.min.js @@ -1,32 +1,5 @@ -/* - * jQuery UI Autocomplete 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.position.js - */ -(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g= -false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!= -a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)}; -this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&& -a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); -d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&& -b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source= -this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close(); -this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label|| -b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this; -d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, -"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery); -(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b, -this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active|| -this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.autocomplete.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.isMultiLine=this.element.is("textarea"),this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(b.options.disabled||b.element.propAttr("readOnly"))return;d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._keyEvent("previous",c);break;case e.DOWN:b._keyEvent("next",c);break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){if(b.options.disabled)return;b.selectedItem=null,b.previous=b.element.val()}).bind("blur.autocomplete",function(a){if(b.options.disabled)return;clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150)}),this._initSource(),this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,c,d;a.isArray(this.options.source)?(c=this.options.source,this.source=function(b,d){d(a.ui.autocomplete.filter(c,b.term))}):typeof this.options.source=="string"?(d=this.options.source,this.source=function(c,e){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:d,data:c,dataType:"json",success:function(a,b){e(a)},error:function(){e([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)===!1)return;return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this._response())},_response:function(){var a=this,b=++c;return function(d){b===c&&a.__response(d),a.pending--,a.pending||a.element.removeClass("ui-autocomplete-loading")}},__response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close()},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){return b.length&&b[0].label&&b[0].value?b:a.map(b,function(b){return typeof b=="string"?{label:b,value:b}:a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible")){this.search(null,b);return}if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)},widget:function(){return this.menu.element},_keyEvent:function(a,b){if(!this.isMultiLine||this.menu.element.is(":visible"))this._move(a,b),b.preventDefault()}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(!a(c.target).closest(".ui-menu-item a").length)return;c.preventDefault(),b.select(c)}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){if(!this.active)return;this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active){this.activate(c,this.element.children(b));return}var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:first")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.button.min.js b/wp-includes/js/jquery/ui/jquery.ui.button.min.js index 903f73e93..8e560a2e2 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.button.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.button.min.js @@ -1,27 +1,5 @@ -/* - * jQuery UI Button 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(b){var h,i,j,g,l=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},k=function(a){var c=a.name,e=a.form,f=b([]);if(c)f=e?b(e).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form});return f};b.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",l);if(typeof this.options.disabled!== -"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover"); -this===h&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||b(this).removeClass(f)}).bind("click.button",function(d){if(c.disabled){d.preventDefault();d.stopImmediatePropagation()}});this.element.bind("focus.button",function(){a.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){a.buttonElement.removeClass("ui-state-focus")});if(e){this.element.bind("change.button",function(){g||a.refresh()});this.buttonElement.bind("mousedown.button",function(d){if(!c.disabled){g= -false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed","true"); -var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE|| -d.keyCode==b.ui.keyCode.ENTER)b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(d){d.keyCode===b.ui.keyCode.SPACE&&b(this).click()})}this._setOption("disabled",c.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type=== -"radio"){var a=this.element.parents().filter(":last"),c="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element}, -widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title"); -b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed", -"true"):b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"), -c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+e.primary+"'></span>");e.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+e.secondary+"'></span>");if(!this.options.text){d.push(f?"ui-button-icons-only": -"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")=== -"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); -b.Widget.prototype.destroy.call(this)}})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.button.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);return c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form})),e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.propAttr("disabled"):this.element.propAttr("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){if(h.disabled)return;a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active")}).bind("mouseleave.button",function(){if(h.disabled)return;a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){if(f)return;b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){if(h.disabled)return;f=!1,d=a.pageX,e=a.pageY}).bind("mouseup.button",function(a){if(h.disabled)return;if(d!==a.pageX||e!==a.pageY)f=!0})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled"){c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1);return}this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input"){this.options.label&&this.element.val(this.options.label);return}var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.core.min.js b/wp-includes/js/jquery/ui/jquery.ui.core.min.js index 59d7bb29f..dc41e5814 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.core.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.core.min.js @@ -1,18 +1,5 @@ -/*! - * jQuery UI 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16", -keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d= -this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this, -"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart": -"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight, -outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a, -"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&& -a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&& -c.ui.isOverAxis(b,e,i)}})}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.20",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js b/wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js index 07c83968e..745616865 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js @@ -1,83 +1,5 @@ -/* - * jQuery UI Datepicker 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker - * - * Depends: - * jquery.ui.core.js - */ -(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass= -"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su", -"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10", -minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout", -function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); -b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv}, -setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g, -"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", -function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c== -"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker(): -d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a, -b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+= -1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/ -2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b= -d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e= -a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a, -"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f== -a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"? -d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e); -this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl"); -b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]&&d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]);if(a=d.datepicker._get(b,"onSelect")){c=d.datepicker._formatDate(b);a.apply(b.input?b.input[0]:null,[c,b])}else d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target, -a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c= -a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b, -"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode); -return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input", -a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value= -"";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b); -c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing= -true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}); -a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&& -!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(), -h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b= -this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b); -this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, -_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): -0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"? -"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a); -this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField"); -if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"? -b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var D= -o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s= -function(){if(b.charAt(q)!=a.charAt(A))throw"Unexpected literal at position "+q;q++},q=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else s();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+ -1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd", -COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames: -null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()- -(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f= -0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a); -var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date; -i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g= -Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()> -12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&& -a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? -new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); -n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m, -g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&& -a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+B+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+ -B+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O= -"";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&& -x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, -z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()== -P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+B+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?" ":L?'<span class="ui-state-default">'+ -r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>': -"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" >";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&& -(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b, -e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" >";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+ -(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input? -a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c, -e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a, -"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this; -if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a== -"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.datepicker.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function($,undefined){function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);if(!c.length)return;c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);if($.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])||!d.length)return;d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover")})}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}$.extend($.ui,{datepicker:{version:"1.8.20"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){return extendRemove(this._defaults,a||{}),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(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);if(c.hasClass(this.markerClassName))return;this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a)},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$('<span class="'+this._appendClass+'">'+c+"</span>"),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('<button type="button"></button>').addClass(this._triggerClass).html(g==""?f:$("<img/>").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){return $.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]),!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;d<a.length;d++)a[d].length>b&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);if(c.hasClass(this.markerClassName))return;c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block")},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+g+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}return this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f),this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!b.hasClass(this.markerClassName))return;var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return!0;return!1},_getInst:function(a){try{return $.data(a,PROP_NAME)}catch(b){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(a,b,c){var d=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?$.extend({},$.datepicker._defaults):d?b=="all"?$.extend({},d.settings):this._get(d,b):null;var e=b||{};typeof b=="string"&&(e={},e[b]=c);if(d){this._curInst==d&&this._hideDatepicker();var f=this._getDateDatepicker(a,!0),g=this._getMinMaxDate(d,"min"),h=this._getMinMaxDate(d,"max");extendRemove(d.settings,e),g!==null&&e.dateFormat!==undefined&&e.minDate===undefined&&(d.settings.minDate=this._formatDate(d,g)),h!==null&&e.dateFormat!==undefined&&e.maxDate===undefined&&(d.settings.maxDate=this._formatDate(d,h)),this._attachments($(a),d),this._autoSize(d),this._setDate(d,f),this._updateAlternate(d),this._updateDatepicker(d)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);return c&&!c.inline&&this._setDateFromField(c,b),c?this._getDate(c):null},_doKeyDown:function(a){var b=$.datepicker._getInst(a.target),c=!0,d=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=!0;if($.datepicker._datepickerShowing)switch(a.keyCode){case 9:$.datepicker._hideDatepicker(),c=!1;break;case 13:var e=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",b.dpDiv);e[0]&&$.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,e[0]);var f=$.datepicker._get(b,"onSelect");if(f){var g=$.datepicker._formatDate(b);f.apply(b.input?b.input[0]:null,[g,b])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&$.datepicker._clearDate(a.target),c=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&$.datepicker._gotoToday(a.target),c=a.ctrlKey||a.metaKey;break;case 37:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?1:-1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,-7,"D"),c=a.ctrlKey||a.metaKey;break;case 39:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?-1:1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,7,"D"),c=a.ctrlKey||a.metaKey;break;default:c=!1}else a.keyCode==36&&a.ctrlKey?$.datepicker._showDatepicker(this):c=!1;c&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(a){var b=$.datepicker._getInst(a.target);if($.datepicker._get(b,"constrainInput")){var c=$.datepicker._possibleChars($.datepicker._get(b,"dateFormat")),d=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||d<" "||!c||c.indexOf(d)>-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(d){$.datepicker.log(d)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if($.datepicker._isDisabledDatepicker(a)||$.datepicker._lastInput==a)return;var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){return e|=$(this).css("position")=="fixed",!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+$(document).scrollLeft(),i=document.documentElement.clientHeight+$(document).scrollTop();return b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0),b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!b||a&&b!=$.data(a,PROP_NAME))return;if(this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=function(){$.datepicker._tidyDialog(b)};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,e):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,e),c||e(),this._datepickerShowing=!1;var f=this._get(b,"onClose");f&&f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!$.datepicker._curInst)return;var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);if(this._isDisabledDatepicker(d[0]))return;this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e)},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if($(d).hasClass(this._unselectableClass)||this._isDisabledDatepicker(e[0]))return;var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1<a.length&&a.charAt(s+1)==b;return c&&s++,c},o=function(a){var c=n(a),d=a=="@"?14:a=="!"?20:a=="y"&&c?4:a=="o"?3:2,e=new RegExp("^\\d{1,"+d+"}"),f=b.substring(r).match(e);if(!f)throw"Missing number at position "+r;return r+=f[0].length,parseInt(f[0],10)},p=function(a,c,d){var e=$.map(n(a)?d:c,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),f=-1;$.each(e,function(a,c){var d=c[1];if(b.substr(r,d.length).toLowerCase()==d.toLowerCase())return f=c[0],r+=d.length,!1});if(f!=-1)return f+1;throw"Unknown name at position "+r},q=function(){if(b.charAt(r)!=a.charAt(s))throw"Unexpected literal at position "+r;r++},r=0;for(var s=0;s<a.length;s++)if(m)a.charAt(s)=="'"&&!n("'")?m=!1:q();else switch(a.charAt(s)){case"d":k=o("d");break;case"D":p("D",e,f);break;case"o":l=o("o");break;case"m":j=o("m");break;case"M":j=p("M",g,h);break;case"y":i=o("y");break;case"@":var t=new Date(o("@"));i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"!":var t=new Date((o("!")-this._ticksTo1970)/1e4);i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"'":n("'")?q():m=!0;break;default:q()}if(r<b.length)throw"Extra/unparsed characters found in date: "+b.substring(r);i==-1?i=(new Date).getFullYear():i<100&&(i+=(new Date).getFullYear()-(new Date).getFullYear()%100+(i<=d?0:-100));if(l>-1){j=1,k=l;do{var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}while(!0)}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+1<a.length&&a.charAt(m+1)==b;return c&&m++,c},i=function(a,b,c){var d=""+b;if(h(a))while(d.length<c)d="0"+d;return d},j=function(a,b,c,d){return h(a)?d[b]:c[b]},k="",l=!1;if(b)for(var m=0;m<a.length;m++)if(l)a.charAt(m)=="'"&&!h("'")?l=!1:k+=a.charAt(m);else switch(a.charAt(m)){case"d":k+=i("d",b.getDate(),2);break;case"D":k+=j("D",b.getDay(),d,e);break;case"o":k+=i("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":k+=i("m",b.getMonth()+1,2);break;case"M":k+=j("M",b.getMonth(),f,g);break;case"y":k+=h("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":k+=b.getTime();break;case"!":k+=b.getTime()*1e4+this._ticksTo1970;break;case"'":h("'")?k+="'":l=!0;break;default:k+=a.charAt(m)}return k},_possibleChars:function(a){var b="",c=!1,d=function(b){var c=e+1<a.length&&a.charAt(e+1)==b;return c&&e++,c};for(var e=0;e<a.length;e++)if(c)a.charAt(e)=="'"&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case"d":case"m":case"y":case"@":b+="0123456789";break;case"D":case"M":return null;case"'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()==a.lastVal)return;var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e,f;e=f=this._getDefaultDate(a);var g=this._getFormatConfig(a);try{e=this.parseDate(c,d,g)||f}catch(h){this.log(h),d=b?"":d}a.selectedDay=e.getDate(),a.drawMonth=a.selectedMonth=e.getMonth(),a.drawYear=a.selectedYear=e.getFullYear(),a.currentDay=d?e.getDate():0,a.currentMonth=d?e.getMonth():0,a.currentYear=d?e.getFullYear():0,this._adjustInstDate(a)},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var d=function(a){var b=new Date;return b.setDate(b.getDate()+a),b},e=function(b){try{return $.datepicker.parseDate($.datepicker._get(a,"dateFormat"),b,$.datepicker._getFormatConfig(a))}catch(c){}var d=(b.toLowerCase().match(/^c/)?$.datepicker._getDate(a):null)||new Date,e=d.getFullYear(),f=d.getMonth(),g=d.getDate(),h=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,i=h.exec(b);while(i){switch(i[2]||"d"){case"d":case"D":g+=parseInt(i[1],10);break;case"w":case"W":g+=parseInt(i[1],10)*7;break;case"m":case"M":f+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f));break;case"y":case"Y":e+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f))}i=h.exec(b)}return new Date(e,f,g)},f=b==null||b===""?c:typeof b=="string"?e(b):typeof b=="number"?isNaN(b)?c:d(b):new Date(b.getTime());return f=f&&f.toString()=="Invalid Date"?c:f,f&&(f.setHours(0),f.setMinutes(0),f.setSeconds(0),f.setMilliseconds(0)),this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(a){return a?(a.setHours(a.getHours()>12?a.getHours()+2:0),a):null},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&p<l?l:p;while(this._daylightSavingAdjust(new Date(o,n,1))>p)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', -"+i+", 'M');\""+' title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>":e?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', +"+i+", 'M');\""+' title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":e?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+dpuuid+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>",x=d?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?w:"")+(this._isInRange(a,v)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._gotoToday('#"+a.id+"');\""+">"+u+"</button>":"")+(c?"":w)+"</div>":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L<g[0];L++){var M="";this.maxRows=4;for(var N=0;N<g[1];N++){var O=this._daylightSavingAdjust(new Date(o,n,a.selectedDay)),P=" ui-corner-all",Q="";if(j){Q+='<div class="ui-datepicker-group';if(g[1]>1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+P+'">'+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var R=z?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="<th"+((S+y+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+A[T]+'">'+C[T]+"</span></th>"}Q+=R+"</tr></thead><tbody>";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z<X;Z++){Q+="<tr>";var _=z?'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(Y)+"</td>":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Y<l||m&&Y>m;_+='<td class="'+((S+y+6)%7>=5?" ui-datepicker-week-end":"")+(bb?" ui-datepicker-other-month":"")+(Y.getTime()==O.getTime()&&n==a.selectedMonth&&a._keyEvent||J.getTime()==Y.getTime()&&J.getTime()==O.getTime()?" "+this._dayOverClass:"")+(bc?" "+this._unselectableClass+" ui-state-disabled":"")+(bb&&!G?"":" "+ba[1]+(Y.getTime()==k.getTime()?" "+this._currentClass:"")+(Y.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!bb||G)&&ba[2]?' title="'+ba[2]+'"':"")+(bc?"":' onclick="DP_jQuery_'+dpuuid+".datepicker._selectDay('#"+a.id+"',"+Y.getMonth()+","+Y.getFullYear()+', this);return false;"')+">"+(bb&&!G?" ":bc?'<span class="ui-state-default">'+Y.getDate()+"</span>":'<a class="ui-state-default'+(Y.getTime()==b.getTime()?" ui-state-highlight":"")+(Y.getTime()==k.getTime()?" ui-state-active":"")+(bb?" ui-priority-secondary":"")+'" href="#">'+Y.getDate()+"</a>")+"</td>",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+"</tr>"}n++,n>11&&(n=0,o++),Q+="</tbody></table>"+(j?"</div>"+(g[0]>0&&N==g[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),M+=Q}K+=M}return K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),a._keyEvent=!1,K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='<div class="ui-datepicker-title">',m="";if(f||!i)m+='<span class="ui-datepicker-month">'+g[b]+"</span>";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" "+">";for(var p=0;p<12;p++)(!n||p>=d.getMonth())&&(!o||p<=e.getMonth())&&(m+='<option value="'+p+'"'+(p==b?' selected="selected"':"")+">"+h[p]+"</option>");m+="</select>"}k||(l+=m+(f||!i||!j?" ":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+='<span class="ui-datepicker-year">'+c+"</span>";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" "+">";for(;t<=u;t++)a.yearshtml+='<option value="'+t+'"'+(t==c?' selected="selected"':"")+">"+t+"</option>";a.yearshtml+="</select>",l+=a.yearshtml,a.yearshtml=null}}return l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?" ":"")+m),l+="</div>",l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&b<c?c:b;return e=d&&e>d?d:e,e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));return b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth())),this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");return b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10),{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);return typeof a!="string"||a!="isDisabled"&&a!="getDate"&&a!="widget"?a=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b)):this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)}):$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.20",window["DP_jQuery_"+dpuuid]=$})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.dialog.min.js b/wp-includes/js/jquery/ui/jquery.ui.dialog.min.js index a16bf9eb0..2d8a7f0d9 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.dialog.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.dialog.min.js @@ -1,40 +1,5 @@ -/* - * jQuery UI Dialog 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, -position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&!i.isDefaultPrevented()&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g), -h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id", -e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!== -b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()};c.ui.dialog.maxZ+=1; -d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target=== -f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a, -function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", -handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition, -originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize", -f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "): -[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f); -if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"): -e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a= -this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height- -b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), -create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&!d.isDefaultPrevented()&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()|| -c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&& -c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+ -"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.dialog.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||" ",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){return b.close(a),!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("<span></span>").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;return a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle),a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1===c._trigger("beforeClose",b))return;return c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d),c},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;return e.modal&&!b||!e.stack&&!e.modal?d._trigger("focus",c):(e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c),d)},open:function(){if(this._isOpen)return;var b=this,c=b.options,d=b.uiDialog;return b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode!==a.ui.keyCode.TAB)return;var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey)return d.focus(1),!1;if(b.target===d[0]&&b.shiftKey)return e.focus(1),!1}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open"),b},_createButtons:function(b){var c=this,d=!1,e=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('<button type="button"></button>').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){if(a==="click")return;a in f?e[a](b):e.attr(a,b)}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||" "))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.20",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");return b||(this.uuid+=1,b=this.uuid),"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return!1})},1),a(document).bind("keydown.dialog-overlay",function(c){b.options.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}),a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});return a.fn.bgiframe&&c.bgiframe(),this.instances.push(c),c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;return a.browser.msie&&a.browser.version<7?(b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),b<c?a(window).height()+"px":b+"px"):a(document).height()+"px"},width:function(){var b,c;return a.browser.msie?(b=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth),b<c?a(window).width()+"px":b+"px"):a(document).width()+"px"},resize:function(){var b=a([]);a.each(a.ui.dialog.overlay.instances,function(){b=b.add(this)}),b.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}}),a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.draggable.min.js b/wp-includes/js/jquery/ui/jquery.ui.draggable.min.js index b72fb94ea..8a4b4cfc1 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.draggable.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.draggable.min.js @@ -1,50 +1,5 @@ -/* - * jQuery UI Draggable 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== -"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= -this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options; -this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); -this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true}, -_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b= -false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, -10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle|| -!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&& -a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= -this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"), -10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), -10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, -(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!= -"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"), -10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+ -this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&& -!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left; -if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/ -b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version< -526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b, -c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert}); -h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval= -false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true); -this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top; -c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&& -this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity= -a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!= -"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left< -c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()- -c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this, -width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&& -o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t= -p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&& -(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"), -10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.draggable.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){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;return this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy(),this},_mouseCapture:function(b){var c=this.options;return this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")?!1:(this.handle=this._getHandle(b),this.handle?(c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(b){var c=this.options;return this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},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.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment(),this._trigger("start",b)===!1?(this._clear(),!1):(this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b),!0)},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1)return this._mouseUp({}),!1;this.position=d.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";return a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);var d=this.element[0],e=!1;while(d&&(d=d.parentNode))d==document&&(e=!0);if(!e&&this.options.helper==="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var f=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){f._trigger("stop",b)!==!1&&f._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){return this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b),a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;return a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)}),c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;return d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute"),d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();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 a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=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(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){return d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute")),a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.20"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!e.length)return;var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.droppable.min.js b/wp-includes/js/jquery/ui/jquery.ui.droppable.min.js index dc7904243..5d51ce346 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.droppable.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.droppable.min.js @@ -1,27 +1,5 @@ -/* - * jQuery UI Droppable 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Droppables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.mouse.js - * jquery.ui.draggable.js - */ -(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this); -a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&& -this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass); -this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g= -d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop", -a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height; -switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>= -i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!= -"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem|| -a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance); -if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable"); -a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.droppable.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var b=this.options,c=b.accept;this.isover=0,this.isout=1,this.accept=a.isFunction(c)?c:function(a){return a.is(c)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},a.ui.ddmanager.droppables[b.scope]=a.ui.ddmanager.droppables[b.scope]||[],a.ui.ddmanager.droppables[b.scope].push(this),b.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++)b[c]==this&&b.splice(c,1);return this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable"),this},_setOption:function(b,c){b=="accept"&&(this.accept=a.isFunction(c)?c:function(a){return a.is(c)}),a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return;this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return;this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var e=!1;return this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var b=a.data(this,"droppable");if(b.options.greedy&&!b.options.disabled&&b.options.scope==d.options.scope&&b.accept.call(b.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(b,{offset:b.element.offset()}),b.options.tolerance))return e=!0,!1}),e?!1:this.accept.call(this.element[0],d.currentItem||d.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d)),this.element):!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.extend(a.ui.droppable,{version:"1.8.20"}),a.ui.intersect=function(b,c,d){if(!c.offset)return!1;var e=(b.positionAbs||b.position.absolute).left,f=e+b.helperProportions.width,g=(b.positionAbs||b.position.absolute).top,h=g+b.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case"fit":return i<=e&&f<=j&&k<=g&&h<=l;case"intersect":return i<e+b.helperProportions.width/2&&f-b.helperProportions.width/2<j&&k<g+b.helperProportions.height/2&&h-b.helperProportions.height/2<l;case"pointer":var m=(b.positionAbs||b.position.absolute).left+(b.clickOffset||b.offset.click).left,n=(b.positionAbs||b.position.absolute).top+(b.clickOffset||b.offset.click).top,o=a.ui.isOver(n,m,k,i,c.proportions.height,c.proportions.width);return o;case"touch":return(g>=k&&g<=l||h>=k&&h<=l||g<k&&h>l)&&(e>=i&&e<=j||f>=i&&f<=j||e<i&&f>j);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();g:for(var h=0;h<d.length;h++){if(d[h].options.disabled||b&&!d[h].accept.call(d[h].element[0],b.currentItem||b.element))continue;for(var i=0;i<f.length;i++)if(f[i]==d[h].element[0]){d[h].proportions.height=0;continue g}d[h].visible=d[h].element.css("display")!="none";if(!d[h].visible)continue;e=="mousedown"&&d[h]._activate.call(d[h],c),d[h].offset=d[h].element.offset(),d[h].proportions={width:d[h].element[0].offsetWidth,height:d[h].element[0].offsetHeight}}},drop:function(b,c){var d=!1;return a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!this.options)return;!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,c))}),d},dragStart:function(b,c){b.element.parents(":not(body,html)").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(this.options.disabled||this.greedyChild||!this.visible)return;var d=a.ui.intersect(b,this,this.options.tolerance),e=!d&&this.isover==1?"isout":d&&this.isover==0?"isover":null;if(!e)return;var f;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");g.length&&(f=a.data(g[0],"droppable"),f.greedyChild=e=="isover"?1:0)}f&&e=="isover"&&(f.isover=0,f.isout=1,f._out.call(f,c)),this[e]=1,this[e=="isout"?"isover":"isout"]=0,this[e=="isover"?"_over":"_out"].call(this,c),f&&e=="isout"&&(f.isout=0,f.isover=1,f._over.call(f,c))})},dragStop:function(b,c){b.element.parents(":not(body,html)").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.mouse.min.js b/wp-includes/js/jquery/ui/jquery.ui.mouse.min.js index 9c51579ba..84a616db1 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.mouse.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.mouse.min.js @@ -1,17 +1,5 @@ -/*! - * jQuery UI Mouse 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+ -this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted= -this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&& -!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= -false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.mouse.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent"))return a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(c)return;this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted)return b.preventDefault(),!0}return!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0,!0},_mouseMove:function(b){return!a.browser.msie||document.documentMode>=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.position.min.js b/wp-includes/js/jquery/ui/jquery.ui.position.min.js index 42d93654d..4f40f96a6 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.position.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.position.min.js @@ -1,16 +1,5 @@ -/* - * jQuery UI Position 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, -left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= -k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= -m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= -d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= -a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), -g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.position.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.progressbar.min.js b/wp-includes/js/jquery/ui/jquery.ui.progressbar.min.js index b758ebaee..9b5c68c5a 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.progressbar.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.progressbar.min.js @@ -1,16 +1,5 @@ -/* - * jQuery UI Progressbar 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); -this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100* -this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.progressbar.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){return a===b?this._value():(this._setOption("value",a),this)},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;return typeof a!="number"&&(a=0),Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.20"})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.resizable.min.js b/wp-includes/js/jquery/ui/jquery.ui.resizable.min.js index d6b71b39f..62f7bce6b 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.resizable.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.resizable.min.js @@ -1,49 +1,5 @@ -/* - * jQuery UI Resizable 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element, -_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), -top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= -this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", -nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== -String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); -this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); -var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a= -false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"}); -this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff= -{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis]; -if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false}, -_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f, -{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight: -Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width= -b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&& -a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left= -null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)|| -0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+ -a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+ -c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]); -b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(), -10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top- -f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType? -e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a= -e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing, -step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement= -e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset; -var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left: -a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top- -d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition, -f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25, -display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b= -e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height= -d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.resizable.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').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=!0,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=c.handles||(a(".ui-resizable-handle",this.element).length?{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"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');h.css({zIndex:c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){if(c.disabled)return;a(this).removeClass("ui-resizable-autohide"),b._handles.show()},function(){if(c.disabled)return;b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}return this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement),this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");return a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b),!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);return l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui()),!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}return a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;return d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width)),a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;return p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null),a},_proportionallyResize:function(){var b=this.options;if(!this._proportionallyResizeElements.length)return;var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(!a.browser.msie||!a(c).is(":hidden")&&!a(c).parents(":hidden").length)e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0});else continue}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,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}}}),a.extend(a.ui.resizable,{version:"1.8.20"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!i)return;e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/d.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*d.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.selectable.min.js b/wp-includes/js/jquery/ui/jquery.ui.selectable.min.js index 3c600af0a..500c8a89a 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.selectable.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.selectable.min.js @@ -1,22 +1,5 @@ -/* - * jQuery UI Selectable 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"), -selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX, -c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting", -c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d= -this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting"); -a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&& -!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d= -e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.selectable.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){return this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy(),this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(this.options.disabled)return;var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");return d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element}),!1}})},_mouseDrag:function(b){var c=this;this.dragged=!0;if(this.options.disabled)return;var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}return this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!i||i.element==c.element[0])return;var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.right<e||i.top>h||i.bottom<f):d.tolerance=="fit"&&(j=i.left>e&&i.right<g&&i.top>f&&i.bottom<h),j?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,c._trigger("selecting",b,{selecting:i.element}))):(i.selecting&&((b.metaKey||b.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),c._trigger("unselecting",b,{unselecting:i.element}))),i.selected&&!b.metaKey&&!b.ctrlKey&&!i.startselected&&(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,c._trigger("unselecting",b,{unselecting:i.element})))}),!1},_mouseStop:function(b){var c=this;this.dragged=!1;var d=this.options;return a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove(),!1}}),a.extend(a.ui.selectable,{version:"1.8.20"})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.slider.min.js b/wp-includes/js/jquery/ui/jquery.ui.slider.min.js index cc8dee1fe..ec8700a02 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.slider.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.slider.min.js @@ -1,33 +1,5 @@ -/* - * jQuery UI Slider 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+ -this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>"); -this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle", -g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length? -(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i- -m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); -return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false; -this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b= -this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b= -this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b); -c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c}); -a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value= -this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a): -this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation(); -this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a]; -return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a= -this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e- -g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"}, -b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(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(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(b.options.disabled)return;switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){return 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(),this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);return}return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a),a},_values:function(a){var b,c,d;if(arguments.length)return b=this.options.values[a],b=this._trimAlignValue(b),b;c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.20"})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.sortable.min.js b/wp-includes/js/jquery/ui/jquery.ui.sortable.min.js index d0ad528df..593dfb964 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.sortable.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.sortable.min.js @@ -1,60 +1,5 @@ -/* - * jQuery UI Sortable 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable"); -this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a=== -"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&& -!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top, -left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; -this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!= -document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a); -return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top< -b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()- -b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this, -a)}this.positionAbs=this._convertPositionTo("absolute");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";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0], -e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset(); -c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): -this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null, -dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")}, -toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers|| -this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection(); -var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)}, -_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith(); -if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), -this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element), -this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&& -this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b= -this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f= -d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")|| -0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out", -a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h- -f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b= -this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width== -""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top= -this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a= -{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"), -10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"? -document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"), -10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b= -this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&& -this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset(); -var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g- -this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g- -this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0], -this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]= -"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove", -f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this, -this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop", -a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()}, -_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.sortable.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f)return e=a(this),!1});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}return this.currentItem=e,this._removeCurrentsFromItems(),!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),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: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,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));return a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b),!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:b.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<c.scrollSensitivity?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:b.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed)):(b.pageY-a(document).scrollTop()<c.scrollSensitivity?d=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<c.scrollSensitivity&&(d=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed)),b.pageX-a(document).scrollLeft()<c.scrollSensitivity?d=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<c.scrollSensitivity&&(d=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed))),d!==!1&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)}this.positionAbs=this._convertPositionTo("absolute");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";for(var e=this.items.length-1;e>=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}return this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(b,c){if(!b)return;a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"="),d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")}),d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+j<i&&b+k>f&&b+k<g;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?l:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(b){var c=this.options.axis==="x"||a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top,b.height),d=this.options.axis==="y"||a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left,b.width),e=c&&d,f=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();return e?this.floating?g&&g=="right"||f=="down"?2:1:f&&(f=="down"?2:1):!1},_intersectsWithSides:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top+b.height/2,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left+b.width/2,b.width),e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return this.floating&&f?f=="right"&&d||f=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){return this._refreshItems(a),this.refreshPositions(),this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}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").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(b){this.items=[],this.containers=[this];var c=this.items,d=this,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],f=this._connectWith();if(f&&this.ready)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i<m;i++){var n=a(l[i]);n.data(this.widgetName+"-item",k),c.push({item:n,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;c>=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return e||(b.style.visibility="hidden"),b},update:function(a,b){if(e&&!d.forcePlaceholderSize)return;b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!c)return;if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.items[i][this.containers[d].floating?"left":"top"];Math.abs(j-h)<f&&(f=Math.abs(j-h),g=this.items[i])}if(!g&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[d],g?this._rearrange(b,g,null,!0):this._rearrange(b,null,this.containers[d].element,!0),this._trigger("change",b,this._uiHash()),this.containers[d]._trigger("change",b,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;return d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(d[0].style.width==""||c.forceHelperSize)&&d.width(this.currentItem.width()),(d[0].style.height==""||c.forceHelperSize)&&d.height(this.currentItem.height()),d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();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 a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)){var c=a(b.containment)[0],d=a(b.containment).offset(),e=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+(e?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+(e?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]}},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=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(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var f=b.pageX,g=b.pageY;if(this.originalPosition){this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.top<this.containment[1]||h-this.offset.click.top>this.containment[3]?h-this.offset.click.top<this.containment[1]?h+c.grid[1]:h-c.grid[1]:h:h;var i=this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0];f=this.containment?i-this.offset.click.left<this.containment[0]||i-this.offset.click.left>this.containment[2]?i-this.offset.click.left<this.containment[0]?i+c.grid[0]:i-c.grid[0]:i:i}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this,f=this.counter;window.setTimeout(function(){f==e.counter&&e.refreshPositions(!d)},0)},_clear:function(b,c){this.reverting=!1;var d=[],e=this;!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var f in this._storedCSS)if(this._storedCSS[f]=="auto"||this._storedCSS[f]=="static")this._storedCSS[f]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(a){this._trigger("update",a,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(a){this._trigger("remove",a,this._uiHash())});for(var f=this.containers.length-1;f>=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return!1}c||this._trigger("beforeStop",b,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!c){for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.extend(a.ui.sortable,{version:"1.8.20"})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.tabs.min.js b/wp-includes/js/jquery/ui/jquery.ui.tabs.min.js index 3697f421c..a4c6e9d4e 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.tabs.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.tabs.min.js @@ -1,35 +1,5 @@ -/* - * jQuery UI Tabs 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&& -e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b= -d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]|| -(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); -this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); -this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+ -g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", -function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")}; -this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected= --1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; -d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e= -d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b, -e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]); -j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove(); -if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null, -this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this}, -load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c, -"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, -url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&& -a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.tabs.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){function e(){return++c}function f(){return++d}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_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(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(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"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash)return e.selected=a,!1}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1)return this.blur(),!1;e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected"))return e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur(),!1;if(!f.length)return e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur(),!1}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){return typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},destroy:function(){var b=this.options;return 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 b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():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(" "))}),b.cookie&&this._cookie(null,b.cookie),this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);return j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e])),this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();return d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0])),this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)==-1)return;return this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b])),this},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;return a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a]))),this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;return this.anchors.eq(a).trigger(this.options.event+".tabs"),this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}return this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs"),this},abort:function(){return this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup(),this},url:function(a,b){return this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b),this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.20"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){e()}:function(a){a.clientX&&c.rotate(null)});return a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate),this}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/ui/jquery.ui.widget.min.js b/wp-includes/js/jquery/ui/jquery.ui.widget.min.js index 64893bb99..323620744 100644 --- a/wp-includes/js/jquery/ui/jquery.ui.widget.min.js +++ b/wp-includes/js/jquery/ui/jquery.ui.widget.min.js @@ -1,15 +1,5 @@ -/*! - * jQuery UI Widget 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]= -function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)): -d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options= -b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+ -"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled", -c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +/*! jQuery UI - v1.8.20 - 2012-04-30 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.widget.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/plupload/handlers.dev.js b/wp-includes/js/plupload/handlers.dev.js index 5dc56a3d1..0a631d61d 100644 --- a/wp-includes/js/plupload/handlers.dev.js +++ b/wp-includes/js/plupload/handlers.dev.js @@ -83,7 +83,7 @@ function uploadSuccess(fileObj, serverData) { serverData = serverData.replace(/^<pre>(\d+)<\/pre>$/, '$1'); // if async-upload returned an error message, place it in the media item div and return - if ( serverData.match('media-upload-error') ) { + if ( serverData.match(/media-upload-error|error-div/) ) { item.html(serverData); return; } else { @@ -138,7 +138,7 @@ function prepareMediaItemInit(fileObj) { jQuery('a.delete', item).click(function(){ // Tell the server to delete it. TODO: handle exceptions jQuery.ajax({ - url: 'admin-ajax.php', + url: ajaxurl, type: 'post', success: deleteSuccess, error: deleteError, @@ -156,7 +156,7 @@ function prepareMediaItemInit(fileObj) { jQuery('a.undo', item).click(function(){ // Tell the server to untrash it. TODO: handle exceptions jQuery.ajax({ - url: 'admin-ajax.php', + url: ajaxurl, type: 'post', id: fileObj.id, data: { @@ -346,9 +346,9 @@ jQuery(document).ready(function($){ if ( target.is('input[type="radio"]') ) { // remember the last used image size and alignment tr = target.closest('tr'); - if ( $(tr).hasClass('align') ) + if ( tr.hasClass('align') ) setUserSetting('align', target.val()); - else if ( $(tr).hasClass('image-size') ) + else if ( tr.hasClass('image-size') ) setUserSetting('imgsize', target.val()); } else if ( target.is('button.button') ) { // remember the last used image link url @@ -357,7 +357,7 @@ jQuery(document).ready(function($){ if ( c && c[1] ) { setUserSetting('urlbutton', c[1]); - target.siblings('.urlfield').val( target.attr('title') ); + target.siblings('.urlfield').val( target.data('link-url') ); } } else if ( target.is('a.dismiss') ) { target.parents('.media-item').fadeOut(200, function(){ @@ -366,11 +366,11 @@ jQuery(document).ready(function($){ } else if ( target.is('.upload-flash-bypass a') || target.is('a.uploader-html') ) { // switch uploader to html4 $('#media-items, p.submit, span.big-file-warning').css('display', 'none'); switchUploader(0); - return false; + e.preventDefault(); } else if ( target.is('.upload-html-bypass a') ) { // switch uploader to multi-file $('#media-items, p.submit, span.big-file-warning').css('display', ''); switchUploader(1); - return false; + e.preventDefault(); } else if ( target.is('a.describe-toggle-on') ) { // Show target.parent().addClass('open'); target.siblings('.slidetoggle').fadeIn(250, function(){ @@ -388,12 +388,12 @@ jQuery(document).ready(function($){ } } }); - return false; + e.preventDefault(); } else if ( target.is('a.describe-toggle-off') ) { // Hide target.siblings('.slidetoggle').fadeOut(250, function(){ target.parent().removeClass('open'); }); - return false; + e.preventDefault(); } }); @@ -417,7 +417,7 @@ jQuery(document).ready(function($){ setResize( getUserSetting('upload_resize', false) ); - if ( up.features.dragdrop ) { + if ( up.features.dragdrop && ! $(document.body).hasClass('mobile') ) { uploaddiv.addClass('drag-drop'); $('#drag-drop-area').bind('dragover.wp-uploader', function(){ // dragenter doesn't fire right :( uploaddiv.addClass('drag-over'); diff --git a/wp-includes/js/plupload/handlers.js b/wp-includes/js/plupload/handlers.js index 96076a24d..eb1787db3 100644 --- a/wp-includes/js/plupload/handlers.js +++ b/wp-includes/js/plupload/handlers.js @@ -1 +1 @@ -var topWin=window.dialogArguments||opener||parent||top,uploader,uploader_init;function fileDialogStart(){jQuery("#media-upload-error").empty()}function fileQueued(b){jQuery(".media-blank").remove();var a=jQuery("#media-items").children(),c=post_id||0;if(a.length==1){a.removeClass("open").find(".slidetoggle").slideUp(200)}jQuery("#media-items").append('<div id="media-item-'+b.id+'" class="media-item child-of-'+c+'"><div class="progress"><div class="percent">0%</div><div class="bar"></div></div><div class="filename original"> '+b.name+"</div></div>");jQuery("#insert-gallery").prop("disabled",true)}function uploadStart(){try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}}catch(a){}return true}function uploadProgress(a,b){var c=jQuery("#media-item-"+b.id);jQuery(".bar",c).width((200*b.loaded)/b.size);jQuery(".percent",c).html(b.percent+"%")}function fileUploading(c,d){var b=100*1024*1024,a=parseInt(c.settings.max_file_size,10);if(a>b&&d.size>b){setTimeout(function(){if(d.status==2&&d.loaded==0){wpFileError(d,pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>"));if(c.current&&c.current.file.id==d.id&&c.current.xhr.abort){c.current.xhr.abort()}}},10000)}}function updateMediaForm(){var a=jQuery("#media-items").children();if(a.length==1){a.addClass("open").find(".slidetoggle").show();jQuery(".insert-gallery").hide()}else{if(a.length>1){a.removeClass("open");jQuery(".insert-gallery").show()}}if(a.not(".media-blank").length>0){jQuery(".savebutton").show()}else{jQuery(".savebutton").hide()}}function uploadSuccess(c,a){var b=jQuery("#media-item-"+c.id);a=a.replace(/^<pre>(\d+)<\/pre>$/,"$1");if(a.match("media-upload-error")){b.html(a);return}else{jQuery(".percent",b).html(pluploadL10n.crunching)}prepareMediaItem(c,a);updateMediaForm();if(post_id&&b.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(1*jQuery("#attachments-count").text()+1)}}function setResize(a){if(a){if(uploader.features.jpgresize){uploader.settings.resize={width:resize_width,height:resize_height,quality:100}}else{uploader.settings.multipart_params.image_resize=true}}else{delete (uploader.settings.resize);delete (uploader.settings.multipart_params.image_resize)}}function prepareMediaItem(c,a){var d=(typeof shortform=="undefined")?1:2,b=jQuery("#media-item-"+c.id);try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}}catch(g){}if(isNaN(a)||!a){b.append(a);prepareMediaItemInit(c)}else{b.load("async-upload.php",{attachment_id:a,fetch:d},function(){prepareMediaItemInit(c);updateMediaForm()})}}function prepareMediaItemInit(b){var a=jQuery("#media-item-"+b.id);jQuery(".thumbnail",a).clone().attr("class","pinkynail toggle").prependTo(a);jQuery(".filename.original",a).replaceWith(jQuery(".filename.new",a));jQuery("a.delete",a).click(function(){jQuery.ajax({url:"admin-ajax.php",type:"post",success:deleteSuccess,error:deleteError,id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}});return false});jQuery("a.undo",a).click(function(){jQuery.ajax({url:"admin-ajax.php",type:"post",id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(d,e){var c=jQuery("#media-item-"+b.id);if(type=jQuery("#type-of-"+b.id).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-0+1)}if(post_id&&c.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-0+1)}jQuery(".filename .trashnotice",c).remove();jQuery(".filename .title",c).css("font-weight","normal");jQuery("a.undo",c).addClass("hidden");jQuery(".menu_order_input",c).show();c.css({backgroundColor:"#ceb"}).animate({backgroundColor:"#fff"},{queue:false,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}});return false});jQuery("#media-item-"+b.id+".startopen").removeClass("startopen").addClass("open").find("slidetoggle").fadeIn()}function wpQueueError(a){jQuery("#media-upload-error").show().html('<div class="error"><p>'+a+"</p></div>")}function wpFileError(b,a){itemAjaxError(b.id,a)}function itemAjaxError(e,c){var b=jQuery("#media-item-"+e),a=b.find(".filename").text(),d=b.data("last-err");if(d==e){return}b.html('<div class="error-div"><a class="dismiss" href="#">'+pluploadL10n.dismiss+"</a><strong>"+pluploadL10n.error_uploading.replace("%s",jQuery.trim(a))+"</strong> "+c+"</div>").data("last-err",e)}function deleteSuccess(b,d){if(b=="-1"){return itemAjaxError(this.id,"You do not have permission. Has your session expired?")}if(b=="0"){return itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?")}var c=this.id,a=jQuery("#media-item-"+c);if(type=jQuery("#type-of-"+c).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-1)}if(post_id&&a.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1)}if(jQuery("form.type-form #media-items").children().length==1&&jQuery(".hidden","#media-items").length>0){jQuery(".toggle").toggle();jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")}jQuery(".toggle",a).toggle();jQuery(".slidetoggle",a).slideUp(200).siblings().removeClass("hidden");a.css({backgroundColor:"#faa"}).animate({backgroundColor:"#f4f4f4"},{queue:false,duration:500}).addClass("undo");jQuery(".filename:empty",a).remove();jQuery(".filename .title",a).css("font-weight","bold");jQuery(".filename",a).append('<span class="trashnotice"> '+pluploadL10n.deleted+" </span>").siblings("a.toggle").hide();jQuery(".filename",a).append(jQuery("a.undo",a).removeClass("hidden"));jQuery(".menu_order_input",a).hide();return}function deleteError(c,b,a){}function uploadComplete(){jQuery("#insert-gallery").prop("disabled",false)}function switchUploader(a){if(a){deleteUserSetting("uploader");jQuery(".media-upload-form").removeClass("html-uploader");if(typeof(uploader)=="object"){uploader.refresh()}}else{setUserSetting("uploader","1");jQuery(".media-upload-form").addClass("html-uploader")}}function dndHelper(a){var b=document.getElementById("dnd-helper");if(a){b.style.display="block"}else{b.style.display="none"}}function uploadError(d,f,c,e){var b=100*1024*1024,a;switch(f){case plupload.FAILED:wpFileError(d,pluploadL10n.upload_failed);break;case plupload.FILE_EXTENSION_ERROR:wpFileError(d,pluploadL10n.invalid_filetype);break;case plupload.FILE_SIZE_ERROR:uploadSizeError(e,d);break;case plupload.IMAGE_FORMAT_ERROR:wpFileError(d,pluploadL10n.not_an_image);break;case plupload.IMAGE_MEMORY_ERROR:wpFileError(d,pluploadL10n.image_memory_exceeded);break;case plupload.IMAGE_DIMENSIONS_ERROR:wpFileError(d,pluploadL10n.image_dimensions_exceeded);break;case plupload.GENERIC_ERROR:wpQueueError(pluploadL10n.upload_failed);break;case plupload.IO_ERROR:a=parseInt(e.settings.max_file_size,10);if(a>b&&d.size>b){wpFileError(d,pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>"))}else{wpQueueError(pluploadL10n.io_error)}break;case plupload.HTTP_ERROR:wpQueueError(pluploadL10n.http_error);break;case plupload.INIT_ERROR:jQuery(".media-upload-form").addClass("html-uploader");break;case plupload.SECURITY_ERROR:wpQueueError(pluploadL10n.security_error);break;default:wpFileError(d,pluploadL10n.default_error)}}function uploadSizeError(a,b,d){var c;if(d){c=pluploadL10n.big_upload_queued.replace("%s",b.name)+" "+pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>")}else{c=pluploadL10n.file_exceeds_size_limit.replace("%s",b.name)}jQuery("#media-items").append('<div id="media-item-'+b.id+'" class="media-item error"><p>'+c+"</p></div>");a.removeFile(b)}jQuery(document).ready(function(a){a(".media-upload-form").bind("click.uploader",function(f){var d=a(f.target),b,g;if(d.is('input[type="radio"]')){b=d.closest("tr");if(a(b).hasClass("align")){setUserSetting("align",d.val())}else{if(a(b).hasClass("image-size")){setUserSetting("imgsize",d.val())}}}else{if(d.is("button.button")){g=f.target.className||"";g=g.match(/url([^ '"]+)/);if(g&&g[1]){setUserSetting("urlbutton",g[1]);d.siblings(".urlfield").val(d.attr("title"))}}else{if(d.is("a.dismiss")){d.parents(".media-item").fadeOut(200,function(){a(this).remove()})}else{if(d.is(".upload-flash-bypass a")||d.is("a.uploader-html")){a("#media-items, p.submit, span.big-file-warning").css("display","none");switchUploader(0);return false}else{if(d.is(".upload-html-bypass a")){a("#media-items, p.submit, span.big-file-warning").css("display","");switchUploader(1);return false}else{if(d.is("a.describe-toggle-on")){d.parent().addClass("open");d.siblings(".slidetoggle").fadeIn(250,function(){var i=a(window).scrollTop(),e=a(window).height(),k=a(this).offset().top,j=a(this).height(),c,l;if(e&&k&&j){c=k+j;l=i+e;if(c>l){if(c-l<k-i){window.scrollBy(0,(c-l)+10)}else{window.scrollBy(0,k-i-40)}}}});return false}else{if(d.is("a.describe-toggle-off")){d.siblings(".slidetoggle").fadeOut(250,function(){d.parent().removeClass("open")});return false}}}}}}}});uploader_init=function(){uploader=new plupload.Uploader(wpUploaderInit);a("#image_resize").bind("change",function(){var b=a(this).prop("checked");setResize(b);if(b){setUserSetting("upload_resize","1")}else{deleteUserSetting("upload_resize")}});uploader.bind("Init",function(b){var c=a("#plupload-upload-ui");setResize(getUserSetting("upload_resize",false));if(b.features.dragdrop){c.addClass("drag-drop");a("#drag-drop-area").bind("dragover.wp-uploader",function(){c.addClass("drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){c.removeClass("drag-over")})}else{c.removeClass("drag-drop");a("#drag-drop-area").unbind(".wp-uploader")}});uploader.init();uploader.bind("FilesAdded",function(d,e){var c=100*1024*1024,b=parseInt(d.settings.max_file_size,10);a("#media-upload-error").html("");uploadStart();plupload.each(e,function(f){if(b>c&&f.size>c&&d.runtime!="html5"){uploadSizeError(d,f,true)}else{fileQueued(f)}});d.refresh();d.start()});uploader.bind("BeforeUpload",function(b,c){});uploader.bind("UploadFile",function(b,c){fileUploading(b,c)});uploader.bind("UploadProgress",function(b,c){uploadProgress(b,c)});uploader.bind("Error",function(b,c){uploadError(c.file,c.code,c.message,b);b.refresh()});uploader.bind("FileUploaded",function(b,d,c){uploadSuccess(d,c.response)});uploader.bind("UploadComplete",function(b,c){uploadComplete()})};if(typeof(wpUploaderInit)=="object"){uploader_init()}}); \ No newline at end of file +var topWin=window.dialogArguments||opener||parent||top,uploader,uploader_init;function fileDialogStart(){jQuery("#media-upload-error").empty()}function fileQueued(b){jQuery(".media-blank").remove();var a=jQuery("#media-items").children(),c=post_id||0;if(a.length==1){a.removeClass("open").find(".slidetoggle").slideUp(200)}jQuery("#media-items").append('<div id="media-item-'+b.id+'" class="media-item child-of-'+c+'"><div class="progress"><div class="percent">0%</div><div class="bar"></div></div><div class="filename original"> '+b.name+"</div></div>");jQuery("#insert-gallery").prop("disabled",true)}function uploadStart(){try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}}catch(a){}return true}function uploadProgress(a,b){var c=jQuery("#media-item-"+b.id);jQuery(".bar",c).width((200*b.loaded)/b.size);jQuery(".percent",c).html(b.percent+"%")}function fileUploading(c,d){var b=100*1024*1024,a=parseInt(c.settings.max_file_size,10);if(a>b&&d.size>b){setTimeout(function(){var e;if(d.status<3&&d.loaded==0){wpFileError(d,pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>"));c.stop();c.removeFile(d);c.start()}},10000)}}function updateMediaForm(){var a=jQuery("#media-items").children();if(a.length==1){a.addClass("open").find(".slidetoggle").show();jQuery(".insert-gallery").hide()}else{if(a.length>1){a.removeClass("open");jQuery(".insert-gallery").show()}}if(a.not(".media-blank").length>0){jQuery(".savebutton").show()}else{jQuery(".savebutton").hide()}}function uploadSuccess(c,a){var b=jQuery("#media-item-"+c.id);a=a.replace(/^<pre>(\d+)<\/pre>$/,"$1");if(a.match(/media-upload-error|error-div/)){b.html(a);return}else{jQuery(".percent",b).html(pluploadL10n.crunching)}prepareMediaItem(c,a);updateMediaForm();if(post_id&&b.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(1*jQuery("#attachments-count").text()+1)}}function setResize(a){if(a){if(uploader.features.jpgresize){uploader.settings.resize={width:resize_width,height:resize_height,quality:100}}else{uploader.settings.multipart_params.image_resize=true}}else{delete (uploader.settings.resize);delete (uploader.settings.multipart_params.image_resize)}}function prepareMediaItem(c,a){var d=(typeof shortform=="undefined")?1:2,b=jQuery("#media-item-"+c.id);try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}}catch(g){}if(isNaN(a)||!a){b.append(a);prepareMediaItemInit(c)}else{b.load("async-upload.php",{attachment_id:a,fetch:d},function(){prepareMediaItemInit(c);updateMediaForm()})}}function prepareMediaItemInit(b){var a=jQuery("#media-item-"+b.id);jQuery(".thumbnail",a).clone().attr("class","pinkynail toggle").prependTo(a);jQuery(".filename.original",a).replaceWith(jQuery(".filename.new",a));jQuery("a.delete",a).click(function(){jQuery.ajax({url:ajaxurl,type:"post",success:deleteSuccess,error:deleteError,id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}});return false});jQuery("a.undo",a).click(function(){jQuery.ajax({url:ajaxurl,type:"post",id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(d,e){var c=jQuery("#media-item-"+b.id);if(type=jQuery("#type-of-"+b.id).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-0+1)}if(post_id&&c.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-0+1)}jQuery(".filename .trashnotice",c).remove();jQuery(".filename .title",c).css("font-weight","normal");jQuery("a.undo",c).addClass("hidden");jQuery(".menu_order_input",c).show();c.css({backgroundColor:"#ceb"}).animate({backgroundColor:"#fff"},{queue:false,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}});return false});jQuery("#media-item-"+b.id+".startopen").removeClass("startopen").addClass("open").find("slidetoggle").fadeIn()}function wpQueueError(a){jQuery("#media-upload-error").show().html('<div class="error"><p>'+a+"</p></div>")}function wpFileError(b,a){itemAjaxError(b.id,a)}function itemAjaxError(e,c){var b=jQuery("#media-item-"+e),a=b.find(".filename").text(),d=b.data("last-err");if(d==e){return}b.html('<div class="error-div"><a class="dismiss" href="#">'+pluploadL10n.dismiss+"</a><strong>"+pluploadL10n.error_uploading.replace("%s",jQuery.trim(a))+"</strong> "+c+"</div>").data("last-err",e)}function deleteSuccess(b,d){if(b=="-1"){return itemAjaxError(this.id,"You do not have permission. Has your session expired?")}if(b=="0"){return itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?")}var c=this.id,a=jQuery("#media-item-"+c);if(type=jQuery("#type-of-"+c).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-1)}if(post_id&&a.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1)}if(jQuery("form.type-form #media-items").children().length==1&&jQuery(".hidden","#media-items").length>0){jQuery(".toggle").toggle();jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")}jQuery(".toggle",a).toggle();jQuery(".slidetoggle",a).slideUp(200).siblings().removeClass("hidden");a.css({backgroundColor:"#faa"}).animate({backgroundColor:"#f4f4f4"},{queue:false,duration:500}).addClass("undo");jQuery(".filename:empty",a).remove();jQuery(".filename .title",a).css("font-weight","bold");jQuery(".filename",a).append('<span class="trashnotice"> '+pluploadL10n.deleted+" </span>").siblings("a.toggle").hide();jQuery(".filename",a).append(jQuery("a.undo",a).removeClass("hidden"));jQuery(".menu_order_input",a).hide();return}function deleteError(c,b,a){}function uploadComplete(){jQuery("#insert-gallery").prop("disabled",false)}function switchUploader(a){if(a){deleteUserSetting("uploader");jQuery(".media-upload-form").removeClass("html-uploader");if(typeof(uploader)=="object"){uploader.refresh()}}else{setUserSetting("uploader","1");jQuery(".media-upload-form").addClass("html-uploader")}}function dndHelper(a){var b=document.getElementById("dnd-helper");if(a){b.style.display="block"}else{b.style.display="none"}}function uploadError(d,f,c,e){var b=100*1024*1024,a;switch(f){case plupload.FAILED:wpFileError(d,pluploadL10n.upload_failed);break;case plupload.FILE_EXTENSION_ERROR:wpFileError(d,pluploadL10n.invalid_filetype);break;case plupload.FILE_SIZE_ERROR:uploadSizeError(e,d);break;case plupload.IMAGE_FORMAT_ERROR:wpFileError(d,pluploadL10n.not_an_image);break;case plupload.IMAGE_MEMORY_ERROR:wpFileError(d,pluploadL10n.image_memory_exceeded);break;case plupload.IMAGE_DIMENSIONS_ERROR:wpFileError(d,pluploadL10n.image_dimensions_exceeded);break;case plupload.GENERIC_ERROR:wpQueueError(pluploadL10n.upload_failed);break;case plupload.IO_ERROR:a=parseInt(e.settings.max_file_size,10);if(a>b&&d.size>b){wpFileError(d,pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>"))}else{wpQueueError(pluploadL10n.io_error)}break;case plupload.HTTP_ERROR:wpQueueError(pluploadL10n.http_error);break;case plupload.INIT_ERROR:jQuery(".media-upload-form").addClass("html-uploader");break;case plupload.SECURITY_ERROR:wpQueueError(pluploadL10n.security_error);break;default:wpFileError(d,pluploadL10n.default_error)}}function uploadSizeError(a,b,d){var c;if(d){c=pluploadL10n.big_upload_queued.replace("%s",b.name)+" "+pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>")}else{c=pluploadL10n.file_exceeds_size_limit.replace("%s",b.name)}jQuery("#media-items").append('<div id="media-item-'+b.id+'" class="media-item error"><p>'+c+"</p></div>");a.removeFile(b)}jQuery(document).ready(function(a){a(".media-upload-form").bind("click.uploader",function(f){var d=a(f.target),b,g;if(d.is('input[type="radio"]')){b=d.closest("tr");if(b.hasClass("align")){setUserSetting("align",d.val())}else{if(b.hasClass("image-size")){setUserSetting("imgsize",d.val())}}}else{if(d.is("button.button")){g=f.target.className||"";g=g.match(/url([^ '"]+)/);if(g&&g[1]){setUserSetting("urlbutton",g[1]);d.siblings(".urlfield").val(d.data("link-url"))}}else{if(d.is("a.dismiss")){d.parents(".media-item").fadeOut(200,function(){a(this).remove()})}else{if(d.is(".upload-flash-bypass a")||d.is("a.uploader-html")){a("#media-items, p.submit, span.big-file-warning").css("display","none");switchUploader(0);f.preventDefault()}else{if(d.is(".upload-html-bypass a")){a("#media-items, p.submit, span.big-file-warning").css("display","");switchUploader(1);f.preventDefault()}else{if(d.is("a.describe-toggle-on")){d.parent().addClass("open");d.siblings(".slidetoggle").fadeIn(250,function(){var i=a(window).scrollTop(),e=a(window).height(),k=a(this).offset().top,j=a(this).height(),c,l;if(e&&k&&j){c=k+j;l=i+e;if(c>l){if(c-l<k-i){window.scrollBy(0,(c-l)+10)}else{window.scrollBy(0,k-i-40)}}}});f.preventDefault()}else{if(d.is("a.describe-toggle-off")){d.siblings(".slidetoggle").fadeOut(250,function(){d.parent().removeClass("open")});f.preventDefault()}}}}}}}});uploader_init=function(){uploader=new plupload.Uploader(wpUploaderInit);a("#image_resize").bind("change",function(){var b=a(this).prop("checked");setResize(b);if(b){setUserSetting("upload_resize","1")}else{deleteUserSetting("upload_resize")}});uploader.bind("Init",function(b){var c=a("#plupload-upload-ui");setResize(getUserSetting("upload_resize",false));if(b.features.dragdrop&&!a(document.body).hasClass("mobile")){c.addClass("drag-drop");a("#drag-drop-area").bind("dragover.wp-uploader",function(){c.addClass("drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){c.removeClass("drag-over")})}else{c.removeClass("drag-drop");a("#drag-drop-area").unbind(".wp-uploader")}});uploader.init();uploader.bind("FilesAdded",function(d,e){var c=100*1024*1024,b=parseInt(d.settings.max_file_size,10);a("#media-upload-error").html("");uploadStart();plupload.each(e,function(f){if(b>c&&f.size>c&&d.runtime!="html5"){uploadSizeError(d,f,true)}else{fileQueued(f)}});d.refresh();d.start()});uploader.bind("BeforeUpload",function(b,c){});uploader.bind("UploadFile",function(b,c){fileUploading(b,c)});uploader.bind("UploadProgress",function(b,c){uploadProgress(b,c)});uploader.bind("Error",function(b,c){uploadError(c.file,c.code,c.message,b);b.refresh()});uploader.bind("FileUploaded",function(b,d,c){uploadSuccess(d,c.response)});uploader.bind("UploadComplete",function(b,c){uploadComplete()})};if(typeof(wpUploaderInit)=="object"){uploader_init()}}); \ No newline at end of file diff --git a/wp-includes/js/plupload/wp-plupload.dev.js b/wp-includes/js/plupload/wp-plupload.dev.js new file mode 100644 index 000000000..94a5b2532 --- /dev/null +++ b/wp-includes/js/plupload/wp-plupload.dev.js @@ -0,0 +1,220 @@ +if ( typeof wp === 'undefined' ) + var wp = {}; + +(function( exports, $ ) { + var Uploader; + + if ( typeof _wpPluploadSettings === 'undefined' ) + return; + + /* + * An object that helps create a WordPress uploader using plupload. + * + * @param options - object - The options passed to the new plupload instance. + * Requires the following parameters: + * - container - The id of uploader container. + * - browser - The id of button to trigger the file select. + * - dropzone - The id of file drop target. + * - plupload - An object of parameters to pass to the plupload instance. + * - params - An object of parameters to pass to $_POST when uploading the file. + * Extends this.plupload.multipart_params under the hood. + * + * @param attributes - object - Attributes and methods for this specific instance. + */ + Uploader = function( options ) { + var self = this, + elements = { + container: 'container', + browser: 'browse_button', + dropzone: 'drop_element' + }, + key; + + this.supports = { + upload: Uploader.browser.supported + }; + + this.supported = this.supports.upload; + + if ( ! this.supported ) + return; + + // Use deep extend to ensure that multipart_params and other objects are cloned. + this.plupload = $.extend( true, { multipart_params: {} }, Uploader.defaults ); + this.container = document.body; // Set default container. + + // Extend the instance with options + // + // Use deep extend to allow options.plupload to override individual + // default plupload keys. + $.extend( true, this, options ); + + // Proxy all methods so this always refers to the current instance. + for ( key in this ) { + if ( $.isFunction( this[ key ] ) ) + this[ key ] = $.proxy( this[ key ], this ); + } + + // Ensure all elements are jQuery elements and have id attributes + // Then set the proper plupload arguments to the ids. + for ( key in elements ) { + if ( ! this[ key ] ) + continue; + + this[ key ] = $( this[ key ] ).first(); + + if ( ! this[ key ].length ) { + delete this[ key ]; + continue; + } + + if ( ! this[ key ].prop('id') ) + this[ key ].prop( 'id', '__wp-uploader-id-' + Uploader.uuid++ ); + this.plupload[ elements[ key ] ] = this[ key ].prop('id'); + } + + this.uploader = new plupload.Uploader( this.plupload ); + delete this.plupload; + + // Set default params and remove this.params alias. + this.param( this.params || {} ); + delete this.params; + + this.uploader.init(); + + this.supports.dragdrop = this.uploader.features.dragdrop && ! Uploader.browser.mobile; + + // Generate drag/drop helper classes. + (function( dropzone, supported ) { + var sensitivity = 50, + active; + + if ( ! dropzone ) + return; + + dropzone.toggleClass( 'supports-drag-drop', !! supported ); + + if ( ! supported ) + return dropzone.unbind('.wp-uploader'); + + // 'dragenter' doesn't fire correctly, + // simulate it with a limited 'dragover' + dropzone.bind( 'dragover.wp-uploader', function(){ + if ( active ) + return; + + dropzone.addClass('drag-over'); + active = true; + }); + + dropzone.bind('dragleave.wp-uploader, drop.wp-uploader', function(){ + active = false; + dropzone.removeClass('drag-over'); + }); + }( this.dropzone, this.supports.dragdrop )); + + this.browser.on( 'mouseenter', this.refresh ); + + this.uploader.bind( 'UploadProgress', this.progress ); + + this.uploader.bind( 'FileUploaded', function( up, file, response ) { + try { + response = JSON.parse( response.response ); + } catch ( e ) { + return self.error( pluploadL10n.default_error, e ); + } + + if ( ! response || ! response.type || ! response.data ) + return self.error( pluploadL10n.default_error ); + + if ( 'error' === response.type ) + return self.error( response.data.message, response.data ); + + if ( 'success' === response.type ) + return self.success( response.data ); + + }); + + this.uploader.bind( 'Error', function( up, error ) { + var message = pluploadL10n.default_error, + key; + + // Check for plupload errors. + for ( key in Uploader.errorMap ) { + if ( error.code === plupload[ key ] ) { + message = Uploader.errorMap[ key ]; + break; + } + } + + self.error( message, error ); + up.refresh(); + }); + + this.uploader.bind( 'FilesAdded', function( up, files ) { + $.each( files, function() { + self.added( this ); + }); + + up.refresh(); + up.start(); + }); + + this.init(); + }; + + // Adds the 'defaults' and 'browser' properties. + $.extend( Uploader, _wpPluploadSettings ); + + Uploader.uuid = 0; + + Uploader.errorMap = { + 'FAILED': pluploadL10n.upload_failed, + 'FILE_EXTENSION_ERROR': pluploadL10n.invalid_filetype, + // 'FILE_SIZE_ERROR': '', + 'IMAGE_FORMAT_ERROR': pluploadL10n.not_an_image, + 'IMAGE_MEMORY_ERROR': pluploadL10n.image_memory_exceeded, + 'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded, + 'GENERIC_ERROR': pluploadL10n.upload_failed, + 'IO_ERROR': pluploadL10n.io_error, + 'HTTP_ERROR': pluploadL10n.http_error, + 'SECURITY_ERROR': pluploadL10n.security_error + }; + + $.extend( Uploader.prototype, { + /** + * Acts as a shortcut to extending the uploader's multipart_params object. + * + * param( key ) + * Returns the value of the key. + * + * param( key, value ) + * Sets the value of a key. + * + * param( map ) + * Sets values for a map of data. + */ + param: function( key, value ) { + if ( arguments.length === 1 && typeof key === 'string' ) + return this.uploader.settings.multipart_params[ key ]; + + if ( arguments.length > 1 ) { + this.uploader.settings.multipart_params[ key ] = value; + } else { + $.extend( this.uploader.settings.multipart_params, key ); + } + }, + + init: function() {}, + error: function() {}, + success: function() {}, + added: function() {}, + progress: function() {}, + complete: function() {}, + refresh: function() { + this.uploader.refresh(); + } + }); + + exports.Uploader = Uploader; +})( wp, jQuery ); diff --git a/wp-includes/js/plupload/wp-plupload.js b/wp-includes/js/plupload/wp-plupload.js new file mode 100644 index 000000000..9aa355a12 --- /dev/null +++ b/wp-includes/js/plupload/wp-plupload.js @@ -0,0 +1 @@ +if(typeof wp==="undefined"){var wp={}}(function(a,b){var c;if(typeof _wpPluploadSettings==="undefined"){return}c=function(e){var d=this,g={container:"container",browser:"browse_button",dropzone:"drop_element"},f;this.supports={upload:c.browser.supported};this.supported=this.supports.upload;if(!this.supported){return}this.plupload=b.extend(true,{multipart_params:{}},c.defaults);this.container=document.body;b.extend(true,this,e);for(f in this){if(b.isFunction(this[f])){this[f]=b.proxy(this[f],this)}}for(f in g){if(!this[f]){continue}this[f]=b(this[f]).first();if(!this[f].length){delete this[f];continue}if(!this[f].prop("id")){this[f].prop("id","__wp-uploader-id-"+c.uuid++)}this.plupload[g[f]]=this[f].prop("id")}this.uploader=new plupload.Uploader(this.plupload);delete this.plupload;this.param(this.params||{});delete this.params;this.uploader.init();this.supports.dragdrop=this.uploader.features.dragdrop&&!c.browser.mobile;(function(j,h){var i=50,k;if(!j){return}j.toggleClass("supports-drag-drop",!!h);if(!h){return j.unbind(".wp-uploader")}j.bind("dragover.wp-uploader",function(){if(k){return}j.addClass("drag-over");k=true});j.bind("dragleave.wp-uploader, drop.wp-uploader",function(){k=false;j.removeClass("drag-over")})}(this.dropzone,this.supports.dragdrop));this.browser.on("mouseenter",this.refresh);this.uploader.bind("UploadProgress",this.progress);this.uploader.bind("FileUploaded",function(h,j,i){try{i=JSON.parse(i.response)}catch(k){return d.error(pluploadL10n.default_error,k)}if(!i||!i.type||!i.data){return d.error(pluploadL10n.default_error)}if("error"===i.type){return d.error(i.data.message,i.data)}if("success"===i.type){return d.success(i.data)}});this.uploader.bind("Error",function(h,i){var k=pluploadL10n.default_error,j;for(j in c.errorMap){if(i.code===plupload[j]){k=c.errorMap[j];break}}d.error(k,i);h.refresh()});this.uploader.bind("FilesAdded",function(h,i){b.each(i,function(){d.added(this)});h.refresh();h.start()});this.init()};b.extend(c,_wpPluploadSettings);c.uuid=0;c.errorMap={FAILED:pluploadL10n.upload_failed,FILE_EXTENSION_ERROR:pluploadL10n.invalid_filetype,IMAGE_FORMAT_ERROR:pluploadL10n.not_an_image,IMAGE_MEMORY_ERROR:pluploadL10n.image_memory_exceeded,IMAGE_DIMENSIONS_ERROR:pluploadL10n.image_dimensions_exceeded,GENERIC_ERROR:pluploadL10n.upload_failed,IO_ERROR:pluploadL10n.io_error,HTTP_ERROR:pluploadL10n.http_error,SECURITY_ERROR:pluploadL10n.security_error};b.extend(c.prototype,{param:function(d,e){if(arguments.length===1&&typeof d==="string"){return this.uploader.settings.multipart_params[d]}if(arguments.length>1){this.uploader.settings.multipart_params[d]=e}else{b.extend(this.uploader.settings.multipart_params,d)}},init:function(){},error:function(){},success:function(){},added:function(){},progress:function(){},complete:function(){},refresh:function(){this.uploader.refresh()}});a.Uploader=c})(wp,jQuery); \ No newline at end of file diff --git a/wp-includes/js/quicktags.dev.js b/wp-includes/js/quicktags.dev.js index 903f32099..3759c90c1 100644 --- a/wp-includes/js/quicktags.dev.js +++ b/wp-includes/js/quicktags.dev.js @@ -1,6 +1,6 @@ /* * Quicktags - * + * * This is the HTML editor in WordPress. It can be attached to any textarea and will * append a toolbar above it. This script is self-contained (does not require external libraries). * @@ -51,7 +51,7 @@ function quicktags(settings) { /** * Inserts content at the caret in the active editor (textarea) - * + * * Added for back compatibility * @see QTags.insertContent() */ @@ -61,12 +61,12 @@ function edInsertContent(bah, txt) { /** * Adds a button to all instances of the editor - * + * * Added for back compatibility, use QTags.addButton() as it gives more flexibility like type of button, button placement, etc. * @see QTags.addButton() */ function edButton(id, display, tagStart, tagEnd, access, open) { - return QTags.addButton( id, display, tagStart, tagEnd, access, '', -1 ); + return QTags.addButton( id, display, tagStart, tagEnd, access, '', -1 ); } (function(){ @@ -264,6 +264,12 @@ function edButton(id, display, tagStart, tagEnd, access, open) { html += theButtons['fullscreen'].html(name + '_'); } + + if ( 'rtl' == document.getElementsByTagName('html')[0].dir ) { + theButtons['textdirection'] = new qt.TextDirectionButton(); + html += theButtons['textdirection'].html(name + '_'); + } + ed.toolbar.innerHTML = html; ed.theButtons = theButtons; } @@ -272,7 +278,7 @@ function edButton(id, display, tagStart, tagEnd, access, open) { /** * Main API function for adding a button to Quicktags - * + * * Adds qt.Button or qt.TagButton depending on the args. The first three args are always required. * To be able to add button(s) to Quicktags, your script should be enqueued as dependent * on "quicktags" and outputted in the footer. If you are echoing JS directly from PHP, @@ -291,14 +297,14 @@ function edButton(id, display, tagStart, tagEnd, access, open) { * @param arg1 string || function required Either a starting tag to be inserted like "<span>" or a callback that is executed when the button is clicked. * @param arg2 string optional Ending tag like "</span>" * @param access_key string optional Access key for the button. - * @param title string optional Button's title="..." + * @param title string optional Button's title="..." * @param priority int optional Number representing the desired position of the button in the toolbar. 1 - 9 = first, 11 - 19 = second, 21 - 29 = third, etc. * @param instance string optional Limit the button to a specifric instance of Quicktags, add to all instances if not present. * @return mixed null or the button object that is needed for back-compat. - */ + */ qt.addButton = function( id, display, arg1, arg2, access_key, title, priority, instance ) { var btn; - + if ( !id || !display ) return; @@ -599,12 +605,27 @@ function edButton(id, display, tagStart, tagEnd, access, open) { }; qt.FullscreenButton.prototype = new qt.Button(); qt.FullscreenButton.prototype.callback = function(e, c) { - if ( c.id != 'content' || typeof(fullscreen) == 'undefined' ) + if ( !c.id || typeof(fullscreen) == 'undefined' ) return; fullscreen.on(); }; + qt.TextDirectionButton = function() { + qt.Button.call(this, 'textdirection', quicktagsL10n.textdirection, '', quicktagsL10n.toggleTextdirection) + }; + qt.TextDirectionButton.prototype = new qt.Button(); + qt.TextDirectionButton.prototype.callback = function(e, c) { + var isRTL = ( 'rtl' == document.getElementsByTagName('html')[0].dir ), + currentDirection = c.style.direction; + + if ( ! currentDirection ) + currentDirection = ( isRTL ) ? 'rtl' : 'ltr'; + + c.style.direction = ( 'rtl' == currentDirection ) ? 'ltr' : 'rtl'; + c.focus(); + } + // ensure backward compatibility edButtons[10] = new qt.TagButton('strong','b','<strong>','</strong>','b'); edButtons[20] = new qt.TagButton('em','i','<em>','</em>','i'), diff --git a/wp-includes/js/quicktags.js b/wp-includes/js/quicktags.js index fb2ed4fef..d66d123d1 100644 --- a/wp-includes/js/quicktags.js +++ b/wp-includes/js/quicktags.js @@ -1 +1 @@ -var QTags,edButtons=[],edCanvas,edAddTag=function(){},edCheckOpenTags=function(){},edCloseAllTags=function(){},edInsertImage=function(){},edInsertLink=function(){},edInsertTag=function(){},edLink=function(){},edQuickLink=function(){},edRemoveTag=function(){},edShowButton=function(){},edShowLinks=function(){},edSpell=function(){},edToolbar=function(){};function quicktags(a){return new QTags(a)}function edInsertContent(b,a){return QTags.insertContent(a)}function edButton(f,e,c,b,a,d){return QTags.addButton(f,e,c,b,a,"",-1)}(function(){var b=function(g){var f,e,d;if(typeof jQuery!="undefined"){jQuery(document).ready(g)}else{f=b;f.funcs=[];f.ready=function(){if(!f.isReady){f.isReady=true;for(e=0;e<f.funcs.length;e++){f.funcs[e]()}}};if(f.isReady){g()}else{f.funcs.push(g)}if(!f.eventAttached){if(document.addEventListener){d=function(){document.removeEventListener("DOMContentLoaded",d,false);f.ready()};document.addEventListener("DOMContentLoaded",d,false);window.addEventListener("load",f.ready,false)}else{if(document.attachEvent){d=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",d);f.ready()}};document.attachEvent("onreadystatechange",d);window.attachEvent("onload",f.ready);(function(){try{document.documentElement.doScroll("left")}catch(h){setTimeout(arguments.callee,50);return}f.ready()})()}}f.eventAttached=true}}},a=(function(){var d=new Date(),e;e=function(f){var g=f.toString();if(g.length<2){g="0"+g}return g};return d.getUTCFullYear()+"-"+e(d.getUTCMonth()+1)+"-"+e(d.getUTCDate())+"T"+e(d.getUTCHours())+":"+e(d.getUTCMinutes())+":"+e(d.getUTCSeconds())+"+00:00"})(),c;c=QTags=function(j){if(typeof(j)=="string"){j={id:j}}else{if(typeof(j)!="object"){return false}}var i=this,k=j.id,h=document.getElementById(k),g="qt_"+k,d,f,e;if(!k||!h){return false}i.name=g;i.id=k;i.canvas=h;i.settings=j;if(k=="content"&&typeof(adminpage)=="string"&&(adminpage=="post-new-php"||adminpage=="post-php")){edCanvas=h;e="ed_toolbar"}else{e=g+"_toolbar"}d=document.createElement("div");d.id=e;d.className="quicktags-toolbar";h.parentNode.insertBefore(d,h);i.toolbar=d;f=function(n){n=n||window.event;var m=n.target||n.srcElement,l;if(/ ed_button /.test(" "+m.className+" ")){i.canvas=h=document.getElementById(k);l=m.id.replace(g+"_","");if(i.theButtons[l]){i.theButtons[l].callback.call(i.theButtons[l],m,h,i)}}};if(d.addEventListener){d.addEventListener("click",f,false)}else{if(d.attachEvent){d.attachEvent("onclick",f)}}i.getButton=function(l){return i.theButtons[l]};i.getButtonElement=function(l){return document.getElementById(g+"_"+l)};c.instances[k]=i;if(!c.instances[0]){c.instances[0]=c.instances[k];b(function(){c._buttonsInit()})}};c.instances={};c.getInstance=function(d){return c.instances[d]};c._buttonsInit=function(){var p=this,g,e,h,o,m,l,n,f,k,d,j=",strong,em,link,block,del,ins,img,ul,ol,li,code,more,spell,close,";for(l in p.instances){if(l==0){continue}n=p.instances[l];g=n.canvas;e=n.name;h=n.settings;m="";o={};d="";if(h.buttons){d=","+h.buttons+","}for(k in edButtons){if(!edButtons[k]){continue}f=edButtons[k].id;if(d&&j.indexOf(","+f+",")!=-1&&d.indexOf(","+f+",")==-1){continue}if(!edButtons[k].instance||edButtons[k].instance==l){o[f]=edButtons[k];if(edButtons[k].html){m+=edButtons[k].html(e+"_")}}}if(d&&d.indexOf(",fullscreen,")!=-1){o.fullscreen=new c.FullscreenButton();m+=o.fullscreen.html(e+"_")}n.toolbar.innerHTML=m;n.theButtons=o}p.buttonsInitDone=true};c.addButton=function(e,i,h,g,d,j,k,l){var f;if(!e||!i){return}k=k||0;g=g||"";if(typeof(h)==="function"){f=new c.Button(e,i,d,j,l);f.callback=h}else{if(typeof(h)==="string"){f=new c.TagButton(e,i,h,g,d,j,l)}else{return}}if(k==-1){return f}if(k>0){while(typeof(edButtons[k])!="undefined"){k++}edButtons[k]=f}else{edButtons[edButtons.length]=f}if(this.buttonsInitDone){this._buttonsInit()}};c.insertContent=function(g){var h,f,e,i,j,d=document.getElementById(wpActiveEditor);if(!d){return false}if(document.selection){d.focus();h=document.selection.createRange();h.text=g;d.focus()}else{if(d.selectionStart||d.selectionStart=="0"){j=d.value;f=d.selectionStart;e=d.selectionEnd;i=d.scrollTop;d.value=j.substring(0,f)+g+j.substring(e,j.length);d.focus();d.selectionStart=f+g.length;d.selectionEnd=f+g.length;d.scrollTop=i}else{d.value+=g;d.focus()}}return true};c.Button=function(i,g,e,h,d){var f=this;f.id=i;f.display=g;f.access=e;f.title=h||"";f.instance=d||""};c.Button.prototype.html=function(e){var d=this.access?' accesskey="'+this.access+'"':"";return'<input type="button" id="'+e+this.id+'"'+d+' class="ed_button" title="'+this.title+'" value="'+this.display+'" />'};c.Button.prototype.callback=function(){};c.TagButton=function(k,i,g,f,e,j,d){var h=this;c.Button.call(h,k,i,e,j,d);h.tagStart=g;h.tagEnd=f};c.TagButton.prototype=new c.Button();c.TagButton.prototype.openTag=function(g,d){var f=this;if(!d.openTags){d.openTags=[]}if(f.tagEnd){d.openTags.push(f.id);g.value="/"+g.value}};c.TagButton.prototype.closeTag=function(h,d){var g=this,f=g.isOpen(d);if(f!==false){d.openTags.splice(f,1)}h.value=g.display};c.TagButton.prototype.isOpen=function(d){var g=this,f=0,e=false;if(d.openTags){while(e===false&&f<d.openTags.length){e=d.openTags[f]==g.id?f:false;f++}}else{e=false}return e};c.TagButton.prototype.callback=function(o,h,p){var u=this,q,e,m,g,s=h.value,j,d,n,f,k=s?u.tagEnd:"";if(document.selection){h.focus();f=document.selection.createRange();if(f.text.length>0){if(!u.tagEnd){f.text=f.text+u.tagStart}else{f.text=u.tagStart+f.text+k}}else{if(!u.tagEnd){f.text=u.tagStart}else{if(u.isOpen(p)===false){f.text=u.tagStart;u.openTag(o,p)}else{f.text=k;u.closeTag(o,p)}}}h.focus()}else{if(h.selectionStart||h.selectionStart=="0"){q=h.selectionStart;e=h.selectionEnd;m=e;g=h.scrollTop;j=s.substring(0,q);d=s.substring(e,s.length);n=s.substring(q,e);if(q!=e){if(!u.tagEnd){h.value=j+n+u.tagStart+d;m+=u.tagStart.length}else{h.value=j+u.tagStart+n+k+d;m+=u.tagStart.length+k.length}}else{if(!u.tagEnd){h.value=j+u.tagStart+d;m=q+u.tagStart.length}else{if(u.isOpen(p)===false){h.value=j+u.tagStart+d;u.openTag(o,p);m=q+u.tagStart.length}else{h.value=j+k+d;m=q+k.length;u.closeTag(o,p)}}}h.focus();h.selectionStart=m;h.selectionEnd=m;h.scrollTop=g}else{if(!k){h.value+=u.tagStart}else{if(u.isOpen(p)!==false){h.value+=u.tagStart;u.openTag(o,p)}else{h.value+=k;u.closeTag(o,p)}}h.focus()}}};c.SpellButton=function(){c.Button.call(this,"spell",quicktagsL10n.lookup,"",quicktagsL10n.dictionaryLookup)};c.SpellButton.prototype=new c.Button();c.SpellButton.prototype.callback=function(h,g,d){var j="",i,f,e;if(document.selection){g.focus();i=document.selection.createRange();if(i.text.length>0){j=i.text}}else{if(g.selectionStart||g.selectionStart=="0"){f=g.selectionStart;e=g.selectionEnd;if(f!=e){j=g.value.substring(f,e)}}}if(j===""){j=prompt(quicktagsL10n.wordLookup,"")}if(j!==null&&/^\w[\w ]*$/.test(j)){window.open("http://www.answers.com/"+encodeURIComponent(j))}};c.CloseButton=function(){c.Button.call(this,"close",quicktagsL10n.closeTags,"",quicktagsL10n.closeAllOpenTags)};c.CloseButton.prototype=new c.Button();c._close=function(i,j,d){var g,f,h=d.openTags;if(h){while(h.length>0){g=d.getButton(h[h.length-1]);f=document.getElementById(d.name+"_"+g.id);if(i){g.callback.call(g,f,j,d)}else{g.closeTag(f,d)}}}};c.CloseButton.prototype.callback=c._close;c.closeAllTags=function(e){var d=this.getInstance(e);c._close("",d.canvas,d)};c.LinkButton=function(){c.TagButton.call(this,"link","link","","</a>","a")};c.LinkButton.prototype=new c.TagButton();c.LinkButton.prototype.callback=function(i,j,g,f){var d,h=this;if(typeof(wpLink)!="undefined"){wpLink.open();return}if(!f){f="http://"}if(h.isOpen(g)===false){d=prompt(quicktagsL10n.enterURL,f);if(d){h.tagStart='<a href="'+d+'">';c.TagButton.prototype.callback.call(h,i,j,g)}}else{c.TagButton.prototype.callback.call(h,i,j,g)}};c.ImgButton=function(){c.TagButton.call(this,"img","img","","","m")};c.ImgButton.prototype=new c.TagButton();c.ImgButton.prototype.callback=function(h,j,f,d){if(!d){d="http://"}var i=prompt(quicktagsL10n.enterImageURL,d),g;if(i){g=prompt(quicktagsL10n.enterImageDescription,"");this.tagStart='<img src="'+i+'" alt="'+g+'" />';c.TagButton.prototype.callback.call(this,h,j,f)}};c.FullscreenButton=function(){c.Button.call(this,"fullscreen",quicktagsL10n.fullscreen,"f",quicktagsL10n.toggleFullscreen)};c.FullscreenButton.prototype=new c.Button();c.FullscreenButton.prototype.callback=function(d,f){if(f.id!="content"||typeof(fullscreen)=="undefined"){return}fullscreen.on()};edButtons[10]=new c.TagButton("strong","b","<strong>","</strong>","b");edButtons[20]=new c.TagButton("em","i","<em>","</em>","i"),edButtons[30]=new c.LinkButton(),edButtons[40]=new c.TagButton("block","b-quote","\n\n<blockquote>","</blockquote>\n\n","q"),edButtons[50]=new c.TagButton("del","del",'<del datetime="'+a+'">',"</del>","d"),edButtons[60]=new c.TagButton("ins","ins",'<ins datetime="'+a+'">',"</ins>","s"),edButtons[70]=new c.ImgButton(),edButtons[80]=new c.TagButton("ul","ul","<ul>\n","</ul>\n\n","u"),edButtons[90]=new c.TagButton("ol","ol","<ol>\n","</ol>\n\n","o"),edButtons[100]=new c.TagButton("li","li","\t<li>","</li>\n","l"),edButtons[110]=new c.TagButton("code","code","<code>","</code>","c"),edButtons[120]=new c.TagButton("more","more","<!--more-->","","t"),edButtons[130]=new c.SpellButton(),edButtons[140]=new c.CloseButton()})(); \ No newline at end of file +var QTags,edButtons=[],edCanvas,edAddTag=function(){},edCheckOpenTags=function(){},edCloseAllTags=function(){},edInsertImage=function(){},edInsertLink=function(){},edInsertTag=function(){},edLink=function(){},edQuickLink=function(){},edRemoveTag=function(){},edShowButton=function(){},edShowLinks=function(){},edSpell=function(){},edToolbar=function(){};function quicktags(a){return new QTags(a)}function edInsertContent(b,a){return QTags.insertContent(a)}function edButton(f,e,c,b,a,d){return QTags.addButton(f,e,c,b,a,"",-1)}(function(){var b=function(g){var f,e,d;if(typeof jQuery!="undefined"){jQuery(document).ready(g)}else{f=b;f.funcs=[];f.ready=function(){if(!f.isReady){f.isReady=true;for(e=0;e<f.funcs.length;e++){f.funcs[e]()}}};if(f.isReady){g()}else{f.funcs.push(g)}if(!f.eventAttached){if(document.addEventListener){d=function(){document.removeEventListener("DOMContentLoaded",d,false);f.ready()};document.addEventListener("DOMContentLoaded",d,false);window.addEventListener("load",f.ready,false)}else{if(document.attachEvent){d=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",d);f.ready()}};document.attachEvent("onreadystatechange",d);window.attachEvent("onload",f.ready);(function(){try{document.documentElement.doScroll("left")}catch(h){setTimeout(arguments.callee,50);return}f.ready()})()}}f.eventAttached=true}}},a=(function(){var d=new Date(),e;e=function(f){var g=f.toString();if(g.length<2){g="0"+g}return g};return d.getUTCFullYear()+"-"+e(d.getUTCMonth()+1)+"-"+e(d.getUTCDate())+"T"+e(d.getUTCHours())+":"+e(d.getUTCMinutes())+":"+e(d.getUTCSeconds())+"+00:00"})(),c;c=QTags=function(j){if(typeof(j)=="string"){j={id:j}}else{if(typeof(j)!="object"){return false}}var i=this,k=j.id,h=document.getElementById(k),g="qt_"+k,d,f,e;if(!k||!h){return false}i.name=g;i.id=k;i.canvas=h;i.settings=j;if(k=="content"&&typeof(adminpage)=="string"&&(adminpage=="post-new-php"||adminpage=="post-php")){edCanvas=h;e="ed_toolbar"}else{e=g+"_toolbar"}d=document.createElement("div");d.id=e;d.className="quicktags-toolbar";h.parentNode.insertBefore(d,h);i.toolbar=d;f=function(n){n=n||window.event;var m=n.target||n.srcElement,l;if(/ ed_button /.test(" "+m.className+" ")){i.canvas=h=document.getElementById(k);l=m.id.replace(g+"_","");if(i.theButtons[l]){i.theButtons[l].callback.call(i.theButtons[l],m,h,i)}}};if(d.addEventListener){d.addEventListener("click",f,false)}else{if(d.attachEvent){d.attachEvent("onclick",f)}}i.getButton=function(l){return i.theButtons[l]};i.getButtonElement=function(l){return document.getElementById(g+"_"+l)};c.instances[k]=i;if(!c.instances[0]){c.instances[0]=c.instances[k];b(function(){c._buttonsInit()})}};c.instances={};c.getInstance=function(d){return c.instances[d]};c._buttonsInit=function(){var p=this,g,e,h,o,m,l,n,f,k,d,j=",strong,em,link,block,del,ins,img,ul,ol,li,code,more,spell,close,";for(l in p.instances){if(l==0){continue}n=p.instances[l];g=n.canvas;e=n.name;h=n.settings;m="";o={};d="";if(h.buttons){d=","+h.buttons+","}for(k in edButtons){if(!edButtons[k]){continue}f=edButtons[k].id;if(d&&j.indexOf(","+f+",")!=-1&&d.indexOf(","+f+",")==-1){continue}if(!edButtons[k].instance||edButtons[k].instance==l){o[f]=edButtons[k];if(edButtons[k].html){m+=edButtons[k].html(e+"_")}}}if(d&&d.indexOf(",fullscreen,")!=-1){o.fullscreen=new c.FullscreenButton();m+=o.fullscreen.html(e+"_")}if("rtl"==document.getElementsByTagName("html")[0].dir){o.textdirection=new c.TextDirectionButton();m+=o.textdirection.html(e+"_")}n.toolbar.innerHTML=m;n.theButtons=o}p.buttonsInitDone=true};c.addButton=function(e,i,h,g,d,j,k,l){var f;if(!e||!i){return}k=k||0;g=g||"";if(typeof(h)==="function"){f=new c.Button(e,i,d,j,l);f.callback=h}else{if(typeof(h)==="string"){f=new c.TagButton(e,i,h,g,d,j,l)}else{return}}if(k==-1){return f}if(k>0){while(typeof(edButtons[k])!="undefined"){k++}edButtons[k]=f}else{edButtons[edButtons.length]=f}if(this.buttonsInitDone){this._buttonsInit()}};c.insertContent=function(g){var h,f,e,i,j,d=document.getElementById(wpActiveEditor);if(!d){return false}if(document.selection){d.focus();h=document.selection.createRange();h.text=g;d.focus()}else{if(d.selectionStart||d.selectionStart=="0"){j=d.value;f=d.selectionStart;e=d.selectionEnd;i=d.scrollTop;d.value=j.substring(0,f)+g+j.substring(e,j.length);d.focus();d.selectionStart=f+g.length;d.selectionEnd=f+g.length;d.scrollTop=i}else{d.value+=g;d.focus()}}return true};c.Button=function(i,g,e,h,d){var f=this;f.id=i;f.display=g;f.access=e;f.title=h||"";f.instance=d||""};c.Button.prototype.html=function(e){var d=this.access?' accesskey="'+this.access+'"':"";return'<input type="button" id="'+e+this.id+'"'+d+' class="ed_button" title="'+this.title+'" value="'+this.display+'" />'};c.Button.prototype.callback=function(){};c.TagButton=function(k,i,g,f,e,j,d){var h=this;c.Button.call(h,k,i,e,j,d);h.tagStart=g;h.tagEnd=f};c.TagButton.prototype=new c.Button();c.TagButton.prototype.openTag=function(g,d){var f=this;if(!d.openTags){d.openTags=[]}if(f.tagEnd){d.openTags.push(f.id);g.value="/"+g.value}};c.TagButton.prototype.closeTag=function(h,d){var g=this,f=g.isOpen(d);if(f!==false){d.openTags.splice(f,1)}h.value=g.display};c.TagButton.prototype.isOpen=function(d){var g=this,f=0,e=false;if(d.openTags){while(e===false&&f<d.openTags.length){e=d.openTags[f]==g.id?f:false;f++}}else{e=false}return e};c.TagButton.prototype.callback=function(o,h,p){var u=this,q,e,m,g,s=h.value,j,d,n,f,k=s?u.tagEnd:"";if(document.selection){h.focus();f=document.selection.createRange();if(f.text.length>0){if(!u.tagEnd){f.text=f.text+u.tagStart}else{f.text=u.tagStart+f.text+k}}else{if(!u.tagEnd){f.text=u.tagStart}else{if(u.isOpen(p)===false){f.text=u.tagStart;u.openTag(o,p)}else{f.text=k;u.closeTag(o,p)}}}h.focus()}else{if(h.selectionStart||h.selectionStart=="0"){q=h.selectionStart;e=h.selectionEnd;m=e;g=h.scrollTop;j=s.substring(0,q);d=s.substring(e,s.length);n=s.substring(q,e);if(q!=e){if(!u.tagEnd){h.value=j+n+u.tagStart+d;m+=u.tagStart.length}else{h.value=j+u.tagStart+n+k+d;m+=u.tagStart.length+k.length}}else{if(!u.tagEnd){h.value=j+u.tagStart+d;m=q+u.tagStart.length}else{if(u.isOpen(p)===false){h.value=j+u.tagStart+d;u.openTag(o,p);m=q+u.tagStart.length}else{h.value=j+k+d;m=q+k.length;u.closeTag(o,p)}}}h.focus();h.selectionStart=m;h.selectionEnd=m;h.scrollTop=g}else{if(!k){h.value+=u.tagStart}else{if(u.isOpen(p)!==false){h.value+=u.tagStart;u.openTag(o,p)}else{h.value+=k;u.closeTag(o,p)}}h.focus()}}};c.SpellButton=function(){c.Button.call(this,"spell",quicktagsL10n.lookup,"",quicktagsL10n.dictionaryLookup)};c.SpellButton.prototype=new c.Button();c.SpellButton.prototype.callback=function(h,g,d){var j="",i,f,e;if(document.selection){g.focus();i=document.selection.createRange();if(i.text.length>0){j=i.text}}else{if(g.selectionStart||g.selectionStart=="0"){f=g.selectionStart;e=g.selectionEnd;if(f!=e){j=g.value.substring(f,e)}}}if(j===""){j=prompt(quicktagsL10n.wordLookup,"")}if(j!==null&&/^\w[\w ]*$/.test(j)){window.open("http://www.answers.com/"+encodeURIComponent(j))}};c.CloseButton=function(){c.Button.call(this,"close",quicktagsL10n.closeTags,"",quicktagsL10n.closeAllOpenTags)};c.CloseButton.prototype=new c.Button();c._close=function(i,j,d){var g,f,h=d.openTags;if(h){while(h.length>0){g=d.getButton(h[h.length-1]);f=document.getElementById(d.name+"_"+g.id);if(i){g.callback.call(g,f,j,d)}else{g.closeTag(f,d)}}}};c.CloseButton.prototype.callback=c._close;c.closeAllTags=function(e){var d=this.getInstance(e);c._close("",d.canvas,d)};c.LinkButton=function(){c.TagButton.call(this,"link","link","","</a>","a")};c.LinkButton.prototype=new c.TagButton();c.LinkButton.prototype.callback=function(i,j,g,f){var d,h=this;if(typeof(wpLink)!="undefined"){wpLink.open();return}if(!f){f="http://"}if(h.isOpen(g)===false){d=prompt(quicktagsL10n.enterURL,f);if(d){h.tagStart='<a href="'+d+'">';c.TagButton.prototype.callback.call(h,i,j,g)}}else{c.TagButton.prototype.callback.call(h,i,j,g)}};c.ImgButton=function(){c.TagButton.call(this,"img","img","","","m")};c.ImgButton.prototype=new c.TagButton();c.ImgButton.prototype.callback=function(h,j,f,d){if(!d){d="http://"}var i=prompt(quicktagsL10n.enterImageURL,d),g;if(i){g=prompt(quicktagsL10n.enterImageDescription,"");this.tagStart='<img src="'+i+'" alt="'+g+'" />';c.TagButton.prototype.callback.call(this,h,j,f)}};c.FullscreenButton=function(){c.Button.call(this,"fullscreen",quicktagsL10n.fullscreen,"f",quicktagsL10n.toggleFullscreen)};c.FullscreenButton.prototype=new c.Button();c.FullscreenButton.prototype.callback=function(d,f){if(!f.id||typeof(fullscreen)=="undefined"){return}fullscreen.on()};c.TextDirectionButton=function(){c.Button.call(this,"textdirection",quicktagsL10n.textdirection,"",quicktagsL10n.toggleTextdirection)};c.TextDirectionButton.prototype=new c.Button();c.TextDirectionButton.prototype.callback=function(f,h){var d=("rtl"==document.getElementsByTagName("html")[0].dir),g=h.style.direction;if(!g){g=(d)?"rtl":"ltr"}h.style.direction=("rtl"==g)?"ltr":"rtl";h.focus()};edButtons[10]=new c.TagButton("strong","b","<strong>","</strong>","b");edButtons[20]=new c.TagButton("em","i","<em>","</em>","i"),edButtons[30]=new c.LinkButton(),edButtons[40]=new c.TagButton("block","b-quote","\n\n<blockquote>","</blockquote>\n\n","q"),edButtons[50]=new c.TagButton("del","del",'<del datetime="'+a+'">',"</del>","d"),edButtons[60]=new c.TagButton("ins","ins",'<ins datetime="'+a+'">',"</ins>","s"),edButtons[70]=new c.ImgButton(),edButtons[80]=new c.TagButton("ul","ul","<ul>\n","</ul>\n\n","u"),edButtons[90]=new c.TagButton("ol","ol","<ol>\n","</ol>\n\n","o"),edButtons[100]=new c.TagButton("li","li","\t<li>","</li>\n","l"),edButtons[110]=new c.TagButton("code","code","<code>","</code>","c"),edButtons[120]=new c.TagButton("more","more","<!--more-->","","t"),edButtons[130]=new c.SpellButton(),edButtons[140]=new c.CloseButton()})(); \ No newline at end of file diff --git a/wp-includes/js/swfupload/handlers.dev.js b/wp-includes/js/swfupload/handlers.dev.js index e72ed69b1..7296cb676 100644 --- a/wp-includes/js/swfupload/handlers.dev.js +++ b/wp-includes/js/swfupload/handlers.dev.js @@ -96,7 +96,7 @@ function prepareMediaItemInit(fileObj) { jQuery('a.delete', item).click(function(){ // Tell the server to delete it. TODO: handle exceptions jQuery.ajax({ - url: 'admin-ajax.php', + url: ajaxurl, type: 'post', success: deleteSuccess, error: deleteError, @@ -114,7 +114,7 @@ function prepareMediaItemInit(fileObj) { jQuery('a.undo', item).click(function(){ // Tell the server to untrash it. TODO: handle exceptions jQuery.ajax({ - url: 'admin-ajax.php', + url: ajaxurl, type: 'post', id: fileObj.id, data: { diff --git a/wp-includes/js/swfupload/handlers.js b/wp-includes/js/swfupload/handlers.js index ce5ff0e6d..43e82f8a6 100644 --- a/wp-includes/js/swfupload/handlers.js +++ b/wp-includes/js/swfupload/handlers.js @@ -1 +1 @@ -var topWin=window.dialogArguments||opener||parent||top;function fileDialogStart(){jQuery("#media-upload-error").empty()}function fileQueued(a){jQuery(".media-blank").remove();if(jQuery("form.type-form #media-items").children().length==1&&jQuery(".hidden","#media-items").length>0){jQuery(".describe-toggle-on").show();jQuery(".describe-toggle-off").hide();jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")}jQuery("#media-items").append('<div id="media-item-'+a.id+'" class="media-item child-of-'+post_id+'"><div class="progress"><div class="bar"></div></div><div class="filename original"><span class="percent"></span> '+a.name+"</div></div>");jQuery(".progress","#media-item-"+a.id).show();jQuery("#insert-gallery").prop("disabled",true);jQuery("#cancel-upload").prop("disabled",false)}function uploadStart(a){try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}}catch(b){}return true}function uploadProgress(e,b,d){var a=jQuery("#media-items").width()-2,c=jQuery("#media-item-"+e.id);jQuery(".bar",c).width(a*b/d);jQuery(".percent",c).html(Math.ceil(b/d*100)+"%");if(b==d){jQuery(".bar",c).html('<strong class="crunching">'+swfuploadL10n.crunching+"</strong>")}}function prepareMediaItem(c,a){var d=(typeof shortform=="undefined")?1:2,b=jQuery("#media-item-"+c.id);jQuery(".bar",b).remove();jQuery(".progress",b).hide();try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}}catch(g){}if(isNaN(a)||!a){b.append(a);prepareMediaItemInit(c)}else{b.load("async-upload.php",{attachment_id:a,fetch:d},function(){prepareMediaItemInit(c);updateMediaForm()})}}function prepareMediaItemInit(b){var a=jQuery("#media-item-"+b.id);jQuery(".thumbnail",a).clone().attr("class","pinkynail toggle").prependTo(a);jQuery(".filename.original",a).replaceWith(jQuery(".filename.new",a));jQuery("a.toggle",a).click(function(){jQuery(this).siblings(".slidetoggle").slideToggle(350,function(){var d=jQuery(window).height(),e=jQuery(this).offset().top,f=jQuery(this).height(),c;if(d&&e&&f){c=e+f;if(c>d&&(f+48)<d){window.scrollBy(0,c-d+13)}else{if(c>d){window.scrollTo(0,e-36)}}}});jQuery(this).siblings(".toggle").andSelf().toggle();jQuery(this).siblings("a.toggle").focus();return false});jQuery("a.delete",a).click(function(){jQuery.ajax({url:"admin-ajax.php",type:"post",success:deleteSuccess,error:deleteError,id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}});return false});jQuery("a.undo",a).click(function(){jQuery.ajax({url:"admin-ajax.php",type:"post",id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(d,e){var c=jQuery("#media-item-"+b.id);if(type=jQuery("#type-of-"+b.id).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-0+1)}if(c.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-0+1)}jQuery(".filename .trashnotice",c).remove();jQuery(".filename .title",c).css("font-weight","normal");jQuery("a.undo",c).addClass("hidden");jQuery("a.describe-toggle-on, .menu_order_input",c).show();c.css({backgroundColor:"#ceb"}).animate({backgroundColor:"#fff"},{queue:false,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}});return false});jQuery("#media-item-"+b.id+".startopen").removeClass("startopen").slideToggle(500).siblings(".toggle").toggle()}function itemAjaxError(d,b){var c=jQuery("#media-item-"+d);var a=jQuery(".filename",c).text();c.html('<div class="error-div"><a class="dismiss" href="#">'+swfuploadL10n.dismiss+"</a><strong>"+swfuploadL10n.error_uploading.replace("%s",a)+"</strong><br />"+b+"</div>");c.find("a.dismiss").click(function(){jQuery(this).parents(".media-item").slideUp(200,function(){jQuery(this).remove()})})}function deleteSuccess(b,d){if(b=="-1"){return itemAjaxError(this.id,"You do not have permission. Has your session expired?")}if(b=="0"){return itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?")}var c=this.id,a=jQuery("#media-item-"+c);if(type=jQuery("#type-of-"+c).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-1)}if(a.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1)}if(jQuery("form.type-form #media-items").children().length==1&&jQuery(".hidden","#media-items").length>0){jQuery(".toggle").toggle();jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")}jQuery(".toggle",a).toggle();jQuery(".slidetoggle",a).slideUp(200).siblings().removeClass("hidden");a.css({backgroundColor:"#faa"}).animate({backgroundColor:"#f4f4f4"},{queue:false,duration:500}).addClass("undo");jQuery(".filename:empty",a).remove();jQuery(".filename .title",a).css("font-weight","bold");jQuery(".filename",a).append('<span class="trashnotice"> '+swfuploadL10n.deleted+" </span>").siblings("a.toggle").hide();jQuery(".filename",a).append(jQuery("a.undo",a).removeClass("hidden"));jQuery(".menu_order_input",a).hide();return}function deleteError(c,b,a){}function updateMediaForm(){var b=jQuery("form.type-form #media-items").children(),a=jQuery("#media-items").children();if(b.length==1){jQuery(".slidetoggle",b).slideDown(500).siblings().addClass("hidden").filter(".toggle").toggle()}if(a.not(".media-blank").length>0){jQuery(".savebutton").show()}else{jQuery(".savebutton").hide()}if(a.length>1){jQuery(".insert-gallery").show()}else{jQuery(".insert-gallery").hide()}}function uploadSuccess(b,a){if(a.match("media-upload-error")){jQuery("#media-item-"+b.id).html(a);return}prepareMediaItem(b,a);updateMediaForm();if(jQuery("#media-item-"+b.id).hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(1*jQuery("#attachments-count").text()+1)}}function uploadComplete(a){if(swfu.getStats().files_queued==0){jQuery("#cancel-upload").prop("disabled",true);jQuery("#insert-gallery").prop("disabled",false)}}function wpQueueError(a){jQuery("#media-upload-error").show().text(a)}function wpFileError(d,c){var b=jQuery("#media-item-"+d.id);var a=jQuery(".filename",b).text();b.html('<div class="error-div"><a class="dismiss" href="#">'+swfuploadL10n.dismiss+"</a><strong>"+swfuploadL10n.error_uploading.replace("%s",a)+"</strong><br />"+c+"</div>");b.find("a.dismiss").click(function(){jQuery(this).parents(".media-item").slideUp(200,function(){jQuery(this).remove()})})}function fileQueueError(c,a,b){if(a==SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED){wpQueueError(swfuploadL10n.queue_limit_exceeded)}else{if(a==SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT){fileQueued(c);wpFileError(c,swfuploadL10n.file_exceeds_size_limit)}else{if(a==SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE){fileQueued(c);wpFileError(c,swfuploadL10n.zero_byte_file)}else{if(a==SWFUpload.QUEUE_ERROR.INVALID_FILETYPE){fileQueued(c);wpFileError(c,swfuploadL10n.invalid_filetype)}else{wpQueueError(swfuploadL10n.default_error)}}}}}function fileDialogComplete(b){try{if(b>0){this.startUpload()}}catch(a){this.debug(a)}}function switchUploader(b){var c=document.getElementById(swfu.customSettings.swfupload_element_id),a=document.getElementById(swfu.customSettings.degraded_element_id);if(b){c.style.display="block";a.style.display="none"}else{c.style.display="none";a.style.display="block"}}function swfuploadPreLoad(){if(!uploaderMode){switchUploader(1)}else{switchUploader(0)}}function swfuploadLoadFailed(){switchUploader(0);jQuery(".upload-html-bypass").hide()}function uploadError(b,c,a){switch(c){case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:wpFileError(b,swfuploadL10n.missing_upload_url);break;case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:wpFileError(b,swfuploadL10n.upload_limit_exceeded);break;case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:wpQueueError(swfuploadL10n.http_error);break;case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:wpQueueError(swfuploadL10n.upload_failed);break;case SWFUpload.UPLOAD_ERROR.IO_ERROR:wpQueueError(swfuploadL10n.io_error);break;case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:wpQueueError(swfuploadL10n.security_error);break;case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:jQuery("#media-item-"+b.id).remove();break;default:wpFileError(b,swfuploadL10n.default_error)}}function cancelUpload(){swfu.cancelQueue()}jQuery(document).ready(function(a){a('input[type="radio"]',"#media-items").live("click",function(){var b=a(this).closest("tr");if(a(b).hasClass("align")){setUserSetting("align",a(this).val())}else{if(a(b).hasClass("image-size")){setUserSetting("imgsize",a(this).val())}}});a("button.button","#media-items").live("click",function(){var b=this.className||"";b=b.match(/url([^ '"]+)/);if(b&&b[1]){setUserSetting("urlbutton",b[1]);a(this).siblings(".urlfield").val(a(this).attr("title"))}})}); \ No newline at end of file +var topWin=window.dialogArguments||opener||parent||top;function fileDialogStart(){jQuery("#media-upload-error").empty()}function fileQueued(a){jQuery(".media-blank").remove();if(jQuery("form.type-form #media-items").children().length==1&&jQuery(".hidden","#media-items").length>0){jQuery(".describe-toggle-on").show();jQuery(".describe-toggle-off").hide();jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")}jQuery("#media-items").append('<div id="media-item-'+a.id+'" class="media-item child-of-'+post_id+'"><div class="progress"><div class="bar"></div></div><div class="filename original"><span class="percent"></span> '+a.name+"</div></div>");jQuery(".progress","#media-item-"+a.id).show();jQuery("#insert-gallery").prop("disabled",true);jQuery("#cancel-upload").prop("disabled",false)}function uploadStart(a){try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}}catch(b){}return true}function uploadProgress(e,b,d){var a=jQuery("#media-items").width()-2,c=jQuery("#media-item-"+e.id);jQuery(".bar",c).width(a*b/d);jQuery(".percent",c).html(Math.ceil(b/d*100)+"%");if(b==d){jQuery(".bar",c).html('<strong class="crunching">'+swfuploadL10n.crunching+"</strong>")}}function prepareMediaItem(c,a){var d=(typeof shortform=="undefined")?1:2,b=jQuery("#media-item-"+c.id);jQuery(".bar",b).remove();jQuery(".progress",b).hide();try{if(typeof topWin.tb_remove!="undefined"){topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}}catch(g){}if(isNaN(a)||!a){b.append(a);prepareMediaItemInit(c)}else{b.load("async-upload.php",{attachment_id:a,fetch:d},function(){prepareMediaItemInit(c);updateMediaForm()})}}function prepareMediaItemInit(b){var a=jQuery("#media-item-"+b.id);jQuery(".thumbnail",a).clone().attr("class","pinkynail toggle").prependTo(a);jQuery(".filename.original",a).replaceWith(jQuery(".filename.new",a));jQuery("a.toggle",a).click(function(){jQuery(this).siblings(".slidetoggle").slideToggle(350,function(){var d=jQuery(window).height(),e=jQuery(this).offset().top,f=jQuery(this).height(),c;if(d&&e&&f){c=e+f;if(c>d&&(f+48)<d){window.scrollBy(0,c-d+13)}else{if(c>d){window.scrollTo(0,e-36)}}}});jQuery(this).siblings(".toggle").andSelf().toggle();jQuery(this).siblings("a.toggle").focus();return false});jQuery("a.delete",a).click(function(){jQuery.ajax({url:ajaxurl,type:"post",success:deleteSuccess,error:deleteError,id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}});return false});jQuery("a.undo",a).click(function(){jQuery.ajax({url:ajaxurl,type:"post",id:b.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(d,e){var c=jQuery("#media-item-"+b.id);if(type=jQuery("#type-of-"+b.id).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-0+1)}if(c.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-0+1)}jQuery(".filename .trashnotice",c).remove();jQuery(".filename .title",c).css("font-weight","normal");jQuery("a.undo",c).addClass("hidden");jQuery("a.describe-toggle-on, .menu_order_input",c).show();c.css({backgroundColor:"#ceb"}).animate({backgroundColor:"#fff"},{queue:false,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}});return false});jQuery("#media-item-"+b.id+".startopen").removeClass("startopen").slideToggle(500).siblings(".toggle").toggle()}function itemAjaxError(d,b){var c=jQuery("#media-item-"+d);var a=jQuery(".filename",c).text();c.html('<div class="error-div"><a class="dismiss" href="#">'+swfuploadL10n.dismiss+"</a><strong>"+swfuploadL10n.error_uploading.replace("%s",a)+"</strong><br />"+b+"</div>");c.find("a.dismiss").click(function(){jQuery(this).parents(".media-item").slideUp(200,function(){jQuery(this).remove()})})}function deleteSuccess(b,d){if(b=="-1"){return itemAjaxError(this.id,"You do not have permission. Has your session expired?")}if(b=="0"){return itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?")}var c=this.id,a=jQuery("#media-item-"+c);if(type=jQuery("#type-of-"+c).val()){jQuery("#"+type+"-counter").text(jQuery("#"+type+"-counter").text()-1)}if(a.hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1)}if(jQuery("form.type-form #media-items").children().length==1&&jQuery(".hidden","#media-items").length>0){jQuery(".toggle").toggle();jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")}jQuery(".toggle",a).toggle();jQuery(".slidetoggle",a).slideUp(200).siblings().removeClass("hidden");a.css({backgroundColor:"#faa"}).animate({backgroundColor:"#f4f4f4"},{queue:false,duration:500}).addClass("undo");jQuery(".filename:empty",a).remove();jQuery(".filename .title",a).css("font-weight","bold");jQuery(".filename",a).append('<span class="trashnotice"> '+swfuploadL10n.deleted+" </span>").siblings("a.toggle").hide();jQuery(".filename",a).append(jQuery("a.undo",a).removeClass("hidden"));jQuery(".menu_order_input",a).hide();return}function deleteError(c,b,a){}function updateMediaForm(){var b=jQuery("form.type-form #media-items").children(),a=jQuery("#media-items").children();if(b.length==1){jQuery(".slidetoggle",b).slideDown(500).siblings().addClass("hidden").filter(".toggle").toggle()}if(a.not(".media-blank").length>0){jQuery(".savebutton").show()}else{jQuery(".savebutton").hide()}if(a.length>1){jQuery(".insert-gallery").show()}else{jQuery(".insert-gallery").hide()}}function uploadSuccess(b,a){if(a.match("media-upload-error")){jQuery("#media-item-"+b.id).html(a);return}prepareMediaItem(b,a);updateMediaForm();if(jQuery("#media-item-"+b.id).hasClass("child-of-"+post_id)){jQuery("#attachments-count").text(1*jQuery("#attachments-count").text()+1)}}function uploadComplete(a){if(swfu.getStats().files_queued==0){jQuery("#cancel-upload").prop("disabled",true);jQuery("#insert-gallery").prop("disabled",false)}}function wpQueueError(a){jQuery("#media-upload-error").show().text(a)}function wpFileError(d,c){var b=jQuery("#media-item-"+d.id);var a=jQuery(".filename",b).text();b.html('<div class="error-div"><a class="dismiss" href="#">'+swfuploadL10n.dismiss+"</a><strong>"+swfuploadL10n.error_uploading.replace("%s",a)+"</strong><br />"+c+"</div>");b.find("a.dismiss").click(function(){jQuery(this).parents(".media-item").slideUp(200,function(){jQuery(this).remove()})})}function fileQueueError(c,a,b){if(a==SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED){wpQueueError(swfuploadL10n.queue_limit_exceeded)}else{if(a==SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT){fileQueued(c);wpFileError(c,swfuploadL10n.file_exceeds_size_limit)}else{if(a==SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE){fileQueued(c);wpFileError(c,swfuploadL10n.zero_byte_file)}else{if(a==SWFUpload.QUEUE_ERROR.INVALID_FILETYPE){fileQueued(c);wpFileError(c,swfuploadL10n.invalid_filetype)}else{wpQueueError(swfuploadL10n.default_error)}}}}}function fileDialogComplete(b){try{if(b>0){this.startUpload()}}catch(a){this.debug(a)}}function switchUploader(b){var c=document.getElementById(swfu.customSettings.swfupload_element_id),a=document.getElementById(swfu.customSettings.degraded_element_id);if(b){c.style.display="block";a.style.display="none"}else{c.style.display="none";a.style.display="block"}}function swfuploadPreLoad(){if(!uploaderMode){switchUploader(1)}else{switchUploader(0)}}function swfuploadLoadFailed(){switchUploader(0);jQuery(".upload-html-bypass").hide()}function uploadError(b,c,a){switch(c){case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:wpFileError(b,swfuploadL10n.missing_upload_url);break;case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:wpFileError(b,swfuploadL10n.upload_limit_exceeded);break;case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:wpQueueError(swfuploadL10n.http_error);break;case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:wpQueueError(swfuploadL10n.upload_failed);break;case SWFUpload.UPLOAD_ERROR.IO_ERROR:wpQueueError(swfuploadL10n.io_error);break;case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:wpQueueError(swfuploadL10n.security_error);break;case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:jQuery("#media-item-"+b.id).remove();break;default:wpFileError(b,swfuploadL10n.default_error)}}function cancelUpload(){swfu.cancelQueue()}jQuery(document).ready(function(a){a('input[type="radio"]',"#media-items").live("click",function(){var b=a(this).closest("tr");if(a(b).hasClass("align")){setUserSetting("align",a(this).val())}else{if(a(b).hasClass("image-size")){setUserSetting("imgsize",a(this).val())}}});a("button.button","#media-items").live("click",function(){var b=this.className||"";b=b.match(/url([^ '"]+)/);if(b&&b[1]){setUserSetting("urlbutton",b[1]);a(this).siblings(".urlfield").val(a(this).attr("title"))}})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/langs/wp-langs-en.js b/wp-includes/js/tinymce/langs/wp-langs-en.js index 7909082a1..53d784a28 100644 --- a/wp-includes/js/tinymce/langs/wp-langs-en.js +++ b/wp-includes/js/tinymce/langs/wp-langs-en.js @@ -12,7 +12,7 @@ not_set:"-- Not set --", clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.", 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.", +invalid_data:"ERROR: Invalid values entered, these are marked in red.", invalid_data_number:"{#field} must be a number", invalid_data_min:"{#field} must be a number greater than {#min}", invalid_data_size:"{#field} must be a number or percentage", @@ -240,8 +240,8 @@ code:"Code", samp:"Code sample", dt:"Definition term ", dd:"Definition description", -bold_desc:"Bold (Ctrl / Alt + Shift + B)", -italic_desc:"Italic (Ctrl / Alt + Shift + I)", +bold_desc:"Bold (Ctrl + B)", +italic_desc:"Italic (Ctrl + I)", underline_desc:"Underline", striketrough_desc:"Strikethrough (Alt + Shift + D)", justifyleft_desc:"Align Left (Alt + Shift + L)", @@ -310,6 +310,7 @@ colorpicker_named_title:"Named colors", colorpicker_color:"Color:", colorpicker_name:"Name:", charmap_title:"Select custom character", +charmap_usage:"Use left and right arrows to navigate.", image_title:"Insert/edit image", image_src:"Image URL", image_alt:"Image description", diff --git a/wp-includes/js/tinymce/langs/wp-langs.php b/wp-includes/js/tinymce/langs/wp-langs.php index f9299fb15..04dfa0f59 100644 --- a/wp-includes/js/tinymce/langs/wp-langs.php +++ b/wp-includes/js/tinymce/langs/wp-langs.php @@ -1,512 +1,561 @@ <?php +if ( ! defined( 'ABSPATH' ) ) + exit; + +// deprecated, not used function mce_escape($text) { return esc_js($text); } -if ( ! class_exists( '_WP_Editors' ) ) - require( ABSPATH . WPINC . '/class-wp-editor.php' ); - -$lang = 'tinyMCE.addI18n({' . _WP_Editors::$mce_locale . ':{ -common:{ -edit_confirm:"' . mce_escape( __('Do you want to use the WYSIWYG mode for this textarea?') ) . '", -apply:"' . mce_escape( __('Apply') ) . '", -insert:"' . mce_escape( __('Insert') ) . '", -update:"' . mce_escape( __('Update') ) . '", -cancel:"' . mce_escape( __('Cancel') ) . '", -close:"' . mce_escape( __('Close') ) . '", -browse:"' . mce_escape( __('Browse') ) . '", -class_name:"' . mce_escape( __('Class') ) . '", -not_set:"' . mce_escape( __('-- Not set --') ) . '", -clipboard_msg:"' . mce_escape( __('Copy/Cut/Paste is not available in Mozilla and Firefox.') ) . '", -clipboard_no_support:"' . mce_escape( __('Currently not supported by your browser, use keyboard shortcuts instead.') ) . '", -popup_blocked:"' . mce_escape( __('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:"' . mce_escape( __('ERROR: Invalid values entered, these are marked in red.') ) . '", -invalid_data_number:"' . mce_escape( __('{#field} must be a number') ) . '", -invalid_data_min:"' . mce_escape( __('{#field} must be a number greater than {#min}') ) . '", -invalid_data_size:"' . mce_escape( __('{#field} must be a number or percentage') ) . '", -more_colors:"' . mce_escape( __('More colors') ) . '" -}, -colors:{ -"000000":"' . mce_escape( __('Black') ) . '", -"993300":"' . mce_escape( __('Burnt orange') ) . '", -"333300":"' . mce_escape( __('Dark olive') ) . '", -"003300":"' . mce_escape( __('Dark green') ) . '", -"003366":"' . mce_escape( __('Dark azure') ) . '", -"000080":"' . mce_escape( __('Navy Blue') ) . '", -"333399":"' . mce_escape( __('Indigo') ) . '", -"333333":"' . mce_escape( __('Very dark gray') ) . '", -"800000":"' . mce_escape( __('Maroon') ) . '", -"FF6600":"' . mce_escape( __('Orange') ) . '", -"808000":"' . mce_escape( __('Olive') ) . '", -"008000":"' . mce_escape( __('Green') ) . '", -"008080":"' . mce_escape( __('Teal') ) . '", -"0000FF":"' . mce_escape( __('Blue') ) . '", -"666699":"' . mce_escape( __('Grayish blue') ) . '", -"808080":"' . mce_escape( __('Gray') ) . '", -"FF0000":"' . mce_escape( __('Red') ) . '", -"FF9900":"' . mce_escape( __('Amber') ) . '", -"99CC00":"' . mce_escape( __('Yellow green') ) . '", -"339966":"' . mce_escape( __('Sea green') ) . '", -"33CCCC":"' . mce_escape( __('Turquoise') ) . '", -"3366FF":"' . mce_escape( __('Royal blue') ) . '", -"800080":"' . mce_escape( __('Purple') ) . '", -"999999":"' . mce_escape( __('Medium gray') ) . '", -"FF00FF":"' . mce_escape( __('Magenta') ) . '", -"FFCC00":"' . mce_escape( __('Gold') ) . '", -"FFFF00":"' . mce_escape( __('Yellow') ) . '", -"00FF00":"' . mce_escape( __('Lime') ) . '", -"00FFFF":"' . mce_escape( __('Aqua') ) . '", -"00CCFF":"' . mce_escape( __('Sky blue') ) . '", -"993366":"' . mce_escape( __('Brown') ) . '", -"C0C0C0":"' . mce_escape( __('Silver') ) . '", -"FF99CC":"' . mce_escape( __('Pink') ) . '", -"FFCC99":"' . mce_escape( __('Peach') ) . '", -"FFFF99":"' . mce_escape( __('Light yellow') ) . '", -"CCFFCC":"' . mce_escape( __('Pale green') ) . '", -"CCFFFF":"' . mce_escape( __('Pale cyan') ) . '", -"99CCFF":"' . mce_escape( __('Light sky blue') ) . '", -"CC99FF":"' . mce_escape( __('Plum') ) . '", -"FFFFFF":"' . mce_escape( __('White') ) . '" -}, -contextmenu:{ -align:"' . mce_escape( /* translators: alignment */ __('Alignment') ) . '", -left:"' . mce_escape( /* translators: alignment */ __('Left') ) . '", -center:"' . mce_escape( /* translators: alignment */ __('Center') ) . '", -right:"' . mce_escape( /* translators: alignment */ __('Right') ) . '", -full:"' . mce_escape( /* translators: alignment */ __('Full') ) . '" -}, -insertdatetime:{ -date_fmt:"' . mce_escape( /* translators: year, month, date */ __('%Y-%m-%d') ) . '", -time_fmt:"' . mce_escape( /* translators: hours, minutes, seconds */ __('%H:%M:%S') ) . '", -insertdate_desc:"' . mce_escape( __('Insert date') ) . '", -inserttime_desc:"' . mce_escape( __('Insert time') ) . '", -months_long:"' . mce_escape( __('January').','.__('February').','.__('March').','.__('April').','.__('May').','.__('June').','.__('July').','.__('August').','.__('September').','.__('October').','.__('November').','.__('December') ) . '", -months_short:"' . mce_escape( __('Jan_January_abbreviation').','.__('Feb_February_abbreviation').','.__('Mar_March_abbreviation').','.__('Apr_April_abbreviation').','.__('May_May_abbreviation').','.__('Jun_June_abbreviation').','.__('Jul_July_abbreviation').','.__('Aug_August_abbreviation').','.__('Sep_September_abbreviation').','.__('Oct_October_abbreviation').','.__('Nov_November_abbreviation').','.__('Dec_December_abbreviation') ) . '", -day_long:"' . mce_escape( __('Sunday').','.__('Monday').','.__('Tuesday').','.__('Wednesday').','.__('Thursday').','.__('Friday').','.__('Saturday') ) . '", -day_short:"' . mce_escape( __('Sun').','.__('Mon').','.__('Tue').','.__('Wed').','.__('Thu').','.__('Fri').','.__('Sat') ) . '" -}, -print:{ -print_desc:"' . mce_escape( __('Print') ) . '" -}, -preview:{ -preview_desc:"' . mce_escape( __('Preview') ) . '" -}, -directionality:{ -ltr_desc:"' . mce_escape( __('Direction left to right') ) . '", -rtl_desc:"' . mce_escape( __('Direction right to left') ) . '" -}, -layer:{ -insertlayer_desc:"' . mce_escape( __('Insert new layer') ) . '", -forward_desc:"' . mce_escape( __('Move forward') ) . '", -backward_desc:"' . mce_escape( __('Move backward') ) . '", -absolute_desc:"' . mce_escape( __('Toggle absolute positioning') ) . '", -content:"' . mce_escape( __('New layer...') ) . '" -}, -save:{ -save_desc:"' . mce_escape( __('Save') ) . '", -cancel_desc:"' . mce_escape( __('Cancel all changes') ) . '" -}, -nonbreaking:{ -nonbreaking_desc:"' . mce_escape( __('Insert non-breaking space character') ) . '" -}, -iespell:{ -iespell_desc:"' . mce_escape( __('Run spell checking') ) . '", -download:"' . mce_escape( __('ieSpell not detected. Do you want to install it now?') ) . '" -}, -advhr:{ -advhr_desc:"' . mce_escape( __('Horizontale rule') ) . '" -}, -emotions:{ -emotions_desc:"' . mce_escape( __('Emotions') ) . '" -}, -searchreplace:{ -search_desc:"' . mce_escape( __('Find') ) . '", -replace_desc:"' . mce_escape( __('Find/Replace') ) . '" -}, -advimage:{ -image_desc:"' . mce_escape( __('Insert/edit image') ) . '" -}, -advlink:{ -link_desc:"' . mce_escape( __('Insert/edit link') ) . '" -}, -xhtmlxtras:{ -cite_desc:"' . mce_escape( __('Citation') ) . '", -abbr_desc:"' . mce_escape( __('Abbreviation') ) . '", -acronym_desc:"' . mce_escape( __('Acronym') ) . '", -del_desc:"' . mce_escape( __('Deletion') ) . '", -ins_desc:"' . mce_escape( __('Insertion') ) . '", -attribs_desc:"' . mce_escape( __('Insert/Edit Attributes') ) . '" -}, -style:{ -desc:"' . mce_escape( __('Edit CSS Style') ) . '" -}, -paste:{ -paste_text_desc:"' . mce_escape( __('Paste as Plain Text') ) . '", -paste_word_desc:"' . mce_escape( __('Paste from Word') ) . '", -selectall_desc:"' . mce_escape( __('Select All') ) . '", -plaintext_mode_sticky:"' . mce_escape( __('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:"' . mce_escape( __('Paste is now in plain text mode. Click again to toggle back to regular paste mode.') ) . '" -}, -paste_dlg:{ -text_title:"' . mce_escape( __('Use CTRL+V on your keyboard to paste the text into the window.') ) . '", -text_linebreaks:"' . mce_escape( __('Keep linebreaks') ) . '", -word_title:"' . mce_escape( __('Use CTRL+V on your keyboard to paste the text into the window.') ) . '" -}, -table:{ -desc:"' . mce_escape( __('Inserts a new table') ) . '", -row_before_desc:"' . mce_escape( __('Insert row before') ) . '", -row_after_desc:"' . mce_escape( __('Insert row after') ) . '", -delete_row_desc:"' . mce_escape( __('Delete row') ) . '", -col_before_desc:"' . mce_escape( __('Insert column before') ) . '", -col_after_desc:"' . mce_escape( __('Insert column after') ) . '", -delete_col_desc:"' . mce_escape( __('Remove column') ) . '", -split_cells_desc:"' . mce_escape( __('Split merged table cells') ) . '", -merge_cells_desc:"' . mce_escape( __('Merge table cells') ) . '", -row_desc:"' . mce_escape( __('Table row properties') ) . '", -cell_desc:"' . mce_escape( __('Table cell properties') ) . '", -props_desc:"' . mce_escape( __('Table properties') ) . '", -paste_row_before_desc:"' . mce_escape( __('Paste table row before') ) . '", -paste_row_after_desc:"' . mce_escape( __('Paste table row after') ) . '", -cut_row_desc:"' . mce_escape( __('Cut table row') ) . '", -copy_row_desc:"' . mce_escape( __('Copy table row') ) . '", -del:"' . mce_escape( __('Delete table') ) . '", -row:"' . mce_escape( __('Row') ) . '", -col:"' . mce_escape( __('Column') ) . '", -cell:"' . mce_escape( __('Cell') ) . '" -}, -autosave:{ -unload_msg:"' . mce_escape( __('The changes you made will be lost if you navigate away from this page.') ) . '" -}, -fullscreen:{ -desc:"' . mce_escape( __('Toggle fullscreen mode (Alt + Shift + G)') ) . '" -}, -media:{ -desc:"' . mce_escape( __('Insert / edit embedded media') ) . '", -edit:"' . mce_escape( __('Edit embedded media') ) . '" -}, -fullpage:{ -desc:"' . mce_escape( __('Document properties') ) . '" -}, -template:{ -desc:"' . mce_escape( __('Insert predefined template content') ) . '" -}, -visualchars:{ -desc:"' . mce_escape( __('Visual control characters on/off.') ) . '" -}, -spellchecker:{ -desc:"' . mce_escape( __('Toggle spellchecker (Alt + Shift + N)') ) . '", -menu:"' . mce_escape( __('Spellchecker settings') ) . '", -ignore_word:"' . mce_escape( __('Ignore word') ) . '", -ignore_words:"' . mce_escape( __('Ignore all') ) . '", -langs:"' . mce_escape( __('Languages') ) . '", -wait:"' . mce_escape( __('Please wait...') ) . '", -sug:"' . mce_escape( __('Suggestions') ) . '", -no_sug:"' . mce_escape( __('No suggestions') ) . '", -no_mpell:"' . mce_escape( __('No misspellings found.') ) . '", -learn_word:"' . mce_escape( __('Learn word') ) . '" -}, -pagebreak:{ -desc:"' . mce_escape( __('Insert Page Break') ) . '" -}, -advlist:{ -types:"' . mce_escape( __('Types') ) . '", -def:"' . mce_escape( __('Default') ) . '", -lower_alpha:"' . mce_escape( __('Lower alpha') ) . '", -lower_greek:"' . mce_escape( __('Lower greek') ) . '", -lower_roman:"' . mce_escape( __('Lower roman') ) . '", -upper_alpha:"' . mce_escape( __('Upper alpha') ) . '", -upper_roman:"' . mce_escape( __('Upper roman') ) . '", -circle:"' . mce_escape( __('Circle') ) . '", -disc:"' . mce_escape( __('Disc') ) . '", -square:"' . mce_escape( __('Square') ) . '" -}, -aria:{ -rich_text_area:"' . mce_escape( __('Rich Text Area') ) . '" -}, -wordcount:{ -words:"' . mce_escape( __('Words:') ) . ' " +function wp_mce_translation() { + + $default = array( + 'common' => array( + '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.'), + '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.'), + 'invalid_data_number' => __('{#field} must be a number'), + 'invalid_data_min' => __('{#field} must be a number greater than {#min}'), + 'invalid_data_size' => __('{#field} must be a number or percentage'), + 'more_colors' => __('More colors') + ), + + 'colors' => array( + '000000' => __('Black'), + '993300' => __('Burnt orange'), + '333300' => __('Dark olive'), + '003300' => __('Dark green'), + '003366' => __('Dark azure'), + '000080' => __('Navy Blue'), + '333399' => __('Indigo'), + '333333' => __('Very dark gray'), + '800000' => __('Maroon'), + 'FF6600' => __('Orange'), + '808000' => __('Olive'), + '008000' => __('Green'), + '008080' => __('Teal'), + '0000FF' => __('Blue'), + '666699' => __('Grayish blue'), + '808080' => __('Gray'), + 'FF0000' => __('Red'), + 'FF9900' => __('Amber'), + '99CC00' => __('Yellow green'), + '339966' => __('Sea green'), + '33CCCC' => __('Turquoise'), + '3366FF' => __('Royal blue'), + '800080' => __('Purple'), + '999999' => __('Medium gray'), + 'FF00FF' => __('Magenta'), + 'FFCC00' => __('Gold'), + 'FFFF00' => __('Yellow'), + '00FF00' => __('Lime'), + '00FFFF' => __('Aqua'), + '00CCFF' => __('Sky blue'), + '993366' => __('Brown'), + 'C0C0C0' => __('Silver'), + 'FF99CC' => __('Pink'), + 'FFCC99' => __('Peach'), + 'FFFF99' => __('Light yellow'), + 'CCFFCC' => __('Pale green'), + 'CCFFFF' => __('Pale cyan'), + '99CCFF' => __('Light sky blue'), + 'CC99FF' => __('Plum'), + 'FFFFFF' => __('White') + ), + + 'contextmenu' => array( + 'align' => __('Alignment'), /* translators: alignment */ + 'left' => __('Left'), /* translators: alignment */ + 'center' => __('Center'), /* translators: alignment */ + 'right' => __('Right'), /* translators: alignment */ + 'full' => __('Full') /* translators: alignment */ + ), + + 'insertdatetime' => array( + 'date_fmt' => __('%Y-%m-%d'), /* translators: year, month, date */ + 'time_fmt' => __('%H:%M:%S'), /* translators: hours, minutes, seconds */ + '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_January_abbreviation').','.__('Feb_February_abbreviation').','.__('Mar_March_abbreviation').','.__('Apr_April_abbreviation').','.__('May_May_abbreviation').','.__('Jun_June_abbreviation').','.__('Jul_July_abbreviation').','.__('Aug_August_abbreviation').','.__('Sep_September_abbreviation').','.__('Oct_October_abbreviation').','.__('Nov_November_abbreviation').','.__('Dec_December_abbreviation'), + 'day_long' => __('Sunday').','.__('Monday').','.__('Tuesday').','.__('Wednesday').','.__('Thursday').','.__('Friday').','.__('Saturday'), + 'day_short' => __('Sun').','.__('Mon').','.__('Tue').','.__('Wed').','.__('Thu').','.__('Fri').','.__('Sat') + ), + + 'print' => array( + 'print_desc' => __('Print') + ), + + 'preview' => array( + 'preview_desc' => __('Preview') + ), + + 'directionality' => array( + 'ltr_desc' => __('Direction left to right'), + 'rtl_desc' => __('Direction right to left') + ), + + 'layer' => array( + 'insertlayer_desc' => __('Insert new layer'), + 'forward_desc' => __('Move forward'), + 'backward_desc' => __('Move backward'), + 'absolute_desc' => __('Toggle absolute positioning'), + 'content' => __('New layer...') + ), + + 'save' => array( + 'save_desc' => __('Save'), + 'cancel_desc' => __('Cancel all changes') + ), + + 'nonbreaking' => array( + 'nonbreaking_desc' => __('Insert non-breaking space character') + ), + + 'iespell' => array( + 'iespell_desc' => __('Run spell checking'), + 'download' => __('ieSpell not detected. Do you want to install it now?') + ), + + 'advhr' => array( + 'advhr_desc' => __('Horizontale rule') + ), + + 'emotions' => array( + 'emotions_desc' => __('Emotions') + ), + + 'searchreplace' => array( + 'search_desc' => __('Find'), + 'replace_desc' => __('Find/Replace') + ), + + 'advimage' => array( + 'image_desc' => __('Insert/edit image') + ), + + 'advlink' => array( + 'link_desc' => __('Insert/edit link') + ), + + 'xhtmlxtras' => array( + 'cite_desc' => __('Citation'), + 'abbr_desc' => __('Abbreviation'), + 'acronym_desc' => __('Acronym'), + 'del_desc' => __('Deletion'), + 'ins_desc' => __('Insertion'), + 'attribs_desc' => __('Insert/Edit Attributes') + ), + + 'style' => array( + 'desc' => __('Edit CSS Style') + ), + + 'paste' => array( + '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' => array( + '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' => array( + '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' => array( + 'unload_msg' => __('The changes you made will be lost if you navigate away from this page.') + ), + + 'fullscreen' => array( + 'desc' => __('Toggle fullscreen mode (Alt + Shift + G)') + ), + + 'media' => array( + 'desc' => __('Insert / edit embedded media'), + 'edit' => __('Edit embedded media') + ), + + 'fullpage' => array( + 'desc' => __('Document properties') + ), + + 'template' => array( + 'desc' => __('Insert predefined template content') + ), + + 'visualchars' => array( + 'desc' => __('Visual control characters on/off.') + ), + + 'spellchecker' => array( + 'desc' => __('Toggle spellchecker (Alt + Shift + N)'), + '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.'), + 'learn_word' => __('Learn word') + ), + + 'pagebreak' => array( + 'desc' => __('Insert Page Break') + ), + + 'advlist' => array( + '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') + ), + + 'aria' => array( + 'rich_text_area' => __('Rich Text Area') + ), + + 'wordcount' => array( + 'words' => __('Words:') + ) + ); + + $advanced = array( + 'style_select' => __('Styles'), /* translators: TinyMCE inline 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'), + 'striketrough_desc' => __('Strikethrough (Alt + Shift + D)'), + 'justifyleft_desc' => __('Align Left (Alt + Shift + L)'), + 'justifycenter_desc' => __('Align Center (Alt + Shift + C)'), + 'justifyright_desc' => __('Align Right (Alt + Shift + R)'), + 'justifyfull_desc' => __('Align Full (Alt + Shift + J)'), + 'bullist_desc' => __('Unordered list (Alt + Shift + U)'), + 'numlist_desc' => __('Ordered list (Alt + Shift + O)'), + 'outdent_desc' => __('Outdent'), + 'indent_desc' => __('Indent'), + 'undo_desc' => __('Undo (Ctrl + Z)'), + 'redo_desc' => __('Redo (Ctrl + Y)'), + 'link_desc' => __('Insert/edit link (Alt + Shift + A)'), + 'unlink_desc' => __('Unlink (Alt + Shift + S)'), + 'image_desc' => __('Insert/edit image (Alt + Shift + M)'), + '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'), + '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 (Alt + Shift + Q)'), + 'clipboard_msg' => __('Copy/Cut/Paste is not available in Mozilla and Firefox.'), + 'path' => __('Path'), + 'newdocument' => __('Are you sure you want to 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'), + 'shortcuts_desc' => __('Accessibility Help'), + 'help_shortcut' => __('Press ALT F10 for toolbar. Press ALT 0 for help.'), + 'rich_text_area' => __('Rich Text Area'), + 'toolbar' => __('Toolbar') + ); + + $advanced_dlg = array( + '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' => _x('Name:', 'html attribute'), + 'charmap_title' => __('Select custom character'), + 'charmap_usage' => __('Use left and right arrows to navigate.'), + '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'), + 'accessibility_help' => __('Accessibility Help'), + 'accessibility_usage_title' => __('General Usage') + ); + + $media_dlg = array( + 'title' => __('Insert / edit embedded media'), + 'general' => __('General'), + 'advanced' => __('Advanced'), + 'file' => __('File/URL'), + 'list' => __('List'), + 'size' => __('Dimensions'), + 'preview' => __('Preview'), + 'constrain_proportions' => __('Constrain proportions'), + 'type' => __('Type'), + 'id' => __('Id'), + 'name' => _x('Name', 'html attribute'), + 'class_name' => __('Class'), + 'vspace' => __('V-Space'), + 'hspace' => __('H-Space'), + 'play' => __('Auto play'), + 'loop' => __('Loop'), + 'menu' => __('Show menu'), + 'quality' => __('Quality'), + 'scale' => __('Scale'), + 'align' => __('Align'), + 'salign' => __('SAlign'), + 'wmode' => __('WMode'), + 'bgcolor' => __('Background'), + 'base' => __('Base'), + 'flashvars' => __('Flashvars'), + 'liveconnect' => __('SWLiveConnect'), + 'autohref' => __('AutoHREF'), + 'cache' => __('Cache'), + 'hidden' => __('Hidden'), + 'controller' => __('Controller'), + 'kioskmode' => __('Kiosk mode'), + 'playeveryframe' => __('Play every frame'), + 'targetcache' => __('Target cache'), + 'correction' => __('No correction'), + 'enablejavascript' => __('Enable JavaScript'), + 'starttime' => __('Start time'), + 'endtime' => __('End time'), + 'href' => __('href'), + 'qtsrcchokespeed' => __('Choke speed'), + 'target' => __('Target'), + 'volume' => __('Volume'), + 'autostart' => __('Auto start'), + 'enabled' => __('Enabled'), + 'fullscreen' => __('Fullscreen'), + 'invokeurls' => __('Invoke URLs'), + 'mute' => __('Mute'), + 'stretchtofit' => __('Stretch to fit'), + 'windowlessvideo' => __('Windowless video'), + 'balance' => __('Balance'), + 'baseurl' => __('Base URL'), + 'captioningid' => __('Captioning id'), + 'currentmarker' => __('Current marker'), + 'currentposition' => __('Current position'), + 'defaultframe' => __('Default frame'), + 'playcount' => __('Play count'), + 'rate' => __('Rate'), + 'uimode' => __('UI Mode'), + 'flash_options' => __('Flash options'), + 'qt_options' => __('Quicktime options'), + 'wmp_options' => __('Windows media player options'), + 'rmp_options' => __('Real media player options'), + 'shockwave_options' => __('Shockwave options'), + 'autogotourl' => __('Auto goto URL'), + 'center' => __('Center'), + 'imagestatus' => __('Image status'), + 'maintainaspect' => __('Maintain aspect'), + 'nojava' => __('No java'), + 'prefetch' => __('Prefetch'), + 'shuffle' => __('Shuffle'), + 'console' => __('Console'), + 'numloop' => __('Num loops'), + 'controls' => __('Controls'), + 'scriptcallbacks' => __('Script callbacks'), + 'swstretchstyle' => __('Stretch style'), + 'swstretchhalign' => __('Stretch H-Align'), + 'swstretchvalign' => __('Stretch V-Align'), + 'sound' => __('Sound'), + 'progress' => __('Progress'), + 'qtsrc' => __('QT Src'), + 'qt_stream_warn' => __('Streamed rtsp resources should be added to the QT Src field under the advanced tab.'), + 'align_top' => __('Top'), + 'align_right' => __('Right'), + 'align_bottom' => __('Bottom'), + 'align_left' => __('Left'), + 'align_center' => __('Center'), + 'align_top_left' => __('Top left'), + 'align_top_right' => __('Top right'), + 'align_bottom_left' => __('Bottom left'), + 'align_bottom_right' => __('Bottom right'), + 'flv_options' => __('Flash video options'), + 'flv_scalemode' => __('Scale mode'), + 'flv_buffer' => __('Buffer'), + 'flv_startimage' => __('Start image'), + 'flv_starttime' => __('Start time'), + 'flv_defaultvolume' => __('Default volume'), + 'flv_hiddengui' => __('Hidden GUI'), + 'flv_autostart' => __('Auto start'), + 'flv_loop' => __('Loop'), + 'flv_showscalemodes' => __('Show scale modes'), + 'flv_smoothvideo' => __('Smooth video'), + 'flv_jscallback' => __('JS Callback'), + 'html5_video_options' => __('HTML5 Video Options'), + 'altsource1' => __('Alternative source 1'), + 'altsource2' => __('Alternative source 2'), + 'preload' => __('Preload'), + 'poster' => __('Poster'), + 'source' => __('Source') + ); + + $wordpress = array( + 'wp_adv_desc' => __('Show/Hide Kitchen Sink (Alt + Shift + Z)'), + 'wp_more_desc' => __('Insert More Tag (Alt + Shift + T)'), + 'wp_page_desc' => __('Insert Page break (Alt + Shift + P)'), + 'wp_help_desc' => __('Help (Alt + Shift + H)'), + 'wp_more_alt' => __('More...'), + 'wp_page_alt' => __('Next page...'), + 'add_media' => __('Add Media'), + 'add_image' => __('Add an Image'), + 'add_video' => __('Add Video'), + 'add_audio' => __('Add Audio'), + 'editgallery' => __('Edit Gallery'), + 'delgallery' => __('Delete Gallery') + ); + + $wpeditimage = array( + 'edit_img' => __('Edit Image'), + 'del_img' => __('Delete Image'), + 'adv_settings' => __('Advanced Settings'), + 'none' => __('None'), + 'size' => __('Size'), + 'thumbnail' => __('Thumbnail'), + 'medium' => __('Medium'), + 'full_size' => __('Full Size'), + 'current_link' => __('Current Link'), + 'link_to_img' => __('Link to Image'), + 'link_help' => __('Enter a link URL or click above for presets.'), + 'adv_img_settings' => __('Advanced Image Settings'), + 'source' => __('Source'), + 'width' => __('Width'), + 'height' => __('Height'), + 'orig_size' => __('Original Size'), + 'css' => __('CSS Class'), + 'adv_link_settings' => __('Advanced Link Settings'), + 'link_rel' => __('Link Rel'), + 'height' => __('Height'), + 'orig_size' => __('Original Size'), + 'css' => __('CSS Class'), + 's60' => __('60%'), + 's70' => __('70%'), + 's80' => __('80%'), + 's90' => __('90%'), + 's100' => __('100%'), + 's110' => __('110%'), + 's120' => __('120%'), + 's130' => __('130%'), + 'img_title' => __('Title'), + 'caption' => __('Caption'), + 'alt' => __('Alternate Text') + ); + + $locale = _WP_Editors::$mce_locale; + + $translated = 'tinyMCE.addI18n({' . $locale . ':' . json_encode( $default ) . "});\n"; + $translated .= 'tinyMCE.addI18n("' . $locale . '.advanced", ' . json_encode( $advanced ) . ");\n"; + $translated .= 'tinyMCE.addI18n("' . $locale . '.advanced_dlg", ' . json_encode( $advanced_dlg ) . ");\n"; + $translated .= 'tinyMCE.addI18n("' . $locale . '.media_dlg", ' . json_encode( $media_dlg ) . ");\n"; + $translated .= 'tinyMCE.addI18n("' . $locale . '.wordpress", ' . json_encode( $wordpress ) . ");\n"; + $translated .= 'tinyMCE.addI18n("' . $locale . '.wpeditimage", ' . json_encode( $wpeditimage ) . ');'; + + return $translated; } -}}); - -tinyMCE.addI18n("' . _WP_Editors::$mce_locale . '.advanced",{ -style_select:"' . mce_escape( /* translators: TinyMCE font styles */ _x('Styles', 'TinyMCE font styles') ) . '", -font_size:"' . mce_escape( __('Font size') ) . '", -fontdefault:"' . mce_escape( __('Font family') ) . '", -block:"' . mce_escape( __('Format') ) . '", -paragraph:"' . mce_escape( __('Paragraph') ) . '", -div:"' . mce_escape( __('Div') ) . '", -address:"' . mce_escape( __('Address') ) . '", -pre:"' . mce_escape( __('Preformatted') ) . '", -h1:"' . mce_escape( __('Heading 1') ) . '", -h2:"' . mce_escape( __('Heading 2') ) . '", -h3:"' . mce_escape( __('Heading 3') ) . '", -h4:"' . mce_escape( __('Heading 4') ) . '", -h5:"' . mce_escape( __('Heading 5') ) . '", -h6:"' . mce_escape( __('Heading 6') ) . '", -blockquote:"' . mce_escape( __('Blockquote') ) . '", -code:"' . mce_escape( __('Code') ) . '", -samp:"' . mce_escape( __('Code sample') ) . '", -dt:"' . mce_escape( __('Definition term ') ) . '", -dd:"' . mce_escape( __('Definition description') ) . '", -bold_desc:"' . mce_escape( __('Bold (Ctrl + B)') ) . '", -italic_desc:"' . mce_escape( __('Italic (Ctrl + I)') ) . '", -underline_desc:"' . mce_escape( __('Underline') ) . '", -striketrough_desc:"' . mce_escape( __('Strikethrough (Alt + Shift + D)') ) . '", -justifyleft_desc:"' . mce_escape( __('Align Left (Alt + Shift + L)') ) . '", -justifycenter_desc:"' . mce_escape( __('Align Center (Alt + Shift + C)') ) . '", -justifyright_desc:"' . mce_escape( __('Align Right (Alt + Shift + R)') ) . '", -justifyfull_desc:"' . mce_escape( __('Align Full (Alt + Shift + J)') ) . '", -bullist_desc:"' . mce_escape( __('Unordered list (Alt + Shift + U)') ) . '", -numlist_desc:"' . mce_escape( __('Ordered list (Alt + Shift + O)') ) . '", -outdent_desc:"' . mce_escape( __('Outdent') ) . '", -indent_desc:"' . mce_escape( __('Indent') ) . '", -undo_desc:"' . mce_escape( __('Undo (Ctrl + Z)') ) . '", -redo_desc:"' . mce_escape( __('Redo (Ctrl + Y)') ) . '", -link_desc:"' . mce_escape( __('Insert/edit link (Alt + Shift + A)') ) . '", -unlink_desc:"' . mce_escape( __('Unlink (Alt + Shift + S)') ) . '", -image_desc:"' . mce_escape( __('Insert/edit image (Alt + Shift + M)') ) . '", -cleanup_desc:"' . mce_escape( __('Cleanup messy code') ) . '", -code_desc:"' . mce_escape( __('Edit HTML Source') ) . '", -sub_desc:"' . mce_escape( __('Subscript') ) . '", -sup_desc:"' . mce_escape( __('Superscript') ) . '", -hr_desc:"' . mce_escape( __('Insert horizontal ruler') ) . '", -removeformat_desc:"' . mce_escape( __('Remove formatting') ) . '", -forecolor_desc:"' . mce_escape( __('Select text color') ) . '", -backcolor_desc:"' . mce_escape( __('Select background color') ) . '", -charmap_desc:"' . mce_escape( __('Insert custom character') ) . '", -visualaid_desc:"' . mce_escape( __('Toggle guidelines/invisible elements') ) . '", -anchor_desc:"' . mce_escape( __('Insert/edit anchor') ) . '", -cut_desc:"' . mce_escape( __('Cut') ) . '", -copy_desc:"' . mce_escape( __('Copy') ) . '", -paste_desc:"' . mce_escape( __('Paste') ) . '", -image_props_desc:"' . mce_escape( __('Image properties') ) . '", -newdocument_desc:"' . mce_escape( __('New document') ) . '", -help_desc:"' . mce_escape( __('Help') ) . '", -blockquote_desc:"' . mce_escape( __('Blockquote (Alt + Shift + Q)') ) . '", -clipboard_msg:"' . mce_escape( __('Copy/Cut/Paste is not available in Mozilla and Firefox.') ) . '", -path:"' . mce_escape( __('Path') ) . '", -newdocument:"' . mce_escape( __('Are you sure you want to clear all contents?') ) . '", -toolbar_focus:"' . mce_escape( __('Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X') ) . '", -more_colors:"' . mce_escape( __('More colors') ) . '", -shortcuts_desc:"' . mce_escape( __('Accessibility Help') ) . '", -help_shortcut:" ' . mce_escape( __('Press ALT F10 for toolbar. Press ALT 0 for help.') ) . '", -rich_text_area:"' . mce_escape( __('Rich Text Area') ) . '", -toolbar:"' . mce_escape( __('Toolbar') ) . '" -}); - -tinyMCE.addI18n("' . _WP_Editors::$mce_locale . '.advanced_dlg",{ -about_title:"' . mce_escape( __('About TinyMCE') ) . '", -about_general:"' . mce_escape( __('About') ) . '", -about_help:"' . mce_escape( __('Help') ) . '", -about_license:"' . mce_escape( __('License') ) . '", -about_plugins:"' . mce_escape( __('Plugins') ) . '", -about_plugin:"' . mce_escape( __('Plugin') ) . '", -about_author:"' . mce_escape( __('Author') ) . '", -about_version:"' . mce_escape( __('Version') ) . '", -about_loaded:"' . mce_escape( __('Loaded plugins') ) . '", -anchor_title:"' . mce_escape( __('Insert/edit anchor') ) . '", -anchor_name:"' . mce_escape( __('Anchor name') ) . '", -code_title:"' . mce_escape( __('HTML Source Editor') ) . '", -code_wordwrap:"' . mce_escape( __('Word wrap') ) . '", -colorpicker_title:"' . mce_escape( __('Select a color') ) . '", -colorpicker_picker_tab:"' . mce_escape( __('Picker') ) . '", -colorpicker_picker_title:"' . mce_escape( __('Color picker') ) . '", -colorpicker_palette_tab:"' . mce_escape( __('Palette') ) . '", -colorpicker_palette_title:"' . mce_escape( __('Palette colors') ) . '", -colorpicker_named_tab:"' . mce_escape( __('Named') ) . '", -colorpicker_named_title:"' . mce_escape( __('Named colors') ) . '", -colorpicker_color:"' . mce_escape( __('Color:') ) . '", -colorpicker_name:"' . mce_escape( _x('Name:', 'html attribute') ) . '", -charmap_title:"' . mce_escape( __('Select custom character') ) . '", -image_title:"' . mce_escape( __('Insert/edit image') ) . '", -image_src:"' . mce_escape( __('Image URL') ) . '", -image_alt:"' . mce_escape( __('Image description') ) . '", -image_list:"' . mce_escape( __('Image list') ) . '", -image_border:"' . mce_escape( __('Border') ) . '", -image_dimensions:"' . mce_escape( __('Dimensions') ) . '", -image_vspace:"' . mce_escape( __('Vertical space') ) . '", -image_hspace:"' . mce_escape( __('Horizontal space') ) . '", -image_align:"' . mce_escape( __('Alignment') ) . '", -image_align_baseline:"' . mce_escape( __('Baseline') ) . '", -image_align_top:"' . mce_escape( __('Top') ) . '", -image_align_middle:"' . mce_escape( __('Middle') ) . '", -image_align_bottom:"' . mce_escape( __('Bottom') ) . '", -image_align_texttop:"' . mce_escape( __('Text top') ) . '", -image_align_textbottom:"' . mce_escape( __('Text bottom') ) . '", -image_align_left:"' . mce_escape( __('Left') ) . '", -image_align_right:"' . mce_escape( __('Right') ) . '", -link_title:"' . mce_escape( __('Insert/edit link') ) . '", -link_url:"' . mce_escape( __('Link URL') ) . '", -link_target:"' . mce_escape( __('Target') ) . '", -link_target_same:"' . mce_escape( __('Open link in the same window') ) . '", -link_target_blank:"' . mce_escape( __('Open link in a new window') ) . '", -link_titlefield:"' . mce_escape( __('Title') ) . '", -link_is_email:"' . mce_escape( __('The URL you entered seems to be an email address, do you want to add the required mailto: prefix?') ) . '", -link_is_external:"' . mce_escape( __('The URL you entered seems to external link, do you want to add the required http:// prefix?') ) . '", -link_list:"' . mce_escape( __('Link list') ) . '", -accessibility_help:"' . mce_escape( __('Accessibility Help') ) . '", -accessibility_usage_title:"' . mce_escape( __('General Usage') ) . '" -}); - -tinyMCE.addI18n("' . _WP_Editors::$mce_locale . '.media_dlg",{ -title:"' . mce_escape( __('Insert / edit embedded media') ) . '", -general:"' . mce_escape( __('General') ) . '", -advanced:"' . mce_escape( __('Advanced') ) . '", -file:"' . mce_escape( __('File/URL') ) . '", -list:"' . mce_escape( __('List') ) . '", -size:"' . mce_escape( __('Dimensions') ) . '", -preview:"' . mce_escape( __('Preview') ) . '", -constrain_proportions:"' . mce_escape( __('Constrain proportions') ) . '", -type:"' . mce_escape( __('Type') ) . '", -id:"' . mce_escape( __('Id') ) . '", -name:"' . mce_escape( _x('Name', 'html attribute') ) . '", -class_name:"' . mce_escape( __('Class') ) . '", -vspace:"' . mce_escape( __('V-Space') ) . '", -hspace:"' . mce_escape( __('H-Space') ) . '", -play:"' . mce_escape( __('Auto play') ) . '", -loop:"' . mce_escape( __('Loop') ) . '", -menu:"' . mce_escape( __('Show menu') ) . '", -quality:"' . mce_escape( __('Quality') ) . '", -scale:"' . mce_escape( __('Scale') ) . '", -align:"' . mce_escape( __('Align') ) . '", -salign:"' . mce_escape( __('SAlign') ) . '", -wmode:"' . mce_escape( __('WMode') ) . '", -bgcolor:"' . mce_escape( __('Background') ) . '", -base:"' . mce_escape( __('Base') ) . '", -flashvars:"' . mce_escape( __('Flashvars') ) . '", -liveconnect:"' . mce_escape( __('SWLiveConnect') ) . '", -autohref:"' . mce_escape( __('AutoHREF') ) . '", -cache:"' . mce_escape( __('Cache') ) . '", -hidden:"' . mce_escape( __('Hidden') ) . '", -controller:"' . mce_escape( __('Controller') ) . '", -kioskmode:"' . mce_escape( __('Kiosk mode') ) . '", -playeveryframe:"' . mce_escape( __('Play every frame') ) . '", -targetcache:"' . mce_escape( __('Target cache') ) . '", -correction:"' . mce_escape( __('No correction') ) . '", -enablejavascript:"' . mce_escape( __('Enable JavaScript') ) . '", -starttime:"' . mce_escape( __('Start time') ) . '", -endtime:"' . mce_escape( __('End time') ) . '", -href:"' . mce_escape( __('href') ) . '", -qtsrcchokespeed:"' . mce_escape( __('Choke speed') ) . '", -target:"' . mce_escape( __('Target') ) . '", -volume:"' . mce_escape( __('Volume') ) . '", -autostart:"' . mce_escape( __('Auto start') ) . '", -enabled:"' . mce_escape( __('Enabled') ) . '", -fullscreen:"' . mce_escape( __('Fullscreen') ) . '", -invokeurls:"' . mce_escape( __('Invoke URLs') ) . '", -mute:"' . mce_escape( __('Mute') ) . '", -stretchtofit:"' . mce_escape( __('Stretch to fit') ) . '", -windowlessvideo:"' . mce_escape( __('Windowless video') ) . '", -balance:"' . mce_escape( __('Balance') ) . '", -baseurl:"' . mce_escape( __('Base URL') ) . '", -captioningid:"' . mce_escape( __('Captioning id') ) . '", -currentmarker:"' . mce_escape( __('Current marker') ) . '", -currentposition:"' . mce_escape( __('Current position') ) . '", -defaultframe:"' . mce_escape( __('Default frame') ) . '", -playcount:"' . mce_escape( __('Play count') ) . '", -rate:"' . mce_escape( __('Rate') ) . '", -uimode:"' . mce_escape( __('UI Mode') ) . '", -flash_options:"' . mce_escape( __('Flash options') ) . '", -qt_options:"' . mce_escape( __('Quicktime options') ) . '", -wmp_options:"' . mce_escape( __('Windows media player options') ) . '", -rmp_options:"' . mce_escape( __('Real media player options') ) . '", -shockwave_options:"' . mce_escape( __('Shockwave options') ) . '", -autogotourl:"' . mce_escape( __('Auto goto URL') ) . '", -center:"' . mce_escape( __('Center') ) . '", -imagestatus:"' . mce_escape( __('Image status') ) . '", -maintainaspect:"' . mce_escape( __('Maintain aspect') ) . '", -nojava:"' . mce_escape( __('No java') ) . '", -prefetch:"' . mce_escape( __('Prefetch') ) . '", -shuffle:"' . mce_escape( __('Shuffle') ) . '", -console:"' . mce_escape( __('Console') ) . '", -numloop:"' . mce_escape( __('Num loops') ) . '", -controls:"' . mce_escape( __('Controls') ) . '", -scriptcallbacks:"' . mce_escape( __('Script callbacks') ) . '", -swstretchstyle:"' . mce_escape( __('Stretch style') ) . '", -swstretchhalign:"' . mce_escape( __('Stretch H-Align') ) . '", -swstretchvalign:"' . mce_escape( __('Stretch V-Align') ) . '", -sound:"' . mce_escape( __('Sound') ) . '", -progress:"' . mce_escape( __('Progress') ) . '", -qtsrc:"' . mce_escape( __('QT Src') ) . '", -qt_stream_warn:"' . mce_escape( __('Streamed rtsp resources should be added to the QT Src field under the advanced tab.') ) . '", -align_top:"' . mce_escape( __('Top') ) . '", -align_right:"' . mce_escape( __('Right') ) . '", -align_bottom:"' . mce_escape( __('Bottom') ) . '", -align_left:"' . mce_escape( __('Left') ) . '", -align_center:"' . mce_escape( __('Center') ) . '", -align_top_left:"' . mce_escape( __('Top left') ) . '", -align_top_right:"' . mce_escape( __('Top right') ) . '", -align_bottom_left:"' . mce_escape( __('Bottom left') ) . '", -align_bottom_right:"' . mce_escape( __('Bottom right') ) . '", -flv_options:"' . mce_escape( __('Flash video options') ) . '", -flv_scalemode:"' . mce_escape( __('Scale mode') ) . '", -flv_buffer:"' . mce_escape( __('Buffer') ) . '", -flv_startimage:"' . mce_escape( __('Start image') ) . '", -flv_starttime:"' . mce_escape( __('Start time') ) . '", -flv_defaultvolume:"' . mce_escape( __('Default volume') ) . '", -flv_hiddengui:"' . mce_escape( __('Hidden GUI') ) . '", -flv_autostart:"' . mce_escape( __('Auto start') ) . '", -flv_loop:"' . mce_escape( __('Loop') ) . '", -flv_showscalemodes:"' . mce_escape( __('Show scale modes') ) . '", -flv_smoothvideo:"' . mce_escape( __('Smooth video') ) . '", -flv_jscallback:"' . mce_escape( __('JS Callback') ) . '", -html5_video_options:"' . mce_escape( __('HTML5 Video Options') ) . '", -altsource1:"' . mce_escape( __('Alternative source 1') ) . '", -altsource2:"' . mce_escape( __('Alternative source 2') ) . '", -preload:"' . mce_escape( __('Preload') ) . '", -poster:"' . mce_escape( __('Poster') ) . '", -source:"' . mce_escape( __('Source') ) . '" -}); - -tinyMCE.addI18n("' . _WP_Editors::$mce_locale . '.wordpress",{ -wp_adv_desc:"' . mce_escape( __('Show/Hide Kitchen Sink (Alt + Shift + Z)') ) . '", -wp_more_desc:"' . mce_escape( __('Insert More Tag (Alt + Shift + T)') ) . '", -wp_page_desc:"' . mce_escape( __('Insert Page break (Alt + Shift + P)') ) . '", -wp_help_desc:"' . mce_escape( __('Help (Alt + Shift + H)') ) . '", -wp_more_alt:"' . mce_escape( __('More...') ) . '", -wp_page_alt:"' . mce_escape( __('Next page...') ) . '", -add_media:"' . mce_escape( __('Add Media') ) . '", -add_image:"' . mce_escape( __('Add an Image') ) . '", -add_video:"' . mce_escape( __('Add Video') ) . '", -add_audio:"' . mce_escape( __('Add Audio') ) . '", -editgallery:"' . mce_escape( __('Edit Gallery') ) . '", -delgallery:"' . mce_escape( __('Delete Gallery') ) . '" -}); - -tinyMCE.addI18n("' . _WP_Editors::$mce_locale . '.wpeditimage",{ -edit_img:"' . mce_escape( __('Edit Image') ) . '", -del_img:"' . mce_escape( __('Delete Image') ) . '", -adv_settings:"' . mce_escape( __('Advanced Settings') ) . '", -none:"' . mce_escape( __('None') ) . '", -size:"' . mce_escape( __('Size') ) . '", -thumbnail:"' . mce_escape( __('Thumbnail') ) . '", -medium:"' . mce_escape( __('Medium') ) . '", -full_size:"' . mce_escape( __('Full Size') ) . '", -current_link:"' . mce_escape( __('Current Link') ) . '", -link_to_img:"' . mce_escape( __('Link to Image') ) . '", -link_help:"' . mce_escape( __('Enter a link URL or click above for presets.') ) . '", -adv_img_settings:"' . mce_escape( __('Advanced Image Settings') ) . '", -source:"' . mce_escape( __('Source') ) . '", -width:"' . mce_escape( __('Width') ) . '", -height:"' . mce_escape( __('Height') ) . '", -orig_size:"' . mce_escape( __('Original Size') ) . '", -css:"' . mce_escape( __('CSS Class') ) . '", -adv_link_settings:"' . mce_escape( __('Advanced Link Settings') ) . '", -link_rel:"' . mce_escape( __('Link Rel') ) . '", -height:"' . mce_escape( __('Height') ) . '", -orig_size:"' . mce_escape( __('Original Size') ) . '", -css:"' . mce_escape( __('CSS Class') ) . '", -s60:"' . mce_escape( __('60%') ) . '", -s70:"' . mce_escape( __('70%') ) . '", -s80:"' . mce_escape( __('80%') ) . '", -s90:"' . mce_escape( __('90%') ) . '", -s100:"' . mce_escape( __('100%') ) . '", -s110:"' . mce_escape( __('110%') ) . '", -s120:"' . mce_escape( __('120%') ) . '", -s130:"' . mce_escape( __('130%') ) . '", -img_title:"' . mce_escape( __('Title') ) . '", -caption:"' . mce_escape( __('Caption') ) . '", -alt:"' . mce_escape( __('Alternate Text') ) . '" -}); -'; + +$lang = wp_mce_translation(); + diff --git a/wp-includes/js/tinymce/mark_loaded_src.js b/wp-includes/js/tinymce/mark_loaded_src.js new file mode 100644 index 000000000..2b5319267 --- /dev/null +++ b/wp-includes/js/tinymce/mark_loaded_src.js @@ -0,0 +1,20 @@ +(function(){ + if ( typeof tinyMCEPreInit === 'undefined' ) + return; + + var t = tinyMCEPreInit, baseurl = t.base, markDone = tinymce.ScriptLoader.markDone, lang = t.ref.language, + theme = t.ref.theme, plugins = t.ref.plugins, suffix = t.suffix; + + markDone( baseurl+'/langs/'+lang+'.js' ); + markDone( baseurl+'/themes/'+theme+'/editor_template'+suffix+'.js' ); + markDone( baseurl+'/themes/'+theme+'/langs/'+lang+'.js' ); + markDone( baseurl+'/themes/'+theme+'/langs/'+lang+'_dlg.js' ); + + tinymce.each( plugins.split(','), function(plugin){ + if ( plugin && plugin.charAt(0) != '-' ) { + markDone( baseurl+'/plugins/'+plugin+'/editor_plugin'+suffix+'.js' ); + markDone( baseurl+'/plugins/'+plugin+'/langs/'+lang+'.js' ); + markDone( baseurl+'/plugins/'+plugin+'/langs/'+lang+'_dlg.js' ) + } + }); +})(); diff --git a/wp-includes/js/tinymce/plugins/directionality/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/directionality/editor_plugin_src.js new file mode 100644 index 000000000..205d02cd2 --- /dev/null +++ b/wp-includes/js/tinymce/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/wp-includes/js/tinymce/plugins/fullscreen/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/fullscreen/editor_plugin_src.js new file mode 100644 index 000000000..42af070ae --- /dev/null +++ b/wp-includes/js/tinymce/plugins/fullscreen/editor_plugin_src.js @@ -0,0 +1,159 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.FullScreenPlugin', { + init : function(ed, url) { + var t = this, s = {}, vp, posCss; + + t.editor = ed; + + // Register commands + ed.addCommand('mceFullScreen', function() { + var win, de = DOM.doc.documentElement; + + if (ed.getParam('fullscreen_is_enabled')) { + if (ed.getParam('fullscreen_new_window')) + closeFullscreen(); // Call to close in new window + else { + DOM.win.setTimeout(function() { + tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc); + tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent()); + tinyMCE.remove(ed); + DOM.remove('mce_fullscreen_container'); + de.style.overflow = ed.getParam('fullscreen_html_overflow'); + DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow')); + DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly')); + tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings + }, 10); + } + + return; + } + + if (ed.getParam('fullscreen_new_window')) { + win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight); + try { + win.resizeTo(screen.availWidth, screen.availHeight); + } catch (e) { + // Ignore + } + } else { + tinyMCE.oldSettings = tinyMCE.settings; // Store old settings + s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto'; + s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1); + vp = DOM.getViewPort(); + s.fullscreen_scrollx = vp.x; + s.fullscreen_scrolly = vp.y; + + // Fixes an Opera bug where the scrollbars doesn't reappear + if (tinymce.isOpera && s.fullscreen_overflow == 'visible') + s.fullscreen_overflow = 'auto'; + + // Fixes an IE bug where horizontal scrollbars would appear + if (tinymce.isIE && s.fullscreen_overflow == 'scroll') + s.fullscreen_overflow = 'auto'; + + // Fixes an IE bug where the scrollbars doesn't reappear + if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll')) + s.fullscreen_html_overflow = 'auto'; + + if (s.fullscreen_overflow == '0px') + s.fullscreen_overflow = ''; + + DOM.setStyle(DOM.doc.body, 'overflow', 'hidden'); + de.style.overflow = 'hidden'; //Fix for IE6/7 + vp = DOM.getViewPort(); + DOM.win.scrollTo(0, 0); + + if (tinymce.isIE) + vp.h -= 1; + + // Use fixed position if it exists + if (tinymce.isIE6) + posCss = 'absolute;top:' + vp.y; + else + posCss = 'fixed;top:0'; + + n = DOM.add(DOM.doc.body, 'div', { + id : 'mce_fullscreen_container', + style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'}); + DOM.add(n, 'div', {id : 'mce_fullscreen'}); + + tinymce.each(ed.settings, function(v, n) { + s[n] = v; + }); + + s.id = 'mce_fullscreen'; + s.width = n.clientWidth; + s.height = n.clientHeight - 15; + s.fullscreen_is_enabled = true; + s.fullscreen_editor_id = ed.id; + s.theme_advanced_resizing = false; + s.save_onsavecallback = function() { + ed.setContent(tinyMCE.get(s.id).getContent()); + ed.execCommand('mceSave'); + }; + + tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) { + s[k] = v; + }); + + if (s.theme_advanced_toolbar_location === 'external') + s.theme_advanced_toolbar_location = 'top'; + + t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s); + t.fullscreenEditor.onInit.add(function() { + t.fullscreenEditor.setContent(ed.getContent()); + t.fullscreenEditor.focus(); + }); + + t.fullscreenEditor.render(); + + t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container'); + t.fullscreenElement.update(); + //document.body.overflow = 'hidden'; + + t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() { + var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize; + + // Get outer/inner size to get a delta size that can be used to calc the new iframe size + outerSize = fed.dom.getSize(fed.getContainer().firstChild); + innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]); + + fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h); + }); + } + }); + + // Register buttons + ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'}); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled')); + }); + }, + + getInfo : function() { + return { + longname : 'Fullscreen', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin); +})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/fullscreen/fullscreen.htm b/wp-includes/js/tinymce/plugins/fullscreen/fullscreen.htm index fe49d3b6a..48744fab7 100644 --- a/wp-includes/js/tinymce/plugins/fullscreen/fullscreen.htm +++ b/wp-includes/js/tinymce/plugins/fullscreen/fullscreen.htm @@ -3,7 +3,7 @@ <head> <title></title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - <script type="text/javascript" src="../../tiny_mce.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce.js?ver=349-20120314"></script> <script type="text/javascript"> function patchCallback(settings, key) { if (settings[key]) diff --git a/wp-includes/js/tinymce/plugins/inlinepopups/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/inlinepopups/editor_plugin_src.js new file mode 100644 index 000000000..2a6f3ad29 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/inlinepopups/editor_plugin_src.js @@ -0,0 +1,699 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is; + + tinymce.create('tinymce.plugins.InlinePopups', { + init : function(ed, url) { + // Replace window manager + ed.onBeforeRenderUI.add(function() { + ed.windowManager = new tinymce.InlineWindowManager(ed); + DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css"); + }); + }, + + getInfo : function() { + return { + longname : 'InlinePopups', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', { + InlineWindowManager : function(ed) { + var t = this; + + t.parent(ed); + t.zIndex = 300000; + t.count = 0; + t.windows = {}; + }, + + open : function(f, p) { + var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow; + + f = f || {}; + p = p || {}; + + // Run native windows + if (!f.inline) + return t.parent(f, p); + + parentWindow = t._frontWindow(); + if (parentWindow && DOM.get(parentWindow.id + '_ifr')) { + parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement; + } + + // Only store selection if the type is a normal window + if (!f.type) + t.bookmark = ed.selection.getBookmark(1); + + id = DOM.uniqueId(); + vp = DOM.getViewPort(); + f.width = parseInt(f.width || 320); + f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0); + f.min_width = parseInt(f.min_width || 150); + f.min_height = parseInt(f.min_height || 100); + f.max_width = parseInt(f.max_width || 2000); + f.max_height = parseInt(f.max_height || 2000); + f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0))); + f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0))); + f.movable = f.resizable = true; + p.mce_width = f.width; + p.mce_height = f.height; + p.mce_inline = true; + p.mce_window_id = id; + p.mce_auto_focus = f.auto_focus; + + // Transpose +// po = DOM.getPos(ed.getContainer()); +// f.left -= po.x; +// f.top -= po.y; + + t.features = f; + t.params = p; + t.onOpen.dispatch(t, f, p); + + if (f.type) { + opt += ' mceModal'; + + if (f.type) + opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1); + + f.resizable = false; + } + + if (f.statusbar) + opt += ' mceStatusbar'; + + if (f.resizable) + opt += ' mceResizable'; + + if (f.minimizable) + opt += ' mceMinimizable'; + + if (f.maximizable) + opt += ' mceMaximizable'; + + if (f.movable) + opt += ' mceMovable'; + + // Create DOM objects + t._addAll(DOM.doc.body, + ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, + ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt}, + ['div', {id : id + '_top', 'class' : 'mceTop'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_title'}, f.title || ''] + ], + + ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, + ['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}], + ['span', {id : id + '_content'}], + ['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}] + ], + + ['div', {id : id + '_bottom', 'class' : 'mceBottom'}, + ['div', {'class' : 'mceLeft'}], + ['div', {'class' : 'mceCenter'}], + ['div', {'class' : 'mceRight'}], + ['span', {id : id + '_status'}, 'Content'] + ], + + ['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}], + ['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], + ['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}], + ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}] + ] + ] + ); + + DOM.setStyles(id, {top : -10000, left : -10000}); + + // Fix gecko rendering bug, where the editors iframe messed with window contents + if (tinymce.isGecko) + DOM.setStyle(id, 'overflow', 'auto'); + + // Measure borders + if (!f.type) { + dw += DOM.get(id + '_left').clientWidth; + dw += DOM.get(id + '_right').clientWidth; + dh += DOM.get(id + '_top').clientHeight; + dh += DOM.get(id + '_bottom').clientHeight; + } + + // Resize window + DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh}); + + u = f.url || f.file; + if (u) { + if (tinymce.relaxedDomain) + u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain; + + u = tinymce._addVer(u); + } + + if (!f.type) { + DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'}); + DOM.setStyles(id + '_ifr', {width : f.width, height : f.height}); + DOM.setAttrib(id + '_ifr', 'src', u); + } else { + DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok'); + + if (f.type == 'confirm') + DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel'); + + DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'}); + DOM.setHTML(id + '_content', f.content.replace('\n', '<br />')); + + Event.add(id, 'keyup', function(evt) { + var VK_ESCAPE = 27; + if (evt.keyCode === VK_ESCAPE) { + f.button_func(false); + return Event.cancel(evt); + } + }); + + Event.add(id, 'keydown', function(evt) { + var cancelButton, VK_TAB = 9; + if (evt.keyCode === VK_TAB) { + cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0]; + if (cancelButton && cancelButton !== evt.target) { + cancelButton.focus(); + } else { + DOM.get(id + '_ok').focus(); + } + return Event.cancel(evt); + } + }); + } + + // Register events + mdf = Event.add(id, 'mousedown', function(e) { + var n = e.target, w, vp; + + w = t.windows[id]; + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + if (n.className == 'mceClose') { + t.close(null, id); + return Event.cancel(e); + } else if (n.className == 'mceMax') { + w.oldPos = w.element.getXY(); + w.oldSize = w.element.getSize(); + + vp = DOM.getViewPort(); + + // Reduce viewport size to avoid scrollbars + vp.w -= 2; + vp.h -= 2; + + w.element.moveTo(vp.x, vp.y); + w.element.resizeTo(vp.w, vp.h); + DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight}); + DOM.addClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMed') { + // Reset to old size + w.element.moveTo(w.oldPos.x, w.oldPos.y); + w.element.resizeTo(w.oldSize.w, w.oldSize.h); + w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight); + + DOM.removeClass(id + '_wrapper', 'mceMaximized'); + } else if (n.className == 'mceMove') + return t._startDrag(id, e, n.className); + else if (DOM.hasClass(n, 'mceResize')) + return t._startDrag(id, e, n.className.substring(13)); + } + }); + + clf = Event.add(id, 'click', function(e) { + var n = e.target; + + t.focus(id); + + if (n.nodeName == 'A' || n.nodeName == 'a') { + switch (n.className) { + case 'mceClose': + t.close(null, id); + return Event.cancel(e); + + case 'mceButton mceOk': + case 'mceButton mceCancel': + f.button_func(n.className == 'mceButton mceOk'); + return Event.cancel(e); + } + } + }); + + // Make sure the tab order loops within the dialog. + Event.add([id + '_left', id + '_right'], 'focus', function(evt) { + var iframe = DOM.get(id + '_ifr'); + if (iframe) { + var body = iframe.contentWindow.document.body; + var focusable = DOM.select(':input:enabled,*[tabindex=0]', body); + if (evt.target.id === (id + '_left')) { + focusable[focusable.length - 1].focus(); + } else { + focusable[0].focus(); + } + } else { + DOM.get(id + '_ok').focus(); + } + }); + + // Add window + w = t.windows[id] = { + id : id, + mousedown_func : mdf, + click_func : clf, + element : new Element(id, {blocker : 1, container : ed.getContainer()}), + iframeElement : new Element(id + '_ifr'), + features : f, + deltaWidth : dw, + deltaHeight : dh + }; + + w.iframeElement.on('focus', function() { + t.focus(id); + }); + + // Setup blocker + if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') { + DOM.add(DOM.doc.body, 'div', { + id : 'mceModalBlocker', + 'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker', + style : {zIndex : t.zIndex - 1} + }); + + DOM.show('mceModalBlocker'); // Reduces flicker in IE + DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true'); + } else + DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1); + + if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel)) + DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2}); + + DOM.setAttrib(id, 'aria-hidden', 'false'); + t.focus(id); + t._fixIELayout(id, 1); + + // Focus ok button + if (DOM.get(id + '_ok')) + DOM.get(id + '_ok').focus(); + t.count++; + + return w; + }, + + focus : function(id) { + var t = this, w; + + if (w = t.windows[id]) { + w.zIndex = this.zIndex++; + w.element.setStyle('zIndex', w.zIndex); + w.element.update(); + + id = id + '_wrapper'; + DOM.removeClass(t.lastId, 'mceFocus'); + DOM.addClass(id, 'mceFocus'); + t.lastId = id; + + if (w.focussedElement) { + w.focussedElement.focus(); + } else if (DOM.get(id + '_ok')) { + DOM.get(w.id + '_ok').focus(); + } else if (DOM.get(w.id + '_ifr')) { + DOM.get(w.id + '_ifr').focus(); + } + } + }, + + _addAll : function(te, ne) { + var i, n, t = this, dom = tinymce.DOM; + + if (is(ne, 'string')) + te.appendChild(dom.doc.createTextNode(ne)); + else if (ne.length) { + te = te.appendChild(dom.create(ne[0], ne[1])); + + for (i=2; i<ne.length; i++) + t._addAll(te, ne[i]); + } + }, + + _startDrag : function(id, se, ac) { + var t = this, mu, mm, d = DOM.doc, eb, w = t.windows[id], we = w.element, sp = we.getXY(), p, sz, ph, cp, vp, sx, sy, sex, sey, dx, dy, dw, dh; + + // Get positons and sizes +// cp = DOM.getPos(t.editor.getContainer()); + cp = {x : 0, y : 0}; + vp = DOM.getViewPort(); + + // Reduce viewport size to avoid scrollbars while dragging + vp.w -= 2; + vp.h -= 2; + + sex = se.screenX; + sey = se.screenY; + dx = dy = dw = dh = 0; + + // Handle mouse up + mu = Event.add(d, 'mouseup', function(e) { + Event.remove(d, 'mouseup', mu); + Event.remove(d, 'mousemove', mm); + + if (eb) + eb.remove(); + + we.moveBy(dx, dy); + we.resizeBy(dw, dh); + sz = we.getSize(); + DOM.setStyles(id + '_ifr', {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight}); + t._fixIELayout(id, 1); + + return Event.cancel(e); + }); + + if (ac != 'Move') + startMove(); + + function startMove() { + if (eb) + return; + + t._fixIELayout(id, 0); + + // Setup event blocker + DOM.add(d.body, 'div', { + id : 'mceEventBlocker', + 'class' : 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'), + style : {zIndex : t.zIndex + 1} + }); + + if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel)) + DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2}); + + eb = new Element('mceEventBlocker'); + eb.update(); + + // Setup placeholder + p = we.getXY(); + sz = we.getSize(); + sx = cp.x + p.x - vp.x; + sy = cp.y + p.y - vp.y; + DOM.add(eb.get(), 'div', {id : 'mcePlaceHolder', 'class' : 'mcePlaceHolder', style : {left : sx, top : sy, width : sz.w, height : sz.h}}); + ph = new Element('mcePlaceHolder'); + }; + + // Handle mouse move/drag + mm = Event.add(d, 'mousemove', function(e) { + var x, y, v; + + startMove(); + + x = e.screenX - sex; + y = e.screenY - sey; + + switch (ac) { + case 'ResizeW': + dx = x; + dw = 0 - x; + break; + + case 'ResizeE': + dw = x; + break; + + case 'ResizeN': + case 'ResizeNW': + case 'ResizeNE': + if (ac == "ResizeNW") { + dx = x; + dw = 0 - x; + } else if (ac == "ResizeNE") + dw = x; + + dy = y; + dh = 0 - y; + break; + + case 'ResizeS': + case 'ResizeSW': + case 'ResizeSE': + if (ac == "ResizeSW") { + dx = x; + dw = 0 - x; + } else if (ac == "ResizeSE") + dw = x; + + dh = y; + break; + + case 'mceMove': + dx = x; + dy = y; + break; + } + + // Boundary check + if (dw < (v = w.features.min_width - sz.w)) { + if (dx !== 0) + dx += dw - v; + + dw = v; + } + + if (dh < (v = w.features.min_height - sz.h)) { + if (dy !== 0) + dy += dh - v; + + dh = v; + } + + dw = Math.min(dw, w.features.max_width - sz.w); + dh = Math.min(dh, w.features.max_height - sz.h); + dx = Math.max(dx, vp.x - (sx + vp.x)); + dy = Math.max(dy, vp.y - (sy + vp.y)); + dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x)); + dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y)); + + // Move if needed + if (dx + dy !== 0) { + if (sx + dx < 0) + dx = 0; + + if (sy + dy < 0) + dy = 0; + + ph.moveTo(sx + dx, sy + dy); + } + + // Resize if needed + if (dw + dh !== 0) + ph.resizeTo(sz.w + dw, sz.h + dh); + + return Event.cancel(e); + }); + + return Event.cancel(se); + }, + + resizeBy : function(dw, dh, id) { + var w = this.windows[id]; + + if (w) { + w.element.resizeBy(dw, dh); + w.iframeElement.resizeBy(dw, dh); + } + }, + + close : function(win, id) { + var t = this, w, d = DOM.doc, fw, id; + + id = t._findId(id || win); + + // Probably not inline + if (!t.windows[id]) { + t.parent(win); + return; + } + + t.count--; + + if (t.count == 0) { + DOM.remove('mceModalBlocker'); + DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'false'); + t.editor.focus(); + } + + if (w = t.windows[id]) { + t.onClose.dispatch(t); + Event.remove(d, 'mousedown', w.mousedownFunc); + Event.remove(d, 'click', w.clickFunc); + Event.clear(id); + Event.clear(id + '_ifr'); + + DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak + w.element.remove(); + delete t.windows[id]; + + fw = t._frontWindow(); + + if (fw) + t.focus(fw.id); + } + }, + + // Find front most window + _frontWindow : function() { + var fw, ix = 0; + // Find front most window and focus that + each (this.windows, function(w) { + if (w.zIndex > ix) { + fw = w; + ix = w.zIndex; + } + }); + return fw; + }, + + setTitle : function(w, ti) { + var e; + + w = this._findId(w); + + if (e = DOM.get(w + '_title')) + e.innerHTML = DOM.encode(ti); + }, + + alert : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'alert', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + confirm : function(txt, cb, s) { + var t = this, w; + + w = t.open({ + title : t, + type : 'confirm', + button_func : function(s) { + if (cb) + cb.call(s || t, s); + + t.close(null, w.id); + }, + content : DOM.encode(t.editor.getLang(txt, txt)), + inline : 1, + width : 400, + height : 130 + }); + }, + + // Internal functions + + _findId : function(w) { + var t = this; + + if (typeof(w) == 'string') + return w; + + each(t.windows, function(wo) { + var ifr = DOM.get(wo.id + '_ifr'); + + if (ifr && w == ifr.contentWindow) { + w = wo.id; + return false; + } + }); + + return w; + }, + + _fixIELayout : function(id, s) { + var w, img; + + if (!tinymce.isIE6) + return; + + // Fixes the bug where hover flickers and does odd things in IE6 + each(['n','s','w','e','nw','ne','sw','se'], function(v) { + var e = DOM.get(id + '_resize_' + v); + + DOM.setStyles(e, { + width : s ? e.clientWidth : '', + height : s ? e.clientHeight : '', + cursor : DOM.getStyle(e, 'cursor', 1) + }); + + DOM.setStyle(id + "_bottom", 'bottom', '-1px'); + + e = 0; + }); + + // Fixes graphics glitch + if (w = this.windows[id]) { + // Fixes rendering bug after resize + w.element.hide(); + w.element.show(); + + // Forced a repaint of the window + //DOM.get(id).style.filter = ''; + + // IE has a bug where images used in CSS won't get loaded + // sometimes when the cache in the browser is disabled + // This fix tries to solve it by loading the images using the image object + each(DOM.select('div,a', id), function(e, i) { + if (e.currentStyle.backgroundImage != 'none') { + img = new Image(); + img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1'); + } + }); + + DOM.get(id).style.filter = ''; + } + } + }); + + // Register plugin + tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups); +})(); + diff --git a/wp-includes/js/tinymce/plugins/inlinepopups/template.htm b/wp-includes/js/tinymce/plugins/inlinepopups/template.htm index a4d9873c8..d31ebb0c9 100644 --- a/wp-includes/js/tinymce/plugins/inlinepopups/template.htm +++ b/wp-includes/js/tinymce/plugins/inlinepopups/template.htm @@ -2,7 +2,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Template for dialogs</title> -<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css?ver=345-20110908" /> +<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css?ver=349-20120314" /> </head> <body> diff --git a/wp-includes/js/tinymce/plugins/media/editor_plugin.js b/wp-includes/js/tinymce/plugins/media/editor_plugin.js index f89959e2e..37b4320bd 100644 --- a/wp-includes/js/tinymce/plugins/media/editor_plugin.js +++ b/wp-includes/js/tinymce/plugins/media/editor_plugin.js @@ -1 +1 @@ -(function(){var d=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),h=tinymce.makeMap(d.join(",")),b=tinymce.html.Node,f,a,g=tinymce.util.JSON,e;f=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["Audio"]];function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(i){return i&&i.nodeName==="IMG"&&n.dom.hasClass(i,"mceItemMedia")}r.editor=n;r.url=j;a="";for(m=0;m<f.length;m++){k=f[m][0];q={name:k,clsids:tinymce.explode(f[m][1]||""),mimes:tinymce.explode(f[m][2]||""),codebase:f[m][3]};for(p=0;p<q.clsids.length;p++){l["clsid:"+q.clsids[p]]=q}for(p=0;p<q.mimes.length;p++){l[q.mimes[p]]=q}l["mceItem"+k]=q;l[k.toLowerCase()]=q;a+=(a?"|":"")+k}tinymce.each(n.getParam("media_types","video=mp4,m4v,ogv,webm;silverlight=xap;flash=swf,flv;shockwave=dcr;quicktime=mov,qt,mpg,mpeg;shockwave=dcr;windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;realmedia=rm,ra,ram;java=jar;audio=mp3,ogg").split(";"),function(v){var s,u,t;v=v.split(/=/);u=tinymce.explode(v[1].toLowerCase());for(s=0;s<u.length;s++){t=l[v[0].toLowerCase()];if(t){l[u[s]]=t}}});a=new RegExp("write("+a+")\\(([^)]+)\\)");r.lookup=l;n.onPreInit.add(function(){n.schema.addValidElements("object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]");n.parser.addNodeFilter("object,embed,video,audio,script,iframe",function(s){var t=s.length;while(t--){r.objectToImg(s[t])}});n.serializer.addNodeFilter("img",function(s,u,t){var v=s.length,w;while(v--){w=s[v];if((w.attr("class")||"").indexOf("mceItemMedia")!==-1){r.imgToObject(w,t)}}})});n.onInit.add(function(){if(n.theme&&n.theme.onResolveName){n.theme.onResolveName.add(function(i,s){if(s.name==="img"&&n.dom.hasClass(s.node,"mceItemMedia")){s.name="media"}})}if(n&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(function(s,t,i){if(i.nodeName==="IMG"&&i.className.indexOf("mceItemMedia")!==-1){t.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});n.addCommand("mceMedia",function(){var s,i;i=n.selection.getNode();if(o(i)){s=n.dom.getAttrib(i,"data-mce-json");if(s){s=g.parse(s);tinymce.each(d,function(t){var u=n.dom.getAttrib(i,t);if(u){s[t]=u}});s.type=r.getType(i.className).name.toLowerCase()}}if(!s){s={type:"flash",video:{sources:[]},params:{}}}n.windowManager.open({file:j+"/media.htm",width:430+parseInt(n.getLang("media.delta_width",0)),height:500+parseInt(n.getLang("media.delta_height",0)),inline:1},{plugin_url:j,data:s})});n.addButton("media",{title:"media.desc",cmd:"mceMedia"});n.onNodeChange.add(function(s,i,t){i.setActive("media",o(t))})},convertUrl:function(k,n){var j=this,m=j.editor,l=m.settings,o=l.url_converter,i=l.url_converter_scope||j;if(!k){return k}if(n){return m.documentBaseURI.toAbsolute(k)}return o.call(i,k,"src","object")},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}},dataToImg:function(m,k){var r=this,o=r.editor,p=o.documentBaseURI,j,q,n,l;m.params.src=r.convertUrl(m.params.src,k);q=m.video.attrs;if(q){q.src=r.convertUrl(q.src,k)}if(q){q.poster=r.convertUrl(q.poster,k)}j=c(m.video.sources);if(j){for(l=0;l<j.length;l++){j[l].src=r.convertUrl(j[l].src,k)}}n=r.editor.dom.create("img",{id:m.id,style:m.style,align:m.align,src:r.editor.theme.url+"/img/trans.gif","class":"mceItemMedia mceItem"+r.getType(m.type).name,"data-mce-json":g.serialize(m,"'")});n.width=m.width||(m.type=="audio"?"300":"320");n.height=m.height||(m.type=="audio"?"32":"240");return n},dataToHtml:function(i,j){return this.editor.serializer.serialize(this.dataToImg(i,j),{forced_root_block:"",force_absolute:j})},htmlToData:function(k){var j,i,l;l={type:"flash",video:{sources:[]},params:{}};j=this.editor.parser.parse(k);i=j.getAll("img")[0];if(i){l=g.parse(i.attr("data-mce-json"));l.type=this.getType(i.attr("class")).name.toLowerCase();tinymce.each(d,function(m){var n=i.attr(m);if(n){l[m]=n}})}return l},getType:function(m){var k,j,l;j=tinymce.explode(m," ");for(k=0;k<j.length;k++){l=this.lookup[j[k]];if(l){return l}}},imgToObject:function(x,n){var t=this,o=t.editor,A,F,j,s,G,w,E,u,k,C,r,p,y,B,m,v,l,z,D;function q(i,H){var L,K,M,J,I;I=o.getParam("flash_video_player_url",t.convertUrl(t.url+"/moxieplayer.swf"));if(I){L=o.documentBaseURI;E.params.src=I;if(o.getParam("flash_video_player_absvideourl",true)){i=L.toAbsolute(i||"",true);H=L.toAbsolute(H||"",true)}M="";K=o.getParam("flash_video_player_flashvars",{url:"$url",poster:"$poster"});tinymce.each(K,function(O,N){O=O.replace(/\$url/,i||"");O=O.replace(/\$poster/,H||"");if(O.length>0){M+=(M?"&":"")+N+"="+escape(O)}});if(M.length){E.params.flashvars=M}J=o.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(J,function(O,N){E.params[N]=""+O})}}E=x.attr("data-mce-json");if(!E){return}E=g.parse(E);p=this.getType(x.attr("class"));z=x.attr("data-mce-style");if(!z){z=x.attr("style");if(z){z=o.dom.serializeStyle(o.dom.parseStyle(z,"img"))}}if(p.name==="Iframe"){v=new b("iframe",1);tinymce.each(d,function(i){var H=x.attr(i);if(i=="class"&&H){H=H.replace(/mceItem.+ ?/g,"")}if(H&&H.length>0){v.attr(i,H)}});for(G in E.params){v.attr(G,E.params[G])}v.attr({style:z,src:E.params.src});x.replace(v);return}if(this.editor.settings.media_use_script){v=new b("script",1).attr("type","text/javascript");w=new b("#text",3);w.value="write"+p.name+"("+g.serialize(tinymce.extend(E.params,{width:x.attr("width"),height:x.attr("height")}))+");";v.append(w);x.replace(v);return}if(p.name==="Video"&&E.video.sources[0]){A=new b("video",1).attr(tinymce.extend({id:x.attr("id"),width:x.attr("width"),height:x.attr("height"),style:z},E.video.attrs));if(E.video.attrs){l=E.video.attrs.poster}k=E.video.sources=c(E.video.sources);for(y=0;y<k.length;y++){if(/\.mp4$/.test(k[y].src)){m=k[y].src}}if(!k[0].type){A.attr("src",k[0].src);k.splice(0,1)}for(y=0;y<k.length;y++){u=new b("source",1).attr(k[y]);u.shortEnded=true;A.append(u)}if(m){q(m,l);p=t.getType("flash")}else{E.params.src=""}}if(p.name==="Audio"&&E.video.sources[0]){D=new b("audio",1).attr(tinymce.extend({id:x.attr("id"),width:x.attr("width"),height:x.attr("height"),style:z},E.video.attrs));if(E.video.attrs){l=E.video.attrs.poster}k=E.video.sources=c(E.video.sources);if(!k[0].type){D.attr("src",k[0].src);k.splice(0,1)}for(y=0;y<k.length;y++){u=new b("source",1).attr(k[y]);u.shortEnded=true;D.append(u)}E.params.src=""}if(E.params.src){if(/\.flv$/i.test(E.params.src)){q(E.params.src,"")}if(n&&n.force_absolute){E.params.src=o.documentBaseURI.toAbsolute(E.params.src)}F=new b("object",1).attr({id:x.attr("id"),width:x.attr("width"),height:x.attr("height"),style:z});tinymce.each(d,function(i){if(E[i]&&i!="type"){F.attr(i,E[i])}});for(G in E.params){r=new b("param",1);r.shortEnded=true;w=E.params[G];if(G==="src"&&p.name==="WindowsMedia"){G="url"}r.attr({name:G,value:w});F.append(r)}if(this.editor.getParam("media_strict",true)){F.attr({data:E.params.src,type:p.mimes[0]})}else{F.attr({classid:"clsid:"+p.clsids[0],codebase:p.codebase});j=new b("embed",1);j.shortEnded=true;j.attr({id:x.attr("id"),width:x.attr("width"),height:x.attr("height"),style:z,type:p.mimes[0]});for(G in E.params){j.attr(G,E.params[G])}tinymce.each(d,function(i){if(E[i]&&i!="type"){j.attr(i,E[i])}});F.append(j)}if(E.object_html){w=new b("#text",3);w.raw=true;w.value=E.object_html;F.append(w)}if(A){A.append(F)}}if(A){if(E.video_html){w=new b("#text",3);w.raw=true;w.value=E.video_html;A.append(w)}}if(D){if(E.video_html){w=new b("#text",3);w.raw=true;w.value=E.video_html;D.append(w)}}if(A||D||F){x.replace(A||D||F)}else{x.remove()}},objectToImg:function(y){var F,j,A,p,G,H,u,w,t,B,z,q,o,D,x,k,E,n,C=this.lookup,l,v,s=this.editor.settings.url_converter,m=this.editor.settings.url_converter_scope;function r(i){return new tinymce.html.Serializer({inner:true,validate:false}).serialize(i)}if(!y.parent){return}if(y.name==="script"){if(y.firstChild){l=a.exec(y.firstChild.value)}if(!l){return}n=l[1];E={video:{},params:g.parse(l[2])};w=E.params.width;t=E.params.height}E=E||{video:{},params:{}};G=new b("img",1);G.attr({src:this.editor.theme.url+"/img/trans.gif"});H=y.name;if(H==="video"||H=="audio"){A=y;F=y.getAll("object")[0];j=y.getAll("embed")[0];w=A.attr("width");t=A.attr("height");u=A.attr("id");E.video={attrs:{},sources:[]};v=E.video.attrs;for(H in A.attributes.map){v[H]=A.attributes.map[H]}x=y.attr("src");if(x){E.video.sources.push({src:s.call(m,x,"src",y.name)})}k=A.getAll("source");for(z=0;z<k.length;z++){x=k[z].remove();E.video.sources.push({src:s.call(m,x.attr("src"),"src","source"),type:x.attr("type"),media:x.attr("media")})}if(v.poster){v.poster=s.call(m,v.poster,"poster",y.name)}}if(y.name==="object"){F=y;j=y.getAll("embed")[0]}if(y.name==="embed"){j=y}if(y.name==="iframe"){p=y;n="Iframe"}if(F){w=w||F.attr("width");t=t||F.attr("height");B=B||F.attr("style");u=u||F.attr("id");D=F.getAll("param");for(z=0;z<D.length;z++){o=D[z];H=o.remove().attr("name");if(!h[H]){E.params[H]=o.attr("value")}}E.params.src=E.params.src||F.attr("data")}if(j){w=w||j.attr("width");t=t||j.attr("height");B=B||j.attr("style");u=u||j.attr("id");for(H in j.attributes.map){if(!h[H]&&!E.params[H]){E.params[H]=j.attributes.map[H]}}}if(p){w=p.attr("width");t=p.attr("height");B=B||p.attr("style");u=p.attr("id");tinymce.each(d,function(i){G.attr(i,p.attr(i))});for(H in p.attributes.map){if(!h[H]&&!E.params[H]){E.params[H]=p.attributes.map[H]}}}if(E.params.movie){E.params.src=E.params.src||E.params.movie;delete E.params.movie}if(E.params.src){E.params.src=s.call(m,E.params.src,"src","object")}if(A){if(y.name==="video"){n=C.video.name}else{if(y.name==="audio"){n=C.audio.name}}}if(F&&!n){n=(C[(F.attr("clsid")||"").toLowerCase()]||C[(F.attr("type")||"").toLowerCase()]||{}).name}if(j&&!n){n=(C[(j.attr("type")||"").toLowerCase()]||{}).name}y.replace(G);if(j){j.remove()}if(F){q=r(F.remove());if(q){E.object_html=q}}if(A){q=r(A.remove());if(q){E.video_html=q}}G.attr({id:u,"class":"mceItemMedia mceItem"+(n||"Flash"),style:B,width:w||(y.name=="audio"?"300":"320"),height:t||(y.name=="audio"?"32":"240"),"data-mce-json":g.serialize(E,"'")})}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})(); \ No newline at end of file +(function(){var d=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),h=tinymce.makeMap(d.join(",")),b=tinymce.html.Node,f,a,g=tinymce.util.JSON,e;f=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["EmbeddedAudio"],["Audio"]];function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(i){return i&&i.nodeName==="IMG"&&n.dom.hasClass(i,"mceItemMedia")}r.editor=n;r.url=j;a="";for(m=0;m<f.length;m++){k=f[m][0];q={name:k,clsids:tinymce.explode(f[m][1]||""),mimes:tinymce.explode(f[m][2]||""),codebase:f[m][3]};for(p=0;p<q.clsids.length;p++){l["clsid:"+q.clsids[p]]=q}for(p=0;p<q.mimes.length;p++){l[q.mimes[p]]=q}l["mceItem"+k]=q;l[k.toLowerCase()]=q;a+=(a?"|":"")+k}tinymce.each(n.getParam("media_types","video=mp4,m4v,ogv,webm;silverlight=xap;flash=swf,flv;shockwave=dcr;quicktime=mov,qt,mpg,mpeg;shockwave=dcr;windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;realmedia=rm,ra,ram;java=jar;audio=mp3,ogg").split(";"),function(v){var s,u,t;v=v.split(/=/);u=tinymce.explode(v[1].toLowerCase());for(s=0;s<u.length;s++){t=l[v[0].toLowerCase()];if(t){l[u[s]]=t}}});a=new RegExp("write("+a+")\\(([^)]+)\\)");r.lookup=l;n.onPreInit.add(function(){n.schema.addValidElements("object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]");n.parser.addNodeFilter("object,embed,video,audio,script,iframe",function(s){var t=s.length;while(t--){r.objectToImg(s[t])}});n.serializer.addNodeFilter("img",function(s,u,t){var v=s.length,w;while(v--){w=s[v];if((w.attr("class")||"").indexOf("mceItemMedia")!==-1){r.imgToObject(w,t)}}})});n.onInit.add(function(){if(n.theme&&n.theme.onResolveName){n.theme.onResolveName.add(function(i,s){if(s.name==="img"&&n.dom.hasClass(s.node,"mceItemMedia")){s.name="media"}})}if(n&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(function(s,t,i){if(i.nodeName==="IMG"&&i.className.indexOf("mceItemMedia")!==-1){t.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});n.addCommand("mceMedia",function(){var s,i;i=n.selection.getNode();if(o(i)){s=n.dom.getAttrib(i,"data-mce-json");if(s){s=g.parse(s);tinymce.each(d,function(t){var u=n.dom.getAttrib(i,t);if(u){s[t]=u}});s.type=r.getType(i.className).name.toLowerCase()}}if(!s){s={type:"flash",video:{sources:[]},params:{}}}n.windowManager.open({file:j+"/media.htm",width:430+parseInt(n.getLang("media.delta_width",0)),height:500+parseInt(n.getLang("media.delta_height",0)),inline:1},{plugin_url:j,data:s})});n.addButton("media",{title:"media.desc",cmd:"mceMedia"});n.onNodeChange.add(function(s,i,t){i.setActive("media",o(t))})},convertUrl:function(k,n){var j=this,m=j.editor,l=m.settings,o=l.url_converter,i=l.url_converter_scope||j;if(!k){return k}if(n){return m.documentBaseURI.toAbsolute(k)}return o.call(i,k,"src","object")},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}},dataToImg:function(m,k){var r=this,o=r.editor,p=o.documentBaseURI,j,q,n,l;m.params.src=r.convertUrl(m.params.src,k);q=m.video.attrs;if(q){q.src=r.convertUrl(q.src,k)}if(q){q.poster=r.convertUrl(q.poster,k)}j=c(m.video.sources);if(j){for(l=0;l<j.length;l++){j[l].src=r.convertUrl(j[l].src,k)}}n=r.editor.dom.create("img",{id:m.id,style:m.style,align:m.align,hspace:m.hspace,vspace:m.vspace,src:r.editor.theme.url+"/img/trans.gif","class":"mceItemMedia mceItem"+r.getType(m.type).name,"data-mce-json":g.serialize(m,"'")});n.width=m.width||(m.type=="audio"?"300":"320");n.height=m.height||(m.type=="audio"?"32":"240");return n},dataToHtml:function(i,j){return this.editor.serializer.serialize(this.dataToImg(i,j),{forced_root_block:"",force_absolute:j})},htmlToData:function(k){var j,i,l;l={type:"flash",video:{sources:[]},params:{}};j=this.editor.parser.parse(k);i=j.getAll("img")[0];if(i){l=g.parse(i.attr("data-mce-json"));l.type=this.getType(i.attr("class")).name.toLowerCase();tinymce.each(d,function(m){var n=i.attr(m);if(n){l[m]=n}})}return l},getType:function(m){var k,j,l;j=tinymce.explode(m," ");for(k=0;k<j.length;k++){l=this.lookup[j[k]];if(l){return l}}},imgToObject:function(z,o){var u=this,p=u.editor,C,H,j,t,I,y,G,w,k,E,s,q,A,D,m,x,l,B,F;function r(i,n){var M,L,N,K,J;J=p.getParam("flash_video_player_url",u.convertUrl(u.url+"/moxieplayer.swf"));if(J){M=p.documentBaseURI;G.params.src=J;if(p.getParam("flash_video_player_absvideourl",true)){i=M.toAbsolute(i||"",true);n=M.toAbsolute(n||"",true)}N="";L=p.getParam("flash_video_player_flashvars",{url:"$url",poster:"$poster"});tinymce.each(L,function(P,O){P=P.replace(/\$url/,i||"");P=P.replace(/\$poster/,n||"");if(P.length>0){N+=(N?"&":"")+O+"="+escape(P)}});if(N.length){G.params.flashvars=N}K=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(K,function(P,O){G.params[O]=""+P})}}G=z.attr("data-mce-json");if(!G){return}G=g.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}if(q.name==="Iframe"){x=new b("iframe",1);tinymce.each(d,function(i){var n=z.attr(i);if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&n.length>0){x.attr(i,n)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new b("script",1).attr("type","text/javascript");y=new b("#text",3);y.value="write"+q.name+"("+g.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new b("video",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A<k.length;A++){if(/\.mp4$/.test(k[A].src)){m=k[A].src}}if(!k[0].type){C.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;C.append(w)}if(m){r(m,l);q=u.getType("flash")}else{G.params.src=""}}if(q.name==="Audio"&&G.video.sources[0]){F=new b("audio",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);if(!k[0].type){F.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;F.append(w)}G.params.src=""}if(q.name==="EmbeddedAudio"){j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:z.attr("type")});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});G.params.src=""}if(G.params.src){if(/\.flv$/i.test(G.params.src)){r(G.params.src,"")}if(o&&o.force_absolute){G.params.src=p.documentBaseURI.toAbsolute(G.params.src)}H=new b("object",1).attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B});tinymce.each(d,function(i){var n=G[i];if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&i!="type"){H.attr(i,n)}});for(I in G.params){s=new b("param",1);s.shortEnded=true;y=G.params[I];if(I==="src"&&q.name==="WindowsMedia"){I="url"}s.attr({name:I,value:y});H.append(s)}if(this.editor.getParam("media_strict",true)){H.attr({data:G.params.src,type:q.mimes[0]})}else{H.attr({classid:"clsid:"+q.clsids[0],codebase:q.codebase});j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:q.mimes[0]});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});H.append(j)}if(G.object_html){y=new b("#text",3);y.raw=true;y.value=G.object_html;H.append(y)}if(C){C.append(H)}}if(C){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;C.append(y)}}if(F){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;F.append(y)}}var v=C||F||H||j;if(v){z.replace(v)}else{z.remove()}},objectToImg:function(C){var L,k,F,s,M,N,y,A,x,G,E,t,q,I,B,l,K,o,H=this.lookup,m,z,v=this.editor.settings.url_converter,n=this.editor.settings.url_converter_scope,w,r,D,j;function u(i){return new tinymce.html.Serializer({inner:true,validate:false}).serialize(i)}function J(O,i){return H[(O.attr(i)||"").toLowerCase()]}function p(O){var i=O.replace(/^.*\.([^.]+)$/,"$1");return H[i.toLowerCase()||""]}if(!C.parent){return}if(C.name==="script"){if(C.firstChild){m=a.exec(C.firstChild.value)}if(!m){return}o=m[1];K={video:{},params:g.parse(m[2])};A=K.params.width;x=K.params.height}K=K||{video:{},params:{}};M=new b("img",1);M.attr({src:this.editor.theme.url+"/img/trans.gif"});N=C.name;if(N==="video"||N=="audio"){F=C;L=C.getAll("object")[0];k=C.getAll("embed")[0];A=F.attr("width");x=F.attr("height");y=F.attr("id");K.video={attrs:{},sources:[]};z=K.video.attrs;for(N in F.attributes.map){z[N]=F.attributes.map[N]}B=C.attr("src");if(B){K.video.sources.push({src:v.call(n,B,"src",C.name)})}l=F.getAll("source");for(E=0;E<l.length;E++){B=l[E].remove();K.video.sources.push({src:v.call(n,B.attr("src"),"src","source"),type:B.attr("type"),media:B.attr("media")})}if(z.poster){z.poster=v.call(n,z.poster,"poster",C.name)}}if(C.name==="object"){L=C;k=C.getAll("embed")[0]}if(C.name==="embed"){k=C}if(C.name==="iframe"){s=C;o="Iframe"}if(L){A=A||L.attr("width");x=x||L.attr("height");G=G||L.attr("style");y=y||L.attr("id");w=w||L.attr("hspace");r=r||L.attr("vspace");D=D||L.attr("align");j=j||L.attr("bgcolor");K.name=L.attr("name");I=L.getAll("param");for(E=0;E<I.length;E++){q=I[E];N=q.remove().attr("name");if(!h[N]){K.params[N]=q.attr("value")}}K.params.src=K.params.src||L.attr("data")}if(k){A=A||k.attr("width");x=x||k.attr("height");G=G||k.attr("style");y=y||k.attr("id");w=w||k.attr("hspace");r=r||k.attr("vspace");D=D||k.attr("align");j=j||k.attr("bgcolor");for(N in k.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=k.attributes.map[N]}}}if(s){A=s.attr("width");x=s.attr("height");G=G||s.attr("style");y=s.attr("id");w=s.attr("hspace");r=s.attr("vspace");D=s.attr("align");j=s.attr("bgcolor");tinymce.each(d,function(i){M.attr(i,s.attr(i))});for(N in s.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=s.attributes.map[N]}}}if(K.params.movie){K.params.src=K.params.src||K.params.movie;delete K.params.movie}if(K.params.src){K.params.src=v.call(n,K.params.src,"src","object")}if(F){if(C.name==="video"){o=H.video.name}else{if(C.name==="audio"){o=H.audio.name}}}if(L&&!o){o=(J(L,"clsid")||J(L,"classid")||J(L,"type")||{}).name}if(k&&!o){o=(J(k,"type")||p(K.params.src)||{}).name}if(k&&o=="EmbeddedAudio"){K.params.type=k.attr("type")}C.replace(M);if(k){k.remove()}if(L){t=u(L.remove());if(t){K.object_html=t}}if(F){t=u(F.remove());if(t){K.video_html=t}}K.hspace=w;K.vspace=r;K.align=D;K.bgcolor=j;M.attr({id:y,"class":"mceItemMedia mceItem"+(o||"Flash"),style:G,width:A||(C.name=="audio"?"300":"320"),height:x||(C.name=="audio"?"32":"240"),hspace:w,vspace:r,align:D,bgcolor:j,"data-mce-json":g.serialize(K,"'")})}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/media/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/media/editor_plugin_src.js new file mode 100644 index 000000000..a0d4ef2ae --- /dev/null +++ b/wp-includes/js/tinymce/plugins/media/editor_plugin_src.js @@ -0,0 +1,890 @@ +/** + * 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 rootAttributes = tinymce.explode('id,name,width,height,style,align,class,hspace,vspace,bgcolor,type'), excludedAttrs = tinymce.makeMap(rootAttributes.join(',')), Node = tinymce.html.Node, + mediaTypes, scriptRegExp, JSON = tinymce.util.JSON, mimeTypes; + + // Media types supported by this plugin + mediaTypes = [ + // Type, clsid:s, mime types, codebase + ["Flash", "d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"], + ["ShockWave", "166b1bca-3f9c-11cf-8075-444553540000", "application/x-director", "http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"], + ["WindowsMedia", "6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a", "application/x-mplayer2", "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"], + ["QuickTime", "02bf25d5-8c17-4b23-bc80-d3488abddc6b", "video/quicktime", "http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"], + ["RealMedia", "cfcdaa03-8be4-11cf-b84b-0020afbbccfa", "audio/x-pn-realaudio-plugin", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"], + ["Java", "8ad9c840-044e-11d1-b3e9-00805f499d93", "application/x-java-applet", "http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"], + ["Silverlight", "dfeaf541-f3e1-4c24-acac-99c30715084a", "application/x-silverlight-2"], + ["Iframe"], + ["Video"], + ["EmbeddedAudio"], + ["Audio"] + ]; + + function toArray(obj) { + var undef, out, i; + + if (obj && !obj.splice) { + out = []; + + for (i = 0; true; i++) { + if (obj[i]) + out[i] = obj[i]; + else + break; + } + + return out; + } + + return obj; + }; + + tinymce.create('tinymce.plugins.MediaPlugin', { + init : function(ed, url) { + var self = this, lookup = {}, i, y, item, name; + + function isMediaImg(node) { + return node && node.nodeName === 'IMG' && ed.dom.hasClass(node, 'mceItemMedia'); + }; + + self.editor = ed; + self.url = url; + + // Parse media types into a lookup table + scriptRegExp = ''; + for (i = 0; i < mediaTypes.length; i++) { + name = mediaTypes[i][0]; + + item = { + name : name, + clsids : tinymce.explode(mediaTypes[i][1] || ''), + mimes : tinymce.explode(mediaTypes[i][2] || ''), + codebase : mediaTypes[i][3] + }; + + for (y = 0; y < item.clsids.length; y++) + lookup['clsid:' + item.clsids[y]] = item; + + for (y = 0; y < item.mimes.length; y++) + lookup[item.mimes[y]] = item; + + lookup['mceItem' + name] = item; + lookup[name.toLowerCase()] = item; + + scriptRegExp += (scriptRegExp ? '|' : '') + name; + } + + // Handle the media_types setting + tinymce.each(ed.getParam("media_types", + "video=mp4,m4v,ogv,webm;" + + "silverlight=xap;" + + "flash=swf,flv;" + + "shockwave=dcr;" + + "quicktime=mov,qt,mpg,mpeg;" + + "shockwave=dcr;" + + "windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;" + + "realmedia=rm,ra,ram;" + + "java=jar;" + + "audio=mp3,ogg" + ).split(';'), function(item) { + var i, extensions, type; + + item = item.split(/=/); + extensions = tinymce.explode(item[1].toLowerCase()); + for (i = 0; i < extensions.length; i++) { + type = lookup[item[0].toLowerCase()]; + + if (type) + lookup[extensions[i]] = type; + } + }); + + scriptRegExp = new RegExp('write(' + scriptRegExp + ')\\(([^)]+)\\)'); + self.lookup = lookup; + + ed.onPreInit.add(function() { + // Allow video elements + ed.schema.addValidElements('object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]'); + + // Convert video elements to image placeholder + ed.parser.addNodeFilter('object,embed,video,audio,script,iframe', function(nodes) { + var i = nodes.length; + + while (i--) + self.objectToImg(nodes[i]); + }); + + // Convert image placeholders to video elements + ed.serializer.addNodeFilter('img', function(nodes, name, args) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + if ((node.attr('class') || '').indexOf('mceItemMedia') !== -1) + self.imgToObject(node, args); + } + }); + }); + + ed.onInit.add(function() { + // Display "media" instead of "img" in element path + if (ed.theme && ed.theme.onResolveName) { + ed.theme.onResolveName.add(function(theme, path_object) { + if (path_object.name === 'img' && ed.dom.hasClass(path_object.node, 'mceItemMedia')) + path_object.name = 'media'; + }); + } + + // Add contect menu if it's loaded + if (ed && ed.plugins.contextmenu) { + ed.plugins.contextmenu.onContextMenu.add(function(plugin, menu, element) { + if (element.nodeName === 'IMG' && element.className.indexOf('mceItemMedia') !== -1) + menu.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'}); + }); + } + }); + + // Register commands + ed.addCommand('mceMedia', function() { + var data, img; + + img = ed.selection.getNode(); + if (isMediaImg(img)) { + data = ed.dom.getAttrib(img, 'data-mce-json'); + if (data) { + data = JSON.parse(data); + + // Add some extra properties to the data object + tinymce.each(rootAttributes, function(name) { + var value = ed.dom.getAttrib(img, name); + + if (value) + data[name] = value; + }); + + data.type = self.getType(img.className).name.toLowerCase(); + } + } + + if (!data) { + data = { + type : 'flash', + video: {sources:[]}, + params: {} + }; + } + + ed.windowManager.open({ + file : url + '/media.htm', + width : 430 + parseInt(ed.getLang('media.delta_width', 0)), + height : 500 + parseInt(ed.getLang('media.delta_height', 0)), + inline : 1 + }, { + plugin_url : url, + data : data + }); + }); + + // Register buttons + ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'}); + + // Update media selection status + ed.onNodeChange.add(function(ed, cm, node) { + cm.setActive('media', isMediaImg(node)); + }); + }, + + convertUrl : function(url, force_absolute) { + var self = this, editor = self.editor, settings = editor.settings, + urlConverter = settings.url_converter, + urlConverterScope = settings.url_converter_scope || self; + + if (!url) + return url; + + if (force_absolute) + return editor.documentBaseURI.toAbsolute(url); + + return urlConverter.call(urlConverterScope, url, 'src', 'object'); + }, + + 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 + }; + }, + + /** + * Converts the JSON data object to an img node. + */ + dataToImg : function(data, force_absolute) { + var self = this, editor = self.editor, baseUri = editor.documentBaseURI, sources, attrs, img, i; + + data.params.src = self.convertUrl(data.params.src, force_absolute); + + attrs = data.video.attrs; + if (attrs) + attrs.src = self.convertUrl(attrs.src, force_absolute); + + if (attrs) + attrs.poster = self.convertUrl(attrs.poster, force_absolute); + + sources = toArray(data.video.sources); + if (sources) { + for (i = 0; i < sources.length; i++) + sources[i].src = self.convertUrl(sources[i].src, force_absolute); + } + + img = self.editor.dom.create('img', { + id : data.id, + style : data.style, + align : data.align, + hspace : data.hspace, + vspace : data.vspace, + src : self.editor.theme.url + '/img/trans.gif', + 'class' : 'mceItemMedia mceItem' + self.getType(data.type).name, + 'data-mce-json' : JSON.serialize(data, "'") + }); + + img.width = data.width || (data.type == 'audio' ? "300" : "320"); + img.height = data.height || (data.type == 'audio' ? "32" : "240"); + + return img; + }, + + /** + * Converts the JSON data object to a HTML string. + */ + dataToHtml : function(data, force_absolute) { + return this.editor.serializer.serialize(this.dataToImg(data, force_absolute), {forced_root_block : '', force_absolute : force_absolute}); + }, + + /** + * Converts the JSON data object to a HTML string. + */ + htmlToData : function(html) { + var fragment, img, data; + + data = { + type : 'flash', + video: {sources:[]}, + params: {} + }; + + fragment = this.editor.parser.parse(html); + img = fragment.getAll('img')[0]; + + if (img) { + data = JSON.parse(img.attr('data-mce-json')); + data.type = this.getType(img.attr('class')).name.toLowerCase(); + + // Add some extra properties to the data object + tinymce.each(rootAttributes, function(name) { + var value = img.attr(name); + + if (value) + data[name] = value; + }); + } + + return data; + }, + + /** + * Get type item by extension, class, clsid or mime type. + * + * @method getType + * @param {String} value Value to get type item by. + * @return {Object} Type item object or undefined. + */ + getType : function(value) { + var i, values, typeItem; + + // Find type by checking the classes + values = tinymce.explode(value, ' '); + for (i = 0; i < values.length; i++) { + typeItem = this.lookup[values[i]]; + + if (typeItem) + return typeItem; + } + }, + + /** + * Converts a tinymce.html.Node image element to video/object/embed. + */ + imgToObject : function(node, args) { + var self = this, editor = self.editor, video, object, embed, iframe, name, value, data, + source, sources, params, param, typeItem, i, item, mp4Source, replacement, + posterSrc, style, audio; + + // Adds the flash player + function addPlayer(video_src, poster_src) { + var baseUri, flashVars, flashVarsOutput, params, flashPlayer; + + flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf')); + if (flashPlayer) { + baseUri = editor.documentBaseURI; + data.params.src = flashPlayer; + + // Convert the movie url to absolute urls + if (editor.getParam('flash_video_player_absvideourl', true)) { + video_src = baseUri.toAbsolute(video_src || '', true); + poster_src = baseUri.toAbsolute(poster_src || '', true); + } + + // Generate flash vars + flashVarsOutput = ''; + flashVars = editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}); + tinymce.each(flashVars, function(value, name) { + // Replace $url and $poster variables in flashvars value + value = value.replace(/\$url/, video_src || ''); + value = value.replace(/\$poster/, poster_src || ''); + + if (value.length > 0) + flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value); + }); + + if (flashVarsOutput.length) + data.params.flashvars = flashVarsOutput; + + params = editor.getParam('flash_video_player_params', { + allowfullscreen: true, + allowscriptaccess: true + }); + + tinymce.each(params, function(value, name) { + data.params[name] = "" + value; + }); + } + }; + + data = node.attr('data-mce-json'); + if (!data) + return; + + data = JSON.parse(data); + typeItem = this.getType(node.attr('class')); + + style = node.attr('data-mce-style') + if (!style) { + style = node.attr('style'); + + if (style) + style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img')); + } + + // Handle iframe + if (typeItem.name === 'Iframe') { + replacement = new Node('iframe', 1); + + tinymce.each(rootAttributes, function(name) { + var value = node.attr(name); + + if (name == 'class' && value) + value = value.replace(/mceItem.+ ?/g, ''); + + if (value && value.length > 0) + replacement.attr(name, value); + }); + + for (name in data.params) + replacement.attr(name, data.params[name]); + + replacement.attr({ + style: style, + src: data.params.src + }); + + node.replace(replacement); + + return; + } + + // Handle scripts + if (this.editor.settings.media_use_script) { + replacement = new Node('script', 1).attr('type', 'text/javascript'); + + value = new Node('#text', 3); + value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, { + width: node.attr('width'), + height: node.attr('height') + })) + ');'; + + replacement.append(value); + node.replace(replacement); + + return; + } + + // Add HTML5 video element + if (typeItem.name === 'Video' && data.video.sources[0]) { + // Create new object element + video = new Node('video', 1).attr(tinymce.extend({ + id : node.attr('id'), + width: node.attr('width'), + height: node.attr('height'), + style : style + }, data.video.attrs)); + + // Get poster source and use that for flash fallback + if (data.video.attrs) + posterSrc = data.video.attrs.poster; + + sources = data.video.sources = toArray(data.video.sources); + for (i = 0; i < sources.length; i++) { + if (/\.mp4$/.test(sources[i].src)) + mp4Source = sources[i].src; + } + + if (!sources[0].type) { + video.attr('src', sources[0].src); + sources.splice(0, 1); + } + + for (i = 0; i < sources.length; i++) { + source = new Node('source', 1).attr(sources[i]); + source.shortEnded = true; + video.append(source); + } + + // Create flash fallback for video if we have a mp4 source + if (mp4Source) { + addPlayer(mp4Source, posterSrc); + typeItem = self.getType('flash'); + } else + data.params.src = ''; + } + + // Add HTML5 audio element + if (typeItem.name === 'Audio' && data.video.sources[0]) { + // Create new object element + audio = new Node('audio', 1).attr(tinymce.extend({ + id : node.attr('id'), + width: node.attr('width'), + height: node.attr('height'), + style : style + }, data.video.attrs)); + + // Get poster source and use that for flash fallback + if (data.video.attrs) + posterSrc = data.video.attrs.poster; + + sources = data.video.sources = toArray(data.video.sources); + if (!sources[0].type) { + audio.attr('src', sources[0].src); + sources.splice(0, 1); + } + + for (i = 0; i < sources.length; i++) { + source = new Node('source', 1).attr(sources[i]); + source.shortEnded = true; + audio.append(source); + } + + data.params.src = ''; + } + + if (typeItem.name === 'EmbeddedAudio') { + embed = new Node('embed', 1); + embed.shortEnded = true; + embed.attr({ + id: node.attr('id'), + width: node.attr('width'), + height: node.attr('height'), + style : style, + type: node.attr('type') + }); + + for (name in data.params) + embed.attr(name, data.params[name]); + + tinymce.each(rootAttributes, function(name) { + if (data[name] && name != 'type') + embed.attr(name, data[name]); + }); + + data.params.src = ''; + } + + // Do we have a params src then we can generate object + if (data.params.src) { + // Is flv movie add player for it + if (/\.flv$/i.test(data.params.src)) + addPlayer(data.params.src, ''); + + if (args && args.force_absolute) + data.params.src = editor.documentBaseURI.toAbsolute(data.params.src); + + // Create new object element + object = new Node('object', 1).attr({ + id : node.attr('id'), + width: node.attr('width'), + height: node.attr('height'), + style : style + }); + + tinymce.each(rootAttributes, function(name) { + var value = data[name]; + + if (name == 'class' && value) + value = value.replace(/mceItem.+ ?/g, ''); + + if (value && name != 'type') + object.attr(name, value); + }); + + // Add params + for (name in data.params) { + param = new Node('param', 1); + param.shortEnded = true; + value = data.params[name]; + + // Windows media needs to use url instead of src for the media URL + if (name === 'src' && typeItem.name === 'WindowsMedia') + name = 'url'; + + param.attr({name: name, value: value}); + object.append(param); + } + + // Setup add type and classid if strict is disabled + if (this.editor.getParam('media_strict', true)) { + object.attr({ + data: data.params.src, + type: typeItem.mimes[0] + }); + } else { + object.attr({ + classid: "clsid:" + typeItem.clsids[0], + codebase: typeItem.codebase + }); + + embed = new Node('embed', 1); + embed.shortEnded = true; + embed.attr({ + id: node.attr('id'), + width: node.attr('width'), + height: node.attr('height'), + style : style, + type: typeItem.mimes[0] + }); + + for (name in data.params) + embed.attr(name, data.params[name]); + + tinymce.each(rootAttributes, function(name) { + if (data[name] && name != 'type') + embed.attr(name, data[name]); + }); + + object.append(embed); + } + + // Insert raw HTML + if (data.object_html) { + value = new Node('#text', 3); + value.raw = true; + value.value = data.object_html; + object.append(value); + } + + // Append object to video element if it exists + if (video) + video.append(object); + } + + if (video) { + // Insert raw HTML + if (data.video_html) { + value = new Node('#text', 3); + value.raw = true; + value.value = data.video_html; + video.append(value); + } + } + + if (audio) { + // Insert raw HTML + if (data.video_html) { + value = new Node('#text', 3); + value.raw = true; + value.value = data.video_html; + audio.append(value); + } + } + + var n = video || audio || object || embed; + if (n) + node.replace(n); + else + node.remove(); + }, + + /** + * Converts a tinymce.html.Node video/object/embed to an img element. + * + * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this: + * <img class="mceItemMedia mceItemFlash" width="100" height="100" data-mce-json="{..}" /> + * + * The JSON structure will be like this: + * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}} + */ + objectToImg : function(node) { + var object, embed, video, iframe, img, name, id, width, height, style, i, html, + param, params, source, sources, data, type, lookup = this.lookup, + matches, attrs, urlConverter = this.editor.settings.url_converter, + urlConverterScope = this.editor.settings.url_converter_scope, + hspace, vspace, align, bgcolor; + + function getInnerHTML(node) { + return new tinymce.html.Serializer({ + inner: true, + validate: false + }).serialize(node); + }; + + function lookupAttribute(o, attr) { + return lookup[(o.attr(attr) || '').toLowerCase()]; + } + + function lookupExtension(src) { + var ext = src.replace(/^.*\.([^.]+)$/, '$1'); + return lookup[ext.toLowerCase() || '']; + } + + // If node isn't in document + if (!node.parent) + return; + + // Handle media scripts + if (node.name === 'script') { + if (node.firstChild) + matches = scriptRegExp.exec(node.firstChild.value); + + if (!matches) + return; + + type = matches[1]; + data = {video : {}, params : JSON.parse(matches[2])}; + width = data.params.width; + height = data.params.height; + } + + // Setup data objects + data = data || { + video : {}, + params : {} + }; + + // Setup new image object + img = new Node('img', 1); + img.attr({ + src : this.editor.theme.url + '/img/trans.gif' + }); + + // Video element + name = node.name; + if (name === 'video' || name == 'audio') { + video = node; + object = node.getAll('object')[0]; + embed = node.getAll('embed')[0]; + width = video.attr('width'); + height = video.attr('height'); + id = video.attr('id'); + data.video = {attrs : {}, sources : []}; + + // Get all video attributes + attrs = data.video.attrs; + for (name in video.attributes.map) + attrs[name] = video.attributes.map[name]; + + source = node.attr('src'); + if (source) + data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)}); + + // Get all sources + sources = video.getAll("source"); + for (i = 0; i < sources.length; i++) { + source = sources[i].remove(); + + data.video.sources.push({ + src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'), + type: source.attr('type'), + media: source.attr('media') + }); + } + + // Convert the poster URL + if (attrs.poster) + attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name); + } + + // Object element + if (node.name === 'object') { + object = node; + embed = node.getAll('embed')[0]; + } + + // Embed element + if (node.name === 'embed') + embed = node; + + // Iframe element + if (node.name === 'iframe') { + iframe = node; + type = 'Iframe'; + } + + if (object) { + // Get width/height + width = width || object.attr('width'); + height = height || object.attr('height'); + style = style || object.attr('style'); + id = id || object.attr('id'); + hspace = hspace || object.attr('hspace'); + vspace = vspace || object.attr('vspace'); + align = align || object.attr('align'); + bgcolor = bgcolor || object.attr('bgcolor'); + data.name = object.attr('name'); + + // Get all object params + params = object.getAll("param"); + for (i = 0; i < params.length; i++) { + param = params[i]; + name = param.remove().attr('name'); + + if (!excludedAttrs[name]) + data.params[name] = param.attr('value'); + } + + data.params.src = data.params.src || object.attr('data'); + } + + if (embed) { + // Get width/height + width = width || embed.attr('width'); + height = height || embed.attr('height'); + style = style || embed.attr('style'); + id = id || embed.attr('id'); + hspace = hspace || embed.attr('hspace'); + vspace = vspace || embed.attr('vspace'); + align = align || embed.attr('align'); + bgcolor = bgcolor || embed.attr('bgcolor'); + + // Get all embed attributes + for (name in embed.attributes.map) { + if (!excludedAttrs[name] && !data.params[name]) + data.params[name] = embed.attributes.map[name]; + } + } + + if (iframe) { + // Get width/height + width = iframe.attr('width'); + height = iframe.attr('height'); + style = style || iframe.attr('style'); + id = iframe.attr('id'); + hspace = iframe.attr('hspace'); + vspace = iframe.attr('vspace'); + align = iframe.attr('align'); + bgcolor = iframe.attr('bgcolor'); + + tinymce.each(rootAttributes, function(name) { + img.attr(name, iframe.attr(name)); + }); + + // Get all iframe attributes + for (name in iframe.attributes.map) { + if (!excludedAttrs[name] && !data.params[name]) + data.params[name] = iframe.attributes.map[name]; + } + } + + // Use src not movie + if (data.params.movie) { + data.params.src = data.params.src || data.params.movie; + delete data.params.movie; + } + + // Convert the URL to relative/absolute depending on configuration + if (data.params.src) + data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object'); + + if (video) { + if (node.name === 'video') + type = lookup.video.name; + else if (node.name === 'audio') + type = lookup.audio.name; + } + + if (object && !type) + type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name; + + if (embed && !type) + type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name; + + // for embedded audio we preserve the original specified type + if (embed && type == 'EmbeddedAudio') { + data.params.type = embed.attr('type'); + } + + // Replace the video/object/embed element with a placeholder image containing the data + node.replace(img); + + // Remove embed + if (embed) + embed.remove(); + + // Serialize the inner HTML of the object element + if (object) { + html = getInnerHTML(object.remove()); + + if (html) + data.object_html = html; + } + + // Serialize the inner HTML of the video element + if (video) { + html = getInnerHTML(video.remove()); + + if (html) + data.video_html = html; + } + + data.hspace = hspace; + data.vspace = vspace; + data.align = align; + data.bgcolor = bgcolor; + + // Set width/height of placeholder + img.attr({ + id : id, + 'class' : 'mceItemMedia mceItem' + (type || 'Flash'), + style : style, + width : width || (node.name == 'audio' ? "300" : "320"), + height : height || (node.name == 'audio' ? "32" : "240"), + hspace : hspace, + vspace : vspace, + align : align, + bgcolor : bgcolor, + "data-mce-json" : JSON.serialize(data, "'") + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); +})(); diff --git a/wp-includes/js/tinymce/plugins/media/js/media.js b/wp-includes/js/tinymce/plugins/media/js/media.js index c96fc4fc7..43e9ac409 100644 --- a/wp-includes/js/tinymce/plugins/media/js/media.js +++ b/wp-includes/js/tinymce/plugins/media/js/media.js @@ -8,6 +8,33 @@ return document.getElementById(id); } + function clone(obj) { + var i, len, copy, attr; + + if (null == obj || "object" != typeof obj) + return obj; + + // Handle Array + if ('length' in obj) { + copy = []; + + for (i = 0, len = obj.length; i < len; ++i) { + copy[i] = clone(obj[i]); + } + + return copy; + } + + // Handle Object + copy = {}; + for (attr in obj) { + if (obj.hasOwnProperty(attr)) + copy[attr] = clone(obj[attr]); + } + + return copy; + } + function getVal(id) { var elm = get(id); @@ -21,7 +48,7 @@ } function setVal(id, value, name) { - if (typeof(value) != 'undefined') { + if (typeof(value) != 'undefined' && value != null) { var elm = get(id); if (elm.nodeName == "SELECT") @@ -39,9 +66,9 @@ window.Media = { init : function() { - var html, editor; + var html, editor, self = this; - this.editor = editor = tinyMCEPopup.editor; + self.editor = editor = tinyMCEPopup.editor; // Setup file browsers and color pickers get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); @@ -53,7 +80,7 @@ get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media'); get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','media','image'); - html = this.getMediaListHTML('medialist', 'src', 'media', 'media'); + html = self.getMediaListHTML('medialist', 'src', 'media', 'media'); if (html == "") get("linklistrow").style.display = 'none'; else @@ -77,9 +104,14 @@ if (isVisible('filebrowser_poster')) get('video_poster').style.width = '220px'; - this.data = tinyMCEPopup.getWindowArg('data'); - this.dataToForm(); - this.preview(); + editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor)); + + self.setDefaultDialogSettings(editor); + self.data = clone(tinyMCEPopup.getWindowArg('data')); + self.dataToForm(); + self.preview(); + + updateColor('bgcolor_pick', 'bgcolor'); }, insert : function() { @@ -97,7 +129,7 @@ }, moveStates : function(to_form, field) { - var data = this.data, editor = this.editor, data = this.data, + var data = this.data, editor = this.editor, mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src; defaultStates = { @@ -144,14 +176,14 @@ formItemName = type == 'global' ? name : type + '_' + name; if (type == 'global') - list = data; - else if (type == 'video' || type == 'audio') { + list = data; + else if (type == 'video' || type == 'audio') { list = data.video.attrs; if (!list && !to_form) - data.video.attrs = list = {}; + data.video.attrs = list = {}; } else - list = data.params; + list = data.params; if (list) { if (to_form) { @@ -209,6 +241,7 @@ get('shockwave_options').style.display = 'none'; get('windowsmedia_options').style.display = 'none'; get('realmedia_options').style.display = 'none'; + get('embeddedaudio_options').style.display = 'none'; if (get(data.type + '_options')) get(data.type + '_options').style.display = 'block'; @@ -222,6 +255,7 @@ setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks'); setOptions('video', 'poster,autoplay,loop,muted,preload,controls'); setOptions('audio', 'autoplay,loop,preload,controls'); + setOptions('embeddedaudio', 'autoplay,loop,controls'); setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height'); if (to_form) { @@ -252,7 +286,7 @@ if (data.type == 'flash') { tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) { if (value == '$url') - data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src; + data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || ''; }); } @@ -260,7 +294,18 @@ } } else { src = getVal("src"); - + + // YouTube *NEW* + if (src.match(/youtu.be\/[a-z1-9.-_]+/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1]; + setVal('src', src); + setVal('media_type', data.type); + } + // YouTube if (src.match(/youtube.com(.+)v=([^&]+)/)) { data.width = 425; @@ -331,7 +376,7 @@ this.panel = 'source'; } else { if (this.panel == 'source') { - this.data = this.editor.plugins.media.htmlToData(getVal('source')); + this.data = clone(this.editor.plugins.media.htmlToData(getVal('source'))); this.dataToForm(); this.panel = ''; } @@ -379,6 +424,42 @@ } return ""; + }, + + getMediaTypeHTML : function(editor) { + function option(media_type, element) { + if (!editor.schema.getElementRule(element || media_type)) { + return ''; + } + + return '<option value="'+media_type+'">'+tinyMCEPopup.editor.translate("media_dlg."+media_type)+'</option>' + } + + var html = ""; + + html += '<select id="media_type" name="media_type" onchange="Media.formToData(\'type\');">'; + html += option("video"); + html += option("audio"); + html += option("flash", "object"); + html += option("quicktime", "object"); + html += option("shockwave", "object"); + html += option("windowsmedia", "object"); + html += option("realmedia", "object"); + html += option("iframe"); + + if (editor.getParam('media_embedded_audio', false)) { + html += option('embeddedaudio', "object"); + } + + html += '</select>'; + return html; + }, + + setDefaultDialogSettings : function(editor) { + var defaultDialogSettings = editor.getParam("media_dialog_defaults", {}); + tinymce.each(defaultDialogSettings, function(v, k) { + setVal(k, v); + }); } }; @@ -386,4 +467,4 @@ tinyMCEPopup.onInit.add(function() { Media.init(); }); -})(); \ No newline at end of file +})(); diff --git a/wp-includes/js/tinymce/plugins/media/media.htm b/wp-includes/js/tinymce/plugins/media/media.htm index dc4354d1b..44d96a042 100644 --- a/wp-includes/js/tinymce/plugins/media/media.htm +++ b/wp-includes/js/tinymce/plugins/media/media.htm @@ -2,13 +2,13 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#media_dlg.title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/media.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/mctabs.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/validate.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/form_utils.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/editable_selects.js?ver=345-20110908"></script> - <link href="css/media.css?ver=345-20110908" rel="stylesheet" type="text/css" /> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/media.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/mctabs.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/validate.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/form_utils.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/editable_selects.js?ver=349-20120314"></script> + <link href="css/media.css?ver=349-20120314" rel="stylesheet" type="text/css" /> </head> <body style="display: none" role="application"> <form onsubmit="Media.insert();return false;" action="#"> @@ -29,16 +29,7 @@ <tr> <td><label for="media_type">{#media_dlg.type}</label></td> <td> - <select id="media_type" name="media_type" onchange="Media.formToData('type');"> - <option value="video">HTML5 Video</option> - <option value="audio">HTML5 Audio</option> - <option value="flash">Flash</option> - <option value="quicktime">QuickTime</option> - <option value="shockwave">Shockwave</option> - <option value="windowsmedia">Windows Media</option> - <option value="realmedia">Real Media</option> - <option value="iframe">Iframe</option> - </select> + <select id="media_type"></select> </td> </tr> <tr> @@ -214,6 +205,41 @@ </table> </fieldset> + <fieldset id="embeddedaudio_options"> + <legend>{#media_dlg.embedded_audio_options}</legend> + + <table role="presentation" border="0" cellpadding="4" cellspacing="0"> + <tr> + <td> + <table role="presentation" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td><input type="checkbox" class="checkbox" id="embeddedaudio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td> + <td><label for="audio_autoplay">{#media_dlg.play}</label></td> + </tr> + </table> + </td> + + <td> + <table role="presentation" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td><input type="checkbox" class="checkbox" id="embeddedaudio_loop" name="audio_loop" onchange="Media.formToData();" /></td> + <td><label for="audio_loop">{#media_dlg.loop}</label></td> + </tr> + </table> + </td> + + <td> + <table role="presentation" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td><input type="checkbox" class="checkbox" id="embeddedaudio_controls" name="audio_controls" onchange="Media.formToData();" /></td> + <td><label for="audio_controls">{#media_dlg.controls}</label></td> + </tr> + </table> + </td> + </tr> + </table> + </fieldset> + <fieldset id="audio_options"> <legend>{#media_dlg.html5_audio_options}</legend> @@ -246,7 +272,7 @@ <td><label for="audio_preload">{#media_dlg.preload}</label></td> <td> <select id="audio_preload" name="audio_preload" onchange="Media.formToData();"> - <option value="none">{#media_dlg.preload_none}</option> + <option value="none">{#media_dlg.preload_none}</option> <option value="metadata">{#media_dlg.preload_metadata}</option> <option value="auto">{#media_dlg.preload_auto}</option> </select> @@ -286,7 +312,6 @@ </table> </fieldset> - <fieldset id="flash_options"> <legend>{#media_dlg.flash_options}</legend> diff --git a/wp-includes/js/tinymce/plugins/media/moxieplayer.swf b/wp-includes/js/tinymce/plugins/media/moxieplayer.swf index 2a040358df0d1f8eb784d2ec0919626198d6eb47..585d772d6d3c23626fddfa58c4220b056783e148 100644 GIT binary patch literal 19980 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 Mul%!5DR})6016MjlmGw# literal 33931 zcmZ<`59XRF%E(Z`_+~F>Mexz@=5^1XshN9T-s@|=>w*|p?BsX40kftpd!wLhy>Llx zUUbInNlTW#5p@X=GiMQZVg0#C>9<l>Ll+a5S62>GR|8X%hlnHN#P4VBsF>?6tvh=E zedWFH|Nnfp+4=p>&h&F{($mh>q~$3eowHb@|9?P;!lJ55_COKS%ikFmt$4SrNUz#M zKi4JMw{)$g^t`GgAyGP|H$6QktND7(nKCKEBvfVP=1rR>g`D&}d6M(M#DsY<*%!^# zuFP7TRMgQB$5uRZ<*IW*scU)<FnwKmtjfE8hQ#hGpNy7Y*i{v5Di|3zEoFt-6^Sg} zXDX$Oq*$g-Pc3!}?!7l@@%q)P*J)i&F7)i>eCCyWv&Hiln=@1RTJ!KSe<6vD^4?RI z-kPvj(|nqg(w3`j$2zWX^gfth@L6ZZ&X|sjK5wJ1H_DS{Zd6-&E=6a(ezQfPLRUrE z*Cy91SEq-C&(!8!Hs{wZ&aKBhx3+i}9JNVRYrdD1bMj%q;rFY*ZWaCdi_6*Xpu?lv zKYbpp*e+4@>s7Y$70r)=C$+ZD>Srr^JFlhqy6X0~dI1fVAv?lr1GZRIZBpBHUEr)o zuieg#MNb-Dc`{3xww<|mvek3S)#3w<^80T01tq!1)%<%iLH$nL>!+ojSLU8t{{HT6 zb1%InFU3atX1-?!c<cV({NNSL6f)`Xr$wt~?aDgLkeoa<v0!W6rh_hbKg&Py4g4Tf zcemQ<ZD)qTj57gAwn|q!SDoN+&Yih&&#G;U+@D-X%5_RhIWJRQ`CUqffg`efb8696 z#YL<3xTj?9J({$pw`WF3Xx_><f-`yQw0T2Cr;07OtfZ`SY?s``2h*;cik5X*d?cqa zrn5)m>U7@~29mF{9b-0WF;(yGkB!ea+j8{2S#|TqUHgs&1jS#UCeER>wpZfj-zm;h zGfs!!p10%ItE>!bw!_SSR)prZgmlmLw7#d%l>2M5gp}??!8senK9$Wl7_x5tRd=@; ztCvYEICEv9VCu1~#Vg%YrcC>z5Z!xq!a}iN+Z031HjxKyZqaEMr-wDm^F3l%?-BOc zXszM2&#tGA>l?YVt=sf&N6IUuFR42$zjx>~U+_JawR!Ua#btA&#CB#Eu2NF?tL7}b zMcqAQ6|c;N2QgVKvx1#hajugQ5Q(3z<ndG}YnpOKOsbM{#rv#KmG|z~WR=ptKZsiH zv1)^l@|D+Rk_C<1PX|P%Zj?APt*l~~`bWe6?<X~`-sEkiB(>^Hs2=Mjw_P#X^|v{* zCogtAb?ZsS+%0A^qL%gQt6$h8s@8lnW|g_6c3b!C&3P&+kK3LFut(}fS54{q^QP1| z_{2n$^o!e6_fHjYPc2XDUOoR(RiE*UsGld)?W^~;b2a_uanJg(=YPJI@_OA@uNRbk zKBec|u`NLP{blEK8N0$xvls82_MmxZ)YM1K61TNZev6jT=X5_5=d~bJ=A>`$pWj{C z{hVSC0#?3Fb(md~o8maTCO6$ldd+_uX%^M@K6PHvzuX^Wn{R!)VW-+Q*==E&wF>Fc zo=4|)Y`z$^DvPHrt9I_q0KQu0cb6T#C&#sgZ(ez!=B;eC)r4QKR&l*x_7D}2x=<^$ z@qXB&H(T9$f0wm8xSR9)PWWQD<Kx3+*YC!JhemTp-Cp=(b#Il8NaoGHh5ao~53IM% zTJ`Bu)^b1HW=GAuuipxS9JgA81ZcfbD4u(e;qM{?7LP-+^KA<j3X2$h-T#IoxG>F< z$t!#58-;C=A9k&scR?`Ly?n*7BA*G5s*3wP(rtgU*DiKec=_3Q&Z&?KUjO;OP3|+< z`bzufqkQAu+>+F_Y|ObuJGLFzWo8*=x^LTzTUq6LdwVt~?cQOzI=e`13%9#zR%mxr z*~}gDKAgQW&$@47bGG;kjzy`D3;P7;zPfSs{Qs)$oyIo>%QNOKS(LUdFz~<qrTPyi z4<xhh+hH{MzunnGSB^%y{P*XP{BWmnzQE1P99wU$`xAUiN^z^Hc$V?ew?@0R-71re zHoaF?aXahqvsbH%rq^}qhu^z6FRFCc;t30vXRo&XRJUL&XRl0D!`{`0YA3yZbModr z*}IHB)jxhp&AS=$DtqDeVlCmgqOA)L2D}w{ap^1LOD!u)Z6)Dn&EM9%n|EY+Q@^48 zzrE|D^Ya%pC_j5~z46KN+2{D;uKl%3<d;)UX)tfsP?)>umQ>B3c%z~he9jy>k}ox* zIo(8O38@F~U+7j68eaNg>iQ{%#irT(dwObnldrS>zY10JU&80-eXi=|da?7}(;Z9y z%H94}@k9M@?fs59&x1ciB;0$Hy#J~F^`G`}*V)BwKi!yh<M{D-yEXrxy|X^8-)Hgp z`dQiZy6`D;c7^@(+WGL+xu?<nwbiMgX5OD3YhC(rcJ}!<dnz}@Z+munO}A`a%BH+| z8qrUG|6MxOUsv+Sms74cYd4#A@A`l1_tCt`*Y+m<{BwgT`H@2Zjt3TpSKBVjv;L9f z^>9MY;g-FU-pS8?>DSa<Uh?ago#F3;H#d|!UfA5eyU*|D*SPO%%C+uC+Wh@|G?xGL zq}6=x|4-~$aq0Y~Gp{ZbIMqj_ZOXb~xB9#NskXg4zfOK2JwGqn@bT$#_aym+x7qA! zzkfGYy~%oO`Jrpusx1GWnB70;cFA(T)L;9)_t!bTx^%qnr;mkD!K;(EBhz>EYMb%x zTzUWV4`KGYd!HwM{rV?#QPKICk&E<;cXyfj+N}Ru<sBOM=SU&9+MVj}XL_{L>-U#_ zyvm$;{P>S~vvw(G9{N~%e*OJY>oU*BFAqGf*VUc*@lk$xo{YX>&F8wkFJD}EINwYv z|Idb>0q4TAzV1qw+I`->YE{ZDeb#xq*`MBd^|ib3``yH5_Pv%RciH#X)g}EkFF(F+ z=H8scpAODGerCtl!&jf$uD?G+$ZF&9Z<3wX_0pSO_&hqdUhn+wPl11*#M|-y`1|^e zV7uDfnfre2c>eTzj{NT4xaf^mcRtT})~#t-UjIAm#*cKH;(sT$w*LGUIc-z<>%Gqo zeURR^<FB{)p6F@Ck3B9PDZO=j|2>;jn}X-J-hHS$y{O^wbJ^>8x0c04{(iT4_q+gk z!@9jE4GIOze_z+%9lLvpn}6o{-pZi)8P>bs++KOTtnKWNcbDJq4x7(dlvH}>%hu=L zE560t`F+Re>#p6+?3LfP{QOh!^TxaE-S6g9FMPP&@3d2%kIlDpC#HtSTi5R@IsDsr z|82|dE|Wjs+q?hWl)0HZIM>%+<Na>`qJFEzm+iebow=vSHV3WUW0AY><?-+Tex=4& z?0?a_yMN<Dca!w4^1S?vS3i%JZ&ug)^=<jj%jxrcqs!jC-uOIs^Zkf&+r25@&rP(} zGxM0Xu#3O>)rYm78~=CCcp5wJ)z9nS_>BMmNj-gSQFUJWv-16)FF#w&9{*?0<*(fF zHKmUq^lBgHX9?A*es+CTvN?b0nR=Uj$KNkM+h*IpyS{MY>B+PG-?s<(MXk!_n04)? zfAXTb=dWY0*%mEde#Ew-`~Lg6&)M>Cd@FsrMc;ec`5m#P35kDB`0h>nQ@T3o$-2zQ z=lkMke0+OZJbv!X%_U2dUX`C-{_ju5pL5d3-TKeGFMIm(`QtYA_5VLzd#t#%dAa;M z;m<SE&)X|M(-xk0_fP7!+bzaypT*PjuY|98U3F#B5Ba0T>1p?F&)o5~X8*1C+vVh| z>mD1g{-yi(kHe*Rtd}><FY><gFY1rV`;F1tMC;=}y}YrP`?{q6Y(ABq7vKNx-4vf6 zA6ft4&hpRKYwTZK%lw~gzHV>*yOTRQq%+so7_BOQv+eKUZ+d?oe0yrTx$b90cG9JD z_iO6z%5VSI+^_!TUDB8Rn^TY7y?x)ue#O1=Ot1IF#{NgsVt=iACc3?P-|?Am<^L4s z{p0=IKVhx^^{adCe!lUi(Kb&ceua)j$;&hEs_)O4@%u~1pHpAHo>r^1uJk;y<yObi zWdFZ{W#4{3XVa~`xkLNKqYGzK^XEvv`Sy0^BEi|0-`6d$ijDkye12Z~Ga1W!iI;ZX zf4$G*+lz1FPMglzJ*!T+xX@L7IbZi~)69&TbMvIj`SN${Og+o`dROP_XEL+ye>m!X z-PkqWY-!E%4fl0A7k!WaI#=rX&BxmhZsIJR&G+=qP5!MR*PrkH*=X;3*Z7;mkv{d^ zb)T;aUlw*1YBhcRW_$VhcQdPN&V4!E_;cZBF0tGfJ5y^`yxi>PU3`Dv-Y?hE)y<|| z{a^ZMC;w)jhhOIQ-f2kod@tg{_kY*N!}4Kg{A<eMZ(R8|ciWnuDIeE*Th4QzSGVos z`uS$X)%G&guTCl7ykBQ?{B8U7=WVvtr*=fE@3Yd&tGhE#y3t?$`6a#mlDj^YJpO%r zPhH%tJy(CvUC!1&+aPfI|0yp{cmCf0JLB8b2eZ`e_nIia{d0VOO<B&PxANig4W~XY zd%2oX(*3gEy1J!_A&<<ChFj17mpnb=)`YX`=kT15{xIp*Dt*I0H+JZkT-s!4{QjOn zZE*dcjK6Kq?Q8$7Ir&YnI`!3|@F2Z6^KG&(O}oBc@3&$7_7lp+;vw0ARS|dH^(EcT z*hk&ZiG3bilK6CPhi(0ydXGwXv&y^sUf=g$?YTizBhSoTY~GJrm#P~_WIiWf?%(~) z<m89t+C}MqexBa9A)bGk%&)qqll$-R{{Q%C*4IvR{nl@{N?#v3y|vvwPVURSvy+AE z7;Jx>IMKUwuGXW+ZF`OLj_;n9d91PU`S<feyJL5TZm&Ku`;kfXxmAhFmd=;E{r&LW zhv~bIpZ)*l&F|{(eU-(b2hP9#ts4{n|L(fHOSQ+kT4ufV<jlP8R}yEO^R|mIS^9j} z^{(Y|`?mevbNu9l#mj<C-^-o-wafpn`m>{k>-}zj`7`y&<?r{b_NCw5HMMn@aNa|E z`|nS#zRXw6oxl3m%QpdE=T^_p<BW{{vC*>R)V~$Wcge4dS+}?P@%lsa+1}2a`1f<@ z_tm#vU%P93j^*FJ;@97D+3h5DJ$*i7Z+W`8p17;?#PzejUG6z(T73DOj-Fv%u4P0z z&+Z$4f}j2V{YSk#v!>?!spUm}Vec=^>;6~#eAUXx_%~LIY`2&FZS8*-_w|?E{^PUT zHp`34MF00a`^5g-xxF8+mquSZ6+U^5cu<)6|4$!hx@<piv;17#K4Z35x#xAQV?uAV zJ5Jx_J>|4od_^JCiV5F^dUofPre*ovk=yjDHT%~5YxQ3)UHmY!e&4&|qQkwRi|y`I z>MXK+$MN^vFTQ=Jxt42$sq_oSuJE`0@{nD+%zwRPV9~FWU3!m>T%Y~?-J7DP&)YWs zD%HO&5?DVkvf$&&TgJOfzE1zvqx)|Avma}HrJ0s><gKfV`5RSyX=nL7p1%oAzx5}J zpREYK^TXrD#K`CT@w+BhJY@dwENj2>-ru{kf+w{aKiU>o^?u`Le}BR9&1+B8Wxk%; zx$~X*-~9X&6*s^Cc=Pn{rDVU<ce9Ji(jTs#f6mf=-IGhZrP*?|qCzCf_Y{0S8uNI@ z2mP|COM1oT%HLUkd*)Yv_ME?Yzn88_+#fT)w)Rozon6J{EU~w03x8fI{p5VboLeu? zQhZBPa_ybkBYm~uVt&;RAN_W}&SSqn`NvxM@cqC3E}Zwh%k-|F$=w;ouMU6j>)pM* z=JC~od6$=+xwqJqm*=hJ<MXGb-^I?VG;=l7-uvspYw_A`>b`>7MRnH3CO>{{?Bd+E zp8I@SYtD=r#!HWvCnqge*#0=LT-|nmc<$O0Gj{y>x<Pp6dcK<M)Qi)z+4g-;-7de3 zU1oak|BR%~Kj$t_tN3G;dMWg%|6f&axz#f^U;BLFRPbRp_A?jT?$@ZkUYS^Je{Yxd zm+!5Y-{1XPd-=)hIqweW^uJVBJ9~HU<IkrT883FJ*L}aaIP8VI{dtMt@1K`;?(Kip zcg|<a(Yf`9t8X1S_GOu*_uq6MQP%rc=V@!-lni_R@o<F6_9cf`?o$=E`&0Jr*2VYJ z?g`(G`~A1EG~7IQ_SA20Pb|91TxzVh&uFE|!n7|PON--*`EM5dYQBGr&*qXy!bzVq zyQcr~`~0*29qV20y+3d7ZE(*2&w1DR@70;?(^M|Vv-;m`NaN4?_c+V%hIsO!{nDln z4^R2^GkN3XBdhM`o5=5Z{6E!$zrV>O`-al?%+KOqZx)t5?2(-AH|rlyXv~_m^Xs2E zWCfm4+OB`q`gmQ<d&$>JuUbl$+OEryEib(JV`uo0-TN#e0zY;x&41DNdUF4}`4v&y z|LrQPnY{7#_Q_68=KFs?f3aJ(F3Q^S?aqeUN8QRnX?niCk^B4u-tA1+D$+k=t33bf z^Dp~%&9eLdV47!M<*#cepQ`@8b|)@0YD?~AeKq5tch+CL`VT$g?%7>e{{Er)qj@oV zjq3t(A2n@}DZaNoa<=w5Tic-GIXeS)CSUw;|4!Y@z^Ezv9vq#pWanJHl4#?^lLt>v zpZ_;Xc<Pp;|L+JM?%D3=(zouf!namw{bjlD#04$>KiQ_<<tBe8?21K6$(r<)|0evq z@oI;?+S#2a{C+)Z-Ttar-S<Q6+=|-b<eYTp{r<;vwG7Iy@V%(~d33#2-;|f}d{u8+ z7d!u#*;JT(=+f1qJge*fpStW9j<5gu__p!A*B=&Ue!Bg*FVyGedAp78ds}CI)o;6P zwEgY#GpoIx$KLtyZ=rJN$#*B)w*OwgzUkJMgObh5zuC?E+WgAP>y~`weaYub=35u_ z?5#@L`~7sh&Hu`}?>o<m?%(%O@^8|&C+ha`e{Nlfe5c=dW73Th=R1rSXMA42w#L8o zP1#+Z+jH{s>h`|<tA2QSsJ35TO!sHa-*HdZJ-6cjQW^Iw+rw^U<mVe_<D%zjL{+`c zc=>z2mj8@%{C`)N{JEk0+IrdAYVB92E~yKf)tY?hJgHs&ZSA(bD`pwK{_GzYoy|MD zAhoQy=I@WQ?|B33llbQBGmo(~i{7kJa4C6bwR4<*L@Rgp+glaqI~A)hU488ThWqTw zxxb%Z-L;_MeXf4(juna}f0x!aK90Xv9%Q=aVe{qWWBES()%t6nw@qHY`d4V{yLq8P z)o-3W-(Odscr^3vSGlL`)^c`nak0NrLmo2i|C?{O`O~M`)GZ$`)V*J!JIQr<S50{R z?-N&g*VjcYd1qC%<k56dWxq4wwU0K>x^0@Y_3hg)(;xr&Y|p_HSpI+W!v65s{j-AS z@0ogF?yFx1Z*!jCENvbW5_@yc^SdiK=kF=iuYSXCEVgG|uYGCC<3nv9yPrL~A`>`G z_s?6d%gMJo?Ag{-yxh7W_u2RRdY&ofJ&}B+?w>z>`FK}F`1tw%QqMj2%bR?(PnF%1 zTf1GS^jXW_(^_`cKfk?QtG{9Qdz;$}pZq#suj8|4Q&G9cDY2#RTmLHORj-x1_Sfci zZQ!A0oA-y??fl+gr?nwKJgB7b-rJk&uhi^JE;(->r~OlB<-64@zWCbziTZPKiv6*( z7QcUQ?w9ws{n?c9tnupdWwm^!etX`QJifrI&ZXby^S(0W$g2GG)W84kuKL6;C9bQf zW&0`i#kbp!|GlxzPkAv{SoRXT<JG%0r?0%&c(Z2Z!{_2>=D&|!xjVpc=b~RT_4TG) zYkQDoTK+xwzi09ExBsd#wx9bcoK;{P$oK0@@2l-h;(K>J{~O)!+n4<Hex8M1-Vfee zUO#p!zx-eMshfMYS=jHemi-~Yv&<5Xr50Bm?yL-0e5Ie=e~sR+uH84XzkK1-O#j4p z@1Ne|Z)*y>cIeK!C|$hidVkk^xji3W8}2vZ3%!5O;<4zr{%-l2zdy{XZgQK(ujP}H zy>02dXy2REIg(oobN2J+@3nb9dHcF0t|E1N?n%$exqm?W_5Kt4S4h|@e17!ke?^qS z<HvkY%Ip8FJh0Z>Zr8Rm$~vV-vZI~#zx+&#tGGG)9{Z)&`y+)m&3mSI&VH}OrrSqO z=b!(f`|?Be-S$=M&fF`T{5N~W^LwH5g!Qwn8l5VVbK`Do{NT(gzSr*WtGlilTc2Ok z$(y>@DyOpc!fWo+v-b1I)K{l`*Inb@Zr&~<wa?vt`j!`)%(JJ>e{e>*I<Gou^K<c+ zuTJ-Oy-2+H`H@}S^5gu6`}v}cwi}w&EIyui@$7`_W%k?6e!NOLIy-)U=#*fC%8p&H zPsi`saoi^9|KjU6O`^YF%6olH#-=3C@zAr-(g{zOKJ4y0z3k1rf4lSV%-*#7_T}|Y z^sRSpm-wVx>v?wP{7>fm5e83tvUYs=wsGeIMIK{2oA(zo<zv0iwQGJfXVzNG_DXMp z*SD`Twlkei)jhGZ`g4#^#*r`8-LJ0Qe(v}G|5?NCKi4e_ld3Mr+kXFIBKGdvY-S0q zp1Pg#l8;?ggT5qm{gSJ^|37H5$rT=pnM*$Y>f)*m3KV5vo|GlEdeRw|gl6$D9<`o5 zUPiM|?JC`UzJAfYH+}&Dolis4&gj16&yHrB+*7{BG$O^h{mb*aR(GE7UXtMynj1Km z(`hPqO2F+JWwtNrhQfDLD;Rm17~hELNAVn(%{8HMz0{s%>bi0!JC@WpZj10)ljC(D z$M;q0gD+pNPOD+4Inech!8vy?`^SKgWyb>+6*ZSUSTJc(jqiV^nKvIEnbG6cJ%@jt zzi#@J>o0wONipjjpQ)NARM_vexAMZ0TL;yW=N?R%dFNu^BO!s9S&ODDNtvo8s~{SB zb=s;Z!Gy_s3}3N?ef@DG`QW1_wu-P1H`&zu8y0$gX6Kc-vwy*k1MU2r#?Pe<-<?eQ zaB2E<VfnwS&nTQo2>K!!l3*n1dnE8ydVuG_35v~a6`Xckf33=L-YMgi+>w}Md%%9m z_f%t%v@NIByB4N>UMhU|(nj(4Yt3HAnZL0;U%roPk-)u4EBWKL9MPV~%Qnw&$<yCr zPF5e@|7b~{?DF7ymA53rZIwOsY~s!9H(PzZ6#XTt>3nh*x0}f6({s<yn{asD%%^$v z&o(Q(+E?PdHNRC&cyfn_PE~O0!9%yWz2icoQ&%?qGC3+xKcAl=HpG<Shj#RdLib2R z-eapi-S~fuUEcA1*v0;^&IRX;EowJCI$6pVbne83uLp&qIVVi@+a_V6Ho0z-^!&45 zr>)A`taJXM)=IN0VG&xQ3_?2W1u|vk$N#J?vD@^HnRf@<6(?5)i>Vw^Hs|#IXf&I< zicN@AHvDW}S9qxV3g-!}m_mb3Ugz}BiypqTw?bl#yTsd#YYeA^zdXu&<7jaH#uulx z<_hhN4zDl%()?IkWVW^7wdG|7f!Rs{@<I-O88-MurONeOcRQUL`b^2-!ga}0M^j{{ zNG{kO;#J6cz;Noc>$5qyLe7Lr_o^MsG4Pqtyv^sy*Co4^U6=gx`tg;!U#W*#$LwYH zSqa})iFqG2jHPuBb8I^=TrgMQL`pkP{-W7$dRa2M5Bgefsjm+RaOUD-(>nE2%_Gi( zjZezR;qv|50}B?qvM%^)a+phG>V#arz)y^B9@3pt<~)});E34ZSF+*97QHDMqRoLU zLF~<UdP-jx^mLXer{p(vPT_yIUNUmh{r&!R_S+9i$=EEkW#g9&u~@QTMMr&!yxEHX z7Z^XR+n$z?*vS6hq{QI=rSAGSrWrpRb~F2_&-dBQ>^FaPbNjOJ^-XcAM;EN?HdPQ< z&N4kyt}(A_l6%aYKbu9gyz5d!OLwxYQa+$}E3<2DaU)~s`t(%}_Qnlzra!E-6O{P$ z1j9uQuP8JhZQgS+`qkMQv*Zn~f{lTvSnssXn9_XZ9@}aO8Grw^lP7=o+$DF3M}j9U z@ojfV-VWZ`8^f4Y{az$3c8x##z2)h?@7vj@-ifegNb0}3WXYOcTvZ}J4>TpsNj~b_ zeTR!pOq@saBHu+GjgIPq%RBwo%(zl-ndx4Ws-O}t>0%nXHHoQObn;g{&i$|Wx!os6 zuGy{l{%PN)3lX<6H|kXeaPQS^o_+oA-B6)vCmXuVHp`@(UQp%zoPGI`t+pNp)$?za z?TDS-w*F)Qv-Z^`B{F+;v-8*F{jm<(ee2@!wX?Qa$QL|LD|GZ-xiE(5*MX3<39}MY zCP#!v3kC!QCF*RH@IJ*W6Bu*s)+8_IQrW|f-{=13XUqOxo^@ew_p6??z-d-f`T2Hn zX7XM!yt9&JSJIu{RIz5&#_P9wqL!YU@FX-c>r1J_@|6!K%{;i`>Pf8~OO_r`HSP^m zUp@Jz&Ek!>7OZb=H!1K8WOVlO5(|zG&1Tdxjx^dJHz_CS%F0(EYL=#^t)70T1B_3; zocYqHNG(8fRf*{2NwX#%T#~xticeMAtge$Dr_ZDqUD|wUW>3$V6g6dITjxXkUN)W+ zIS#Xw@80ypo%`PRUi&G!_mYpgwdu;rSjMq&{QSKscJ8ccI;VU*KZ`4?E}o*1nb~0! zBO~m<z9>QDj_Qu=f}Dbwf|`ORqxhd4LF;2WGRlv1M6UFCx2)j%hc8uv8@J35-Ke9S zI<Y79iB3_nB>%K;DU$lrKBh^^Py3cCX+P~_x}@r9mJL1%-AxgN2HjR0d^EH<lV@^> zm8Q(}2opMLbW!KkkuIy#O#-J?HZ4+_7Pzrzmg`9!uZg7$$4h21oiq~YHi}f6omzFG z=)gwx(@!>CGP$-}{Itl1o@t_A(*otEy*%CZYvT(0ZnjNl6t1NkbhmBr5$x`YH1RQ$ zvFS^==pojdH1nd4aa(Fp#FFHh8+C#Y89k1;A0#$)quo=T<OIn+S5ckVlSZLB#`99u zHu#u!XGM7Go|cFVIsR)_<gr6WUv(}YFq#~(Y+|a~<})JGW}Y&-9Fb;q`b>hL$Gnq9 zz5*W>cTAlXktQ~&w{<zow3*E*{mKf@6~jKU+?nsP=04L7{if&36?XbF|K<5Jzx99d zhj^a<&maD0`m<1C#`FjOx&BN){6F-^ezyPDAMR)Rr~U9h+n?}*|Ls52bN_pPpkDTm z`GI=nKjsJPxkaA47u@In-~8df(7y*IQj0$D-r3*!U-CzNyVZlz;x4bH0c(s_Yw{iq zy8BGAm5F0%npmBVN`J_kfUYi9zaNWl>@#_mQ(L;{dF8S5ZvKlHPqZYhe!1+pK-XI3 zc{&A8CF9*pM0ZOy?)aF$c$vAN=x#Avx1;NhPd{7H<q^CvTJToeJ=fcUf8}m9-gB2< zu(sn~TiL?78QUNHTIf)xGohO0lW^mo5QXntPwX21_$b(mpI~PC+3FxC<gwbpjQdGq z;~y`DevT)BjW%i%j<bGhaj4Uspw9Y9#On2lxy4PdD_iC{cTe<jTd1HmJ*q{)d}51w z#zcR;uOcEwNq>q~TI}c!E?y~8F@K`>(%_D_)4WrIJyxAv>UPLG(ogTJ$)wX0W12b5 z&7Vw5R~PwPv@%^lNU_{m@2if;QuhUIizcSC^Qt<<1xnozek{9o;gJ)|SGP@4xbMUJ zwDnI_hDQC9`1K2?cu1~W$P{oOfcMRME}4Z3n*uH<@UlvA_pm5VXo?efKY>qHqh*QF z#L!TVb4n9^_D%Zdn&Q2AmC~#W7dzB`%~-oQRQ-|5)E?bitAvXmd3EaEz16;}O(f)) z>61RAoJgx_$)!Plr%rw;iZ-k3y14u1F2Qux<qz(BmD?s~<$rGS=SO?i&gs7<ZhFM* zM@3*r_`$3EyMNiZ2X2#*ebueOaqrsZnV+v~TB?dCJZ0MISP~wsSH}6QX{Uhp^~N0; zvq~58X~sm{4_LzM9-I5qYL~w6!x!JJ)^tBm+R^vRBl=)s`v#3iq187OwPx9f%asXU zJ*ju<H1nb>$5*{|DBb#XYu4h2W&)qOmSxV|qnvV8Iqa(G6gS%>?M-IIb9YLt^IqD& z_QtBWTs_W>fi04U8wxGXTih|bl=b#>zyZ^)=Tf{eJslIP#TcibTO}n|&Erz$ZpECn z&M{)gIkR)Cx{ViPu_zw--s?QI&dm1x&MVpz7Oh!zcvWD?n~xEpF}$0mzFbsj;=EL8 z_Cf(x)pRwLMJimHnug3zXLB`%d<a~*qwQ0`)U~H>g*%z9?7Ml)S)rZ3I4jra(cu{f z+5>q7r*us4vE%$BwN~r4i^h?T@&!D5BQ>10pR@DZZ3sV|rnMz<&8{i?G(%EXt-W_@ zsawY71twB!c9m4TnBAvkoHKdtN9HXvA6T6|mFjZ(Yvi_<VX_QWD^BHYlMGuYy(4S) z;n!*@SHCs*)QC8K(BWOXM4ZK5{$<gQIjVMy0=Jl!aF>hK`p3MB%X{$0<Wg!wPt1qk zI#R1US6;a>&pG*XlGf*(?u|N{(?nS|#XXVy-1t#7;SEoZelnY+^XaFB7LTVZCsg-t zcv)4rch=6P7oVnD=`MfD6`oP8oGah){Pm6QJ1?K|zIke&kz=2*?oE31+3I)eUmyR< zyubFh@?VDAvu|`u^Dbn07;x`c+&#yLypo+|3MXQ^B}M$&zRpNgKJOsd<~!q{tU62h z+VY8c6UqcslC4Y5To7X~Zr<ts#X0AFq8>l{bv^d$d5x<%cGw+>nWr>iDN|(i&*?j^ zioR|ua`rrZ<G3~7<F>-XrOG=5j}+Q}dw#U*NtbLyx=ou*Xt`1q&&}8CI;(hY%DIQ# z^@yonc*`O6VBizCiLYPmQ$9L1>bCF)x7Dvte|>uF$)*Uij_6k<m!EpQ%{x6eFS$6i zY`giKJk^~=yKmq2+g`XcuWb8QKl9pkhu&?w`Z8?R>%8*c2VRCvd!1N*+xbqxv?<T4 zZr$ZeFxO7MAbyMQQ;L0%QT(CiW9-_!&Nm`Y2gdGw^5KflJgo&2_BrkH`m;=k>leop z#Z`+g{9rsWTkz!5iPsh0uL$0;$A9uCx$KN*YDeT&o5)PNByh#t;(Tqv(HCvm=OWKk z$e9+K#^nBqc_PlpSj%6!*Z9g;d5^Q*%RE%~I<#c=3j9&kIV9dK(cl_$P-$ILN2gta z-L}6yB{M&M7R+35eL`MK8OxD)PW`%r`ajx!YhRjaG5H$Lp}YkfEe)qyZkrvkLVlg| zPlb2>OIBaMcKCI*$MoY*bw9pjVw#l^bFlF86R9tgbNadZdyf=;I`!g{=r7G}H%&S| ziC-*YWna`cIjU4d<dKkztoydf6M7{-dKWJ7Ul{X#p@;p|GO^t+U+u8Ui(1#ew_@D~ z(`$z!ceoeTzU|vSL9e5P@pAFsH-7yOFHGTi@gluIb)I*0Xl!4c^J#&vEV;A&o9!N@ zxdgx7uufPwcKYQ9haIxSF0^i2p0P&c$15L+@J~~vE*pnu%@&BQzw%9ITH{X+_s?8! z7jwK!SG--k?w#@5cbg~XYU*;#X|=I(iqN-+h`ql@&Ud}arUi|AkNlSGZJu%VcjeAj z`QOsZ=Ublm#$}L^{H0&{c2ShMc+m#wkf}R4e%-j9k)5t_>3ZQgmIwD%bElk<o?v)g zphxBYg53WH<E)d{uWme*aqXOQz|{Lk{xr_8XZmqn;Gbznl=JOtN&o!bU$~`iaNp{T z_>%{>A3V72aNErC$Gjsovkl`7-jy9|+_UyTdbPN*%a3J_^K#TZ)mkHSSanV1kN>f~ zH*tlgc82DoA9mlC#5OFjs&jZPHYsg~0Q-i?+uRyH-E2L~xiC>;$<`!RiL?bJS7Ww% zeYbfu&t2=T&=K9n+d)TkTW@oBR5Rvv3vRzrDDBufDgJ5kjxe^yEqCjZ7xX<SG>db8 zsN3wxXDl^yQ&5E~Tiq&$gJm=BHaRcU)Y8(>(~=BY@X~Zr5p#Cq!K7o)Zl2U*Gnbsk zJ8kYJ&UMSoBNj587B9@pZ7t53tDql!>xsyojhlEBZiu#pv00V>i>;OYSU!K}xykjt zg0F3yvp>&Wp1}B6GHUi`n~jMxj^7Y&J5-<W?1frN(RQ&&j%$3!nA&)g%-{c6(32Nw zP{y3N+iXU?kmaUH*TQ%UW+WXbQwmB?>6jEe$@S#S$VDOsW=mEDyR4LaxoFE3k-%M1 zs$S;<>@OU<leD)Z-f5Hmv@O|J1yWaplvK@P$&pe@6;IWfbMV2*OD1L^7j(Q&N8IXN zdUs=I)3;;CIIS9%Hb(@8PwPy6St0SdGvV4}H`a5^Q`ff~oY4`)a#?Yq?4c8;b7GWF zY*pUrHYr<Vr`zOg^`f^v>kK(><SQ+lJmFBRT3cqPjkpxYq(Gx3u6aC7FT19dO;(s8 zoaveu)RN(LddJC!fonu}YYHT(M0L()cS;I7y{l4DWn$LSJi7$l37M&Rbr<#t_KH+o zQ!Z~l(cId0SgUv0jg1=fR<<;5lkhx#>Ek4?Us68zQ<GgkUh=wVsv>;yxY5T?UeBbC z9Lil|5f`Z0*4ZCn7$)>SP;+OSjq1DPn-%N5zDa#bvpweZxK?ZF^$F{*6tB^_w?2sN z7lWbF#wCyS|Cz<hESmIbZyVEu^=I!_?Fh;Xj+&jE^s6I>@qkCORFYMb)Tiy8j=Yrx za$0k(pZn=WoDI=>!22$%{P)+kcPADmzR_m%Y^}I#moKTz#TG3e#8hx}dvVI{qKyBU z(wn(oK2th!@yL=5QBl3$lTJ8(e)9UY&R4Z&k!y#0Hf*q-$-4a^+h3N>Mx899(yz}> z?T=U4n_s*6G_%m8E4N&H!*0Lfja;>Mz3S^AzROEEd?v2&3R#@LWqsw=)H`3ZW*&JV zVm^Jt|M#(Sy@j1ivjf#Xnq~Qxn!c<#6UhIl*mK*AHDcRVv;X&GRjS(1TlFfSd1a*L zf_IZ_qmPQ{oLzY`Pw!$Dt7*n<o;yzJc1wICrp%i4P}i-|<JGbyM;T8YXmHptmxYy` zy`80;gO8Ul_?V`!t6YbeVN&PeYuzf15#?P^bQT{Fi#vAokax~*MUP_&GbMD|WFwbx zYj>vFK2F_ea=K+>9Os&Jq1P*uY_DF}l6aVR;^|%In==`k>?@bdD9E@h_+h!G+N8c$ zB6nxTB%j!-y;DtDKVQ<f(?w(YCk9!?OU*{E^KMkJa4{O5SS^0XCE}=+u6<Ic&phtM z;`wV9NSu<^cHZHUv15bM4iCxv3vn_TUbEwi_uP0^U!k!gS;CbydN#j!N5Tiurmy1L z40u>AABKgRus+U+U-j7ZNxM?+#0S$S&+NasXp!dUKz)zaGh%BeH)k6^Kc@MnynL;U zimPdThTW~28~?BDt=@L-T4IRmrlSo7g1pI&9SR-aRn{f6Z9000n~ne8rW4%dbNkOt z{~Y@AkA?lzbMrrkKU7@gC4PW)MajK6<~uFebK(@ZUO&HEXZ>Kx%xkwoyr->>x%$%D z#C87{rGI;`8_(^zBU81N^}W5M{Dgzu&Kq}m9h@cVXZA40lwTq8mDbmLYi}&N{4Z{% z-3s9!`@^RTs_GqkJ%7UqzV0<aeQR#Gu8w8oN$Qa>u)O{x@^@I)rj+yg&Zjup1FLnn zH0{`NzM)C+`&UD`BRh{U?moCcX>zMheCzI4KG%gj9x1CGHjilN33K0anp0=4+=&NT z*Y~;HT*vlL-E?g$TN&?(g-usyYW9VO1XdMIJ2drpDC_q9FRleS{=e>B@Qu}WqLt<8 z@E)ckNnxJaM}ssYlP9yDZob<jdhp#rxr6h(>{B~}bU)>+thAlDgW22Ih;v1lzD-)I zsi}U1ud;WhkHBl$Ge#+zye7KB=PqqHC3etg?uUY~IS0CgQ#lv3*haorx#oWKm&#^4 z%{Bh3cveSVuzu3-5+|FOq!qNw!sR1hh)LjyMdwO<uIp`lBIUm>^Tc)kV@+Q#Nk_lc zl+RhoZp!Q&7{8`DGs1~s?z0X1n*YXgN}UXEw`ln<Gq)w~@?|soHIbPW-Rjr8{-{Yc z7B}=glvpeAY-?lkOb%P;W%HCao;dqA(nfHq^_jwb9(fM3=~pkXiCk1!DR|Sj*vl&~ zIH9|V|Hz69&k`NN9&D_Xn&8*8_UDZRaozZpQx9%k-*U_@_g?bNb5qxxWxv;1Qsj4T z=ToJ%O*dZunVa`+=a##=61y{P71}OXcGze>VSO!W;VtQ<!Z>@o?ZLUR!hfum@MKpT z`W5gjS*-18z<O@uIhNxeIs4>KA9E-XYKU#Ryq96Q^_hw9JVdUQ?K+$zXmQv3M~nL{ zVY#buhpa7wpHDk|Bl!B!m(S*DZ`-YE6+GvPTUX?aD?1!_Ivi&e^li;()|EP0HEEsq zD&=h1Z~L?+aEH8X+MysCw<zGH(++{^`E0VY7ysv4`-Ro;PsxL~0SlS4P4B7%GYWo* z6)9!^nRNHCvBg{7kbCxXIX^JX*_?YpVUrNMLD!1?VTvl2acYb+&h;@0n7>&4n%D2H z?$K5I?B{H15?Ugb{Qh3;FA-70l<rb#L$N1~p)FrTE(uwCwY_+G?cnYE4=>y;uwec3 z(;$zp*kj&3m9?fmN(EwaI}Rn7u$@Wxkv!#%ff)bfg?DB=x4F6Y?gE9R9L~1o3<sLs zw}0F#)Y#j)b*kDtOHP|@-=)$OzIZVhPZIjrutHHoN&OQKmvYq8B)uQM4<2N8H~P=t zCuMMA`Prh4i~9?{SuJbgOPDI___S$awq=Myg;{yB?m_lX4VxBh<C<{bK-9PTw+Rd1 z+R7cg;dzF|qo?p-hR~`nr873(a&xcVT5(rSW7g5<*$tf+co#2Yf9>1w*)Q#s?=Me1 zhp+>2k1q2W{<<lv_G<4#mbO1tlW%5B3Y+nzbZTg7TI9-wi&lk2hsNq2t!ro4G}-jZ zv}E@D<lK!L7cH74bI{|{^L>g_x$m7`yKP?^!&0BNTYR}s7bquwJGoo7xMkz|f2I-# zEI1}5KbKsy-ZVtH*;>vzxyL~Ak)<?aWmf8+mLxXqqaD-2{F9_r)*f}}5zcdcV#D(& z{?Ou3+ltrEE?Dh*A=~Vue{ZL_gzZo9?=xMaB?I?HMZ4~eigpxb@-vNkx+TV9<8q~p z-(5y>9bS|4rHwcqEMRydqx5v;!lQgs=2~AVo^-V~>ojjKi=F!MsEPfnn6x&3ZfxJV zOK`E_|641?ANug`j+|ldefZyj=M#6VsGlFlDkOJNvoxaPX_M{^*6%M=B^rJzJZU<3 z-CN=9!DP|g@S90fwW60Q&1JTWbDrcd@2~7qz8Sx{YO><(wl)5?jA<9N$hF&;vOV>C zsnXWgKhGZC<ID~9Vqf!n->Q33sjre|sBc?!ZSMpHj}w2w4upmq*Ioan{CH7shwbvx zjI|0ICgyr7+nnoCXne-`z~)6=<rJNui8K4}T$FWR9T5>`aBbS`%&A<di?vdweULSc zUal{nY9P7zHrJ7fIqfqpY@4xQ*Qce=W;9tmtJX5wsI=L_h(9M+ag+b#D8}rkM^apB zcKR)dO>53Q_oeA}m(;u)Usv*0UeKO#!E(cb+)p<q&gbv_@khOR^R_T)najI-o;;~< z_$iXAw!G8mvXSe|4QdmYw$(??YC3-HQ?H0l@vD*@33HZfaqBU>pYoxL@v$SL$gDNz zTD+^e=D1rw-Z*ECgx)PJ=Tb|y_Cv3yTrn|smu_>Eut?c5ry^;I#)qZLQVn03h&K3L zHd44!Qfd?v^w7{&I4<RZcbb)gSLjK}f|IA1Tr$1XCeNA5bK}yQH6d~f&n{WPxO>*5 zsjJeA7^a;{QAzg5)MAJ*PMFGiV5#IvAGa{CWeq3Nje;*5NgSBH%s|2GXv)&mRI864 z-kxv%|9a;7*H?DkRh3p#b)Bl^<?qYg;wl{_v$Th=V_KP#@RM@~4Rsq<tUTqDx@}X) zPBzW!N>3GCs<+P4t+wS#@N8SEs^e?0lEGuCsLtDiO8#PDh5`&he<N<q*ZIvLVmf1K zVwo%#M@Xc~B-KNoI=Yr#)tP&yYWao|sqRaW^L4ImmwtVDZtACqDd&y$MuZ%=WE-)J z-}`%Np#8LW=PxlwR4I7#C%rtV^OvJ-<|S91*fW=$BdaW48#gWGJTrx@XJy~g<C{u2 zz5A0hZC{5UQ)2eEzOb}J)Vn|ZC8tj8;Y%#xUj8YW!rsvlR}L)l)LC#gvCY4ILxz;M ze|jdv)N@TN_H7Y{3*3%2NG)YF^kPn$!nQ?&HzV+5&<<v&kUvI$OxH*-EJ|YN=wejR zs*{a7I7=eIS@40=%c~#ih5t41f325(H*t+n!lHW&!b`6omS3<aNz+?>)0ec0TU_%P z^lwl8db2y?DdQ2gh=WcaMK8ENTsw2={`T9U1;0e!ajyAZdgRw1w*S%}_H)MUU(Auz zvfyA0H+PY*j%#(I){4&7Y>7I)_VoWtmT`2QU2tTI*Ib{=hi6qi`EurJ!$U^r<qv8V z?wUw#y!qtR<sYvq{5Nh0;`8ASyv!7#&s}q?uAc9{W|^S`$BpNVO)I24&2=3;T-Q5n zj$=DEQCrZZfyJOm*&%462Up*0fd`B(L0xy5{v~Xizk^qB&dchKV;Yxb84T{Wy(ni) z-NjwoF=w4T=ab`1JKYuR1yA_17R`5fCw}5Q%ctT-8;uF^98ab*-PD=T&ibjtK~DI@ zW2Q<ch5ceDCNoufDfn|gF=zU@)?uFDiT5m@);P=)KJl69XR||`z=>|AN>7D)krStx zDqR)og-*<8{WQzr7Rx8`FYSvH@;TRS7o2s8VVQnpPK91-OH_l^Bx~KECqaQ5xCCc< zuhdXkcY5g+hL)*5XO>QSc<$S|r9KJruf6k(98MpayoY_~PTmts&xi!^sQJI^pD?>! zXZogq6T%HU3O+ZPKCa@b{C;Ywl*W_Ele~WhpAc8rnIQAA`KiDxF~xe#`tYhx-y1H) ztP*PC6M5Qbs^>9<|Fz1&Q#Ko}w`zQ5OuenBARn-8A!B92ZtmGr{5NXs33T=hbW!Jh z+H7?!TO(fNrn~dcg)0(z_Vwx=dvV+Eu)(iwn<XCSC95Uh$rW#&_o`vntFIv%U2Crf zBx>*_iS{jfp!)Jh3kQdc*s@9mJ*PY_)*EG?7``waP`o02OVD|@=B~zQ#kfU@2a~QJ zzr~}i{CCZq49>R8hZYGs7|vvqw^(=fn*552ouc<Lk0v-zxxv=3(esIbHOCRVq^C<1 zrcLa)Bci?G?iz^+{>L{wNxE$?L1%04hN4Yu@~j@xoKv<+sx&Gz2sujZdth};((Uu> zZvkFw=EQV#uQ<rQX3hqVmSZ=MnI6_Ym&<x2BlWN0?0*K8Ul_PoubndCK}6nDk&mY; z>}NkLsA=dueD2+bQ%@MZok9g_H?kBhkVuL;``lscTCqnjJ1?%#Wp1t6I&;GsfeESC zDhuPzM&+}-@D{qjH6gcfsx4<qbL6!1A5Ts&4PHA(J%zVhVNVW6z8ar?(=5(_5C;RZ zA1)1lB3I08_>-2bzIMIr6Z3YPpN$8L^~_Ft9z3+tgN4(dsp~A;g~b`Gf-<9B-Z3@= zZ+*p7n(*Rr(=RrqTmzkDw#~ICj~JOBm5ov9J{av1>@ibi(Mo4Y>5C#!YzLa;t|XQ4 zK4oC~EA`6rarQcnc+(9x4~k`7Z7ock`fwYEcAIT@*%sS=j;LtuI3}A`p_;d6^&Gc} z3#7!UFvPFjwc>F6*WN|iq78MeF`Lb%8!b)BHMxBC8<#_YwPO+kqx3EFDTf|1-`N^+ zEAsx$ZA|YBe@Wc-+EE<4=pf6ww_L1W+dfb9=w#Jg-7(pWkL54BhuzUIy|~#7e;WFI zS+=X_X-e%~=gT6_)Hjtm#Q7m(<OarG-<L5nnO=mSkTh?9omSAxcwP5KsNzD=t~c2k zCR_Q_Z>4)oU*)~Iwyz{JMrwMVb%O^lLyLl8MDi5HD{cESx0s0*{o&R*IG2$#Fyc_4 z&O?id4tvtgiX-{13D3Cd%(8~<jMs+g&nM_j>h971e!9h~Q10cf!n;Xd?lLy7e0}h1 z#)pFk{0}5D-Ia{d=PD}xwM<cF-*owcKN>r}Z`plY@9_bfxs5jq_AoSQval)m2y`>= z_G@~|{JZyp#Rlo`+^UU#^>$b*CH`h+f2P``!{3&`u!U37W77QB9e%=WCo8Qjo?Y<c z>ur8qc;+Fq;I|pNY>L?nUh(xG-ElT6i+4ez@~lr;Z_F83lrH#m{fNr7TlFS2ntkiK z@Miz?6P!Gk-nwdeFg8>!tZP`}>u0XpP+7VC?H&eWu?Nfs>6diwIv)7_qm}>4QKuE2 z3{Q_9ypp``-nO|1uFk$5v)kb1iuPI$+dmVY=N{Qpn=8-g96#@SvX50oGv|ACoA)AT zw71uC@qA*NuftI*zr-NCF_`P)F^2@p>;2!kPBV4<IJzLg^7{U%uM^`Qh3FJAFtn__ z)4(RrQ*6_vx~tiR$M5Kk>x{c{^kz$Qe9BOIKjm`ngv)QE<8JxrteyRqr=TSJ!$-zU z360ym{8Agv)`Z19ojF_J**nG`@!IQl%(&g=X}x{<+~5B5eg_`1y-_9}!S?x1ed48a zZ&RPobDhjI!*_=~W6Jue)h*BKcqW(S<y(KZnODvCaN5mz3}P?p4Ho_P^f_kVw|hRT z&E=RwM{bB6l77)=a9PRc*!jag{*JLr+5<HDwHCdw;VCN%eo)Kb&3QwlZA*9NZJ~ts zXG^~y+?uADn|sV4Q~!?a-VXT<Ms=LmGwcO_9MzKfuqj~X!S~u*-iF><rF*O@FoWG$ z_HDy~G{${rem_dw{Ghx2Y*u^Y`m0UrAM(Ys*sN|*)pzA;X+5}^#gw~Lz&%s;$X5Nl zD-F|*mP+i-J))BLZ+3wRvrODvi^$#A-`>zpJ8TfK`?~CmBaiG3#4&DK9dJaT=BxUS zX|-PF?x(LkHkifu$CmxM=O1p4%j?fJ#u;`9YTDEt7OgQqGU@*6PeM++6H7O8$0faK z5|`M0#o)q|=T|!3X7}nVXPM{zW{G>w=9D_E;r-ta4biS8-_2iTOWaQX(DBuz?A4c& zcJoEM*R$xx@@MzW-(GXr`tr8sJ@uZJKN3th4sEJEXx+JJ<=2X0!95E3u2LqayBkAv zoHsv;cU<4N`-kb7|EeFtFJGL(o^xfhY|%vb>;Ud#X=gOv`Fgq?oTY0j)i&{p#2&6S z%r7`irwOfIA>=j5o%OL|6yK7!8Y{JRN~dg-ZQs+jtta~?r;pj|<CQ-TANE`*lwxLG zHRJLQ8z+GmiT)El8Lz#Z{WTzQUE*^-i~HLj*VsQk^F5SfZsUrHu}(p+cyg_|9bJyu zcl|jdaHO(AqnCqeMeo~cpRCgk*Z5ns*k3WV*-x)}*lRL9Lt8~aRARxk{~oU``Yu1} z<+8sR7MrTRI^E<|v}gFVTkDec@6uY=B|Tp{DSwNZQa)2p{e}hiS<aisr2J##Y^Y=C zby*Z}M=aezD{r#Rq@eAYw__(bCf${HxzpS(!n848Nc2`(r$<hfg4t%*YtNW$j}-KE zEYW6}A%9%O^LmWa!;-VY6H6YNZ94EUb)v#EO~I5j3AuL<&pnNlD7Y=w9Iv5#C(^#( zGgr5x(s7CQ^`uJuB>smR{IuIAnpbeLB|HnsTjgcmJA2tB-{;F#ml*Gm)Vk}Fx6DiY zRO_k|-;Qjif(qvA4tnRF-nwu~^MU;Lt-JrW9k?Um-=8ft`BaaZbCA4l%^mM%$9sGk zJEW(EPq1Bf=YoNn>Bd5y_VaUQrkMB|^f$VC*1YJ7ERb&Yf3`AHrdhRASf%kPf6m&@ z8>Z0(rJP+`_fO@{zuh|f&ti_=jqVve3U~6lShVB2y4rlj6VwtWN<1iNP(L=4(R>H< ztDdQzj5oNi@x0+$#@TXFNWy|4TBPt_;vAi~tVbPhFDfZH!oedLJfY@mbKARF>n);x z&VAii)BCmXN#}>YR@Ets?3&q*ZTrb+R#d{z-gIEkES3*}%`3y=-%gvwAusA3vV67C zCHYNDT0STyiyRWxxj${v*>67{uzlaP%FVenP&emX`_j0XJK6k{R~_lz_alPkrNa)M z*2OVPCa4uH=@$RFY<6NsuIQW(&G)<BrXRI9wd?7xC3DV8%Lpu9zg^-jcYdE}Q2JLv zrRgdYQbgIp_<!8}cJx~)vq976P`?D9qBR<S^sneCinK4Z*44eav*qA{nar6*jmP&b z%5XoiecOX=5#Mq<rE~8a&0gc>DVVCNewxuqFQ{wkJH~rn@=MDVg36e7OU($(3}cD@ zC%WcDvuNceCH)+wDL*zP9q9VCImuExXwxExFp+bcWFtM7tWj>zTO1K-qWzNRYa|b^ zvsO5Zjb@O>ABKE>cJ6?p8*5ngC75PDcl<7BDB*Iybw`Qoyf`Dx86q}c63#W4u}V}~ z9=pKIa9mhQSi(u7LNU?y!-}?Le=2xvOcWa~dfz?%U+Lhs_J<o&dG@5aRxX)rxZv=P z_W!Hc0zL+5@h|wup;u(ZzhmnX_Je;l|F|-wzqg)t?04JRD7Mf`+y2EFEZVZlOLC9@ zRv#a;Rc&5Jw@qyIFwR&Jp_Fv+#o~Yy40GPM-_e-pq}OhC&TFsZ7S@mwX8qH$(M}BP zT`HUxeyDCMn7jR4`{%%&33iD*3lA}K#=Q=!ViI33$#!dMPw?Y!*Zs||MOTH+{L$Ra z^~2xZ>WT}4>5GR~@^2?CEE2Pna+|*`(qZ?F($d@S9}4&CD*0?M`Qs(qzx1a(KSPx= z(>lqY=7zs-&j`QDbYuA{89#%psatyXPyW-ehpEGTcjeQYTI+9x+WcR!pfzu8XwaLl z$8R1_U2=GlgiNN;mjg!*Ukd5EwQxGK+=QUOv@EN|E<rml^|!qfT7OF+qNm}jl>7x* zqxvJt(-(5L)&*TsS(c%h!6xz7!Tf|qM!7$~e$iL8@c5!oCBtj7N=YA=bQ~2nlvvnN z9bqW+_@3Bexwm_D9X`tJ&7I)aR2{wXZ10zC!ik@EX6JkF`W3g%{jlY%%hfLuZwGT1 zK5-HEi%)CFIahd%an1ec4V<E%_J!a4VPSu#B&w`McWdqWc41$?qlY#fb^WnoO?!{R zyBqJbZ~u3jwpjAHUCgQndz>vSxsJbJJpSA!<xbX@XPgnQ_J8E_ylfM*>P<kQ4CC>P z=kZ=mI}Rw^N!{@`KK!Ix(49XQJ@|DWJ#3!e(_DX|Kt0*vu5*}9(Xs0sGC%eUf6z}h z_;mkR!jt_cn3=MFn^!upOi+1Z8}roopkmRJ&DR3>{)e$lIpVy^Z_{R0@gw^`{r~WA z^5s|mTz~BO-@d-{k7ecmMQXQL9eB9p*U3#e_;MCo@67oEk2?PJpJ@E?rFO>;iPv8Y zT178hv+(*>dHeqqmyVeA?cFjtq2^)X$tpU1(_|lpBpO^hu|fLHg7s#9s!s~+ZGSWA z!4iiWJHtNd{r#WgPc_bXVjtsn(0xJnX~S(2$DhWZuJ}<AA+vn_qly!A(l^?r^sr?9 zU&eKC=H<xNWvhy0RQW$u-l&hSoMWVz^vFs%Vzr!6r|8vVLA9kDH`=rLcC-KI_GBrG z&CyX|`umf4>gR`VVk~$>)LL9i4QADQEam?>t^NEZ)9)2KPI3M#?6XhtR{d@2^W#Zg zOv9&t73<k6MI^nC+o!BMyj`aIp+LgDMQ#4RQ)g;_EoIByy6=(V@3h@6K@I&jF=j7M zpJGUg4UG!ro&A$>Z6y2hIpGHtKTgPsm%DwlN!j7D+5i6qF9Ht!wwu%XY@el~k6N{T z%(W{LU(zgIE!bmj$tC&xg!8vqe2yvHLenPyogmmGD}QdSkI{|GM~=TyT&?_M<FYeB z>(}cw37=<_`G4T#*}uZ|=k3Za8@-XZ=&b+XYWtg&2a1*cd3+Z;7RC@~?_p+H|G)ll z-Q}dJXIT*n?oZOvmOQ?@UzE+kc=hIvt+Lm2F9kiEG*j{6^CJxQex9ixY{YbIf4JOP z^MvR4HvzT>=TG_+8U66}V+{@{(rQ>T*|@>pQrR~2(D~X2JE9#Nnb(-NmP?#m!jLA} zu<xX#P+i)AB@7Q{E`OMs=C$gIVO)ApXyi&B8PUbhwznFu)SQ{6W*Ry-?f$`Ov*yh^ zv*ggmo!{<e`(%Y_S)`<<?AR{x+A#AZLz`c7M&(wyV#CZ#hG~A@r+ub#E6b_r8k=(K zMP^;IJC|_j>dKh~Cw(Sb{;pQD6<xyQ7Oh+SZJJM&Tai}GrOOU;7B5dS3OQM@V!f8_ z)xECs52rYo?b!ap=7Gusovl1l?CZZiRC#cvL`-g@P`c68lbU+-GZ|iN(>l7h)s9uc zyx~TysM2K44euJnZh2qGXZY#o*X$j(t9^0lr{0(HD`gMH-I#W(k!w-VZtEkHkMUo1 zT-z3#$jhejdy3AUiS8NA0sCIg<eR+k{NJ^FTG^YTxQ>e`r#5YxU(`~vq)2+s4~F(f z3TCp`ZgspB;QJo9f#aM!+Z6LPzDG7GF=(%j47AdI<+$PY-_*ksaxBhzxow<OxMs<e zsS**MtlE<2y|%1bGGVGuimF(cQRh^jG}Yk9lRROcG#pki#_7)Fu5SqU7CR)*_ju|7 z#XSv{$*K%%+xpWs2^|Raj%)tU^@Djq6jMVMXTwTWh9%S1wAwFNu3B(n9Sh&h)cdZR z$|rI(m?k70@oq7hVZ|8Ev;5@_)03KpYgQ`X2<CYnd0_Gp>Gd%`n2!EpJgQ|V+OX2W zhc!`4B3N<8s|L**hNs&O%73`b)A0JhQsrezhOL6Da!i(4C9X0Km?W`4CAMKw8LO8R z`xG5HjYy$@B8JUIpHddM6x`BQ_F_Gy%d4@S=gjoZpPOcHO32(_9c;ei*@4iuqS;l4 zLN8yLT*UriC5x!ZS0T@cuuJUntC#4$@vZ#A+AqiKz+%m@$Vwt%fzEFa;RCZD#N9Dj z(y^#bC^-LEM%9^!Sk9fVPHydqIel`f@^!DGwMy4HpG5htGkp@}z0R#@t#Y{V&RHk7 z&Wn*gv2|k1@(Hg^ist&QGd{VMbK-5Ce`d4ypM99$|9N}mpSPU<%;xXceURV%<96_$ zx03(9>C{J`xj*lDzW2}D+<)Gx{`+QBU){QY@2UH7&-1l^-q!lJZPxz1NAF+zu)X|5 zu548P{`@WX&2PVte*66`$I?S$rT*)CO7eN6m(_gwU^P2m&TP@|q#GMf=<_EW?y+y< z?fz?+6T!3~>A-R36%lPq7}TdJOFDGlonT|oAEdDTK+P#x&8ANp{7>Yj_*W|RKd`a5 zbluou{wKFM#YzUVZ|@iq)Sd{>VoylEf1!p!`giM7#v3>6b>t5mJN3cF;+46Ajl9C~ zMnML5M@PY*4C<WkX0RW4JfZI=gUvgEnd}eRFPx~+l4*5)8Yrk?qc#6khti_YD?F|k zTFvirnmG5<iVTsfn)6?^EV6zcI5%+lxt}3CuVf~>mpU367Q|`2y5#D7bkVwkF9kAP zy;lQ1YUuent1kHQ!$wO`RV8DE%9I%^7KUhOYW4>yhX&bA?YXkbMvGN-_2(5KQzorh zcqt&OtIexDSVMD4XVAw@&Q@_{2@-ow%zqhCCc)ADC$r+F;?;dq+?f-Om)>lY&)nkR z|K_Om-JgoBr*GHqJomme^oPNWh{NT6pFT4FoA)7CAUISxu2KDb$Uo;^kJuy*=fK|w zPS{A=y$*i7cIE2ky}d`AuAh!zK7RGT_zech2G)wS@0+TGx83{fU)QH|vdpu?x@IrO zzV4L&ml*c@o|Ux<J$QCKkDVop;RAJsZ(pjn_mq^ZDpq~{-h9sX#se9p0=)Wv?$_y^ zILr51!&5i#qx<8n5+z+H&0RzaY9x3boNRyY`~7VkUwO(*@1n^uFQ%>b&@14wp47BJ zONN_A?$4?v*BEYpPrR;`l~UO*xIyxk-5=GdGvXslHXMxm{9CJN((6f#`+rG4h)61x zGXHVvC&PP#H453ge;k%ciLFeT-IJ30fHB{JWmeL6+f}~vG%M6TH<&-TeKhY_v_ycc zeOYNapXA3QhkN@KBxN^#(Ck^&<<)JlV#<{XW-nS+?GW)3%AeY5u|+0Hv!c<pg2!r+ zY`=i(?;DnD)*3xXZkl`}tKo%KeM)tlBE!sN8~a21(rl09^~+z}xYl6q9g7?L9~Mlt z+cfpd#J9gxUvt(UeyCL&qWyC5t*_Rv@*mrAtzTi0ZYB6Om1WvhJLZl}{@ZWqaMh`` z9i6~z<?<`2xVpwKGgn+^qT8nT2c1q-3Cb@GTo;;prFriJo$U9fE~i(wtiR^x;_Vat z^I8}C^4|wJTK{`7vGC4*^FBPVFOt_j^AO{~gW>#X#Zh)|CckFaF|+4TS6sRBko^A5 z;V$WN7GJ+JKM*~*<NoC-<}b2O^F00AsZ{bJcKP1Jp^I$<&M>yG*fMe3wzY=2+xSkn zCC)o8@6NEC<BtC2jdSm9z5VI+Ww-qgPm6C=woGYwbf)jkw#z;494ziL=IZj~E}66U zuvfmm9sfCxWvAv`I?c_m^h&p_C@#-SUvvHT;Ht_kRhQ!w_+LD}Wy=3|vEj_(UGIWk zlzH@XG_)p^H0C~7xoV4#_?evO&jlMMsx<eq*kw<dx9D8LrGqaRXP-M*)3R17VaI{r zXE#6C>^5_yq*hL=NBX8q!ND`v^h_z)7&Udxq3dhD_!vseHwr26J?+t$?dCR1;{9s> z)@(1e4=U*?iPLpzd>j9MENE@6J^Jd(6P^#;?h&hwZpgKhymR@$C52VnW;C2Sb)w{T zaQ3>x+Mx;S8#hPmws9@aG>Y!9SLVDB#w^3a$Py=-cF=pz$spaZ<?4?U5~FQ7{Mv&V zkG$%clG5Sirk1nn_%p7JR@%0<o0sloy0a<B_-MkDh7v|EBi@W1sXKS3tmn4bY^tzX zRqHt4y&U<jnX?!r=TDk9k86H5lg=`qlU;wOo?=*P((q;qe~HY)l|12Y-jAo=U6LmF zFKY5<4u5}@#=kEcuD7f=={(6e?}?7(F>{uUaeDI;KecUsZ1vdKMsQB2%;{f89_kw^ z{@@8VI{jet;|R6puP0M#6P<0|{GYbLZl}(r2WLO><n-w$)NawaEL~r9a=H9zo`l*5 zm%aNp*f~d}X}mV>Np+jVulsR+#HGzXmamf&1Z%=L_pM~HxD<8m_6e_75%$8}I&1hN zl9z4FuzGFGZPt6fZSRwWj*pG{s=7_g&*nAN%bqn-n^q})Zx8#jsj(mK_onO?uqaR1 zYuB>(wfw>V$yYdaco<Au{li?(GOx(wxuNiYIc!QkQ|q7FtG=EhbN29sSS{ORFtvAO z+zhQFA@V+7k6%&n;XM{2xU9?2R3=#2fOWUVpIY~1ulALNGqjF|NG`MR31xU1$U5aX z%bPIXc%2oE>zS?uZ`r>--#IvkYoCAKtScRVQiEqN3;5T6sOG}|LL1E#%^yNcw*1=` z+c!Q_R^REMAkOvVGSkl<2RrQv=Q*DwHP*x_Oy_tK)L7%F5HE6KI?Jcj#u&8;>p7kj zHP(bG#0#Ie&RW#!uukNJIZM%0hkx!0;oMJVGyR<Auupfw`vqG&;@Zs`Qd1T`*yX8U z&izEJ@s8Gn+bl)99ro!@ux9zh+<2$+n}yeB;e%g;TdKZKJn2&Tb8kTU4LLnV=7r&U zS7me9?=4N}6s(@!sOq*zht->BwGOj)kI4oR9m7orj5ZuO;p}x#=&@K3+cXK+2)(D? zir-fR8JwtancC=hY;&=uM9Lnk>5Y!Zc6)0|q}1%1(&%{1e49vpvgS4(9;1IBmnKXI zJT|@2QB7f?2#--CXKKO(&Y-DHj%pF1Y-}?HN;M@?tX7;ppdiduebM$>gQD3Q1|8#) z3KvGRvn4E>z1c-L*=7ZZOzryK;+}1qFzaQ=3dYMm>E^sM(vmiT_>Yz|UiJz1m?Bo0 zps-y-{LDg*(i5$dMHqid_EsfFl;^~#d)R98K1sZL@6g3(qCZUTdog_w^G;pAD1J#r zym8ILl|1q}erH?wtrU0cxNQ88_f1xw-5=2fJDw}>?CJa9ef0MZTbE+NoSbVHWzHJj zSez@TmHKFJ!e{fF0{>W~v@dyfaCdJJS|a|?|4T#t9#xsLp7Nt5d*szszX$m3YP`RO zPkM2wk>9a{nFsQI$hh86<o(F<XM4ysL8Z@X_iX<1<>-Iu`oNsCdg{k@-<iA(Y>Mr^ zvhe$Pr?wv8uy$o!JI^K8X@lX7Q<dhA&nj$NyF$Qjf^*H|+@=kYTO!}QZ8bmnSaxCD z*(!PIH|$p*`QCowZLvYOmH)f3jNZR9-O4dbjqfnXtedf|oqK+n;zKj#O{KvnLF|pP z!iQ`d4~I@F@c;af?ZEYz9|h+heDRWb7<cGlTp6eN1<5=CKJhAbyS*D6C%0rfZ;NlV zoxuOys-@bQ<9oSGo&x80KKVR>n)$8#-}PnIh3HH=rKR}$!*+kASxpbGJd?ZPH0#a& zmMNPj1aA00iSs3|wN9z*4nDzsfe%>j+c8>wi>UGU<Es9-cSnG>_%iP2hjw!GdU!QU z+%_&LZsr$>FlJ|EQ)M(N_>!vBQODZCzFW`p%k)bX=T*fIxyzTu-kNq$nWeWo+w#pZ zk@kv}jWLa}v%fBU@>@ABY+bU+)-=w0TUp(?OJXA5vud+k46&_w&b`mesq3@uo_xP| z9{0qiKY6?0<aU=gC!1|2`Gn;EDHTZnRQ9j-Q<?Q-_ODGU`dsSgdDYJ|ocw)d-X8zV z+jbq5BJ=nBov`P8>l4`{C%Zp+H9d)JT*I?j_MraSm@VFq7PTHJJygx@`Ka&l5lxxW zXVx5N%KD~rN9LtkS-<w->6^NH@wo$G_LE*t&$ykM@czv4S6oN9-oM+N{>xNm^|>YI zVvesn`%B`+t>f+0!tLDmr#!mNaqnpQ@5`!p^v)IRepFy9`|w;-Z`qFAb4~oN2jzC_ z)$Axv=$5~?GoAlC=Z*F1@0<?BcEry9x_~=@n=@~=|Kr?>xW0nK`SVU~oATZBlJsjH zbH4W1Z#lk;R_|Efk+YtuT1Wm}w!k|s#XIH&J2tA^G5=ZcI4A$+;n?QGUkh7yGq&$O zse0$fw1<bnlK182ZExQln^G-*<MGdea)%w(tp(+e3m$v!sFrzHm&9ML&nK?%zs64f z&_lD`Ewdl+m<ufzH<R&BUA*v`?DqERn3UgAH-vu__&e=b-deE#=tH%NgB9n?`uNQ+ zmB|V3a?#ruIh&<w(POTRjQh7A7cm}ZEmQwoxU=o?CvN@TCwosxPWQ9WW3<pyR@B>n z`|+pUC(2&`H~FsmpircIUu^BwFFkz|b7ZHbL~lAaN%h#ZGcUFode|M?_MvejubF|F za^@|e6O$&UBs&YW9GuWP-NEdkhgts(0W<cSExZ$aH_di9vC;FyLggE$pWTqjFV5jB zH>>=;PhbAQ_ut{==f9ko<QVaL@AsRl)~#H(Zq>R~>t6r=|G%z7ZsX}s;!~cQ{?7b$ z;QoS5E=?xO<^;IT*5Cdv?6|Qir)}f<M{-x+v3_5r;khz;5_{;BC$(Ru7#q7>R_zS* zJYbZv{n+9TkG<~$ul`b4<o<S2jmOb|WP9B<DN)tVu4@&C^gPd0T{`()^VIephR>fr zB<Tn2i+7ykmJ;MQ(?sD*wx3#j@Y?(p5|gEle))X<#FJ<b$qdo^Zb`l`PU#0HiB5?y zm8+gA^n0OK1@|`ISN$#bk92$yHdRq<Kbm*te(;szc`K&LiY9-qzZE!LL*h)m&*a~C zZ&fT2tI*3{I(b%UkoT4uy2)$Tv&=urkYl^RSLN23ZRy<hK9_&3eY1Dg*En9*bv026 zCl7?IK36q?Nhnu1fywx`VBMFVuXVYT(u(vN(we6F%Zu)b<IjHl@oL2bK^uWJF%H77 zlb_7>S+~)yqxwfhv$o)m#N12G!NN9C9Jd8uPm%t-MfP%)Q}frn3sqjq&4#ZZ-)hm= z_BH(0k&8{d514-}Y1<X8^;mcMW7YYGz2_x=y;Pi#l9_To^V;(*A3IYTzw+Puk+SK= zFB{i&CCd9%l<uqTZ8>rLhWD(mrY`Tax9{saQG4~8xkizwbF!Y(DgEvf+r9M<uaR+G zoc3GJHDa04>(3zv?Hzb@<~vNP{3-cb=U#H|(?ilnj6ADCH^*JQlX^+}8voYL54$ra zx|Dua&b3*1Ie()I)1yQCGm~ybdX(L=cRpjSskZme`K^CNMZWr3XKgz4Yw3y9gR)aj zOC;~VwkAINacs7#*1`IW8ExT7-+t>>DxG|K?fnU1-(zd;PhQTJ{6qf4W~Sy>mY-TC zPmdI<<l4aUOS!UZvg)<^Ny|-kp7<qPdCHLMPo(tmFRlF_>VsWb*Zz0@8sK|Bfqm6O z-jHU~W!>A>yRY=0aD9){p4WGO?btP?E^g)<j!B$<Jk1vvM`qq#t~^(urDl)du^PMA z%Ur}as<;V7pItlgh*@#8%Er5Q<UDf>w{sldxcJ@eo*mmf@9&?mK_Ge`x5a+j9Xr=C z28AAVP2L*+=3T4Ht$92#xjgSD9=r3_d-GF|bDr(bQ;sa-I&aUg@#2L87en6b9hAIh z!v5eL+w}N3@-Gx?t~jzSU7Yjm<D4rS4?7=Tyt_~Sm7LTCKAtc9%bpyYQO1yEH{H)> z-sX=H=MPN0H^riT&ksqyr`x|I@jjY&;-Ny`w#D{K4X>Tx)Yur&D!FdGM2FLnEY{?( zvkudlKP_Z)<!*k>xbDe>BF<ledOKF_tcu%EkQnG$caSM8W*5h8Q>ATDUU{lI4|zgM zta5gp(2=!IVLev<L&o6lLignU^dF^+pZelcR=(@*a~I-jyzbuNXg=wJudNfu7r{d} z`!6^s%7|+$=%4mfUuVzZmv`44e6{QGVok?WlT}~nY5L8do_2S?OW<~q`szt<))+0A zY2^MdvRrCY{4v34=dMlDD($co)hO<nJ$3Ev{DMiZE%%r1f3W9`Q)Q=H&llb2m-kh$ zvpuh6srmNy?Tf}k3O4h54j!~*OYo4<O%iR~Y$4GoF6CHqg7roDEQ_6sRwp(5GMcb^ z!X2fD`p15%bm%(FZ8#^&{$6t1|0xnx@>W~Vrarq-D4zCa$HLD`*%SZn@sIGj&mdy( z+HJY>s!*jI;SM<$eUZ6Be5D8MOmhwY{%~y%Zz$TG{Q8osas3*RrG?j`H}|Zn$e6}f zxXSLb*gdgX>luXv-fZTXu*3K<!%Z81<|Xe164sYDuiqf@N_yQn_rn3_GqOsap3qn! z&wsX%V{Ym(XV%^K9fN~&w&nX}=5)T8`B7MwH)3Pt;`DC|G7IYc;x;5W1}d1(7u91? zPguE!BP6o>B<sCXIfvD9{@+aueja&v8Jp0`HHpUAb4u7wI^XzzS%~4q8Q#6y9u_wD zI_X%c_rChQFmF=gf#STfbBWJdGE=NRntuDd!a-5@TBG4T>j_E6MI4q|S8cal`H%5$ zL&ElkxZ_{uNFU)<%(G*9&BMBAS`JUOKGR<I8TSrG&bM_v!QblCF7AJ$yVkau$!A_b zgXM<m<BhSqt<7`4Okj#xz|O4N$9?a}I<DxD%-0Jn1b)Y<welRP(paX}&fjMtB`WEx z*)P^{Pxp+a%@me5JJeo?|G8cE=H}Lq2ijz>=bmqk`u5>P+ruZ08-!%O+%*3dGuK%s zFmJ`$U9ubA=ia?h`PNPT$x<eP`(_<M7vri=-aP(R?au3%@2MM&Z?3msj{D=Yrt$K^ zldQ9LT-FS?*0jucaPD;ub6NeaudY12x`k)+l>c@ydDKNotz)r}^}N#j``4>=cdgg8 zJ^0u3?3B&3mFkTT>o@vn<OkglUphN?gMjdt7&}dg7t8H6pI4V2UlO5wA|N_Slxg=d zn^h*;Oea1G&CJg&E4;?|(Kq3K?*X}fM{`-@+$Bd3%FR!GI#<`@OkB?X)FpZC8y_zU z-hWA~SL@<8HHCu-FC}&KnqC-&1huHXD4nq}ym?WV@KLQ}K@AoOrU?#G4;}KEC5}Cd z3KcKneR1``-MAyE4*B|Q7mTkvL~ZSPeRYoR^CI5q**o_%oi3eowfLvexkD{-z6&n% z#;jAS$dh|&bF5PNxo=F~!y@hJw=JC+uNC|((u+U%RD0(g&x$**^peHJj_lsKtzG(h zQL?`Ix5CF&GMx!uzOXjzc&#mS_#N-8%a+_vH*#q%{~4#r-Z0%V`~Acss}I}X$#u=% z9d}RQ{tnL_vs-t&?ub3K*K0>~>u%p2)-Bar3(C2^&yv<?m2R~^n6%SjLm*RD`;>0Q zI5F|CONye&9}inA90;7jv^CmbnV3-8da*YxGu-=yj*G2l_-6W9S8+}pbJt3?#hHiB zCv8dLdh%ed(Uxefg!0=Br?(3HzVWC~X|_~*4KsVls+G2$2@9=Q)`y+kangBjrOfOb zmp%sQJDn0}IxP9%(=X<`6?KNPu1~zW*De)S)MWn|IaM+9%hUwBno!{iF(dBm$Q9*Z zM73Lr+4FSW?WV}Sv(+qGyhg!zrKbeve%>&vi%+LJ9tc&J*vL@(l>f+tU|X*$$+gc9 zJ?^}-E@q|w)-Wr(n^_X-w<3(?Z@;TxOwrt;8p!A)&M`MxRA}So{2TEan@q(oOjG$h zsr8!Mk*f_MQ>wijZQh*9t=R8%ZAMasIMe@y+zkI-EV?CrmT|%ANm6UW8h%)ct`M}} zdG5o6t88t$DIqRjqrQ~4rcQd|<|J^4Ro8OSE%hIZPaKGPo07QpquuYBXEx^*iQBA> z%swuBRMF}G;Y`lB{vuaN_9vH@Ypz)x@m71|x+806rL4T#sD0OYYx%7>R(JW=4^`Pb zH?MJC>gAG}<7D*ZKw8YlhA#GPH{y8t8CoL6_^0&G7F~3U@jy=dgcz5W9OaiC8MD32 zGj?+<>bbOWo!fdVuOMLtlf&F4m+$Ua^--&&$@as^L*;MPJfqb%W^vdseBU%@jZ&7% zRrRZ0v-~fuod3pQ=EhI#F~v2U=hg|`oVniN_>K8<Em`lnSYB1Enq;Kp|9!`fFAI_j zUcHc>ux5epx=B8(_2)YM-BCHS;^gehwdOoBVcWmoYkHD({H)L+o-J$>ruAP^+ILa$ zSH`L(icE#m9<QG8xS(uN$eN2Ki+Ja`^ef0VU*c4pn_Omfe9i64h061Glq=}*F~qDg ztzTq#F~!XF#Tip4^~DoiR^OCbXnfIQ(cK*Jn$w30w?FCr{o?TE?@tr@{q!w!FDaz6 z3A5$BOnq*YbLMyWO~E-g<6SnSSDdtWa&b=L+TK}G<ifDVmVY^$`<$!uWUncA<WwC! zlGlDArrzS}?!tB55xY&!Nrg>m6Wf&8S8`CWII(l@`sZ)1$ntIPUdR3{$ZDh9hT?C} zo~`3tbWu#T%ark@!O^IVdL1`;(!UAc6D{7>w7uf!_D#v`Z>xf5@$Fr+qsi<w7l+}V zmKSEyRTH$I#>D10$a=&z&1-nOokhZQkxj!op1My=I}08*DLoY9-tMwv>7m#yQ{IJf z)r+3%VY$5X8sl2gWlrIW=SptfZH@|OSFtpl``Yf!+yf=+m<0s4sh)8UmN4_3@iAm= z<F3Ea=?2Hc9|TNf*C|Yxp!_uPTvBD2fckE!8}+$bpPXElG;0_732ZR&ac49ZP*mJo zaKy6leLv&#<_go=fUEZtHVc^UaEW^~=Sp$VhBb5Sx-vstUwS<3zOzTcbEEmD;9V00 z&RPo3E?e~Z|4qiG<$7Vh>kYntG0l?KJHyO*VUN7NgKXusZ)Nr|84Bmj+%$UE`j$AX z7JD5bd-_p>*y*G-_7(z;tPYDN)*cafV3By>qEn`xUs|`9*i^@FVH;CEUh*nh{qJ_4 zMBMHT)zuo^cZ@f18Q!tBy<J_ecX)wC=7!4=k3E^UzI<c5sa!9!&g*>JO~u(h`Q=Av z)Fp0|vN?JFnp0A^`SeHKfp^ZGp1tq3<bsQ<T%>Q?%CDRLJ9FCH=xYu0_V!kvmfqg| z{>GxUXN$bKOI>;IPH?d9HrST5CET*dka6eoA3Ks70&Zw5IUKdFS(5YiW}!D1=KSkC zYIl;CiDCcwv*LLLf<I5U?3ZbqYjWoFjYAI}gdJ*Q6Sq3Unjqi%?D7+Km*Rbrt9b>E zMlnV`d!7(}>8Q$qjAuzxLz<VS?-O2>^k7-*nj}%RjIG=k6J>uiXP(vG!&kiFbl*DF z9lC`A%$6?%l)mklm;B5n!&6VD{N!bKjl18vp67^ib(eps`5@<X@=Moq{xiRME0WJF z6|UUR=r8q!HzmSo@7`O&D-S+C|1U(QQ!3DtE4psp8^y2BCfY>of4d`BApUUTf+(5# z;@ex9{KYhaHKe|NdCn!xcR13i^Xl<7lLw8L5AKyIp10+N%Z1n&!P99PP6kR%vRCZF zOU|FYwzI?P*0poB((6w~+;Lv`Z-&7lg9jUX^(^Abv;Uu1ap(SNe#Vyc_X`>0PaU(A z^-O-k=EnG`NV>yxva;r!*|PE;tScD!=A~9C6y7i>m0sre`sHi+7gK|o=XvIA{a&iU zStuuYM(r%G>y;-jUKB87-<NY>R%Lg0=iz$szOAq!Z+ll?xQ)dv_i6ujudq?J%6Keb zx%~R!ecI<<&S^Y5yRfWmpW`00hYG8u0~RPu&5F+2lE0$-vEh}|9(&V|KJ-0etNl5| z<>8m~&eU*~r>&80o|>`OAN9Mrl<zc-{&nxuhggToHlcmbeXeZld93`6S9U5}hC1)9 z-z(z^S<d#|^!fhg$Lzg5lUYJr$_gr8oJh=l;_>}hW6q*-tqsNZUcC1UmhBckB&l_K zt@=b6)t;B_H&QmQV0x<DUb{#$G5tWl%stjUJEw3pHzqdA{7%=;2;nU{;?FmsEik7q zW&@k`g~psOpOVgnEHC3+VbEkBW!~PFnDywj@640R%r9~?`J9$d>YQ;wpUKtbD$8N5 z_Nm&x(t?^-)MP}+Hi|CdnpvU0!0Z=4-?Q|j@=N)puaEu6`_HjY=k}sS2Tp1W>uxVD z*dkvzSy|=5$I`qV+lqhx>Xk0K_}BO#tCHPD<uazO**fx9-&${b{N&b8RlZXFOB{<U z1gmo2ukkAC{9<%4QhH6*WWUNAilIjrFY-Kk@%;w9Z_5w&9eI3K>R_Kw|K-3x8f;>R z3_o%2|FLXqtjLG7^-s!XJ5*^L2%j#e=T?*}BX(TvilNMD$2+_NOL-^FEb9|?j%a#z zyJg>si0X*I6^CyvP|m+~@b1DBV)8d0@y(NwIB?=7_wCJb9*r!~TC1liAOBIn_4dl- zOY1#l?^L|muxGziY+=fj&_}yjJ0@9K)u=2Ln!nb}=h&J*&y<xH|9w_?&p&0a^%*9q zi6<>e`OAJL#e{8m*j~Ug|C(a0#m(FGDK73}2B)hwZ=3V&nAWo?8kU9=I{3eT?~%%Q zb6DA$jlEBM`;xxpmhI`%F?ZkJmFxe!$F!G|`*WXKn!??Abx)ouR{r<0zt`xdoA5H` zo0{$U+4GK1vpVat_AAelNrxrvvVPtu+#Bui^!HnC#+%hD-nP!|{qep(ek%WLI(%!J zRaf&4tL@^s^}L?5Ic%OW#l1GyUQw>}D?ie%n$4{I=bcNpRxzl#Gv=;jQjl4?)s|`6 zHHnQ*lM7rvR5f>RU7IWAYa7rN<v9HopUHxV<m&1J#=H$`rni!ou;)7|by-$({wiT~ zxXhwcn;y}4Gdel@-<E@pxmn$eG9DAsy4`0j)@5MN%IgyF32@2H>^57KyEgZMA8WxR zG1hy5XHL7#+q!3d-oMh1rPb1}7N}kmIdW*O`00Hyy6Y|WtHeiCvYzJZx-K3cdnfvj z^s*l_AKfZ9{OkPSF-wz~i$PK#|Gi*Sc6ZB&Yp1(+1i2lzTGO=osGA|v^e4JU&wCyC zD9!Mi;d7>Got}ACgKzMWO2g->F_8x=HJ_KxVRlo`F)>hfVp-|NV<>Hz{fO&E$ZX5_ zqm>*+Gxum5y3LvHzO(7`Y0LeSv}I%Bj~AO2q;B5GIzi#Y_R~AKrfHqI!SY{hUChzq zatZ5)?KjfR)2|mjwOaS)@hRRIPl?}x`{qCY`eBdAdFcnI6c4*}WPUmL*7(=MZ_?(6 z_ukyW`c5}S(unP$<de$wokiN=ZI$;p!rgWjwP>rhyj(2v{M1{U@3JwLX)?}d$|c_) z3cP;z42R+3c~1}S6=z>*@&1v)hDUE0LyrAFAkR=gh5aM@0eR5|d#)cLp$-35)Hm<X zTF3O+-M06EzoBxwq=MknKgK_lXUHF5IXPc>g?t)A*wG(M{~U4-Ppwa~dG5WVZl<KZ z!kfiEss-!g58n4K`Ct7*`uKenuR^x^|4sYrkKXV9@Ll-NUy-uB{b@G;?Pq+<R%_1i zJ!bEE^>|3Hr$FY<t4k-X-}7hF@2OE%QNaqUw5Lx0l@;}l-R}G<0kf>t$6rNWxnB9G zNGy2!q5WZd+49<}7~Z9cre(ZQ`^vY&_SM|vuU_-lvrQ{cPSy!IpLON?CgB}d{^$m- zSarkNb#eXid%A}g>3uN#R``wco2T0J)%%_cW{XP1WbZq5tjj6nh--ZEr|UQEH|KB2 z-?Zg>wB-Bk#`mTh-+Q03=l<D>{qsNirR)ioe9v!mFWl(fX36)fCExQK-;+<@^MBgM ze>#u<Rv!D^-SfRZb<h8KAO9IW{ww->?e9<fPq+M=x6%D(a?cALuLyR(h*krEs`51p zoLAg$3>4YqsTv*=BD3ro!_j|x*9f~W`PIBbgQs?l@bcCBl7s}M7QDGK^M5VJBb^V| zcl?Mr_q)(A;vIWIqvValI}Y%@5sXRTxOUUCEn%Ub5sUOI6=#Eh`a=Ra8z%D{%<5#@ zA|d^RRYNWJxwluNL+jy4_w}w}CUadxF6^{wpBGTtm$~Ltl$-SLtP_lqOByHNxTP<i zzRu$2TE{!0BG>iTHmo>*MNPp?xy|^~tUoRS#{;LTD^!MDX~?s2pAx&8CA7UQU2N6r zpf#^p1oK1tR<?i1+#{=bBU`p<Z}`M5uVl2-3cOM*mY&k$R@%pyHak(3In4NCrN)Am z9L4@y)3dkszE`~S|LSAKmF<sf4xX_tTXcN-3G>f~KUrN{%pUF_bNTJ-XIE|Awg=vS zyk0?!Z&JCf@1r$&3pz@rJ@?&U|21hwzqrpF`}d!JR&0NF*;$Asmi5|G56M%9SwA|x zbm8aEbF9+PPYSs_J0d$!K-On=fJVQ#=few3DH*Yh9~W@wr&VOW_WH5)mTTpX%Z&Ph zJ((Yc=5)r$J+3;qe4^_2m)CyzPKxtlm+DrqU7eabDd^l3F3;B8Geka4^RPPiXkk%$ zP4|y&k3x2*2kz8<Y7v@k$LVlzr|OG<a~ng0{>Yqp|L9uUq{wd%-Yiv!(_C2erR3>~ zgQr&%eaTz9tG)d5FS&TvMOreg8vPuyZ+`{u-kRt4wb`rlWz@m%0TFkXm#(&(TC`=? z2R*MnQC3kB2XDu=ei!p~DHZ3x*nR5b(@zn+N7hCws=55;H<;Z0AgbfSw){y`L>EL% ze5JBeO?`P>&?i;jhf>d+_dN8=*fig!nXh=;E0_K#%dpGLqCcxLpIcr#RW>&{u=2ZQ z*zz|AvsYb@s#ZU9S|j|(wr{>mq@O&IJRzliICuG@#IOq0t{D>R-(S=`;3Di-Vl=;R z%Ub5(6eotjin~)PBtLAKcq4H3rrBGgeT!D_j=r1o^;%w=uT0x(hQNK_c5ZrMx<>zK zmZy+z#Cg5xzjRi_2ZlZ<Jz2*nTA;ykx#{BxmBO=gL_>_PDaajKd(`fzmCw{oGj%gF z;&yuFEwJkJC<=MBYuQWw;M|6Mw$O%G9dp;pWUG8WQI$Dm){hsK+XCB!!~2{bNZb?Y zdfQkin-zcMkK_rt)`-GOIrB`S75>?Y=Ce*+cGDztoA0c*eh%S_eLADcRg&($TC#JO zwwki?YuU%alMAy}mis=eoZ)w;Gh5o?*RdNST8EbZF!@^@va34bOZxUnS=%q!CY0Pg z_O4ZW();G<<$I*xm3_56vrAlNVT#;_Z#-wrTs@CxoonhTJGJMKnQ3K1ufJbs&VA?F z@c9M%_G+)#eJehWKgU_(M}n<<oa(JNj%IxhHKi3(+YMG-(NpSe|Gx2Lo@t$`-Hz`D zzaH7WuPNl;d{XmcSpS6fxYveeo!5;_)|`=Bbp6+c4XJCU+x2XEpVZ&I{U^s}x%AGy zb$pp?9`}5mct(0o+T_O%ZG(kB`l;^Z^V#xa>-B$I<!ZM4DBb%voB2h?$JcJZue)71 zZ*}y?jOZT!1$vLRrpl!LSDC%WH?L`-rs$dZi?e^luShs=!CKAcx~sEREKlgjyXO(x zKiP-|{S|7yo0(L6JuNfmv*hc@X*Vuyb(OkZWR}y$-}XD9Qfktnzt^5eY6$F;Jhpu6 z!)S+~Suc!spILpV`I`NvTeepF%%}DQ?oL#D@=Yz|H+RmeXyff_+YjnZt+_qf+QG+b z-|ETMYp1uopY=rV_3A_0t#`7AESVg9GJ9?Q0#TFCyPm`eO!8CvHuLwH*OSd7?zjAR z`|M^s@eY4cOqb)`H>nR7i~U^pVXF#%#C`Elfd!$T4YC+YmYicRyd3#UY}t#wH?<4; zPp&uE@YKrob<bBV?>kpYC!3UAj^y66#IL<=;_8*H{r)pOYi=!2JKBGH`I)>wKQxPf z{W^cbIrT^Di#L{6wBIc}^*_|=wcNz7>s_wxZ~X1|)BMb@T(#HtH@o<U_nTZRzGgN3 zoD|!p;I#KYT4oltd0xEw-(#Vg6MvQS|0iP4&gUim^A=GHcl5Vt+4RS?q{UF}ud7JY zovN94cF*`ErKdjQmsN9S?xOXp{iR+zPu|zpV~}jU^TG<Qyt{e4&CZ*SN=-g_eO}J? z1Cz9NOnUixfAp~%?7zLvE|=b~t}0`6YU|blKch1FHd`KFlV2C#^ksJF1tbV2C+;ng zk9@oAhMeaa=I@8Q`=!#dHr?$1=~4WA@#cdDwfAR4ud4o%w|8Ir?c%RzpPhZCE73k* zO?bWL6wl>9IgHbMg1Pr~`$v9W8EkhU`_hAc&6j&mBsfTvH|MSB`;+AHe$himKF@U5 z6AWs_p*nmS9}QiLE!}vkCjGneWrtFo&Xfzfa#NC5DLu0nJ^c0e+$j+?$EMg7Y@Bj$ z{?tp#N?HdLkK_p2tF(GQZZ<Nixw4OOQl3cD#a^M`$J*aWtA<3hBucWS>Ir%tu@F2m zL;c;|{*%vHf__Q=ZVVEPnDv$6>D0;xcF!3%oC>=0L!jgA71bro1rowrO0>nwFLAxd z_58Uj{_^}!3)Sbi`LD34-1bQ&?Zsr<sHZmy`s?~QGW}0~v9;s8u0Q#=K=8aNYt>U< zv8AtB9#C&v!<4=C!DFr{S?w*V>gNx+RVAHz;-PJEG{JXUu<Y^4?~`xor!s%pyy0QL ze#?d9zoyuD8sBi4aZkWl;>^bf^Nt;vmLnz>JKwG4Q=VyDAH!?oq5{)T461LJ{B0?I zZSu}mn|+~PV#NH#NB+<1yz>8`@7z_+OZ+x3@!0FT<X@}LtK5VQy#GAhxZ)RGdD&U= zD)-v-rw_VI-m6v$$%^ZK47L0r$@N2x=?+uThBIvT9t-a;ydWs@gjwg0L3jVDkAiLO z`?T5fm*0M@p}gwGtO>&IXOt86$GRIo2y}aueof_+$)&ZawpFeZrp>XRV7RKy{>Y>4 z8=r_8T;W@{<Vc-Hmx#UFpUwWtljTnyRO0%-Gx|#W2}e=JggLzS=MH@|ShhF*)b&+Y z_9dhpT@`rr@W;nGCHr{pOD<|$EXteycUl~iFz37bef~n8|NZ#tCVIMksARkBS-GnH z(iS_-a_Q8F0^R9N*9|!%8?0_{CLZkNsBDTnzgw|rgP@|nk;Gx^!YK)&PSc|FcQIxe zbTC~0)g`@v_59+9*$E%s*(_rJ-_TI^S~`z`|DOb-e5yf9`Jx|9`pQerSKZ__Xo`0^ z;CJDJmEoU*{t6G$1YTG%Ha<w^sOV~Rzs`A*^IrFazt>jhIplrdU}AGz_xi{Q?r%y9 zj{NGBo*>VXl($1fW|v=2LV+yPyYy@RcPBI{h~0P*uW-5akq8^3a8Kp$`*#~yuUKYh zitesa%soC$|BK|)@B0hu9&V4beqaB$=Ira|zvJxd`+xlZ@cQ}N|Ni^y{@q?bU%yiM z^ZtjupI`o$&7X7p^N)zk>@D9-H=1tJsWjTd+I&LUN&Z9srxcGv?O)Ve;->Qb-OQ1@ z`JeZ)RPTVJMjs_-S)MeQ-_}|DCV9rj54rVo40qKuoh<pO68z$mNpSq+#Qpx+`#o=! z+<l_+XIjAbdfEAmYp)d>?7CdlDE$8I=0glOs+{?lgpWuCFXK8{@KrCBDgK1@jI$** zO?92>lVWO)f3IMgAgjwOUpTGpyQZ*41>@Uo`}~FPG2bw|eS59H@lQsdLP@8WXXdSr zt8zGauG@A2gE#}T#^&V{3qBr7)j0Ee%Eu4sN2Y1SD4B&nOqXGMu|HjXgY3<mz4H7Q zlat=8O`7pJ<NFUrFE8WO@|t_(SK4&NuMnTKwEN}d-E*TouTI%Ick$l5w0~a`4_ntd zf1i7%P0#xF@k=-L9Ja}a+==u!A~nT4`hT$C;S1@8Jb{dv3b&eO$R8}e{75MNn<h)} zmM_MMmjC=_T5OxY;l0KMb2pZ+oO_B3q=kO1nEP+@yf4uLf3BQ)`G4(XFDw2kzbA#W zv_3xeS`;&7lT7d|wPjmGmn`|E_h!>l>y0O;ZD_f~u=2ph`@ihw#?^4?_TA)}y>@rO zB)4|q`A(19ZY&phefiXqO4p<#GL>OpHl<JD{LIpQ|Lg+wU*8Y)-~L!FG2^y<H<P_~ z694SO=f&z;e3tA#@#Oi$OZG-ji@Uzs+;!2r_I%2b*qlo?o%^~{{XAq9Kk%(N>9#@Y z^{(!di$tzH7hQAAH!X>~RDSj%)$<`7!F|sy8GkiC@4Ha^-O%)+#3U!7ZRH=!jhCML z)wFy~yvV=2t(&%~{R{V5yI7`?dE?0{$C*bqc)VumF}T*PB(=0DW#X$PmG<5C2e#}| z=$pP~`m(#dk7G8T`!#Fs+3FQu`}_=exjpjNi+!u@3Z3*r!TZV#(}_ot&(!eTl6|B! z<-6Qc!$V>3ESeAPI3?TnV0+@_0xi=W(nebzZYgs2c~NE|7*?%xCUW~>&tzXUUJr{c z_e36WF>edVwtZr>c-LB2#x+N_INX}Nc6mpiTN6{Z*1}U<HoF@cg<^mA_bj=l&M$mT z&t<`1=fey1A9C#0o4Uu<wkBoC`?FhZ^)@u0GFo$Tk0bM%?v`Ebnb87W^8#uMzF1xg zG7Z;m_^K^1)iR3DI8un!Sd&|J@{H>fRv%#bQZk?UvWC>lwJYW_EGj-$CF3Vp7XSP} zgT}uO-FtK5CthpadrCBOqFcn8rG>j5PPugF-kb9wj?-o?uXy;fX_1cRrK3yTE-ow6 z`1LHaX9{1f<Jvtt7A;xSGgVhFI%wOLADbS9dNG)7m24C=*}H%xExVy{=gtNf*Hcc5 za@EeIO_H3-{W5@IQiqlh`^&F3>N!^qpDEWoAKN*x?+D+fLyCruo0u{J47u*F{h>Jh z6L-sA8_(ktxsozZKY8_Zq13}`T-(<*Iw>8JPi1Xw>uJuDX?p&6^3_Qe501SwIk$Zy z8zaBdK{k~pn}T0+wyg>gnH&Bv+WgJs^k%>Lyxslr-cw#OE~v?!$U1|GZ(gaN)K4e< z8~#-X8QIj`+a|9*a5C7__eM(M{!jx!zKGVz)lYVudX->dY`8P<@UyKPhx->P9k%sI zzgVH7!sxxqMe8`D@#+m)85Upr=WG;fUotVgDZ*6Z+9Vf-g~DlloM+7n&vvs<xb&z~ z+&ymQ44q$!0`^*OH-#w{CiPr@v(eXEN1?gfW6=qnt{XBJ6q>|#W!JL4+?XpU^5xFP zvte^igel)^O-wX-x~ibfWAW9i*G>kVD1CHPudaUC7TZ&a+-V+@th-Jz^2<HDBdVAl zQu@1|OYY&ylQ~z@cB{$0eHL+hPp0|#izc(urb?Dxefw$W<KSQuquT)-w~vI)53k)R zkr2~jFmdUDGnEaWV=nBop0#Ml1MBe5r3;V8s9l+HT6@XSPm@k94LyBg?Y!9j%6o!p z``RzvnD6d<{z3uQsVsJb&Sh=vlbPR{FFem_E52*Cd63tRWx-CdUN7_Bajt(aEo-}H z*TRR}Zs$c$eIxtIZ!HsFfwPWKW~PDT=7vKiJ6Z#~3jgSyoN#CH7KzsZ836|lzgFg7 z!?^KIBA?nB>xy4<Stb-RXFeBnbgoj}ypKVCE^pDBd%ImW@Z59e7Sow#^_**#V%NrF zx@@bw+Vl7}O7bqcGAn@n)4@OK6}DR>x);3IC>#^>H?4kE_<|J|itn8ajN5xFRI%#w z(q6u&_AeMLR}1W)?fqQCn&IuOOwlVBnEy0hyfW`#T|rUMwsoss@de%yO7GfU|5ol6 z>)k~Mn-_X~J1}MK-rV&jEnkhp>b_0xV-sK5BkSXsX?i}`c;U9R`O)kC=w9b|tFGbB z`^9<diMR1T|29{M1l)^etN!g675<24{p#gM*}J_Tv3*UOAay9NF!bFzkqn~^7I!>2 z9_g@NT_u>owMo&;>8dAZ;!X3tZfP~CD~|g1w};&}u6WJ*)~zS~=3Ilj!RgXPIohvx zmKZiU3eLRqVx@;;zMI(9EeUK*CB+3*kDVe{tX!LMOq|6$GC268&U+T2joZTJ&z^ee z-ko{+AN-4I4<_xcm>3or6B?u{QsULMy7sgvb5PMc;|8NMHB(b^Sog|A#IF1qqsw5y z6)rwOaSPklDMst27UvpXpXT7`Zd~!sXr8#zm(;gL>sogP9_*cZC*o)?Tb|1fwmVZz zW1>%Q)!w=O@(Yzm8Vi>E>RDtc|M}-)b*%^ey@}KBbsTh={zXkvCp-60tnQuDt<|js z)-AjHbPaj-x162CrmZ{QD=bR3NHQ#WO^v$D&Ls6|>Zcyfoz;}+mF&Gi;;<2qw~6b~ zsE#vRY%<n7{A*F{DKtfC%R~{4Q-3BNW)R(26ZG6Nz{zpRo9WvVc$dZGuAN`8MBrwW zw3d1F#}*^OaEX?+(Q1b)BkFqRY~8iY>ACoWo@2YRinLVbH$Ae?i?_ARe5F_>bt6&P zLi^6mwQWl0cf82`aq(Z~?NeW7o&0bpxMP2{k>d658Ovh+E2S_+ZJ#&A^G^*|y78uE ztB&=jPBGAJ)m7EZdFmN0@KC&|W3o#73K{MRuNnp1LmW)1SJ$2~YSVD+7OUC*FvG#H z*e}2{W?|z@?Yc)9u_px1$Ox*7e<;c@dmZsXbw~M<hziYCdw2gwH)36Q^-Vt?=@h=Z zP+q-R;_uPNKh*;jUeA4^ZrhU1eO+Oyb>cjkB?~Gh%w!D->j?iCZ5_qorubU#$4778 z>j4ov%;HY?wZ8V7yJ*V0jqguR^$*^udCk-6rqIRL{tuPrJN0ccRho1_`;v9^;T?=$ zVt7yA_#Gjz>7C9>6VJu>oh_YY?*2&q`TA2+Yn0%bD~S*Lm?sN)e)L|Na&@=IC8kMD zQ@2(bOFb-{)H#=B(|ms=!<7g94t_l?pL{LT%<-A*`AJilf&xE2-ZweD>4I#dg2~-t zg+C>`&mAw^Qdq}$@9-}cm-d(EK5r3VSk%2b%7GzL@pk%)Ee?m7Vl<EEoL;-Mb7@@l zfqkkRn*(oVF~&WQ4Lx(j_ko^%pLg_gqj^iOiyJTPym>k7^xYY9U(*v@5A0&%?tOUW z)yzo|xxs30RDTIpv*$-!pK<PzFw(aab(AsUUwOtolEwA3>U7r+vvPJuOx`o~n^$oA znP9Jszi0FJ`((aTy4d?nU2)5e8Wk0*3x8Bh{8feSX4rYDR9)J({eITB>GRd%7YQcF z1v}@Sjm}ym_}p;oPo3Er=PI>lXIx(AoqIX9=~=f_$-YTWy=VP{7HK}$URkL<HRH%n z&8vU5Ebx_d(S5P8`|{fh-g?U?TV&<GUi!_%dgU?Rkf8a$lm7*|3SQs)S4oIdSaRkr zrw(t4lD8X+x+gzq+a9krdvmu}>C4Uq=N{+pS7F(}F=g}KkZC_X(&D_7E1u}>HA$MX zvn6lF+4HWZTmHTcFDXkZo8A*=vU8@`s|Lq8wW8<ehW>FqANXv``vt`!w@mI>1V_#} zoFucf;R<(5%v!&HzY{80zkSKbUUQanr`&;3gQH!IO{Y(1a_0Szc#w4P^3(HcWJ3iG znhV?4RI3T_e0b0vE<JnEyaTVV9=qnovhC=t<r@v&h0adO?S0UipF6uOeLmN$HDx#Q zOig`v7u%jISade4IN9XUQnfp)A2lrDREs^Ud+$MQ7PmrW$0MC*y!-Awvu1uCIa@e~ zzbz}<<Pyj7y*Cq`N{@R8>^^?$N?1hkN)w+(`L(<;@0xo1-6S8C<(G5(OYjlPRO{a4 zHvjk8Ntuz>9k&+e=3TJcx_9T&sTx<KK5ep=iCkcMR8L{Cb3t<OtcY4SE8C@OmwGa< zubR4k;|~o6rD+#3MLYI3oKn|+p2HfR@Mde<n_W}<*5y1nr6y5Sm?|B<?%655bq8{| z&7#eVo-%~*+BxabDaRXWg{)@L&M9rI(mG$w9-FZRGg@7pcGWQ94}%y-$CoF@C!VXz zZ~I)t_xF_S;^O5tT+KEUPC9;SWS@Jo^$GK8!87wtv^%q^iBIP5dEuj{Dlc(yW{jKN zjdKsabk%g9+}=|2z$M*FwT5fPg_%-K{%a5Z+b>pM`eU{GiZaQgEX-Du!zbm7{*-zl zsS&U;A!lOJqZRx3K1k(0SgBmTwLo9|UDU%k%{zP#*9pI?dYC7Y7Xw+!6V6$_x?nqZ zc{^wokJQ6=V(;W0#;M=gduVUm4s#B3#XElw?e*N@`S2UZ_V69c3Vyd#Z!X9ee5d%3 zkL&w}f_%|;9R>Xy-z6@5Gg+C}x=-$^(#zK#VW+Q8UNdd|WC#9t(f!RXSJht}>@D5k za;f*Lfy<+RUtRd$iGO*(=*TZ8@a2JJlbntFh34m6RRsaZn&oW#FEl^rtorchs|)|U z{e3SEHaE%1+{#_Rt}pQAfr1vht;Gf*M}EFLE*F}cSIB&MprFfc`@_kRpYKx9h34ih zGG87n&}O%-IBB)AE3|1vjpS;kz)I6-wnZS>6*ZRJjbKe6b2Lsl^7q|~KCkuSLouu8 zQpTu`;>A^a_Q)LBIWcFdx|s0P@>WrYAKct8d(PYGc%6PM!@*MMvLrw}N}r)7_vhQJ z@9$zRxE1C+S+?(3<vbVNI1Sc!4cr+{`wwV`Ty*o~SL5D#xGgE8VA7{Gp1Et-64~Q4 zW>f{wJrF7JCRX1;T4q^Ny<68BCgTHV0wiy{`zhBtJN*BURg<D<V(~gI{=MMrg%|a` zbhempx}vb<ZuGX?J<pg}#U`!g>3@~BN!&^3g!?6?{O7q+8r4%7o>?5dS(s9?%%k?e zy33QA*%Paadt|rYPiRPxHCXihWO)9?x7&|DJj?p>a6^TN(7KTKueh^2T!h5uZhd~~ z)s&sukI!z|HKFc^RHO2Bq0pDHQ<p6>n|jaPVf!|7*BG9@$R{6e2Cd2AydLeQaw*qx zv-s+tkFvCTC(aPc&E|7>q|<y>p+SG<fz;CshP&As97~rhb!u>(W9%TxxKnR>c4f@@ z_GPNmxp(s9++<DJv}Rg?d_d~yoiPs?PQO|j)AnI$*J;IBCsHINci-5=Fs*gnvO7n5 z!xoE%?aIA#{oLQxJO3BGi$DE$L&CmE$wo?NMepXn-rg|DE6MWLrQZu(g0-IN91fYf zeMg<n{#lPcZrHOaG1O&8;6pR6?U6flWlOdP|G2*KRLmitOHcTE7BLxf_Do4QFMLbS z`{az^hbd<`4{|)1s%3c3p}959yZ*q&-62yP{6uCcNR*v;XXG(U-_haD!FNI$Keq<d zM>2f&zNsbUudy&<`XPqJQ9Xv9VF~}dwT!2lMFqWhUdT6fiq>tjNqjdF<#+N3in^XW zsmv_dQJy2*+nOVI(xE7Kr^mcxb&jv%nG;!;o+#Xv9LmAjnDguG0f|Kp>})5z`$gIc zIQZ9zOzkl_lhE!{Fw0~2tbn;(3-5?~=`>8ro*T;SZFgh(t4&EBMeA5v?$})F=6rHR zxooaOo9We4t}09nEX%oqPg*TF9QNp`l+e+SNq>}FB79xnmOSKa*fTHrXV7EIu(MKY z(=LdeOgriPWSX5we9QN|nKOK*%uG%D`RVzM$^J*Q7ks#!bzEqo%N(;M9KWod-PicS z_qS7PQ+AKas<W>=lv3K1I-frK)UmcJBKw+~koFl-<AfZ&cdK1GbJiXSUy*3|ZTA!L z%Pc$A{aN64>&v$%>^DCppJ97_*}CgZ^vuuC-+Z`w+2!mO-A%5ywh26%bonq}&>8md zGdmNMrQ50;9#~s=r50`fU95M0gK}cI%gZU(RF^lFM_FILUU=HjNp(ld@`>9Q$4#*O zc_Qypw@K;$40{p%JpY~i9CFhpZn<@E%RSFqOxt=+_U5nFH1X*+pIvo`HH(LxPe#Vd zz^a5{hZB>3eTKjUbLRF|rvr2B8qT<x?M``Vn-lH5c*4Kmzc26QSfM!a+n<MT-Z5lM zxTaAtZFV%z_j4V$L~;)=GrD#uY?kBS^3NNyeR7%Pw_IxTH7E;ml%F#7X#>L(fzM(O z&U<d%G)KF8XVA&1S&JF2EHU9Ti1>SWRz1%bjS07$UAp2K|0LbuIH^<abGS~kp2y8% zg00fNKo#-n({zOLW)^6->~`7V-5RZWC-o37XSwAvPG6&%TUJq<vR`MO>}##AI@$LW zOjzsQ<g{)GZe)?>{+v2(4~zL5oyyZfby1&IIoVY`ZE6p2nRVGHdvT7aWs~<*{d1W| c({|?CTSXu06MM{46B)#Q>PtOi!KUQ}02so(6951J diff --git a/wp-includes/js/tinymce/plugins/paste/editor_plugin.js b/wp-includes/js/tinymce/plugins/paste/editor_plugin.js index 4de97103a..e47a5c630 100644 --- a/wp-includes/js/tinymce/plugins/paste/editor_plugin.js +++ b/wp-includes/js/tinymce/plugins/paste/editor_plugin.js @@ -1 +1 @@ -(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default: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(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9){d([[/(?:<br> [\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br> [\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"<br />"]])}else{h([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}d.execCommand("mceInsertContent",false,g)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file +(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9){d([[/(?:<br> [\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br> [\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"<br />"]])}else{if(e=="p"){h([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{h([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}d.execCommand("mceInsertContent",false,g)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/paste/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/paste/editor_plugin_src.js new file mode 100644 index 000000000..cec4abf98 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/paste/editor_plugin_src.js @@ -0,0 +1,871 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var each = tinymce.each, + defs = { + paste_auto_cleanup_on_paste : true, + paste_enable_default_filters : true, + paste_block_drop : false, + paste_retain_style_properties : "none", + paste_strip_class_attributes : "mso", + paste_remove_spans : false, + paste_remove_styles : false, + paste_remove_styles_if_webkit : true, + paste_convert_middot_lists : true, + paste_convert_headers_to_strong : false, + paste_dialog_width : "450", + paste_dialog_height : "400", + paste_text_use_dialog : false, + paste_text_sticky : false, + paste_text_sticky_default : false, + paste_text_notifyalways : false, + paste_text_linebreaktype : "combined", + paste_text_replacements : [ + [/\u2026/g, "..."], + [/[\x93\x94\u201c\u201d]/g, '"'], + [/[\x60\x91\x92\u2018\u2019]/g, "'"] + ] + }; + + function getParam(ed, name) { + return ed.getParam(name, defs[name]); + } + + tinymce.create('tinymce.plugins.PastePlugin', { + init : function(ed, url) { + var t = this; + + t.editor = ed; + t.url = url; + + // Setup plugin events + t.onPreProcess = new tinymce.util.Dispatcher(t); + t.onPostProcess = new tinymce.util.Dispatcher(t); + + // Register default handlers + t.onPreProcess.add(t._preProcess); + t.onPostProcess.add(t._postProcess); + + // Register optional preprocess handler + t.onPreProcess.add(function(pl, o) { + ed.execCallback('paste_preprocess', pl, o); + }); + + // Register optional postprocess + t.onPostProcess.add(function(pl, o) { + ed.execCallback('paste_postprocess', pl, o); + }); + + ed.onKeyDown.addToTop(function(ed, e) { + // Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that + if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) + return false; // Stop other listeners + }); + + // Initialize plain text flag + ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default'); + + // This function executes the process handlers and inserts the contents + // force_rich overrides plain text mode set by user, important for pasting with execCommand + function process(o, force_rich) { + var dom = ed.dom, rng; + + // Execute pre process handlers + t.onPreProcess.dispatch(t, o); + + // Create DOM structure + o.node = dom.create('div', 0, o.content); + + // If pasting inside the same element and the contents is only one block + // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element + if (tinymce.isGecko) { + rng = ed.selection.getRng(true); + if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) { + // Is only one block node and it doesn't contain word stuff + if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1) + dom.remove(o.node.firstChild, true); + } + } + + // Execute post process handlers + t.onPostProcess.dispatch(t, o); + + // Serialize content + o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''}); + + // Plain text option active? + if ((!force_rich) && (ed.pasteAsPlainText)) { + t._insertPlainText(o.content); + + if (!getParam(ed, "paste_text_sticky")) { + ed.pasteAsPlainText = false; + ed.controlManager.setActive("pastetext", false); + } + } else { + t._insert(o.content); + } + } + + // Add command for external usage + ed.addCommand('mceInsertClipboardContent', function(u, o) { + process(o, true); + }); + + if (!getParam(ed, "paste_text_use_dialog")) { + ed.addCommand('mcePasteText', function(u, v) { + var cookie = tinymce.util.Cookie; + + ed.pasteAsPlainText = !ed.pasteAsPlainText; + ed.controlManager.setActive('pastetext', ed.pasteAsPlainText); + + if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) { + if (getParam(ed, "paste_text_sticky")) { + ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky')); + } else { + ed.windowManager.alert(ed.translate('paste.plaintext_mode')); + } + + if (!getParam(ed, "paste_text_notifyalways")) { + cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31)) + } + } + }); + } + + ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'}); + ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'}); + + // This function grabs the contents from the clipboard by adding a + // hidden div and placing the caret inside it and after the browser paste + // is done it grabs that contents and processes that + function grabContent(e) { + var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent; + + // Check if browser supports direct plaintext access + if (e.clipboardData || dom.doc.dataTransfer) { + textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text'); + + if (ed.pasteAsPlainText) { + e.preventDefault(); + process({content : dom.encode(textContent).replace(/\r?\n/g, '<br />')}); + return; + } + } + + if (dom.get('_mcePaste')) + return; + + // Create container to paste into + n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF'); + + // If contentEditable mode we need to find out the position of the closest element + if (body != ed.getDoc().body) + posY = dom.getPos(ed.selection.getStart(), body).y; + else + posY = body.scrollTop + dom.getViewPort(ed.getWin()).y; + + // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles + // If also needs to be in view on IE or the paste would fail + dom.setStyles(n, { + position : 'absolute', + left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div + top : posY - 25, + width : 1, + height : 1, + overflow : 'hidden' + }); + + if (tinymce.isIE) { + // Store away the old range + oldRng = sel.getRng(); + + // Select the container + rng = dom.doc.body.createTextRange(); + rng.moveToElementText(n); + rng.execCommand('Paste'); + + // Remove container + dom.remove(n); + + // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due + // to IE security settings so we pass the junk though better than nothing right + if (n.innerHTML === '\uFEFF\uFEFF') { + ed.execCommand('mcePasteWord'); + e.preventDefault(); + return; + } + + // Restore the old range and clear the contents before pasting + sel.setRng(oldRng); + sel.setContent(''); + + // For some odd reason we need to detach the the mceInsertContent call from the paste event + // It's like IE has a reference to the parent element that you paste in and the selection gets messed up + // when it tries to restore the selection + setTimeout(function() { + // Process contents + process({content : n.innerHTML}); + }, 0); + + // Block the real paste event + return tinymce.dom.Event.cancel(e); + } else { + function block(e) { + e.preventDefault(); + }; + + // Block mousedown and click to prevent selection change + dom.bind(ed.getDoc(), 'mousedown', block); + dom.bind(ed.getDoc(), 'keydown', block); + + or = ed.selection.getRng(); + + // Move select contents inside DIV + n = n.firstChild; + rng = ed.getDoc().createRange(); + rng.setStart(n, 0); + rng.setEnd(n, 2); + sel.setRng(rng); + + // Wait a while and grab the pasted contents + window.setTimeout(function() { + var h = '', nl; + + // Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit + if (!dom.select('div.mcePaste > div.mcePaste').length) { + nl = dom.select('div.mcePaste'); + + // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string + each(nl, function(n) { + var child = n.firstChild; + + // WebKit inserts a DIV container with lots of odd styles + if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) { + dom.remove(child, 1); + } + + // Remove apply style spans + each(dom.select('span.Apple-style-span', n), function(n) { + dom.remove(n, 1); + }); + + // Remove bogus br elements + each(dom.select('br[data-mce-bogus]', n), function(n) { + dom.remove(n); + }); + + // WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV + if (n.parentNode.className != 'mcePaste') + h += n.innerHTML; + }); + } else { + // Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc + // So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same + h = '<p>' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '</p><p>').replace(/\r?\n/g, '<br />') + '</p>'; + } + + // Remove the nodes + each(dom.select('div.mcePaste'), function(n) { + dom.remove(n); + }); + + // Restore the old selection + if (or) + sel.setRng(or); + + process({content : h}); + + // Unblock events ones we got the contents + dom.unbind(ed.getDoc(), 'mousedown', block); + dom.unbind(ed.getDoc(), 'keydown', block); + }, 0); + } + } + + // Check if we should use the new auto process method + if (getParam(ed, "paste_auto_cleanup_on_paste")) { + // Is it's Opera or older FF use key handler + if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { + ed.onKeyDown.addToTop(function(ed, e) { + if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) + grabContent(e); + }); + } else { + // Grab contents on paste event on Gecko and WebKit + ed.onPaste.addToTop(function(ed, e) { + return grabContent(e); + }); + } + } + + ed.onInit.add(function() { + ed.controlManager.setActive("pastetext", ed.pasteAsPlainText); + + // Block all drag/drop events + if (getParam(ed, "paste_block_drop")) { + ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) { + e.preventDefault(); + e.stopPropagation(); + + return false; + }); + } + }); + + // Add legacy support + t._legacySupport(); + }, + + getInfo : function() { + return { + longname : 'Paste text/word', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + _preProcess : function(pl, o) { + var ed = this.editor, + h = o.content, + grep = tinymce.grep, + explode = tinymce.explode, + trim = tinymce.trim, + len, stripClass; + + //console.log('Before preprocess:' + o.content); + + function process(items) { + each(items, function(v) { + // Remove or replace + if (v.constructor == RegExp) + h = h.replace(v, ''); + else + h = h.replace(v[0], v[1]); + }); + } + + if (ed.settings.paste_enable_default_filters == false) { + return; + } + + // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser + if (tinymce.isIE && document.documentMode >= 9) { + // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser + process([[/(?:<br> [\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br> [\s\r\n]+|<br>)*/g, '$1']]); + + // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break + process([ + [/<br><br>/g, '<BR><BR>'], // Replace multiple BR elements with uppercase BR to keep them intact + [/<br>/g, ' '], // Replace single br elements with space since they are word wrap BR:s + [/<BR><BR>/g, '<br>'] // Replace back the double brs but into a single BR + ]); + } + + // Detect Word content and process it more aggressive + if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) { + o.wordContent = true; // Mark the pasted contents as word specific content + //console.log('Word contents detected.'); + + // Process away some basic content + process([ + /^\s*( )+/gi, // entities at the start of contents + /( |<br[^>]*>)+\s*$/gi // entities at the end of contents + ]); + + if (getParam(ed, "paste_convert_headers_to_strong")) { + h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>"); + } + + if (getParam(ed, "paste_convert_middot_lists")) { + process([ + [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker + [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert mso-list and symbol spans to item markers + [/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol paragraphs to item markers (FF) + ]); + } + + process([ + // Word comments like conditional comments etc + /<!--[\s\S]+?-->/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 <s> into <strike> 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 <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length + [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\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 <strong> + if (getParam(ed, "paste_convert_headers_to_strong")) { + process([ + [/<h[1-6][^>]*>/gi, "<p><strong>"], + [/<\/h[1-6][^>]*>/gi, "</strong></p>"] + ]); + } + + process([ + // Copy paste from Java like Open Office will produce this junk on FF + [/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, ''] + ]); + + // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso"). + // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation. + stripClass = getParam(ed, "paste_strip_class_attributes"); + + if (stripClass !== "none") { + function removeClasses(match, g1) { + if (stripClass === "all") + return ''; + + var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "), + function(v) { + return (/^(?!mso)/i.test(v)); + } + ); + + return cls.length ? ' class="' + cls.join(" ") + '"' : ''; + }; + + h = h.replace(/ class="([^"]+)"/gi, removeClasses); + h = h.replace(/ class=([\-\w]+)/gi, removeClasses); + } + + // Remove spans option + if (getParam(ed, "paste_remove_spans")) { + h = h.replace(/<\/?span[^>]*>/gi, ""); + } + + //console.log('After preprocess:' + h); + + o.content = h; + }, + + /** + * Various post process items. + */ + _postProcess : function(pl, o) { + var t = this, ed = t.editor, dom = ed.dom, styleProps; + + if (ed.settings.paste_enable_default_filters == false) { + return; + } + + if (o.wordContent) { + // Remove named anchors or TOC links + each(dom.select('a', o.node), function(a) { + if (!a.href || a.href.indexOf('#_Toc') != -1) + dom.remove(a, 1); + }); + + if (getParam(ed, "paste_convert_middot_lists")) { + t._convertLists(pl, o); + } + + // Process styles + styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties + + // Process only if a string was specified and not equal to "all" or "*" + if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) { + styleProps = tinymce.explode(styleProps.replace(/^none$/i, "")); + + // Retains some style properties + each(dom.select('*', o.node), function(el) { + var newStyle = {}, npc = 0, i, sp, sv; + + // Store a subset of the existing styles + if (styleProps) { + for (i = 0; i < styleProps.length; i++) { + sp = styleProps[i]; + sv = dom.getStyle(el, sp); + + if (sv) { + newStyle[sp] = sv; + npc++; + } + } + } + + // Remove all of the existing styles + dom.setAttrib(el, 'style', ''); + + if (styleProps && npc > 0) + dom.setStyles(el, newStyle); // Add back the stored subset of styles + else // Remove empty span tags that do not have class attributes + if (el.nodeName == 'SPAN' && !el.className) + dom.remove(el, true); + }); + } + } + + // Remove all style information or only specifically on WebKit to avoid the style bug on that browser + if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) { + each(dom.select('*[style]', o.node), function(el) { + el.removeAttribute('style'); + el.removeAttribute('data-mce-style'); + }); + } else { + if (tinymce.isWebKit) { + // We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." /> + // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles + each(dom.select('*', o.node), function(el) { + el.removeAttribute('data-mce-style'); + }); + } + } + }, + + /** + * Converts the most common bullet and number formats in Office into a real semantic UL/LI list. + */ + _convertLists : function(pl, o) { + var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html; + + // Convert middot lists into real semantic lists + each(dom.select('p', o.node), function(p) { + var sib, val = '', type, html, idx, parents; + + // Get text node value at beginning of paragraph + for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling) + val += sib.nodeValue; + + val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0'); + + // Detect unordered lists look for bullets + if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val)) + type = 'ul'; + + // Detect ordered lists 1., a. or ixv. + if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val)) + type = 'ol'; + + // Check if node value matches the list pattern: o + if (type) { + margin = parseFloat(p.style.marginLeft || 0); + + if (margin > lastMargin) + levels.push(margin); + + if (!listElm || type != lastType) { + listElm = dom.create(type); + dom.insertAfter(listElm, p); + } else { + // Nested list element + if (margin > lastMargin) { + listElm = li.appendChild(dom.create(type)); + } else if (margin < lastMargin) { + // Find parent level based on margin value + idx = tinymce.inArray(levels, margin); + parents = dom.getParents(listElm.parentNode, type); + listElm = parents[parents.length - 1 - idx] || listElm; + } + } + + // Remove middot or number spans if they exists + each(dom.select('span', p), function(span) { + var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, ''); + + // Remove span with the middot or the number + if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html)) + dom.remove(span); + else if (/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(html)) + dom.remove(span); + }); + + html = p.innerHTML; + + // Remove middot/list items + if (type == 'ul') + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/, ''); + else + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, ''); + + // Create li and add paragraph data into the new li + li = listElm.appendChild(dom.create('li', 0, html)); + dom.remove(p); + + lastMargin = margin; + lastType = type; + } else + listElm = lastMargin = 0; // End list element + }); + + // Remove any left over makers + html = o.node.innerHTML; + if (html.indexOf('__MCE_ITEM__') != -1) + o.node.innerHTML = html.replace(/__MCE_ITEM__/g, ''); + }, + + /** + * Inserts the specified contents at the caret position. + */ + _insert : function(h, skip_undo) { + var ed = this.editor, r = ed.selection.getRng(); + + // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells. + if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer) + ed.getDoc().execCommand('Delete', false, null); + + ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo}); + }, + + /** + * Instead of the old plain text method which tried to re-create a paste operation, the + * new approach adds a plain text mode toggle switch that changes the behavior of paste. + * This function is passed the same input that the regular paste plugin produces. + * It performs additional scrubbing and produces (and inserts) the plain text. + * This approach leverages all of the great existing functionality in the paste + * plugin, and requires minimal changes to add the new functionality. + * Speednet - June 2009 + */ + _insertPlainText : function(content) { + var ed = this.editor, + linebr = getParam(ed, "paste_text_linebreaktype"), + rl = getParam(ed, "paste_text_replacements"), + is = tinymce.is; + + function process(items) { + each(items, function(v) { + if (v.constructor == RegExp) + content = content.replace(v, ""); + else + content = content.replace(v[0], v[1]); + }); + }; + + if ((typeof(content) === "string") && (content.length > 0)) { + // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line + if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) { + process([ + /[\n\r]+/g + ]); + } else { + // Otherwise just get rid of carriage returns (only need linefeeds) + process([ + /\r+/g + ]); + } + + process([ + [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them + [/<br[^>]*>|<\/tr>/gi, "\n"], // Single linebreak for <br /> tags and table rows + [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them + /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags + [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*) + [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],// Cool little RegExp deletes whitespace around linebreak chars. + [/\n{3,}/g, "\n\n"] // Max. 2 consecutive linebreaks + ]); + + content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content)); + + // Perform default or custom replacements + if (is(rl, "array")) { + process(rl); + } else if (is(rl, "string")) { + process(new RegExp(rl, "gi")); + } + + // Treat paragraphs as specified in the config + if (linebr == "none") { + // Convert all line breaks to space + process([ + [/\n+/g, " "] + ]); + } else if (linebr == "br") { + // Convert all line breaks to <br /> + process([ + [/\n/g, "<br />"] + ]); + } else if (linebr == "p") { + // Convert all line breaks to <p>...</p> + process([ + [/\n+/g, "</p><p>"], + [/^(.*<\/p>)(<p>)$/, '<p>$1'] + ]); + } else { + // defaults to "combined" + // Convert single line breaks to <br /> and double line breaks to <p>...</p> + process([ + [/\n\n/g, "</p><p>"], + [/^(.*<\/p>)(<p>)$/, '<p>$1'], + [/\n/g, "<br />"] + ]); + } + + ed.execCommand('mceInsertContent', false, content); + } + }, + + /** + * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine. + */ + _legacySupport : function() { + var t = this, ed = t.editor; + + // Register command(s) for backwards compatibility + ed.addCommand("mcePasteWord", function() { + ed.windowManager.open({ + file: t.url + "/pasteword.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline: 1 + }); + }); + + if (getParam(ed, "paste_text_use_dialog")) { + ed.addCommand("mcePasteText", function() { + ed.windowManager.open({ + file : t.url + "/pastetext.htm", + width: parseInt(getParam(ed, "paste_dialog_width")), + height: parseInt(getParam(ed, "paste_dialog_height")), + inline : 1 + }); + }); + } + + // Register button for backwards compatibility + ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"}); + } + }); + + // Register plugin + tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin); +})(); diff --git a/wp-includes/js/tinymce/plugins/paste/pastetext.htm b/wp-includes/js/tinymce/plugins/paste/pastetext.htm index dcf1a4b40..eb352ef37 100644 --- a/wp-includes/js/tinymce/plugins/paste/pastetext.htm +++ b/wp-includes/js/tinymce/plugins/paste/pastetext.htm @@ -1,8 +1,8 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#paste.paste_text_desc}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/pastetext.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/pastetext.js?ver=349-20120314"></script> </head> <body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;"> <form name="source" onsubmit="return PasteTextDialog.insert();" action="#"> diff --git a/wp-includes/js/tinymce/plugins/paste/pasteword.htm b/wp-includes/js/tinymce/plugins/paste/pasteword.htm index 31583e3f4..ee9b9e8fe 100644 --- a/wp-includes/js/tinymce/plugins/paste/pasteword.htm +++ b/wp-includes/js/tinymce/plugins/paste/pasteword.htm @@ -1,8 +1,8 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#paste.paste_word_desc}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/pasteword.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/pasteword.js?ver=349-20120314"></script> </head> <body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;"> <form name="source" onsubmit="return PasteWordDialog.insert();" action="#"> diff --git a/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js b/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js index f7cadd6e7..71fbb68a6 100644 --- a/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js +++ b/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js @@ -1 +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",this.url+'/rpc.php');if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}����������������\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(e){var f=this.editor,h=f.dom,g=f.selection,d=g.getBookmark();c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!e||h.decode(i.innerHTML)==e){h.remove(i,1)}}});g.moveToBookmark(d)},_markWords:function(l){var g=this.editor,f=g.dom,j=g.getDoc(),h=g.selection,i=h.getBookmark(),d=[],k=l.join("|"),m=this._getSeparators(),e=new RegExp("(^|["+m+"])("+k+")(?=["+m+"]|$)","g");this._walk(g.getBody(),function(o){if(o.nodeType==3){d.push(o)}});c(d,function(t){var r,q,o,s,p=t.nodeValue;if(e.test(p)){p=f.encode(p);q=f.create("span",{"class":"mceItemHidden"});if(tinymce.isIE){p=p.replace(e,"$1<mcespell>$2</mcespell>");while((s=p.indexOf("<mcespell>"))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(f.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("</mcespell>");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(f.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(f.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(e,'$1<span class="mceItemHiddenSpellWord">$2</span>')}f.replace(q,t)}});h.moveToBookmark(i)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file +(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}����������������\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(e){var f=this.editor,h=f.dom,g=f.selection,d=g.getBookmark();c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!e||h.decode(i.innerHTML)==e){h.remove(i,1)}}});g.moveToBookmark(d)},_markWords:function(l){var g=this.editor,f=g.dom,j=g.getDoc(),h=g.selection,i=h.getBookmark(),d=[],k=l.join("|"),m=this._getSeparators(),e=new RegExp("(^|["+m+"])("+k+")(?=["+m+"]|$)","g");this._walk(g.getBody(),function(o){if(o.nodeType==3){d.push(o)}});c(d,function(t){var r,q,o,s,p=t.nodeValue;if(e.test(p)){p=f.encode(p);q=f.create("span",{"class":"mceItemHidden"});if(tinymce.isIE){p=p.replace(e,"$1<mcespell>$2</mcespell>");while((s=p.indexOf("<mcespell>"))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(f.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("</mcespell>");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(f.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(f.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(e,'$1<span class="mceItemHiddenSpellWord">$2</span>')}f.replace(q,t)}});h.moveToBookmark(i)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin_src.js new file mode 100644 index 000000000..0d7cc6eb9 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin_src.js @@ -0,0 +1,436 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.SpellcheckerPlugin', { + getInfo : function() { + return { + longname : 'Spellchecker', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + init : function(ed, url) { + var t = this, cm; + + t.url = url; + t.editor = ed; + t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}"); + + if (t.rpcUrl == '{backend}') { + // Sniff if the browser supports native spellchecking (Don't know of a better way) + if (tinymce.isIE) + return; + + t.hasSupport = true; + + // Disable the context menu when spellchecking is active + ed.onContextMenu.addToTop(function(ed, e) { + if (t.active) + return false; + }); + } + + // Register commands + ed.addCommand('mceSpellCheck', function() { + if (t.rpcUrl == '{backend}') { + // Enable/disable native spellchecker + t.editor.getBody().spellcheck = t.active = !t.active; + return; + } + + if (!t.active) { + ed.setProgressState(1); + t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { + if (r.length > 0) { + t.active = 1; + t._markWords(r); + ed.setProgressState(0); + ed.nodeChanged(); + } else { + ed.setProgressState(0); + + if (ed.getParam('spellchecker_report_no_misspellings', true)) + ed.windowManager.alert('spellchecker.no_mpell'); + } + }); + } else + t._done(); + }); + + if (ed.settings.content_css !== false) + ed.contentCSS.push(url + '/css/content.css'); + + ed.onClick.add(t._showMenu, t); + ed.onContextMenu.add(t._showMenu, t); + ed.onBeforeGetContent.add(function() { + if (t.active) + t._removeWords(); + }); + + ed.onNodeChange.add(function(ed, cm) { + cm.setActive('spellchecker', t.active); + }); + + ed.onSetContent.add(function() { + t._done(); + }); + + ed.onBeforeGetContent.add(function() { + t._done(); + }); + + ed.onBeforeExecCommand.add(function(ed, cmd) { + if (cmd == 'mceFullScreen') + t._done(); + }); + + // Find selected language + t.languages = {}; + each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { + if (k.indexOf('+') === 0) { + k = k.substring(1); + t.selectedLang = v; + } + + t.languages[k] = v; + }); + }, + + createControl : function(n, cm) { + var t = this, c, ed = t.editor; + + if (n == 'spellchecker') { + // Use basic button if we use the native spellchecker + if (t.rpcUrl == '{backend}') { + // Create simple toggle button if we have native support + if (t.hasSupport) + c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + return c; + } + + c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); + + c.onRenderMenu.add(function(c, m) { + m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(t.languages, function(v, k) { + var o = {icon : 1}, mi; + + o.onclick = function() { + if (v == t.selectedLang) { + return; + } + mi.setSelected(1); + t.selectedItem.setSelected(0); + t.selectedItem = mi; + t.selectedLang = v; + }; + + o.title = k; + mi = m.add(o); + mi.setSelected(v == t.selectedLang); + + if (v == t.selectedLang) + t.selectedItem = mi; + }) + }); + + return c; + } + }, + + // Internal functions + + _walk : function(n, f) { + var d = this.editor.getDoc(), w; + + if (d.createTreeWalker) { + w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); + + while ((n = w.nextNode()) != null) + f.call(this, n); + } else + tinymce.walk(n, f, 'childNodes'); + }, + + _getSeparators : function() { + var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}����������������\u201d\u201c'); + + // Build word separator regexp + for (i=0; i<str.length; i++) + re += '\\' + str.charAt(i); + + return re; + }, + + _getWords : function() { + var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = []; + + // Get area text + this._walk(ed.getBody(), function(n) { + if (n.nodeType == 3) + tx += n.nodeValue + ' '; + }); + + // split the text up into individual words + if (ed.getParam('spellchecker_word_pattern')) { + // look for words that match the pattern + rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi'); + } else { + // Split words by separator + tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' '); + tx = tinymce.trim(tx.replace(/(\s+)/g, ' ')); + rawWords = tx.split(' '); + } + + // Build word array and remove duplicates + each(rawWords, function(v) { + if (!lo[v]) { + wl.push(v); + lo[v] = 1; + } + }); + + return wl; + }, + + _removeWords : function(w) { + var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark(); + + each(dom.select('span').reverse(), function(n) { + if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) { + if (!w || dom.decode(n.innerHTML) == w) + dom.remove(n, 1); + } + }); + + se.moveToBookmark(b); + }, + + _markWords : function(wl) { + var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, b = se.getBookmark(), nl = [], + w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g'); + + // Collect all text nodes + this._walk(ed.getBody(), function(n) { + if (n.nodeType == 3) { + nl.push(n); + } + }); + + // Wrap incorrect words in spans + each(nl, function(n) { + var node, elem, txt, pos, v = n.nodeValue; + + if (rx.test(v)) { + // Encode the content + v = dom.encode(v); + // Create container element + elem = dom.create('span', {'class' : 'mceItemHidden'}); + + // Following code fixes IE issues by creating text nodes + // using DOM methods instead of innerHTML. + // Bug #3124: <PRE> elements content is broken after spellchecking. + // Bug #1408: Preceding whitespace characters are removed + // @TODO: I'm not sure that both are still issues on IE9. + if (tinymce.isIE) { + // Enclose mispelled words with temporal tag + v = v.replace(rx, '$1<mcespell>$2</mcespell>'); + // Loop over the content finding mispelled words + while ((pos = v.indexOf('<mcespell>')) != -1) { + // Add text node for the content before the word + txt = v.substring(0, pos); + if (txt.length) { + node = doc.createTextNode(dom.decode(txt)); + elem.appendChild(node); + } + v = v.substring(pos+10); + pos = v.indexOf('</mcespell>'); + txt = v.substring(0, pos); + v = v.substring(pos+11); + // Add span element for the word + elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt)); + } + // Add text node for the rest of the content + if (v.length) { + node = doc.createTextNode(dom.decode(v)); + elem.appendChild(node); + } + } else { + // Other browsers preserve whitespace characters on innerHTML usage + elem.innerHTML = v.replace(rx, '$1<span class="mceItemHiddenSpellWord">$2</span>'); + } + + // Finally, replace the node with the container + dom.replace(elem, 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) { + m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'}); + t._menu = m; + } + + if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) { + m.removeAll(); + m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) { + var ignoreRpc; + + m.removeAll(); + + if (r.length > 0) { + m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + each(r, function(v) { + m.add({title : v, onclick : function() { + dom.replace(ed.getDoc().createTextNode(v), wordSpan); + t._checkDone(); + }}); + }); + + m.addSeparator(); + } else + m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + + if (ed.getParam('show_ignore_words', true)) { + ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); + m.add({ + title : 'spellchecker.ignore_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + + m.add({ + title : 'spellchecker.ignore_words', + onclick : function() { + var word = wordSpan.innerHTML; + + t._removeWords(dom.decode(word)); + t._checkDone(); + + // tell the server if we need to + if (ignoreRpc) { + ed.setProgressState(1); + t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + } + }); + } + + if (t.editor.getParam("spellchecker_enable_learn_rpc")) { + m.add({ + title : 'spellchecker.learn_word', + onclick : function() { + var word = wordSpan.innerHTML; + + dom.remove(wordSpan, 1); + t._checkDone(); + + ed.setProgressState(1); + t._sendRPC('learnWord', [t.selectedLang, word], function(r) { + ed.setProgressState(0); + }); + } + }); + } + + m.update(); + }); + + p1 = DOM.getPos(ed.getContentAreaContainer()); + m.settings.offset_x = p1.x; + m.settings.offset_y = p1.y; + + ed.selection.select(wordSpan); + p1 = dom.getPos(wordSpan); + m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y); + + return tinymce.dom.Event.cancel(e); + } else + m.hideMenu(); + }, + + _checkDone : function() { + var t = this, ed = t.editor, dom = ed.dom, o; + + each(dom.select('span'), function(n) { + if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { + o = true; + return false; + } + }); + + if (!o) + t._done(); + }, + + _done : function() { + var t = this, la = t.active; + + if (t.active) { + t.active = 0; + t._removeWords(); + + if (t._menu) + t._menu.hideMenu(); + + if (la) + t.editor.nodeChanged(); + } + }, + + _sendRPC : function(m, p, cb) { + var t = this; + + JSONRequest.sendRPC({ + url : t.rpcUrl, + method : m, + params : p, + success : cb, + error : function(e, x) { + t.editor.setProgressState(0); + t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); + } + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); +})(); diff --git a/wp-includes/js/tinymce/plugins/tabfocus/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/tabfocus/editor_plugin_src.js new file mode 100644 index 000000000..a1579c85f --- /dev/null +++ b/wp-includes/js/tinymce/plugins/tabfocus/editor_plugin_src.js @@ -0,0 +1,122 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function() { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; + + tinymce.create('tinymce.plugins.TabFocusPlugin', { + init : function(ed, url) { + function tabCancel(ed, e) { + if (e.keyCode === 9) + return Event.cancel(e); + } + + function tabHandler(ed, e) { + var x, i, f, el, v; + + function find(d) { + el = DOM.select(':input:enabled,*[tabindex]'); + + function canSelectRecursive(e) { + return e.nodeName==="BODY" || (e.type != 'hidden' && + !(e.style.display == "none") && + !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode)); + } + function canSelectInOldIe(el) { + return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"; + } + function isOldIe() { + return tinymce.isIE6 || tinymce.isIE7; + } + function canSelect(el) { + return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el); + } + + each(el, function(e, i) { + if (e.id == ed.id) { + x = i; + return false; + } + }); + if (d > 0) { + for (i = x + 1; i < el.length; i++) { + if (canSelect(el[i])) + return el[i]; + } + } else { + for (i = x - 1; i >= 0; i--) { + if (canSelect(el[i])) + return el[i]; + } + } + + return null; + } + + if (e.keyCode === 9) { + v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); + + if (v.length == 1) { + v[1] = v[0]; + v[0] = ':prev'; + } + + // Find element to focus + if (e.shiftKey) { + if (v[0] == ':prev') + el = find(-1); + else + el = DOM.get(v[0]); + } else { + if (v[1] == ':next') + el = find(1); + else + el = DOM.get(v[1]); + } + + if (el) { + if (el.id && (ed = tinymce.get(el.id || el.name))) + ed.focus(); + else + window.setTimeout(function() { + if (!tinymce.isWebKit) + window.focus(); + el.focus(); + }, 10); + + return Event.cancel(e); + } + } + } + + ed.onKeyUp.add(tabCancel); + + if (tinymce.isGecko) { + ed.onKeyPress.add(tabHandler); + ed.onKeyDown.add(tabCancel); + } else + ed.onKeyDown.add(tabHandler); + + }, + + getInfo : function() { + return { + longname : 'Tabfocus', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); +})(); diff --git a/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js index 00278c85c..5d905efc4 100644 --- a/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js +++ b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js @@ -1 +1 @@ -(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.WordPress",{mceTout:0,init:function(c,d){var e=this,h=c.getParam("wordpress_adv_toolbar","toolbar2"),g=0,f,b;f='<img src="'+d+'/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+c.getLang("wordpress.wp_more_alt")+'" />';b='<img src="'+d+'/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+c.getLang("wordpress.wp_page_alt")+'" />';if(getUserSetting("hidetb","0")=="1"){c.settings.wordpress_adv_hidden=0}c.onPostRender.add(function(){var i=c.controlManager.get(h);if(c.getParam("wordpress_adv_hidden",1)&&i){a.hide(i.id);e._resizeIframe(c,h,28)}});c.addCommand("WP_More",function(){c.execCommand("mceInsertContent",0,f)});c.addCommand("WP_Page",function(){c.execCommand("mceInsertContent",0,b)});c.addCommand("WP_Help",function(){c.windowManager.open({url:tinymce.baseURL+"/wp-mce-help.php",width:450,height:420,inline:1})});c.addCommand("WP_Adv",function(){var i=c.controlManager,j=i.get(h).id;if("undefined"==j){return}if(a.isHidden(j)){i.setActive("wp_adv",1);a.show(j);e._resizeIframe(c,h,-28);c.settings.wordpress_adv_hidden=0;setUserSetting("hidetb","1")}else{i.setActive("wp_adv",0);a.hide(j);e._resizeIframe(c,h,28);c.settings.wordpress_adv_hidden=1;setUserSetting("hidetb","0")}});c.addCommand("WP_Medialib",function(){var j=c.getParam("wp_fullscreen_editor_id")||c.getParam("fullscreen_editor_id")||c.id,i=tinymce.DOM.select("#wp-"+j+"-media-buttons a.thickbox");if(i&&i[0]){i=i[0]}else{return}tb_show("",i.href);tinymce.DOM.setStyle(["TB_overlay","TB_window","TB_load"],"z-index","999999")});c.addButton("wp_more",{title:"wordpress.wp_more_desc",cmd:"WP_More"});c.addButton("wp_page",{title:"wordpress.wp_page_desc",image:d+"/img/page.gif",cmd:"WP_Page"});c.addButton("wp_help",{title:"wordpress.wp_help_desc",cmd:"WP_Help"});c.addButton("wp_adv",{title:"wordpress.wp_adv_desc",cmd:"WP_Adv"});c.addButton("add_media",{title:"wordpress.add_media",image:d+"/img/image.gif",cmd:"WP_Medialib"});c.onBeforeExecCommand.add(function(p,m,s,l,j){var v=tinymce.DOM,k,i,r,u,t,q;if("mceFullScreen"==m){if("mce_fullscreen"!=p.id&&v.select("a.thickbox").length){p.settings.theme_advanced_buttons1+=",|,add_media"}}if("JustifyLeft"==m||"JustifyRight"==m||"JustifyCenter"==m){k=p.selection.getNode();if(k.nodeName=="IMG"){q=m.substr(7).toLowerCase();t="align"+q;i=p.dom.getParent(k,"dl.wp-caption");r=p.dom.getParent(k,"div.mceTemp");if(i&&r){u=p.dom.hasClass(i,t)?"alignnone":t;i.className=i.className.replace(/align[^ '"]+\s?/g,"");p.dom.addClass(i,u);if(u=="aligncenter"){p.dom.addClass(r,"mceIEcenter")}else{p.dom.removeClass(r,"mceIEcenter")}j.terminate=true;p.execCommand("mceRepaint")}else{if(p.dom.hasClass(k,t)){p.dom.addClass(k,"alignnone")}else{p.dom.removeClass(k,"alignnone")}}}}});c.onInit.add(function(i){i.onNodeChange.add(function(k,j,m){var l;if(m.nodeName=="IMG"){l=k.dom.getParent(m,"dl.wp-caption")}else{if(m.nodeName=="DIV"&&k.dom.hasClass(m,"mceTemp")){l=m.firstChild;if(!k.dom.hasClass(l,"wp-caption")){l=false}}}if(l){if(k.dom.hasClass(l,"alignleft")){j.setActive("justifyleft",1)}else{if(k.dom.hasClass(l,"alignright")){j.setActive("justifyright",1)}else{if(k.dom.hasClass(l,"aligncenter")){j.setActive("justifycenter",1)}}}}});if(i.id!="wp_mce_fullscreen"&&i.id!="mce_fullscreen"){i.dom.addClass(i.getBody(),"wp-editor")}else{if(i.id=="mce_fullscreen"){i.dom.addClass(i.getBody(),"mce-fullscreen")}}i.onBeforeSetContent.add(function(j,k){if(k.content){k.content=k.content.replace(/<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi,"<$1$2>");k.content=k.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi,"</$1>")}})});if("undefined"!=typeof(jQuery)){c.onKeyUp.add(function(j,l){var i=l.keyCode||l.charCode;if(i==g){return}if(13==i||8==g||46==g){jQuery(document).triggerHandler("wpcountwords",[j.getContent({format:"raw"})])}g=i})}c.onSaveContent.addToTop(function(i,j){j.content=j.content.replace(/<p>(<br ?\/?>|\u00a0|\uFEFF)?<\/p>/g,"<p> </p>")});c.onSaveContent.add(function(i,j){if(i.getParam("wpautop",true)&&typeof(switchEditors)=="object"){if(i.isHidden()){j.content=j.element.value}else{j.content=switchEditors.pre_wpautop(j.content)}}});e._handleMoreBreak(c,d);c.addShortcut("alt+shift+c",c.getLang("justifycenter_desc"),"JustifyCenter");c.addShortcut("alt+shift+r",c.getLang("justifyright_desc"),"JustifyRight");c.addShortcut("alt+shift+l",c.getLang("justifyleft_desc"),"JustifyLeft");c.addShortcut("alt+shift+j",c.getLang("justifyfull_desc"),"JustifyFull");c.addShortcut("alt+shift+q",c.getLang("blockquote_desc"),"mceBlockQuote");c.addShortcut("alt+shift+u",c.getLang("bullist_desc"),"InsertUnorderedList");c.addShortcut("alt+shift+o",c.getLang("numlist_desc"),"InsertOrderedList");c.addShortcut("alt+shift+d",c.getLang("striketrough_desc"),"Strikethrough");c.addShortcut("alt+shift+n",c.getLang("spellchecker.desc"),"mceSpellCheck");c.addShortcut("alt+shift+a",c.getLang("link_desc"),"mceLink");c.addShortcut("alt+shift+s",c.getLang("unlink_desc"),"unlink");c.addShortcut("alt+shift+m",c.getLang("image_desc"),"WP_Medialib");c.addShortcut("alt+shift+g",c.getLang("fullscreen.desc"),"mceFullScreen");c.addShortcut("alt+shift+z",c.getLang("wp_adv_desc"),"WP_Adv");c.addShortcut("alt+shift+h",c.getLang("help_desc"),"WP_Help");c.addShortcut("alt+shift+t",c.getLang("wp_more_desc"),"WP_More");c.addShortcut("alt+shift+p",c.getLang("wp_page_desc"),"WP_Page");c.addShortcut("ctrl+s",c.getLang("save_desc"),function(){if("function"==typeof autosave){autosave()}});if(tinymce.isWebKit){c.addShortcut("alt+shift+b",c.getLang("bold_desc"),"Bold");c.addShortcut("alt+shift+i",c.getLang("italic_desc"),"Italic")}c.onInit.add(function(i){tinymce.dom.Event.add(i.getWin(),"scroll",function(j){i.plugins.wordpress._hideButtons()});tinymce.dom.Event.add(i.getBody(),"dragstart",function(j){i.plugins.wordpress._hideButtons()})});c.onBeforeExecCommand.add(function(i,k,j,l){i.plugins.wordpress._hideButtons()});c.onSaveContent.add(function(i,j){i.plugins.wordpress._hideButtons()});c.onMouseDown.add(function(i,j){if(j.target.nodeName!="IMG"){i.plugins.wordpress._hideButtons()}})},getInfo:function(){return{longname:"WordPress Plugin",author:"WordPress",authorurl:"http://wordpress.org",infourl:"http://wordpress.org",version:"3.0"}},_setEmbed:function(b){return b.replace(/\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g,function(d,c){return'<img width="300" height="200" src="'+tinymce.baseURL+'/plugins/wordpress/img/trans.gif" class="wp-oembed mceItemNoResize" alt="'+c+'" title="'+c+'" />'})},_getEmbed:function(b){return b.replace(/<img[^>]+>/g,function(c){if(c.indexOf('class="wp-oembed')!=-1){var d=c.match(/alt="([^\"]+)"/);if(d[1]){c="[embed]"+d[1]+"[/embed]"}}return c})},_showButtons:function(f,d){var g=tinyMCE.activeEditor,i,h,b,j=tinymce.DOM,e,c;b=g.dom.getViewPort(g.getWin());i=j.getPos(g.getContentAreaContainer());h=g.dom.getPos(f);e=Math.max(h.x-b.x,0)+i.x;c=Math.max(h.y-b.y,0)+i.y;j.setStyles(d,{top:c+5+"px",left:e+5+"px",display:"block"});if(this.mceTout){clearTimeout(this.mceTout)}this.mceTout=setTimeout(function(){g.plugins.wordpress._hideButtons()},5000)},_hideButtons:function(){if(!this.mceTout){return}if(document.getElementById("wp_editbtns")){tinymce.DOM.hide("wp_editbtns")}if(document.getElementById("wp_gallerybtns")){tinymce.DOM.hide("wp_gallerybtns")}clearTimeout(this.mceTout);this.mceTout=0},_resizeIframe:function(c,e,b){var d=c.getContentAreaContainer().firstChild;a.setStyle(d,"height",d.clientHeight+b);c.theme.deltaHeight+=b},_handleMoreBreak:function(c,d){var e,b;e='<img src="'+d+'/img/trans.gif" alt="$1" class="mceWPmore mceItemNoResize" title="'+c.getLang("wordpress.wp_more_alt")+'" />';b='<img src="'+d+'/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+c.getLang("wordpress.wp_page_alt")+'" />';c.onInit.add(function(){c.dom.loadCSS(d+"/css/content.css")});c.onPostRender.add(function(){if(c.theme.onResolveName){c.theme.onResolveName.add(function(f,g){if(g.node.nodeName=="IMG"){if(c.dom.hasClass(g.node,"mceWPmore")){g.name="wpmore"}if(c.dom.hasClass(g.node,"mceWPnextpage")){g.name="wppage"}}})}});c.onBeforeSetContent.add(function(f,g){if(g.content){g.content=g.content.replace(/<!--more(.*?)-->/g,e);g.content=g.content.replace(/<!--nextpage-->/g,b)}});c.onPostProcess.add(function(f,g){if(g.get){g.content=g.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mceWPmore')!==-1){var h,j=(h=i.match(/alt="(.*?)"/))?h[1]:"";i="<!--more"+j+"-->"}if(i.indexOf('class="mceWPnextpage')!==-1){i="<!--nextpage-->"}return i})}});c.onNodeChange.add(function(g,f,h){f.setActive("wp_page",h.nodeName==="IMG"&&g.dom.hasClass(h,"mceWPnextpage"));f.setActive("wp_more",h.nodeName==="IMG"&&g.dom.hasClass(h,"mceWPmore"))})}});tinymce.PluginManager.add("wordpress",tinymce.plugins.WordPress)})(); \ No newline at end of file +(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.WordPress",{mceTout:0,init:function(c,d){var e=this,h=c.getParam("wordpress_adv_toolbar","toolbar2"),g=0,f,b,i;f='<img src="'+d+'/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+c.getLang("wordpress.wp_more_alt")+'" />';b='<img src="'+d+'/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+c.getLang("wordpress.wp_page_alt")+'" />';if(getUserSetting("hidetb","0")=="1"){c.settings.wordpress_adv_hidden=0}c.onPostRender.add(function(){var j=c.controlManager.get(h);if(c.getParam("wordpress_adv_hidden",1)&&j){a.hide(j.id);e._resizeIframe(c,h,28)}});c.addCommand("WP_More",function(){c.execCommand("mceInsertContent",0,f)});c.addCommand("WP_Page",function(){c.execCommand("mceInsertContent",0,b)});c.addCommand("WP_Help",function(){c.windowManager.open({url:tinymce.baseURL+"/wp-mce-help.php",width:450,height:420,inline:1})});c.addCommand("WP_Adv",function(){var j=c.controlManager,k=j.get(h).id;if("undefined"==k){return}if(a.isHidden(k)){j.setActive("wp_adv",1);a.show(k);e._resizeIframe(c,h,-28);c.settings.wordpress_adv_hidden=0;setUserSetting("hidetb","1")}else{j.setActive("wp_adv",0);a.hide(k);e._resizeIframe(c,h,28);c.settings.wordpress_adv_hidden=1;setUserSetting("hidetb","0")}});c.addCommand("WP_Medialib",function(){var k=c.getParam("wp_fullscreen_editor_id")||c.getParam("fullscreen_editor_id")||c.id,j=tinymce.DOM.select("#wp-"+k+"-media-buttons a.thickbox");if(j&&j[0]){j=j[0]}else{return}tb_show("",j.href);tinymce.DOM.setStyle(["TB_overlay","TB_window","TB_load"],"z-index","999999")});c.addButton("wp_more",{title:"wordpress.wp_more_desc",cmd:"WP_More"});c.addButton("wp_page",{title:"wordpress.wp_page_desc",image:d+"/img/page.gif",cmd:"WP_Page"});c.addButton("wp_help",{title:"wordpress.wp_help_desc",cmd:"WP_Help"});c.addButton("wp_adv",{title:"wordpress.wp_adv_desc",cmd:"WP_Adv"});c.addButton("add_media",{title:"wordpress.add_media",image:d+"/img/image.gif",cmd:"WP_Medialib"});c.onBeforeExecCommand.add(function(q,p,t,m,k){var w=tinymce.DOM,l,j,s,v,u,r;if("mceFullScreen"==p){if("mce_fullscreen"!=q.id&&w.select("a.thickbox").length){q.settings.theme_advanced_buttons1+=",|,add_media"}}if("JustifyLeft"==p||"JustifyRight"==p||"JustifyCenter"==p){l=q.selection.getNode();if(l.nodeName=="IMG"){r=p.substr(7).toLowerCase();u="align"+r;j=q.dom.getParent(l,"dl.wp-caption");s=q.dom.getParent(l,"div.mceTemp");if(j&&s){v=q.dom.hasClass(j,u)?"alignnone":u;j.className=j.className.replace(/align[^ '"]+\s?/g,"");q.dom.addClass(j,v);if(v=="aligncenter"){q.dom.addClass(s,"mceIEcenter")}else{q.dom.removeClass(s,"mceIEcenter")}k.terminate=true;q.execCommand("mceRepaint")}else{if(q.dom.hasClass(l,u)){q.dom.addClass(l,"alignnone")}else{q.dom.removeClass(l,"alignnone")}}}}});c.onInit.add(function(l){var k=l.getParam("body_class",""),j=l.getBody();if(k){k=k.split(" ")}else{k=[]}if(l.getParam("directionality","")=="rtl"){k.push("rtl")}if(tinymce.isIE9){k.push("ie9")}else{if(tinymce.isIE8){k.push("ie8")}else{if(tinymce.isIE7){k.push("ie7")}}}if(l.id!="wp_mce_fullscreen"&&l.id!="mce_fullscreen"){k.push("wp-editor")}else{if(l.id=="mce_fullscreen"){k.push("mce-fullscreen")}}tinymce.each(k,function(m){if(m){l.dom.addClass(j,m)}});l.onNodeChange.add(function(n,m,p){var o;if(p.nodeName=="IMG"){o=n.dom.getParent(p,"dl.wp-caption")}else{if(p.nodeName=="DIV"&&n.dom.hasClass(p,"mceTemp")){o=p.firstChild;if(!n.dom.hasClass(o,"wp-caption")){o=false}}}if(o){if(n.dom.hasClass(o,"alignleft")){m.setActive("justifyleft",1)}else{if(n.dom.hasClass(o,"alignright")){m.setActive("justifyright",1)}else{if(n.dom.hasClass(o,"aligncenter")){m.setActive("justifycenter",1)}}}}});l.onBeforeSetContent.add(function(m,n){if(n.content){n.content=n.content.replace(/<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi,"<$1$2>");n.content=n.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi,"</$1>")}})});if("undefined"!=typeof(jQuery)){c.onKeyUp.add(function(l,m){var j=m.keyCode||m.charCode;if(j==g){return}if(13==j||8==g||46==g){jQuery(document).triggerHandler("wpcountwords",[l.getContent({format:"raw"})])}g=j})}c.onSaveContent.addToTop(function(j,k){k.content=k.content.replace(/<p>(<br ?\/?>|\u00a0|\uFEFF)?<\/p>/g,"<p> </p>")});c.onSaveContent.add(function(j,k){if(j.getParam("wpautop",true)&&typeof(switchEditors)=="object"){if(j.isHidden()){k.content=k.element.value}else{k.content=switchEditors.pre_wpautop(k.content)}}});e._handleMoreBreak(c,d);c.addShortcut("alt+shift+c",c.getLang("justifycenter_desc"),"JustifyCenter");c.addShortcut("alt+shift+r",c.getLang("justifyright_desc"),"JustifyRight");c.addShortcut("alt+shift+l",c.getLang("justifyleft_desc"),"JustifyLeft");c.addShortcut("alt+shift+j",c.getLang("justifyfull_desc"),"JustifyFull");c.addShortcut("alt+shift+q",c.getLang("blockquote_desc"),"mceBlockQuote");c.addShortcut("alt+shift+u",c.getLang("bullist_desc"),"InsertUnorderedList");c.addShortcut("alt+shift+o",c.getLang("numlist_desc"),"InsertOrderedList");c.addShortcut("alt+shift+d",c.getLang("striketrough_desc"),"Strikethrough");c.addShortcut("alt+shift+n",c.getLang("spellchecker.desc"),"mceSpellCheck");c.addShortcut("alt+shift+a",c.getLang("link_desc"),"mceLink");c.addShortcut("alt+shift+s",c.getLang("unlink_desc"),"unlink");c.addShortcut("alt+shift+m",c.getLang("image_desc"),"WP_Medialib");c.addShortcut("alt+shift+g",c.getLang("fullscreen.desc"),"mceFullScreen");c.addShortcut("alt+shift+z",c.getLang("wp_adv_desc"),"WP_Adv");c.addShortcut("alt+shift+h",c.getLang("help_desc"),"WP_Help");c.addShortcut("alt+shift+t",c.getLang("wp_more_desc"),"WP_More");c.addShortcut("alt+shift+p",c.getLang("wp_page_desc"),"WP_Page");c.addShortcut("ctrl+s",c.getLang("save_desc"),function(){if("function"==typeof autosave){autosave()}});if(tinymce.isWebKit){c.addShortcut("alt+shift+b",c.getLang("bold_desc"),"Bold");c.addShortcut("alt+shift+i",c.getLang("italic_desc"),"Italic")}c.onInit.add(function(j){tinymce.dom.Event.add(j.getWin(),"scroll",function(k){j.plugins.wordpress._hideButtons()});tinymce.dom.Event.add(j.getBody(),"dragstart",function(k){j.plugins.wordpress._hideButtons()})});c.onBeforeExecCommand.add(function(j,l,k,m){j.plugins.wordpress._hideButtons()});c.onSaveContent.add(function(j,k){j.plugins.wordpress._hideButtons()});c.onMouseDown.add(function(j,k){if(k.target.nodeName!="IMG"){j.plugins.wordpress._hideButtons()}});i=function(j){var k;if(j.target.id=="mceModalBlocker"||j.target.className=="ui-widget-overlay"){for(k in c.windowManager.windows){c.windowManager.close(null,k)}}};tinymce.dom.Event.remove(document.body,"click",i);tinymce.dom.Event.add(document.body,"click",i)},getInfo:function(){return{longname:"WordPress Plugin",author:"WordPress",authorurl:"http://wordpress.org",infourl:"http://wordpress.org",version:"3.0"}},_setEmbed:function(b){return b.replace(/\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g,function(d,c){return'<img width="300" height="200" src="'+tinymce.baseURL+'/plugins/wordpress/img/trans.gif" class="wp-oembed mceItemNoResize" alt="'+c+'" title="'+c+'" />'})},_getEmbed:function(b){return b.replace(/<img[^>]+>/g,function(c){if(c.indexOf('class="wp-oembed')!=-1){var d=c.match(/alt="([^\"]+)"/);if(d[1]){c="[embed]"+d[1]+"[/embed]"}}return c})},_showButtons:function(f,d){var g=tinyMCE.activeEditor,i,h,b,j=tinymce.DOM,e,c;b=g.dom.getViewPort(g.getWin());i=j.getPos(g.getContentAreaContainer());h=g.dom.getPos(f);e=Math.max(h.x-b.x,0)+i.x;c=Math.max(h.y-b.y,0)+i.y;j.setStyles(d,{top:c+5+"px",left:e+5+"px",display:"block"});if(this.mceTout){clearTimeout(this.mceTout)}this.mceTout=setTimeout(function(){g.plugins.wordpress._hideButtons()},5000)},_hideButtons:function(){if(!this.mceTout){return}if(document.getElementById("wp_editbtns")){tinymce.DOM.hide("wp_editbtns")}if(document.getElementById("wp_gallerybtns")){tinymce.DOM.hide("wp_gallerybtns")}clearTimeout(this.mceTout);this.mceTout=0},_resizeIframe:function(c,e,b){var d=c.getContentAreaContainer().firstChild;a.setStyle(d,"height",d.clientHeight+b);c.theme.deltaHeight+=b},_handleMoreBreak:function(c,d){var e,b;e='<img src="'+d+'/img/trans.gif" alt="$1" class="mceWPmore mceItemNoResize" title="'+c.getLang("wordpress.wp_more_alt")+'" />';b='<img src="'+d+'/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+c.getLang("wordpress.wp_page_alt")+'" />';c.onPostRender.add(function(){if(c.theme.onResolveName){c.theme.onResolveName.add(function(f,g){if(g.node.nodeName=="IMG"){if(c.dom.hasClass(g.node,"mceWPmore")){g.name="wpmore"}if(c.dom.hasClass(g.node,"mceWPnextpage")){g.name="wppage"}}})}});c.onBeforeSetContent.add(function(f,g){if(g.content){g.content=g.content.replace(/<!--more(.*?)-->/g,e);g.content=g.content.replace(/<!--nextpage-->/g,b)}});c.onPostProcess.add(function(f,g){if(g.get){g.content=g.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mceWPmore')!==-1){var h,j=(h=i.match(/alt="(.*?)"/))?h[1]:"";i="<!--more"+j+"-->"}if(i.indexOf('class="mceWPnextpage')!==-1){i="<!--nextpage-->"}return i})}});c.onNodeChange.add(function(g,f,h){f.setActive("wp_page",h.nodeName==="IMG"&&g.dom.hasClass(h,"mceWPnextpage"));f.setActive("wp_more",h.nodeName==="IMG"&&g.dom.hasClass(h,"mceWPmore"))})}});tinymce.PluginManager.add("wordpress",tinymce.plugins.WordPress)})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js new file mode 100644 index 000000000..40d978ff4 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wordpress/editor_plugin_src.js @@ -0,0 +1,440 @@ +/** + * WordPress plugin. + */ + +(function() { + var DOM = tinymce.DOM; + + tinymce.create('tinymce.plugins.WordPress', { + mceTout : 0, + + init : function(ed, url) { + var t = this, tbId = ed.getParam('wordpress_adv_toolbar', 'toolbar2'), last = 0, moreHTML, nextpageHTML, closeOnClick; + moreHTML = '<img src="' + url + '/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />'; + nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />'; + + if ( getUserSetting('hidetb', '0') == '1' ) + ed.settings.wordpress_adv_hidden = 0; + + // Hides the specified toolbar and resizes the iframe + ed.onPostRender.add(function() { + var adv_toolbar = ed.controlManager.get(tbId); + if ( ed.getParam('wordpress_adv_hidden', 1) && adv_toolbar ) { + DOM.hide(adv_toolbar.id); + t._resizeIframe(ed, tbId, 28); + } + }); + + // Register commands + ed.addCommand('WP_More', function() { + ed.execCommand('mceInsertContent', 0, moreHTML); + }); + + ed.addCommand('WP_Page', function() { + ed.execCommand('mceInsertContent', 0, nextpageHTML); + }); + + ed.addCommand('WP_Help', function() { + ed.windowManager.open({ + url : tinymce.baseURL + '/wp-mce-help.php', + width : 450, + height : 420, + inline : 1 + }); + }); + + ed.addCommand('WP_Adv', function() { + var cm = ed.controlManager, id = cm.get(tbId).id; + + if ( 'undefined' == id ) + return; + + if ( DOM.isHidden(id) ) { + cm.setActive('wp_adv', 1); + DOM.show(id); + t._resizeIframe(ed, tbId, -28); + ed.settings.wordpress_adv_hidden = 0; + setUserSetting('hidetb', '1'); + } else { + cm.setActive('wp_adv', 0); + DOM.hide(id); + t._resizeIframe(ed, tbId, 28); + ed.settings.wordpress_adv_hidden = 1; + setUserSetting('hidetb', '0'); + } + }); + + ed.addCommand('WP_Medialib', function() { + var id = ed.getParam('wp_fullscreen_editor_id') || ed.getParam('fullscreen_editor_id') || ed.id, + link = tinymce.DOM.select('#wp-' + id + '-media-buttons a.thickbox'); + + if ( link && link[0] ) + link = link[0]; + else + return; + + tb_show('', link.href); + tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' ); + }); + + // Register buttons + ed.addButton('wp_more', { + title : 'wordpress.wp_more_desc', + cmd : 'WP_More' + }); + + ed.addButton('wp_page', { + title : 'wordpress.wp_page_desc', + image : url + '/img/page.gif', + cmd : 'WP_Page' + }); + + ed.addButton('wp_help', { + title : 'wordpress.wp_help_desc', + cmd : 'WP_Help' + }); + + ed.addButton('wp_adv', { + title : 'wordpress.wp_adv_desc', + cmd : 'WP_Adv' + }); + + // Add Media button + ed.addButton('add_media', { + title : 'wordpress.add_media', + image : url + '/img/image.gif', + cmd : 'WP_Medialib' + }); + + // Add Media buttons to fullscreen and handle align buttons for image captions + ed.onBeforeExecCommand.add(function(ed, cmd, ui, val, o) { + var DOM = tinymce.DOM, n, DL, DIV, cls, a, align; + if ( 'mceFullScreen' == cmd ) { + if ( 'mce_fullscreen' != ed.id && DOM.select('a.thickbox').length ) + ed.settings.theme_advanced_buttons1 += ',|,add_media'; + } + + if ( 'JustifyLeft' == cmd || 'JustifyRight' == cmd || 'JustifyCenter' == cmd ) { + n = ed.selection.getNode(); + + if ( n.nodeName == 'IMG' ) { + align = cmd.substr(7).toLowerCase(); + a = 'align' + align; + DL = ed.dom.getParent(n, 'dl.wp-caption'); + DIV = ed.dom.getParent(n, 'div.mceTemp'); + + if ( DL && DIV ) { + cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a; + DL.className = DL.className.replace(/align[^ '"]+\s?/g, ''); + ed.dom.addClass(DL, cls); + + if (cls == 'aligncenter') + ed.dom.addClass(DIV, 'mceIEcenter'); + else + ed.dom.removeClass(DIV, 'mceIEcenter'); + + o.terminate = true; + ed.execCommand('mceRepaint'); + } else { + if ( ed.dom.hasClass(n, a) ) + ed.dom.addClass(n, 'alignnone'); + else + ed.dom.removeClass(n, 'alignnone'); + } + } + } + }); + + ed.onInit.add(function(ed) { + var bodyClass = ed.getParam('body_class', ''), body = ed.getBody(); + + // add body classes + if ( bodyClass ) + bodyClass = bodyClass.split(' '); + else + bodyClass = []; + + if ( ed.getParam('directionality', '') == 'rtl' ) + bodyClass.push('rtl'); + + if ( tinymce.isIE9 ) + bodyClass.push('ie9'); + else if ( tinymce.isIE8 ) + bodyClass.push('ie8'); + else if ( tinymce.isIE7 ) + bodyClass.push('ie7'); + + if ( ed.id != 'wp_mce_fullscreen' && ed.id != 'mce_fullscreen' ) + bodyClass.push('wp-editor'); + else if ( ed.id == 'mce_fullscreen' ) + bodyClass.push('mce-fullscreen'); + + tinymce.each( bodyClass, function(cls){ + if ( cls ) + ed.dom.addClass(body, cls); + }); + + // make sure these run last + ed.onNodeChange.add( function(ed, cm, e) { + var DL; + + if ( e.nodeName == 'IMG' ) { + DL = ed.dom.getParent(e, 'dl.wp-caption'); + } else if ( e.nodeName == 'DIV' && ed.dom.hasClass(e, 'mceTemp') ) { + DL = e.firstChild; + + if ( ! ed.dom.hasClass(DL, 'wp-caption') ) + DL = false; + } + + if ( DL ) { + if ( ed.dom.hasClass(DL, 'alignleft') ) + cm.setActive('justifyleft', 1); + else if ( ed.dom.hasClass(DL, 'alignright') ) + cm.setActive('justifyright', 1); + else if ( ed.dom.hasClass(DL, 'aligncenter') ) + cm.setActive('justifycenter', 1); + } + }); + + // remove invalid parent paragraphs when pasting HTML and/or switching to the HTML editor and back + ed.onBeforeSetContent.add(function(ed, o) { + if ( o.content ) { + o.content = o.content.replace(/<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi, '<$1$2>'); + o.content = o.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi, '</$1>'); + } + }); + }); + + // Word count + if ( 'undefined' != typeof(jQuery) ) { + ed.onKeyUp.add(function(ed, e) { + var k = e.keyCode || e.charCode; + + if ( k == last ) + return; + + if ( 13 == k || 8 == last || 46 == last ) + jQuery(document).triggerHandler('wpcountwords', [ ed.getContent({format : 'raw'}) ]); + + last = k; + }); + }; + + // keep empty paragraphs :( + ed.onSaveContent.addToTop(function(ed, o) { + o.content = o.content.replace(/<p>(<br ?\/?>|\u00a0|\uFEFF)?<\/p>/g, '<p> </p>'); + }); + + ed.onSaveContent.add(function(ed, o) { + if ( ed.getParam('wpautop', true) && typeof(switchEditors) == 'object' ) { + if ( ed.isHidden() ) + o.content = o.element.value; + else + o.content = switchEditors.pre_wpautop(o.content); + } + }); + + /* disable for now + ed.onBeforeSetContent.add(function(ed, o) { + o.content = t._setEmbed(o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if ( o.get ) + o.content = t._getEmbed(o.content); + }); + */ + + // Add listeners to handle more break + t._handleMoreBreak(ed, url); + + // Add custom shortcuts + ed.addShortcut('alt+shift+c', ed.getLang('justifycenter_desc'), 'JustifyCenter'); + ed.addShortcut('alt+shift+r', ed.getLang('justifyright_desc'), 'JustifyRight'); + ed.addShortcut('alt+shift+l', ed.getLang('justifyleft_desc'), 'JustifyLeft'); + ed.addShortcut('alt+shift+j', ed.getLang('justifyfull_desc'), 'JustifyFull'); + ed.addShortcut('alt+shift+q', ed.getLang('blockquote_desc'), 'mceBlockQuote'); + ed.addShortcut('alt+shift+u', ed.getLang('bullist_desc'), 'InsertUnorderedList'); + ed.addShortcut('alt+shift+o', ed.getLang('numlist_desc'), 'InsertOrderedList'); + ed.addShortcut('alt+shift+d', ed.getLang('striketrough_desc'), 'Strikethrough'); + ed.addShortcut('alt+shift+n', ed.getLang('spellchecker.desc'), 'mceSpellCheck'); + ed.addShortcut('alt+shift+a', ed.getLang('link_desc'), 'mceLink'); + ed.addShortcut('alt+shift+s', ed.getLang('unlink_desc'), 'unlink'); + ed.addShortcut('alt+shift+m', ed.getLang('image_desc'), 'WP_Medialib'); + ed.addShortcut('alt+shift+g', ed.getLang('fullscreen.desc'), 'mceFullScreen'); + ed.addShortcut('alt+shift+z', ed.getLang('wp_adv_desc'), 'WP_Adv'); + ed.addShortcut('alt+shift+h', ed.getLang('help_desc'), 'WP_Help'); + ed.addShortcut('alt+shift+t', ed.getLang('wp_more_desc'), 'WP_More'); + ed.addShortcut('alt+shift+p', ed.getLang('wp_page_desc'), 'WP_Page'); + ed.addShortcut('ctrl+s', ed.getLang('save_desc'), function(){if('function'==typeof autosave)autosave();}); + + if ( tinymce.isWebKit ) { + ed.addShortcut('alt+shift+b', ed.getLang('bold_desc'), 'Bold'); + ed.addShortcut('alt+shift+i', ed.getLang('italic_desc'), 'Italic'); + } + + ed.onInit.add(function(ed) { + tinymce.dom.Event.add(ed.getWin(), 'scroll', function(e) { + ed.plugins.wordpress._hideButtons(); + }); + tinymce.dom.Event.add(ed.getBody(), 'dragstart', function(e) { + ed.plugins.wordpress._hideButtons(); + }); + }); + + ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) { + ed.plugins.wordpress._hideButtons(); + }); + + ed.onSaveContent.add(function(ed, o) { + ed.plugins.wordpress._hideButtons(); + }); + + ed.onMouseDown.add(function(ed, e) { + if ( e.target.nodeName != 'IMG' ) + ed.plugins.wordpress._hideButtons(); + }); + + closeOnClick = function(e){ + var id; + + if ( e.target.id == 'mceModalBlocker' || e.target.className == 'ui-widget-overlay' ) { + for ( id in ed.windowManager.windows ) { + ed.windowManager.close(null, id); + } + } + } + + // close popups when clicking on the background + tinymce.dom.Event.remove(document.body, 'click', closeOnClick); + tinymce.dom.Event.add(document.body, 'click', closeOnClick); + }, + + getInfo : function() { + return { + longname : 'WordPress Plugin', + author : 'WordPress', // add Moxiecode? + authorurl : 'http://wordpress.org', + infourl : 'http://wordpress.org', + version : '3.0' + }; + }, + + // Internal functions + _setEmbed : function(c) { + return c.replace(/\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g, function(a,b){ + return '<img width="300" height="200" src="' + tinymce.baseURL + '/plugins/wordpress/img/trans.gif" class="wp-oembed mceItemNoResize" alt="'+b+'" title="'+b+'" />'; + }); + }, + + _getEmbed : function(c) { + return c.replace(/<img[^>]+>/g, function(a) { + if ( a.indexOf('class="wp-oembed') != -1 ) { + var u = a.match(/alt="([^\"]+)"/); + if ( u[1] ) + a = '[embed]' + u[1] + '[/embed]'; + } + return a; + }); + }, + + _showButtons : function(n, id) { + var ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y; + + vp = ed.dom.getViewPort(ed.getWin()); + p1 = DOM.getPos(ed.getContentAreaContainer()); + p2 = ed.dom.getPos(n); + + X = Math.max(p2.x - vp.x, 0) + p1.x; + Y = Math.max(p2.y - vp.y, 0) + p1.y; + + DOM.setStyles(id, { + 'top' : Y+5+'px', + 'left' : X+5+'px', + 'display' : 'block' + }); + + if ( this.mceTout ) + clearTimeout(this.mceTout); + + this.mceTout = setTimeout( function(){ed.plugins.wordpress._hideButtons();}, 5000 ); + }, + + _hideButtons : function() { + if ( !this.mceTout ) + return; + + if ( document.getElementById('wp_editbtns') ) + tinymce.DOM.hide('wp_editbtns'); + + if ( document.getElementById('wp_gallerybtns') ) + tinymce.DOM.hide('wp_gallerybtns'); + + clearTimeout(this.mceTout); + this.mceTout = 0; + }, + + // Resizes the iframe by a relative height value + _resizeIframe : function(ed, tb_id, dy) { + var ifr = ed.getContentAreaContainer().firstChild; + + DOM.setStyle(ifr, 'height', ifr.clientHeight + dy); // Resize iframe + ed.theme.deltaHeight += dy; // For resize cookie + }, + + _handleMoreBreak : function(ed, url) { + var moreHTML, nextpageHTML; + + moreHTML = '<img src="' + url + '/img/trans.gif" alt="$1" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />'; + nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />'; + + // Display morebreak instead if img in element path + ed.onPostRender.add(function() { + if (ed.theme.onResolveName) { + ed.theme.onResolveName.add(function(th, o) { + if (o.node.nodeName == 'IMG') { + if ( ed.dom.hasClass(o.node, 'mceWPmore') ) + o.name = 'wpmore'; + if ( ed.dom.hasClass(o.node, 'mceWPnextpage') ) + o.name = 'wppage'; + } + + }); + } + }); + + // Replace morebreak with images + ed.onBeforeSetContent.add(function(ed, o) { + if ( o.content ) { + o.content = o.content.replace(/<!--more(.*?)-->/g, moreHTML); + o.content = o.content.replace(/<!--nextpage-->/g, nextpageHTML); + } + }); + + // Replace images with morebreak + ed.onPostProcess.add(function(ed, o) { + if (o.get) + o.content = o.content.replace(/<img[^>]+>/g, function(im) { + if (im.indexOf('class="mceWPmore') !== -1) { + var m, moretext = (m = im.match(/alt="(.*?)"/)) ? m[1] : ''; + im = '<!--more'+moretext+'-->'; + } + if (im.indexOf('class="mceWPnextpage') !== -1) + im = '<!--nextpage-->'; + + return im; + }); + }); + + // Set active buttons if user selected pagebreak or more break + ed.onNodeChange.add(function(ed, cm, n) { + cm.setActive('wp_page', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPnextpage')); + cm.setActive('wp_more', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPmore')); + }); + } + }); + + // Register plugin + tinymce.PluginManager.add('wordpress', tinymce.plugins.WordPress); +})(); diff --git a/wp-includes/js/tinymce/plugins/wpdialogs/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/wpdialogs/editor_plugin_src.js new file mode 100644 index 000000000..4be9c3faf --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpdialogs/editor_plugin_src.js @@ -0,0 +1,80 @@ +/** + * 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.WPDialogs', { + init : function(ed, url) { + tinymce.create('tinymce.WPWindowManager:tinymce.InlineWindowManager', { + WPWindowManager : function(ed) { + this.parent(ed); + }, + + open : function(f, p) { + var t = this, element; + + if ( ! f.wpDialog ) + return this.parent( f, p ); + else if ( ! f.id ) + return; + + element = jQuery('#' + f.id); + if ( ! element.length ) + return; + + t.features = f; + t.params = p; + t.onOpen.dispatch(t, f, p); + t.element = t.windows[ f.id ] = element; + + // Store selection + t.bookmark = t.editor.selection.getBookmark(1); + + // Create the dialog if necessary + if ( ! element.data('wpdialog') ) { + element.wpdialog({ + title: f.title, + width: f.width, + height: f.height, + modal: true, + dialogClass: 'wp-dialog', + zIndex: 300000 + }); + } + + element.wpdialog('open'); + }, + close : function() { + if ( ! this.features.wpDialog ) + return this.parent.apply( this, arguments ); + + this.element.wpdialog('close'); + } + }); + + // Replace window manager + ed.onBeforeRenderUI.add(function() { + ed.windowManager = new tinymce.WPWindowManager(ed); + }); + }, + + getInfo : function() { + return { + longname : 'WPDialogs', + author : 'WordPress', + authorurl : 'http://wordpress.org', + infourl : 'http://wordpress.org', + version : '0.1' + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('wpdialogs', tinymce.plugins.WPDialogs); +})(); diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/css/editimage.css b/wp-includes/js/tinymce/plugins/wpeditimage/css/editimage.css index 323591d91..3b7e1566e 100644 --- a/wp-includes/js/tinymce/plugins/wpeditimage/css/editimage.css +++ b/wp-includes/js/tinymce/plugins/wpeditimage/css/editimage.css @@ -334,7 +334,7 @@ div#media-upload-header { position: relative; border-bottom-width: 1px; border-bottom-style: solid; - height: 2.5em; + height: 33px; background-color: #f9f9f9; border-bottom-color: #dfdfdf; } @@ -357,3 +357,75 @@ div#media-upload-error { color: #CFCFCF; } +.hidden { + display: none; +} + +/* RTL */ +body#media-upload.rtl ul#sidemenu { + left: auto; + right: 0; +} + +.rtl #basic .align .field label { + display: block; + float: right; + padding: 0 24px 0 0; + margin: 5px 3px 5px 5px; +} + +.rtl .align .field input { + display: block; + float: right; + margin: 5px 15px 5px 0; +} + +.rtl tr.image-size label { + margin: 0; +} + +.rtl tr.image-size input { + margin: 3px 15px 0 5px; +} + +.rtl .image-align-none-label, +.rtl .image-align-left-label, +.rtl .image-align-center-label, +.rtl .image-align-right-label { + background-position: center right; +} + +#media-upload.rtl .describe th.label { + text-align: right; +} + +.rtl .show-align, +.rtl .alignright, +.rtl #img_size { + float: left; +} + +.rtl tr.image-size label, +.rtl tr.image-size input, +.rtl #img_dim label, +.rtl #img_dim input, +.rtl #img_prop label, +.rtl #img_prop input, +.rtl #img_size_div, +.rtl .alignleft { + float: right; +} + +.rtl #img_dim label, +.rtl #img_prop label { + margin: 5px 0pt; +} + +.rtl #img_dim input, +.rtl #img_prop input { + margin: 0 5px 0 10px; +} + +.rtl #img_size_title { + text-align: left; +} diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/editimage.html b/wp-includes/js/tinymce/plugins/wpeditimage/editimage.html index d7ad22716..b7460289d 100644 --- a/wp-includes/js/tinymce/plugins/wpeditimage/editimage.html +++ b/wp-includes/js/tinymce/plugins/wpeditimage/editimage.html @@ -1,22 +1,20 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> -<script type="text/javascript" src="js/editimage.js?ver=327"></script> -<script type="text/javascript" src="../../utils/form_utils.js?ver=3223"></script> - -<link rel="stylesheet" href="css/editimage.css?ver=327" type="text/css" media="all" /> - -<script type="text/javascript"> -if ( 'rtl' == tinyMCEPopup.editor.getParam('directionality','') ) - document.write('<link rel="stylesheet" href="css/editimage-rtl.css?ver=3223" type="text/css" media="all" />'); -</script> +<link rel="stylesheet" href="css/editimage.css?ver=349-20679" type="text/css" media="all" /> +<script type="text/javascript" src="js/editimage.js?ver=349-20679"></script> +<script type="text/javascript" src="../../utils/form_utils.js?ver=349-20592"></script> <base target="_self" /> </head> <body id="media-upload" style="display:none;"> +<script type="text/javascript"> +if ( 'rtl' == tinyMCEPopup.editor.getParam('directionality','') ) + document.body.className += ' rtl'; +</script> <div id="media-upload-header"> <ul id="sidemenu"> <li><a href="javascript:;" id="tab_basic" class="current" onclick="wpImage.setTabs(this);">{#wpeditimage.edit_img}</a></li> @@ -103,7 +101,7 @@ if ( 'rtl' == tinyMCEPopup.editor.getParam('directionality','') ) </label> </th> <td class="field"> - <input type="text" id="img_cap" name="img_cap" value="" size="60" /> + <textarea id="img_cap_text"></textarea> </td> </tr> diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin.js b/wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin.js index fae5b5c98..570444350 100644 --- a/wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin.js +++ b/wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin.js @@ -1 +1 @@ -(function(){tinymce.create("tinymce.plugins.wpEditImage",{init:function(a,c){var d=this,b={};d.url=c;d._createButtons();a.addCommand("WP_EditImage",function(){var i=a.selection.getNode(),g=tinymce.DOM.getViewPort(),h=g.h,e=(720<g.w)?720:g.w,f=a.dom.getAttrib(i,"class");if(f.indexOf("mceItem")!=-1||f.indexOf("wpGallery")!=-1||i.nodeName!="IMG"){return}tb_show("",c+"/editimage.html?ver=321&TB_iframe=true");tinymce.DOM.setStyles("TB_window",{width:(e-50)+"px",height:(h-45)+"px","margin-left":"-"+parseInt(((e-50)/2),10)+"px"});if(!tinymce.isIE6){tinymce.DOM.setStyles("TB_window",{top:"20px",marginTop:"0"})}tinymce.DOM.setStyles("TB_iframeContent",{width:(e-50)+"px",height:(h-75)+"px"});tinymce.DOM.setStyle(["TB_overlay","TB_window","TB_load"],"z-index","999999")});a.onInit.add(function(e){tinymce.dom.Event.add(e.getBody(),"dragstart",function(f){if(!tinymce.isGecko&&f.target.nodeName=="IMG"&&e.dom.getParent(f.target,"dl.wp-caption")){return tinymce.dom.Event.cancel(f)}})});a.onMouseUp.add(function(f,g){if(tinymce.isWebKit||tinymce.isOpera){return}if(b.x&&(g.clientX!=b.x||g.clientY!=b.y)){var h=f.selection.getNode();if("IMG"==h.nodeName){window.setTimeout(function(){var e,i;if(h.width!=b.img_w||h.height!=b.img_h){h.className=h.className.replace(/size-[^ "']+/,"")}if(f.dom.getParent(h,"div.mceTemp")){e=f.dom.getParent(h,"dl.wp-caption");if(e){i=f.dom.getAttrib(h,"width")||h.width;i=parseInt(i,10);f.dom.setStyle(e,"width",10+i);f.execCommand("mceRepaint")}}},100)}}b={}});a.onMouseDown.add(function(f,g){if(g.target&&(g.target.nodeName=="IMG"||(g.target.firstChild&&g.target.firstChild.nodeName=="IMG"))){b={x:g.clientX,y:g.clientY,img_w:g.target.clientWidth,img_h:g.target.clientHeight};if(f.dom.getAttrib(g.target,"class").indexOf("mceItem")==-1){f.plugins.wordpress._showButtons(g.target,"wp_editbtns")}}});a.onKeyPress.add(function(f,j){var k,g,i,h;if(j.keyCode==13){k=f.selection.getNode();g=f.dom.getParent(k,"dl.wp-caption");i=f.dom.getParent(g,"div.mceTemp");if(g&&i){h=f.dom.create("p",{}," ");f.dom.insertAfter(h,i);if(h.firstChild){f.selection.select(h.firstChild)}else{f.selection.select(h)}tinymce.dom.Event.cancel(j);return false}}});a.onBeforeSetContent.add(function(e,f){f.content=d._do_shcode(f.content)});a.onPostProcess.add(function(e,f){if(f.get){f.content=d._get_shcode(f.content)}})},_do_shcode:function(a){return a.replace(/(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?[\s\u00a0]*/g,function(g,d,k){var j,f,e,h,i;d=d.replace(/\\'|\\'|\\'/g,"'").replace(/\\"|\\"/g,""");k=k.replace(/\\'|\\'/g,"'").replace(/\\"/g,""");j=d.match(/id=['"]([^'"]+)/i);f=d.match(/align=['"]([^'"]+)/i);e=d.match(/width=['"]([0-9]+)/);h=d.match(/caption=['"]([^'"]+)/i);j=(j&&j[1])?j[1]:"";f=(f&&f[1])?f[1]:"alignnone";e=(e&&e[1])?e[1]:"";h=(h&&h[1])?h[1]:"";if(!e||!h){return k}i=(f=="aligncenter")?"mceTemp mceIEcenter":"mceTemp";return'<div class="'+i+'" draggable><dl id="'+j+'" class="wp-caption '+f+'" style="width: '+(10+parseInt(e))+'px"><dt class="wp-caption-dt">'+k+'</dt><dd class="wp-caption-dd">'+h+"</dd></dl></div>"})},_get_shcode:function(a){return a.replace(/<div class="mceTemp[^"]*">\s*<dl([^>]+)>\s*<dt[^>]+>([\s\S]+?)<\/dt>\s*<dd[^>]+>(.+?)<\/dd>\s*<\/dl>\s*<\/div>\s*/gi,function(g,d,j,h){var i,f,e;i=d.match(/id=['"]([^'"]+)/i);f=d.match(/class=['"]([^'"]+)/i);e=j.match(/width=['"]([0-9]+)/);i=(i&&i[1])?i[1]:"";f=(f&&f[1])?f[1]:"alignnone";e=(e&&e[1])?e[1]:"";if(!e||!h){return j}f=f.match(/align[^ '"]+/)||"alignnone";h=h.replace(/<\S[^<>]*>/gi,"").replace(/'/g,"'").replace(/"/g,""");return'[caption id="'+i+'" align="'+f+'" width="'+e+'" caption="'+h+'"]'+j+"[/caption]"})},_createButtons:function(){var b=this,a=tinyMCE.activeEditor,d=tinymce.DOM,e,c;d.remove("wp_editbtns");d.add(document.body,"div",{id:"wp_editbtns",style:"display:none;"});e=d.add("wp_editbtns","img",{src:b.url+"/img/image.png",id:"wp_editimgbtn",width:"24",height:"24",title:a.getLang("wpeditimage.edit_img")});tinymce.dom.Event.add(e,"mousedown",function(g){var f=tinyMCE.activeEditor;f.windowManager.bookmark=f.selection.getBookmark("simple");f.execCommand("WP_EditImage")});c=d.add("wp_editbtns","img",{src:b.url+"/img/delete.png",id:"wp_delimgbtn",width:"24",height:"24",title:a.getLang("wpeditimage.del_img")});tinymce.dom.Event.add(c,"mousedown",function(i){var f=tinyMCE.activeEditor,g=f.selection.getNode(),h;if(g.nodeName=="IMG"&&f.dom.getAttrib(g,"class").indexOf("mceItem")==-1){if((h=f.dom.getParent(g,"div"))&&f.dom.hasClass(h,"mceTemp")){f.dom.remove(h)}else{if((h=f.dom.getParent(g,"A"))&&h.childNodes.length==1){f.dom.remove(h)}else{f.dom.remove(g)}}f.execCommand("mceRepaint");return false}})},getInfo:function(){return{longname:"Edit Image",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpeditimage",tinymce.plugins.wpEditImage)})(); \ No newline at end of file +(function(){tinymce.create("tinymce.plugins.wpEditImage",{url:"",editor:{},init:function(a,c){var d=this,b={};d.url=c;d.editor=a;d._createButtons();a.addCommand("WP_EditImage",function(){var i=a.selection.getNode(),g,h,e,f=a.dom.getAttrib(i,"class");if(f.indexOf("mceItem")!=-1||f.indexOf("wpGallery")!=-1||i.nodeName!="IMG"){return}g=tinymce.DOM.getViewPort();h=680<(g.h-70)?680:g.h-70;e=650<g.w?650:g.w;a.windowManager.open({file:c+"/editimage.html",width:e+"px",height:h+"px",inline:true})});a.onInit.add(function(e){e.dom.events.add(e.getBody(),"dragstart",function(g){var f;if(g.target.nodeName=="IMG"&&(f=e.dom.getParent(g.target,"div.mceTemp"))){e.selection.select(f)}})});a.onMouseUp.add(function(f,g){if(tinymce.isWebKit||tinymce.isOpera){return}if(b.x&&(g.clientX!=b.x||g.clientY!=b.y)){var h=f.selection.getNode();if("IMG"==h.nodeName){window.setTimeout(function(){var e=f.dom.getParent(h,"dl.wp-caption"),i;if(h.width!=b.img_w||h.height!=b.img_h){h.className=h.className.replace(/size-[^ "']+/,"")}if(e){i=f.dom.getAttrib(h,"width")||h.width;i=parseInt(i,10);f.dom.setStyle(e,"width",10+i);f.execCommand("mceRepaint")}},100)}}b={}});a.onMouseDown.add(function(f,h){var g=h.target;if(g.nodeName!="IMG"){if(g.firstChild&&g.firstChild.nodeName=="IMG"&&g.childNodes.length==1){g=g.firstChild}else{return}}if(f.dom.getAttrib(g,"class").indexOf("mceItem")==-1){b={x:h.clientX,y:h.clientY,img_w:g.clientWidth,img_h:g.clientHeight};f.plugins.wordpress._showButtons(g,"wp_editbtns")}});a.onKeyPress.add(function(f,j){var k,g,i,h;if(j.keyCode==13){k=f.selection.getNode();g=f.dom.getParent(k,"dl.wp-caption");if(g){i=f.dom.getParent(g,"div.mceTemp")}if(i){h=f.dom.create("p",{},"<br>");f.dom.insertAfter(h,i);f.selection.select(h.firstChild);if(tinymce.isIE){f.selection.setContent("")}else{f.selection.setContent('<br _moz_dirty="">');f.selection.setCursorLocation(h,0)}f.dom.events.cancel(j);return false}}});a.onBeforeSetContent.add(function(e,f){f.content=e.wpSetImgCaption(f.content)});a.onPostProcess.add(function(e,f){if(f.get){f.content=e.wpGetImgCaption(f.content)}});a.wpSetImgCaption=function(e){return d._do_shcode(e)};a.wpGetImgCaption=function(e){return d._get_shcode(e)}},_do_shcode:function(a){return a.replace(/(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g,function(j,i,h){var d,m,k,l,f,g,e=tinymce.trim;d=i.match(/id=['"]([^'"]*)['"] ?/);i=i.replace(d[0],"");m=i.match(/align=['"]([^'"]*)['"] ?/);i=i.replace(m[0],"");k=i.match(/width=['"]([0-9]*)['"] ?/);i=i.replace(k[0],"");h=e(h);g=h.match(/((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i);if(g&&g[2]){l=e(g[2]);g=e(g[1])}else{l=e(i).replace(/caption=['"]/,"").replace(/['"]$/,"");g=h}d=(d&&d[1])?d[1]:"";m=(m&&m[1])?m[1]:"alignnone";k=(k&&k[1])?k[1]:"";if(!k||!l){return h}f="mceTemp";if(m=="aligncenter"){f+=" mceIEcenter"}return'<div class="'+f+'"><dl id="'+d+'" class="wp-caption '+m+'" style="width: '+(10+parseInt(k))+'px"><dt class="wp-caption-dt">'+g+'</dt><dd class="wp-caption-dd">'+l+"</dd></dl></div>"})},_get_shcode:function(a){return a.replace(/<div (?:id="attachment_|class="mceTemp)[^>]*>([\s\S]+?)<\/div>/g,function(d,c){var e=c.replace(/<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi,function(i,f,l,j){var k,h,g;g=l.match(/width="([0-9]*)"/);g=(g&&g[1])?g[1]:"";if(!g||!j){return l}k=f.match(/id="([^"]*)"/);k=(k&&k[1])?k[1]:"";h=f.match(/class="([^"]*)"/);h=(h&&h[1])?h[1]:"";h=h.match(/align[a-z]+/)||"alignnone";j=j.replace(/\r\n|\r/g,"\n").replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g,function(b){return b.replace(/[\r\n\t]+/," ")});j=j.replace(/\s*\n\s*/g,"<br />");return'[caption id="'+k+'" align="'+h+'" width="'+g+'"]'+l+" "+j+"[/caption]"});if(e.indexOf("[caption")!==0){e=c.replace(/[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi,"<p>$1</p>$2")}return e})},_createButtons:function(){var b=this,a=tinyMCE.activeEditor,d=tinymce.DOM,e,c;d.remove("wp_editbtns");d.add(document.body,"div",{id:"wp_editbtns",style:"display:none;"});e=d.add("wp_editbtns","img",{src:b.url+"/img/image.png",id:"wp_editimgbtn",width:"24",height:"24",title:a.getLang("wpeditimage.edit_img")});tinymce.dom.Event.add(e,"mousedown",function(g){var f=tinyMCE.activeEditor;f.windowManager.bookmark=f.selection.getBookmark("simple");f.execCommand("WP_EditImage")});c=d.add("wp_editbtns","img",{src:b.url+"/img/delete.png",id:"wp_delimgbtn",width:"24",height:"24",title:a.getLang("wpeditimage.del_img")});tinymce.dom.Event.add(c,"mousedown",function(i){var f=tinyMCE.activeEditor,g=f.selection.getNode(),h;if(g.nodeName=="IMG"&&f.dom.getAttrib(g,"class").indexOf("mceItem")==-1){if((h=f.dom.getParent(g,"div"))&&f.dom.hasClass(h,"mceTemp")){f.dom.remove(h)}else{if((h=f.dom.getParent(g,"A"))&&h.childNodes.length==1){f.dom.remove(h)}else{f.dom.remove(g)}}f.execCommand("mceRepaint");return false}})},getInfo:function(){return{longname:"Edit Image",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpeditimage",tinymce.plugins.wpEditImage)})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin_src.js new file mode 100644 index 000000000..c241158d3 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin_src.js @@ -0,0 +1,281 @@ + +(function() { + tinymce.create('tinymce.plugins.wpEditImage', { + url: '', + editor: {}, + + init: function(ed, url) { + var t = this, mouse = {}; + + t.url = url; + t.editor = ed; + t._createButtons(); + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('...'); + ed.addCommand('WP_EditImage', function() { + var el = ed.selection.getNode(), vp, H, W, cls = ed.dom.getAttrib(el, 'class'); + + if ( cls.indexOf('mceItem') != -1 || cls.indexOf('wpGallery') != -1 || el.nodeName != 'IMG' ) + return; + + vp = tinymce.DOM.getViewPort(); + H = 680 < (vp.h - 70) ? 680 : vp.h - 70; + W = 650 < vp.w ? 650 : vp.w; + + ed.windowManager.open({ + file: url + '/editimage.html', + width: W+'px', + height: H+'px', + inline: true + }); + }); + + ed.onInit.add(function(ed) { + ed.dom.events.add(ed.getBody(), 'dragstart', function(e) { + var parent; + + if ( e.target.nodeName == 'IMG' && ( parent = ed.dom.getParent(e.target, 'div.mceTemp') ) ) { + ed.selection.select(parent); + } + }); + }); + + // resize the caption <dl> when the image is soft-resized by the user (only possible in Firefox and IE) + ed.onMouseUp.add(function(ed, e) { + if ( tinymce.isWebKit || tinymce.isOpera ) + return; + + if ( mouse.x && (e.clientX != mouse.x || e.clientY != mouse.y) ) { + var n = ed.selection.getNode(); + + if ( 'IMG' == n.nodeName ) { + window.setTimeout(function(){ + var DL = ed.dom.getParent(n, 'dl.wp-caption'), width; + + if ( n.width != mouse.img_w || n.height != mouse.img_h ) + n.className = n.className.replace(/size-[^ "']+/, ''); + + if ( DL ) { + width = ed.dom.getAttrib(n, 'width') || n.width; + width = parseInt(width, 10); + ed.dom.setStyle(DL, 'width', 10 + width); + ed.execCommand('mceRepaint'); + } + }, 100); + } + } + mouse = {}; + }); + + // show editimage buttons + ed.onMouseDown.add(function(ed, e) { + var target = e.target; + + if ( target.nodeName != 'IMG' ) { + if ( target.firstChild && target.firstChild.nodeName == 'IMG' && target.childNodes.length == 1 ) + target = target.firstChild; + else + return; + } + + if ( ed.dom.getAttrib(target, 'class').indexOf('mceItem') == -1 ) { + mouse = { + x: e.clientX, + y: e.clientY, + img_w: target.clientWidth, + img_h: target.clientHeight + }; + + ed.plugins.wordpress._showButtons(target, 'wp_editbtns'); + } + }); + + // when pressing Return inside a caption move the caret to a new parapraph under it + ed.onKeyPress.add(function(ed, e) { + var n, DL, DIV, P; + + if ( e.keyCode == 13 ) { + n = ed.selection.getNode(); + DL = ed.dom.getParent(n, 'dl.wp-caption'); + + if ( DL ) + DIV = ed.dom.getParent(DL, 'div.mceTemp'); + + if ( DIV ) { + P = ed.dom.create('p', {}, '<br>'); + ed.dom.insertAfter( P, DIV ); + ed.selection.select(P.firstChild); + + if ( tinymce.isIE ) { + ed.selection.setContent(''); + } else { + ed.selection.setContent('<br _moz_dirty="">'); + ed.selection.setCursorLocation(P, 0); + } + + ed.dom.events.cancel(e); + return false; + } + } + }); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = ed.wpSetImgCaption(o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.get) + o.content = ed.wpGetImgCaption(o.content); + }); + + ed.wpSetImgCaption = function(content) { + return t._do_shcode(content); + }; + + ed.wpGetImgCaption = function(content) { + return t._get_shcode(content); + }; + }, + + _do_shcode : function(content) { + return content.replace(/(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function(a,b,c){ + var id, cls, w, cap, div_cls, img, trim = tinymce.trim; + + id = b.match(/id=['"]([^'"]*)['"] ?/); + b = b.replace(id[0], ''); + + cls = b.match(/align=['"]([^'"]*)['"] ?/); + b = b.replace(cls[0], ''); + + w = b.match(/width=['"]([0-9]*)['"] ?/); + b = b.replace(w[0], ''); + + c = trim(c); + img = c.match(/((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i); + + if ( img && img[2] ) { + cap = trim( img[2] ); + img = trim( img[1] ); + } else { + // old captions shortcode style + cap = trim(b).replace(/caption=['"]/, '').replace(/['"]$/, ''); + img = c; + } + + id = ( id && id[1] ) ? id[1] : ''; + cls = ( cls && cls[1] ) ? cls[1] : 'alignnone'; + w = ( w && w[1] ) ? w[1] : ''; + + if ( !w || !cap ) + return c; + + div_cls = 'mceTemp'; + if ( cls == 'aligncenter' ) + div_cls += ' mceIEcenter'; + + return '<div class="'+div_cls+'"><dl id="'+id+'" class="wp-caption '+cls+'" style="width: '+( 10 + parseInt(w) )+ + 'px"><dt class="wp-caption-dt">'+img+'</dt><dd class="wp-caption-dd">'+cap+'</dd></dl></div>'; + }); + }, + + _get_shcode : function(content) { + return content.replace(/<div (?:id="attachment_|class="mceTemp)[^>]*>([\s\S]+?)<\/div>/g, function(a, b){ + var ret = b.replace(/<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi, function(a,b,c,cap){ + var id, cls, w; + + w = c.match(/width="([0-9]*)"/); + w = ( w && w[1] ) ? w[1] : ''; + + if ( !w || !cap ) + return c; + + id = b.match(/id="([^"]*)"/); + id = ( id && id[1] ) ? id[1] : ''; + + cls = b.match(/class="([^"]*)"/); + cls = ( cls && cls[1] ) ? cls[1] : ''; + cls = cls.match(/align[a-z]+/) || 'alignnone'; + + cap = cap.replace(/\r\n|\r/g, '\n').replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(a){ + // no line breaks inside HTML tags + return a.replace(/[\r\n\t]+/, ' '); + }); + + // convert remaining line breaks to <br> + cap = cap.replace(/\s*\n\s*/g, '<br />'); + + return '[caption id="'+id+'" align="'+cls+'" width="'+w+'"]'+c+' '+cap+'[/caption]'; + }); + + if ( ret.indexOf('[caption') !== 0 ) { + // the caption html seems brocken, try to find the image that may be wrapped in a link + // and may be followed by <p> with the caption text. + ret = b.replace(/[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi, '<p>$1</p>$2'); + } + + return ret; + }); + }, + + _createButtons : function() { + var t = this, ed = tinyMCE.activeEditor, DOM = tinymce.DOM, editButton, dellButton; + + DOM.remove('wp_editbtns'); + + DOM.add(document.body, 'div', { + id : 'wp_editbtns', + style : 'display:none;' + }); + + editButton = DOM.add('wp_editbtns', 'img', { + src : t.url+'/img/image.png', + id : 'wp_editimgbtn', + width : '24', + height : '24', + title : ed.getLang('wpeditimage.edit_img') + }); + + tinymce.dom.Event.add(editButton, 'mousedown', function(e) { + var ed = tinyMCE.activeEditor; + ed.windowManager.bookmark = ed.selection.getBookmark('simple'); + ed.execCommand("WP_EditImage"); + }); + + dellButton = DOM.add('wp_editbtns', 'img', { + src : t.url+'/img/delete.png', + id : 'wp_delimgbtn', + width : '24', + height : '24', + title : ed.getLang('wpeditimage.del_img') + }); + + tinymce.dom.Event.add(dellButton, 'mousedown', function(e) { + var ed = tinyMCE.activeEditor, el = ed.selection.getNode(), p; + + if ( el.nodeName == 'IMG' && ed.dom.getAttrib(el, 'class').indexOf('mceItem') == -1 ) { + if ( (p = ed.dom.getParent(el, 'div')) && ed.dom.hasClass(p, 'mceTemp') ) + ed.dom.remove(p); + else if ( (p = ed.dom.getParent(el, 'A')) && p.childNodes.length == 1 ) + ed.dom.remove(p); + else + ed.dom.remove(el); + + ed.execCommand('mceRepaint'); + return false; + } + }); + }, + + getInfo : function() { + return { + longname : 'Edit Image', + author : 'WordPress', + authorurl : 'http://wordpress.org', + infourl : '', + version : "1.0" + }; + } + }); + + tinymce.PluginManager.add('wpeditimage', tinymce.plugins.wpEditImage); +})(); diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.dev.js b/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.dev.js index 2d7e38e49..18e781179 100644 --- a/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.dev.js +++ b/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.dev.js @@ -3,17 +3,7 @@ var tinymce = null, tinyMCEPopup, tinyMCE, wpImage; tinyMCEPopup = { init: function() { - var t = this, w, li, q, i, it; - - li = ('' + document.location.search).replace(/^\?/, '').split('&'); - q = {}; - for ( i = 0; i < li.length; i++ ) { - it = li[i].split('='); - q[unescape(it[0])] = unescape(it[1]); - } - - if (q.mce_rdomain) - document.domain = q.mce_rdomain; + var t = this, w, ti; // Find window & API w = t.getWin(); @@ -21,6 +11,7 @@ tinyMCEPopup = { tinyMCE = w.tinyMCE; t.editor = tinymce.EditorManager.activeEditor; t.params = t.editor.windowManager.params; + t.features = t.editor.windowManager.features; // Setup local DOM t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document); @@ -28,7 +19,7 @@ tinyMCEPopup = { }, getWin : function() { - return window.dialogArguments || opener || parent || top; + return (!window.frameElement && window.dialogArguments) || opener || parent || top; }, getParam : function(n, dv) { @@ -36,16 +27,16 @@ tinyMCEPopup = { }, close : function() { - var t = this, win = t.getWin(); + var t = this; // To avoid domain relaxing issue in Opera function close() { - win.tb_remove(); - tinymce = tinyMCE = t.editor = t.dom = t.dom.doc = null; // Cleanup + t.editor.windowManager.close(window); + tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup }; if (tinymce.isOpera) - win.setTimeout(close, 0); + t.getWin().setTimeout(close, 0); else close(); }, @@ -59,13 +50,13 @@ tinyMCEPopup = { }, storeSelection : function() { - this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple'); + this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark(1); }, restoreSelection : function() { var t = tinyMCEPopup; - if (tinymce.isIE) + if ( tinymce.isIE ) t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark); } } @@ -74,12 +65,14 @@ tinyMCEPopup.init(); wpImage = { preInit : function() { // import colors stylesheet from parent - var win = tinyMCEPopup.getWin(), styles = win.document.styleSheets, url, i; + var ed = tinyMCEPopup.editor, win = tinyMCEPopup.getWin(), styles = win.document.styleSheets, url, i; for ( i = 0; i < styles.length; i++ ) { url = styles.item(i).href; - if ( url && url.indexOf('colors') != -1 ) - document.write( '<link rel="stylesheet" href="'+url+'" type="text/css" media="all" />' ); + if ( url && url.indexOf('colors') != -1 ) { + document.getElementsByTagName('head')[0].appendChild( ed.dom.create('link', {rel:'stylesheet', href: url}) ); + break; + } } }, @@ -242,7 +235,7 @@ wpImage = { setup : function() { var t = this, c, el, link, fname, f = document.forms[0], ed = tinyMCEPopup.editor, - d = t.I('img_demo'), dom = tinyMCEPopup.dom, DL, caption = '', dlc, pa; + d = t.I('img_demo'), dom = tinyMCEPopup.dom, DL, DD, caption = '', dlc, pa; document.dir = tinyMCEPopup.editor.getParam('directionality',''); @@ -267,15 +260,12 @@ wpImage = { tinymce.trim(c); } - tinymce.each(DL.childNodes, function(e) { - if ( e.nodeName == 'DD' && dom.hasClass(e, 'wp-caption-dd') ) { - caption = e.innerHTML; - return; - } - }); + DD = ed.dom.select('dd.wp-caption-dd', DL); + if ( DD && DD[0] ) + caption = ed.serializer.serialize(DD[0]).replace(/^<p>/, '').replace(/<\/p>$/, ''); } - f.img_cap.value = caption; + f.img_cap_text.value = caption; f.img_title.value = ed.dom.getAttrib(el, 'title'); f.img_alt.value = ed.dom.getAttrib(el, 'alt'); f.border.value = ed.dom.getAttrib(el, 'border'); @@ -326,7 +316,9 @@ wpImage = { d.className = t.align = "alignnone"; } - if ( t.width && t.preloadImg.width ) t.showSizeSet(); + if ( t.width && t.preloadImg.width ) + t.showSizeSet(); + document.body.style.display = ''; }, @@ -351,7 +343,7 @@ wpImage = { update : function() { var t = this, f = document.forms[0], ed = tinyMCEPopup.editor, el, b, fixSafari = null, DL, P, A, DIV, do_caption = null, img_class = f.img_classes.value, html, - id, cap_id = '', cap, DT, DD, cap_width, div_cls, lnk = '', pa, aa; + id, cap_id = '', cap, DT, DD, cap_width, div_cls, lnk = '', pa, aa, caption; tinyMCEPopup.restoreSelection(); el = ed.selection.getNode(); @@ -362,7 +354,7 @@ wpImage = { return; } - if ( f.img_cap.value != '' && f.width.value != '' ) { + if ( f.img_cap_text.value != '' && f.width.value != '' ) { do_caption = 1; img_class = img_class.replace( /align[^ "']+\s?/gi, '' ); } @@ -393,16 +385,11 @@ wpImage = { if ( ! f.link_href.value.match(/https?:\/\//i) ) f.link_href.value = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.link_href.value); - if ( tinymce.isWebKit && ed.dom.hasClass(el, 'aligncenter') ) { - ed.dom.removeClass(el, 'aligncenter'); - fixSafari = 1; - } - - tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); - if ( fixSafari ) ed.dom.addClass(el, 'aligncenter'); + ed.getDoc().execCommand("unlink", false, null); + tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); tinymce.each(ed.dom.select("a"), function(n) { - if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { + if ( ed.dom.getAttrib(n, 'href') == '#mce_temp_url#' ) { ed.dom.setAttribs(n, { href : f.link_href.value, @@ -429,6 +416,13 @@ wpImage = { if ( do_caption ) { cap_width = 10 + parseInt(f.width.value); div_cls = (t.align == 'aligncenter') ? 'mceTemp mceIEcenter' : 'mceTemp'; + caption = f.img_cap_text.value; + + caption = caption.replace(/\r\n|\r/g, '\n').replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(a){ + return a.replace(/[\r\n\t]+/, ' '); + }); + + caption = caption.replace(/\s*\n\s*/g, '<br />'); if ( DL ) { ed.dom.setAttribs(DL, { @@ -440,24 +434,26 @@ wpImage = { ed.dom.setAttrib(DIV, 'class', div_cls); if ( (DT = ed.dom.getParent(el, 'dt')) && (DD = DT.nextSibling) && ed.dom.hasClass(DD, 'wp-caption-dd') ) - ed.dom.setHTML(DD, f.img_cap.value); + ed.dom.setHTML(DD, caption); } else { if ( (id = f.img_classes.value.match( /wp-image-([0-9]{1,6})/ )) && id[1] ) cap_id = 'attachment_'+id[1]; if ( f.link_href.value && (lnk = ed.dom.getParent(el, 'a')) ) { - if ( lnk.childNodes.length == 1 ) + if ( lnk.childNodes.length == 1 ) { html = ed.dom.getOuterHTML(lnk); - else { + } else { html = ed.dom.getOuterHTML(lnk); - html = html.match(/<a[^>]+>/i); + html = html.match(/<a [^>]+>/i); html = html+ed.dom.getOuterHTML(el)+'</a>'; } - } else html = ed.dom.getOuterHTML(el); + } else { + html = ed.dom.getOuterHTML(el); + } html = '<dl id="'+cap_id+'" class="wp-caption '+t.align+'" style="width: '+cap_width+ - 'px"><dt class="wp-caption-dt">'+html+'</dt><dd class="wp-caption-dd">'+f.img_cap.value+'</dd></dl>'; + 'px"><dt class="wp-caption-dt">'+html+'</dt><dd class="wp-caption-dd">'+caption+'</dd></dl>'; cap = ed.dom.create('div', {'class': div_cls}, html); @@ -614,3 +610,4 @@ wpImage = { window.onload = function(){wpImage.init();} wpImage.preInit(); + diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.js b/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.js index ef628ed10..eebfb3d5a 100644 --- a/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.js +++ b/wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.js @@ -1 +1 @@ -var tinymce=null,tinyMCEPopup,tinyMCE,wpImage;tinyMCEPopup={init:function(){var d=this,b,a,f,c,e;a=(""+document.location.search).replace(/^\?/,"").split("&");f={};for(c=0;c<a.length;c++){e=a[c].split("=");f[unescape(e[0])]=unescape(e[1])}if(f.mce_rdomain){document.domain=f.mce_rdomain}b=d.getWin();tinymce=b.tinymce;tinyMCE=b.tinyMCE;d.editor=tinymce.EditorManager.activeEditor;d.params=d.editor.windowManager.params;d.dom=d.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);d.editor.windowManager.onOpen.dispatch(d.editor.windowManager,window)},getWin:function(){return window.dialogArguments||opener||parent||top},getParam:function(b,a){return this.editor.getParam(b,a)},close:function(){var a=this,b=a.getWin();function c(){b.tb_remove();tinymce=tinyMCE=a.editor=a.dom=a.dom.doc=null}if(tinymce.isOpera){b.setTimeout(c,0)}else{c()}},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark("simple")},restoreSelection:function(){var a=tinyMCEPopup;if(tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}}};tinyMCEPopup.init();wpImage={preInit:function(){var d=tinyMCEPopup.getWin(),c=d.document.styleSheets,a,b;for(b=0;b<c.length;b++){a=c.item(b).href;if(a&&a.indexOf("colors")!=-1){document.write('<link rel="stylesheet" href="'+a+'" type="text/css" media="all" />')}}},I:function(a){return document.getElementById(a)},current:"",link:"",link_rel:"",target_value:"",current_size_sel:"s100",width:"",height:"",align:"",img_alt:"",setTabs:function(b){var a=this;if("current"==b.className){return false}a.I("div_advanced").style.display=("tab_advanced"==b.id)?"block":"none";a.I("div_basic").style.display=("tab_basic"==b.id)?"block":"none";a.I("tab_basic").className=a.I("tab_advanced").className="";b.className="current";return false},img_seturl:function(b){var c=this,a=c.I("link_rel").value;if("current"==b){c.I("link_href").value=c.current;c.I("link_rel").value=c.link_rel}else{c.I("link_href").value=c.link;if(a){a=a.replace(/attachment|wp-att-[0-9]+/gi,"");c.I("link_rel").value=tinymce.trim(a)}}},imgAlignCls:function(b){var c=this,a=c.I("img_classes").value;c.I("img_demo").className=c.align=b;a=a.replace(/align[^ "']+/gi,"");a+=(" "+b);a=a.replace(/\s+/g," ").replace(/^\s/,"");if("aligncenter"==b){c.I("hspace").value="";c.updateStyle("hspace")}c.I("img_classes").value=a},showSize:function(e){var c=this,f=c.I("img_demo"),a=c.width,d=c.height,g=e.id||"s100",b;b=parseInt(g.substring(1))/200;f.width=Math.round(a*b);f.height=Math.round(d*b);c.showSizeClear();e.style.borderColor="#A3A3A3";e.style.backgroundColor="#E5E5E5"},showSizeSet:function(){var b=this,d,c,a;if((b.width*1.3)>parseInt(b.preloadImg.width)){d=b.I("s130"),c=b.I("s120"),a=b.I("s110");d.onclick=c.onclick=a.onclick=null;d.onmouseover=c.onmouseover=a.onmouseover=null;d.style.color=c.style.color=a.style.color="#aaa"}},showSizeRem:function(){var a=this,c=a.I("img_demo"),b=document.forms[0];c.width=Math.round(b.width.value*0.5);c.height=Math.round(b.height.value*0.5);a.showSizeClear();a.I(a.current_size_sel).style.borderColor="#A3A3A3";a.I(a.current_size_sel).style.backgroundColor="#E5E5E5";return false},showSizeClear:function(){var b=this.I("img_size").getElementsByTagName("div"),a;for(a=0;a<b.length;a++){b[a].style.borderColor="#f1f1f1";b[a].style.backgroundColor="#f1f1f1"}},imgEditSize:function(g){var d=this,i=document.forms[0],a,c,b,e,j;if(!d.preloadImg||!d.preloadImg.width||!d.preloadImg.height){return}a=parseInt(d.preloadImg.width),c=parseInt(d.preloadImg.height),b=d.width||a,e=d.height||c,j=g.id||"s100";size=parseInt(j.substring(1))/100;b=Math.round(b*size);e=Math.round(e*size);i.width.value=Math.min(a,b);i.height.value=Math.min(c,e);d.current_size_sel=j;d.demoSetSize()},demoSetSize:function(a){var c=this.I("img_demo"),b=document.forms[0];c.width=b.width.value?Math.round(b.width.value*0.5):"";c.height=b.height.value?Math.round(b.height.value*0.5):""},demoSetStyle:function(){var b=document.forms[0],a=this.I("img_demo"),c=tinyMCEPopup.editor.dom;if(a){c.setAttrib(a,"style",b.img_style.value);c.setStyle(a,"width","");c.setStyle(a,"height","")}},origSize:function(){var a=this,c=document.forms[0],b=a.I("s100");c.width.value=a.width=a.preloadImg.width;c.height.value=a.height=a.preloadImg.height;a.showSizeSet();a.demoSetSize();a.showSize(b)},init:function(){var a=tinyMCEPopup.editor,b;b=document.body.innerHTML;document.body.innerHTML=a.translate(b);window.setTimeout(function(){wpImage.setup()},500)},setup:function(){var p=this,k,b,l,e,i=document.forms[0],h=tinyMCEPopup.editor,j=p.I("img_demo"),g=tinyMCEPopup.dom,a,o="",n,m;document.dir=tinyMCEPopup.editor.getParam("directionality","");if(tinyMCEPopup.editor.getParam("wpeditimage_disable_captions",false)){p.I("cap_field").style.display="none"}tinyMCEPopup.restoreSelection();b=h.selection.getNode();if(b.nodeName!="IMG"){return}i.img_src.value=j.src=l=h.dom.getAttrib(b,"src");h.dom.setStyle(b,"float","");p.getImageData();k=h.dom.getAttrib(b,"class");if(a=g.getParent(b,"dl")){n=h.dom.getAttrib(a,"class");n=n.match(/align[^ "']+/i);if(n&&!g.hasClass(b,n)){k+=" "+n;tinymce.trim(k)}tinymce.each(a.childNodes,function(c){if(c.nodeName=="DD"&&g.hasClass(c,"wp-caption-dd")){o=c.innerHTML;return}})}i.img_cap.value=o;i.img_title.value=h.dom.getAttrib(b,"title");i.img_alt.value=h.dom.getAttrib(b,"alt");i.border.value=h.dom.getAttrib(b,"border");i.vspace.value=h.dom.getAttrib(b,"vspace");i.hspace.value=h.dom.getAttrib(b,"hspace");i.align.value=h.dom.getAttrib(b,"align");i.width.value=p.width=h.dom.getAttrib(b,"width");i.height.value=p.height=h.dom.getAttrib(b,"height");i.img_classes.value=k;i.img_style.value=h.dom.getAttrib(b,"style");if(g.getAttrib(b,"hspace")){p.updateStyle("hspace")}if(g.getAttrib(b,"border")){p.updateStyle("border")}if(g.getAttrib(b,"vspace")){p.updateStyle("vspace")}if(m=h.dom.getParent(b,"A")){i.link_href.value=p.current=h.dom.getAttrib(m,"href");i.link_title.value=h.dom.getAttrib(m,"title");i.link_rel.value=p.link_rel=h.dom.getAttrib(m,"rel");i.link_style.value=h.dom.getAttrib(m,"style");p.target_value=h.dom.getAttrib(m,"target");i.link_classes.value=h.dom.getAttrib(m,"class")}i.link_target.checked=(p.target_value&&p.target_value=="_blank")?"checked":"";e=l.substring(l.lastIndexOf("/"));e=e.replace(/-[0-9]{2,4}x[0-9]{2,4}/,"");p.link=l.substring(0,l.lastIndexOf("/"))+e;if(k.indexOf("alignleft")!=-1){p.I("alignleft").checked="checked";j.className=p.align="alignleft"}else{if(k.indexOf("aligncenter")!=-1){p.I("aligncenter").checked="checked";j.className=p.align="aligncenter"}else{if(k.indexOf("alignright")!=-1){p.I("alignright").checked="checked";j.className=p.align="alignright"}else{if(k.indexOf("alignnone")!=-1){p.I("alignnone").checked="checked";j.className=p.align="alignnone"}}}}if(p.width&&p.preloadImg.width){p.showSizeSet()}document.body.style.display=""},remove:function(){var a=tinyMCEPopup.editor,c,b;tinyMCEPopup.restoreSelection();b=a.selection.getNode();if(b.nodeName!="IMG"){return}if((c=a.dom.getParent(b,"div"))&&a.dom.hasClass(c,"mceTemp")){a.dom.remove(c)}else{if((c=a.dom.getParent(b,"A"))&&c.childNodes.length==1){a.dom.remove(c)}else{a.dom.remove(b)}}a.execCommand("mceRepaint");tinyMCEPopup.close();return},update:function(){var m=this,v=document.forms[0],g=tinyMCEPopup.editor,e,x,d=null,n,h,p,r,o=null,k=v.img_classes.value,l,q,u="",j,i,s,a,z,w="",c,y;tinyMCEPopup.restoreSelection();e=g.selection.getNode();if(e.nodeName!="IMG"){return}if(v.img_src.value===""){m.remove();return}if(v.img_cap.value!=""&&v.width.value!=""){o=1;k=k.replace(/align[^ "']+\s?/gi,"")}p=g.dom.getParent(e,"a");h=g.dom.getParent(e,"p");n=g.dom.getParent(e,"dl");r=g.dom.getParent(e,"div");tinyMCEPopup.execCommand("mceBeginUndoLevel");if(v.width.value!=e.width||v.height.value!=e.height){k=k.replace(/size-[^ "']+/,"")}g.dom.setAttribs(e,{src:v.img_src.value,title:v.img_title.value,alt:v.img_alt.value,width:v.width.value,height:v.height.value,style:v.img_style.value,"class":k});if(v.link_href.value){if(p==null){if(!v.link_href.value.match(/https?:\/\//i)){v.link_href.value=tinyMCEPopup.editor.documentBaseURI.toAbsolute(v.link_href.value)}if(tinymce.isWebKit&&g.dom.hasClass(e,"aligncenter")){g.dom.removeClass(e,"aligncenter");d=1}tinyMCEPopup.execCommand("CreateLink",false,"#mce_temp_url#",{skip_undo:1});if(d){g.dom.addClass(e,"aligncenter")}tinymce.each(g.dom.select("a"),function(b){if(g.dom.getAttrib(b,"href")=="#mce_temp_url#"){g.dom.setAttribs(b,{href:v.link_href.value,title:v.link_title.value,rel:v.link_rel.value,target:(v.link_target.checked==true)?"_blank":"","class":v.link_classes.value,style:v.link_style.value})}})}else{g.dom.setAttribs(p,{href:v.link_href.value,title:v.link_title.value,rel:v.link_rel.value,target:(v.link_target.checked==true)?"_blank":"","class":v.link_classes.value,style:v.link_style.value})}}if(o){a=10+parseInt(v.width.value);z=(m.align=="aligncenter")?"mceTemp mceIEcenter":"mceTemp";if(n){g.dom.setAttribs(n,{"class":"wp-caption "+m.align,style:"width: "+a+"px;"});if(r){g.dom.setAttrib(r,"class",z)}if((i=g.dom.getParent(e,"dt"))&&(s=i.nextSibling)&&g.dom.hasClass(s,"wp-caption-dd")){g.dom.setHTML(s,v.img_cap.value)}}else{if((q=v.img_classes.value.match(/wp-image-([0-9]{1,6})/))&&q[1]){u="attachment_"+q[1]}if(v.link_href.value&&(w=g.dom.getParent(e,"a"))){if(w.childNodes.length==1){l=g.dom.getOuterHTML(w)}else{l=g.dom.getOuterHTML(w);l=l.match(/<a[^>]+>/i);l=l+g.dom.getOuterHTML(e)+"</a>"}}else{l=g.dom.getOuterHTML(e)}l='<dl id="'+u+'" class="wp-caption '+m.align+'" style="width: '+a+'px"><dt class="wp-caption-dt">'+l+'</dt><dd class="wp-caption-dd">'+v.img_cap.value+"</dd></dl>";j=g.dom.create("div",{"class":z},l);if(h){h.parentNode.insertBefore(j,h);if(h.childNodes.length==1){g.dom.remove(h)}else{if(w&&w.childNodes.length==1){g.dom.remove(w)}else{g.dom.remove(e)}}}else{if(c=g.dom.getParent(e,"TD,TH,LI")){c.appendChild(j);if(w&&w.childNodes.length==1){g.dom.remove(w)}else{g.dom.remove(e)}}}}}else{if(n&&r){if(v.link_href.value&&(y=g.dom.getParent(e,"a"))){l=g.dom.getOuterHTML(y)}else{l=g.dom.getOuterHTML(e)}h=g.dom.create("p",{},l);r.parentNode.insertBefore(h,r);g.dom.remove(r)}}if(v.img_classes.value.indexOf("aligncenter")!=-1){if(h&&(!h.style||h.style.textAlign!="center")){g.dom.setStyle(h,"textAlign","center")}}else{if(h&&h.style&&h.style.textAlign=="center"){g.dom.setStyle(h,"textAlign","")}}if(!v.link_href.value&&p){x=g.selection.getBookmark();g.dom.remove(p,1);g.selection.moveToBookmark(x)}tinyMCEPopup.execCommand("mceEndUndoLevel");g.execCommand("mceRepaint");tinyMCEPopup.close()},updateStyle:function(a){var e=tinyMCEPopup.dom,c,d=document.forms[0],b=e.create("img",{style:d.img_style.value});if(tinyMCEPopup.editor.settings.inline_styles){if(a=="align"){e.setStyle(b,"float","");e.setStyle(b,"vertical-align","");c=d.align.value;if(c){if(c=="left"||c=="right"){e.setStyle(b,"float",c)}else{b.style.verticalAlign=c}}}if(a=="border"){e.setStyle(b,"border","");c=d.border.value;if(c||c=="0"){if(c=="0"){b.style.border="0"}else{b.style.border=c+"px solid black"}}}if(a=="hspace"){e.setStyle(b,"marginLeft","");e.setStyle(b,"marginRight","");c=d.hspace.value;if(c){b.style.marginLeft=c+"px";b.style.marginRight=c+"px"}}if(a=="vspace"){e.setStyle(b,"marginTop","");e.setStyle(b,"marginBottom","");c=d.vspace.value;if(c){b.style.marginTop=c+"px";b.style.marginBottom=c+"px"}}d.img_style.value=e.serializeStyle(e.parseStyle(b.style.cssText));this.demoSetStyle()}},checkVal:function(a){if(a.value==""){if(a.id=="img_src"){a.value=this.I("img_demo").src||this.preloadImg.src}}},resetImageData:function(){var a=document.forms[0];a.width.value=a.height.value=""},updateImageData:function(){var d=document.forms[0],b=wpImage,a=d.width.value,c=d.height.value;if(!a&&c){a=d.width.value=b.width=Math.round(b.preloadImg.width/(b.preloadImg.height/c))}else{if(a&&!c){c=d.height.value=b.height=Math.round(b.preloadImg.height/(b.preloadImg.width/a))}}if(!a){d.width.value=b.width=b.preloadImg.width}if(!c){d.height.value=b.height=b.preloadImg.height}b.showSizeSet();b.demoSetSize();if(d.img_style.value){b.demoSetStyle()}},getImageData:function(){var a=wpImage,b=document.forms[0];a.preloadImg=new Image();a.preloadImg.onload=a.updateImageData;a.preloadImg.onerror=a.resetImageData;a.preloadImg.src=tinyMCEPopup.editor.documentBaseURI.toAbsolute(b.img_src.value)}};window.onload=function(){wpImage.init()};wpImage.preInit(); \ No newline at end of file +var tinymce=null,tinyMCEPopup,tinyMCE,wpImage;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getParam:function(b,a){return this.editor.getParam(b,a)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}}};tinyMCEPopup.init();wpImage={preInit:function(){var a=tinyMCEPopup.editor,e=tinyMCEPopup.getWin(),d=e.document.styleSheets,b,c;for(c=0;c<d.length;c++){b=d.item(c).href;if(b&&b.indexOf("colors")!=-1){document.getElementsByTagName("head")[0].appendChild(a.dom.create("link",{rel:"stylesheet",href:b}));break}}},I:function(a){return document.getElementById(a)},current:"",link:"",link_rel:"",target_value:"",current_size_sel:"s100",width:"",height:"",align:"",img_alt:"",setTabs:function(b){var a=this;if("current"==b.className){return false}a.I("div_advanced").style.display=("tab_advanced"==b.id)?"block":"none";a.I("div_basic").style.display=("tab_basic"==b.id)?"block":"none";a.I("tab_basic").className=a.I("tab_advanced").className="";b.className="current";return false},img_seturl:function(b){var c=this,a=c.I("link_rel").value;if("current"==b){c.I("link_href").value=c.current;c.I("link_rel").value=c.link_rel}else{c.I("link_href").value=c.link;if(a){a=a.replace(/attachment|wp-att-[0-9]+/gi,"");c.I("link_rel").value=tinymce.trim(a)}}},imgAlignCls:function(b){var c=this,a=c.I("img_classes").value;c.I("img_demo").className=c.align=b;a=a.replace(/align[^ "']+/gi,"");a+=(" "+b);a=a.replace(/\s+/g," ").replace(/^\s/,"");if("aligncenter"==b){c.I("hspace").value="";c.updateStyle("hspace")}c.I("img_classes").value=a},showSize:function(e){var c=this,f=c.I("img_demo"),a=c.width,d=c.height,g=e.id||"s100",b;b=parseInt(g.substring(1))/200;f.width=Math.round(a*b);f.height=Math.round(d*b);c.showSizeClear();e.style.borderColor="#A3A3A3";e.style.backgroundColor="#E5E5E5"},showSizeSet:function(){var b=this,d,c,a;if((b.width*1.3)>parseInt(b.preloadImg.width)){d=b.I("s130"),c=b.I("s120"),a=b.I("s110");d.onclick=c.onclick=a.onclick=null;d.onmouseover=c.onmouseover=a.onmouseover=null;d.style.color=c.style.color=a.style.color="#aaa"}},showSizeRem:function(){var a=this,c=a.I("img_demo"),b=document.forms[0];c.width=Math.round(b.width.value*0.5);c.height=Math.round(b.height.value*0.5);a.showSizeClear();a.I(a.current_size_sel).style.borderColor="#A3A3A3";a.I(a.current_size_sel).style.backgroundColor="#E5E5E5";return false},showSizeClear:function(){var b=this.I("img_size").getElementsByTagName("div"),a;for(a=0;a<b.length;a++){b[a].style.borderColor="#f1f1f1";b[a].style.backgroundColor="#f1f1f1"}},imgEditSize:function(g){var d=this,i=document.forms[0],a,c,b,e,j;if(!d.preloadImg||!d.preloadImg.width||!d.preloadImg.height){return}a=parseInt(d.preloadImg.width),c=parseInt(d.preloadImg.height),b=d.width||a,e=d.height||c,j=g.id||"s100";size=parseInt(j.substring(1))/100;b=Math.round(b*size);e=Math.round(e*size);i.width.value=Math.min(a,b);i.height.value=Math.min(c,e);d.current_size_sel=j;d.demoSetSize()},demoSetSize:function(a){var c=this.I("img_demo"),b=document.forms[0];c.width=b.width.value?Math.round(b.width.value*0.5):"";c.height=b.height.value?Math.round(b.height.value*0.5):""},demoSetStyle:function(){var b=document.forms[0],a=this.I("img_demo"),c=tinyMCEPopup.editor.dom;if(a){c.setAttrib(a,"style",b.img_style.value);c.setStyle(a,"width","");c.setStyle(a,"height","")}},origSize:function(){var a=this,c=document.forms[0],b=a.I("s100");c.width.value=a.width=a.preloadImg.width;c.height.value=a.height=a.preloadImg.height;a.showSizeSet();a.demoSetSize();a.showSize(b)},init:function(){var a=tinyMCEPopup.editor,b;b=document.body.innerHTML;document.body.innerHTML=a.translate(b);window.setTimeout(function(){wpImage.setup()},500)},setup:function(){var q=this,l,b,m,e,j=document.forms[0],i=tinyMCEPopup.editor,k=q.I("img_demo"),h=tinyMCEPopup.dom,a,g,p="",o,n;document.dir=tinyMCEPopup.editor.getParam("directionality","");if(tinyMCEPopup.editor.getParam("wpeditimage_disable_captions",false)){q.I("cap_field").style.display="none"}tinyMCEPopup.restoreSelection();b=i.selection.getNode();if(b.nodeName!="IMG"){return}j.img_src.value=k.src=m=i.dom.getAttrib(b,"src");i.dom.setStyle(b,"float","");q.getImageData();l=i.dom.getAttrib(b,"class");if(a=h.getParent(b,"dl")){o=i.dom.getAttrib(a,"class");o=o.match(/align[^ "']+/i);if(o&&!h.hasClass(b,o)){l+=" "+o;tinymce.trim(l)}g=i.dom.select("dd.wp-caption-dd",a);if(g&&g[0]){p=i.serializer.serialize(g[0]).replace(/^<p>/,"").replace(/<\/p>$/,"")}}j.img_cap_text.value=p;j.img_title.value=i.dom.getAttrib(b,"title");j.img_alt.value=i.dom.getAttrib(b,"alt");j.border.value=i.dom.getAttrib(b,"border");j.vspace.value=i.dom.getAttrib(b,"vspace");j.hspace.value=i.dom.getAttrib(b,"hspace");j.align.value=i.dom.getAttrib(b,"align");j.width.value=q.width=i.dom.getAttrib(b,"width");j.height.value=q.height=i.dom.getAttrib(b,"height");j.img_classes.value=l;j.img_style.value=i.dom.getAttrib(b,"style");if(h.getAttrib(b,"hspace")){q.updateStyle("hspace")}if(h.getAttrib(b,"border")){q.updateStyle("border")}if(h.getAttrib(b,"vspace")){q.updateStyle("vspace")}if(n=i.dom.getParent(b,"A")){j.link_href.value=q.current=i.dom.getAttrib(n,"href");j.link_title.value=i.dom.getAttrib(n,"title");j.link_rel.value=q.link_rel=i.dom.getAttrib(n,"rel");j.link_style.value=i.dom.getAttrib(n,"style");q.target_value=i.dom.getAttrib(n,"target");j.link_classes.value=i.dom.getAttrib(n,"class")}j.link_target.checked=(q.target_value&&q.target_value=="_blank")?"checked":"";e=m.substring(m.lastIndexOf("/"));e=e.replace(/-[0-9]{2,4}x[0-9]{2,4}/,"");q.link=m.substring(0,m.lastIndexOf("/"))+e;if(l.indexOf("alignleft")!=-1){q.I("alignleft").checked="checked";k.className=q.align="alignleft"}else{if(l.indexOf("aligncenter")!=-1){q.I("aligncenter").checked="checked";k.className=q.align="aligncenter"}else{if(l.indexOf("alignright")!=-1){q.I("alignright").checked="checked";k.className=q.align="alignright"}else{if(l.indexOf("alignnone")!=-1){q.I("alignnone").checked="checked";k.className=q.align="alignnone"}}}}if(q.width&&q.preloadImg.width){q.showSizeSet()}document.body.style.display=""},remove:function(){var a=tinyMCEPopup.editor,c,b;tinyMCEPopup.restoreSelection();b=a.selection.getNode();if(b.nodeName!="IMG"){return}if((c=a.dom.getParent(b,"div"))&&a.dom.hasClass(c,"mceTemp")){a.dom.remove(c)}else{if((c=a.dom.getParent(b,"A"))&&c.childNodes.length==1){a.dom.remove(c)}else{a.dom.remove(b)}}a.execCommand("mceRepaint");tinyMCEPopup.close();return},update:function(){var m=this,v=document.forms[0],g=tinyMCEPopup.editor,e,y,d=null,n,h,p,r,o=null,k=v.img_classes.value,l,q,u="",j,i,s,a,B,x="",c,z,w;tinyMCEPopup.restoreSelection();e=g.selection.getNode();if(e.nodeName!="IMG"){return}if(v.img_src.value===""){m.remove();return}if(v.img_cap_text.value!=""&&v.width.value!=""){o=1;k=k.replace(/align[^ "']+\s?/gi,"")}p=g.dom.getParent(e,"a");h=g.dom.getParent(e,"p");n=g.dom.getParent(e,"dl");r=g.dom.getParent(e,"div");tinyMCEPopup.execCommand("mceBeginUndoLevel");if(v.width.value!=e.width||v.height.value!=e.height){k=k.replace(/size-[^ "']+/,"")}g.dom.setAttribs(e,{src:v.img_src.value,title:v.img_title.value,alt:v.img_alt.value,width:v.width.value,height:v.height.value,style:v.img_style.value,"class":k});if(v.link_href.value){if(p==null){if(!v.link_href.value.match(/https?:\/\//i)){v.link_href.value=tinyMCEPopup.editor.documentBaseURI.toAbsolute(v.link_href.value)}g.getDoc().execCommand("unlink",false,null);tinyMCEPopup.execCommand("mceInsertLink",false,"#mce_temp_url#",{skip_undo:1});tinymce.each(g.dom.select("a"),function(b){if(g.dom.getAttrib(b,"href")=="#mce_temp_url#"){g.dom.setAttribs(b,{href:v.link_href.value,title:v.link_title.value,rel:v.link_rel.value,target:(v.link_target.checked==true)?"_blank":"","class":v.link_classes.value,style:v.link_style.value})}})}else{g.dom.setAttribs(p,{href:v.link_href.value,title:v.link_title.value,rel:v.link_rel.value,target:(v.link_target.checked==true)?"_blank":"","class":v.link_classes.value,style:v.link_style.value})}}if(o){a=10+parseInt(v.width.value);B=(m.align=="aligncenter")?"mceTemp mceIEcenter":"mceTemp";w=v.img_cap_text.value;w=w.replace(/\r\n|\r/g,"\n").replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g,function(b){return b.replace(/[\r\n\t]+/," ")});w=w.replace(/\s*\n\s*/g,"<br />");if(n){g.dom.setAttribs(n,{"class":"wp-caption "+m.align,style:"width: "+a+"px;"});if(r){g.dom.setAttrib(r,"class",B)}if((i=g.dom.getParent(e,"dt"))&&(s=i.nextSibling)&&g.dom.hasClass(s,"wp-caption-dd")){g.dom.setHTML(s,w)}}else{if((q=v.img_classes.value.match(/wp-image-([0-9]{1,6})/))&&q[1]){u="attachment_"+q[1]}if(v.link_href.value&&(x=g.dom.getParent(e,"a"))){if(x.childNodes.length==1){l=g.dom.getOuterHTML(x)}else{l=g.dom.getOuterHTML(x);l=l.match(/<a [^>]+>/i);l=l+g.dom.getOuterHTML(e)+"</a>"}}else{l=g.dom.getOuterHTML(e)}l='<dl id="'+u+'" class="wp-caption '+m.align+'" style="width: '+a+'px"><dt class="wp-caption-dt">'+l+'</dt><dd class="wp-caption-dd">'+w+"</dd></dl>";j=g.dom.create("div",{"class":B},l);if(h){h.parentNode.insertBefore(j,h);if(h.childNodes.length==1){g.dom.remove(h)}else{if(x&&x.childNodes.length==1){g.dom.remove(x)}else{g.dom.remove(e)}}}else{if(c=g.dom.getParent(e,"TD,TH,LI")){c.appendChild(j);if(x&&x.childNodes.length==1){g.dom.remove(x)}else{g.dom.remove(e)}}}}}else{if(n&&r){if(v.link_href.value&&(z=g.dom.getParent(e,"a"))){l=g.dom.getOuterHTML(z)}else{l=g.dom.getOuterHTML(e)}h=g.dom.create("p",{},l);r.parentNode.insertBefore(h,r);g.dom.remove(r)}}if(v.img_classes.value.indexOf("aligncenter")!=-1){if(h&&(!h.style||h.style.textAlign!="center")){g.dom.setStyle(h,"textAlign","center")}}else{if(h&&h.style&&h.style.textAlign=="center"){g.dom.setStyle(h,"textAlign","")}}if(!v.link_href.value&&p){y=g.selection.getBookmark();g.dom.remove(p,1);g.selection.moveToBookmark(y)}tinyMCEPopup.execCommand("mceEndUndoLevel");g.execCommand("mceRepaint");tinyMCEPopup.close()},updateStyle:function(a){var e=tinyMCEPopup.dom,c,d=document.forms[0],b=e.create("img",{style:d.img_style.value});if(tinyMCEPopup.editor.settings.inline_styles){if(a=="align"){e.setStyle(b,"float","");e.setStyle(b,"vertical-align","");c=d.align.value;if(c){if(c=="left"||c=="right"){e.setStyle(b,"float",c)}else{b.style.verticalAlign=c}}}if(a=="border"){e.setStyle(b,"border","");c=d.border.value;if(c||c=="0"){if(c=="0"){b.style.border="0"}else{b.style.border=c+"px solid black"}}}if(a=="hspace"){e.setStyle(b,"marginLeft","");e.setStyle(b,"marginRight","");c=d.hspace.value;if(c){b.style.marginLeft=c+"px";b.style.marginRight=c+"px"}}if(a=="vspace"){e.setStyle(b,"marginTop","");e.setStyle(b,"marginBottom","");c=d.vspace.value;if(c){b.style.marginTop=c+"px";b.style.marginBottom=c+"px"}}d.img_style.value=e.serializeStyle(e.parseStyle(b.style.cssText));this.demoSetStyle()}},checkVal:function(a){if(a.value==""){if(a.id=="img_src"){a.value=this.I("img_demo").src||this.preloadImg.src}}},resetImageData:function(){var a=document.forms[0];a.width.value=a.height.value=""},updateImageData:function(){var d=document.forms[0],b=wpImage,a=d.width.value,c=d.height.value;if(!a&&c){a=d.width.value=b.width=Math.round(b.preloadImg.width/(b.preloadImg.height/c))}else{if(a&&!c){c=d.height.value=b.height=Math.round(b.preloadImg.height/(b.preloadImg.width/a))}}if(!a){d.width.value=b.width=b.preloadImg.width}if(!c){d.height.value=b.height=b.preloadImg.height}b.showSizeSet();b.demoSetSize();if(d.img_style.value){b.demoSetStyle()}},getImageData:function(){var a=wpImage,b=document.forms[0];a.preloadImg=new Image();a.preloadImg.onload=a.updateImageData;a.preloadImg.onerror=a.resetImageData;a.preloadImg.src=tinyMCEPopup.editor.documentBaseURI.toAbsolute(b.img_src.value)}};window.onload=function(){wpImage.init()};wpImage.preInit(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpfullscreen/css/wp-fullscreen.css b/wp-includes/js/tinymce/plugins/wpfullscreen/css/wp-fullscreen.css index 267f46749..1bd68c373 100644 --- a/wp-includes/js/tinymce/plugins/wpfullscreen/css/wp-fullscreen.css +++ b/wp-includes/js/tinymce/plugins/wpfullscreen/css/wp-fullscreen.css @@ -1,11 +1,13 @@ /* Distraction Free Writing mode TinyMCE Styles */ - -html, body { + +html, +body { background: transparent; width: auto !important; max-width: none !important; - margin: 0; - padding: 0; + margin: 0 !important; + padding: 0 !important; + min-height: 0 !important; } diff --git a/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin.js b/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin.js index 6c54415f8..efc6f3dce 100644 --- a/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin.js +++ b/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin.js @@ -1 +1 @@ -(function(){tinymce.create("tinymce.plugins.wpFullscreenPlugin",{init:function(b,d){var e=this,h=0,f={},g=tinymce.DOM,a=false;b.addCommand("wpFullScreenClose",function(){if(b.getParam("wp_fullscreen_is_enabled")){g.win.setTimeout(function(){tinyMCE.remove(b);g.remove("wp_mce_fullscreen_parent");tinyMCE.settings=tinyMCE.oldSettings},10)}});b.addCommand("wpFullScreenSave",function(){var i=tinyMCE.get("wp_mce_fullscreen"),j;i.focus();j=tinyMCE.get(i.getParam("wp_fullscreen_editor_id"));j.setContent(i.getContent({format:"raw"}),{format:"raw"})});b.addCommand("wpFullScreenInit",function(){var k,i,j;b=tinymce.get("content");k=b.getDoc();i=k.body;tinyMCE.oldSettings=tinyMCE.settings;tinymce.each(b.settings,function(l,m){f[m]=l});f.id="wp_mce_fullscreen";f.wp_fullscreen_is_enabled=true;f.wp_fullscreen_editor_id=b.id;f.theme_advanced_resizing=false;f.theme_advanced_statusbar_location="none";f.content_css=f.content_css?f.content_css+","+f.wp_fullscreen_content_css:f.wp_fullscreen_content_css;f.height=tinymce.isIE?i.scrollHeight:i.offsetHeight;tinymce.each(b.getParam("wp_fullscreen_settings"),function(m,l){f[l]=m});j=new tinymce.Editor("wp_mce_fullscreen",f);j.onInit.add(function(l){var n=tinymce.DOM,m=n.select("a.mceButton",n.get("wp-fullscreen-buttons"));if(!b.isHidden()){l.setContent(b.getContent())}else{l.setContent(switchEditors.wpautop(l.getElement().value))}setTimeout(function(){l.onNodeChange.add(function(p,o,q){tinymce.each(m,function(t){var s,r;if(s=n.get("wp_mce_fullscreen_"+t.id.substr(6))){r=s.className;if(r){t.className=r}}})})},1000);l.dom.addClass(l.getBody(),"wp-fullscreen-editor");l.focus()});j.render();if("undefined"!=fullscreen){j.dom.bind(j.dom.doc,"mousemove",function(l){fullscreen.bounder("showToolbar","hideToolbar",2000,l)})}});if("undefined"!=fullscreen){b.addButton("wp_fullscreen",{title:"fullscreen.desc",onclick:function(){fullscreen.on()}})}if(b.getParam("fullscreen_is_enabled")||!b.getParam("wp_fullscreen_is_enabled")){return}function c(){if(a){return}var k=b.getDoc(),j=tinymce.DOM,l,i;if(tinymce.isIE){i=k.body.scrollHeight}else{i=k.documentElement.offsetHeight}l=(i>300)?i:300;if(h!=l){h=l;a=true;setTimeout(function(){a=false},100);j.setStyle(j.get(b.id+"_ifr"),"height",l+"px")}}b.onInit.add(function(j,i){j.onChange.add(c);j.onSetContent.add(c);j.onPaste.add(c);j.onKeyUp.add(c);j.onPostRender.add(c);j.getBody().style.overflowY="hidden"});if(b.getParam("autoresize_on_init",true)){b.onLoadContent.add(function(j,i){setTimeout(function(){c()},1200)})}b.addCommand("wpAutoResize",c)},getInfo:function(){return{longname:"WP Fullscreen",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpfullscreen",tinymce.plugins.wpFullscreenPlugin)})(); \ No newline at end of file +(function(){tinymce.create("tinymce.plugins.wpFullscreenPlugin",{init:function(a,c){var d=this,g=0,e={},f=tinymce.DOM;a.addCommand("wpFullScreenClose",function(){if(a.getParam("wp_fullscreen_is_enabled")){f.win.setTimeout(function(){tinyMCE.remove(a);f.remove("wp_mce_fullscreen_parent");tinyMCE.settings=tinyMCE.oldSettings},10)}});a.addCommand("wpFullScreenSave",function(){var h=tinyMCE.get("wp_mce_fullscreen"),i;h.focus();i=tinyMCE.get(h.getParam("wp_fullscreen_editor_id"));i.setContent(h.getContent({format:"raw"}),{format:"raw"})});a.addCommand("wpFullScreenInit",function(){var j,h,i;a=tinyMCE.activeEditor;j=a.getDoc();h=j.body;tinyMCE.oldSettings=tinyMCE.settings;tinymce.each(a.settings,function(k,l){e[l]=k});e.id="wp_mce_fullscreen";e.wp_fullscreen_is_enabled=true;e.wp_fullscreen_editor_id=a.id;e.theme_advanced_resizing=false;e.theme_advanced_statusbar_location="none";e.content_css=e.content_css?e.content_css+","+e.wp_fullscreen_content_css:e.wp_fullscreen_content_css;e.height=tinymce.isIE?h.scrollHeight:h.offsetHeight;tinymce.each(a.getParam("wp_fullscreen_settings"),function(m,l){e[l]=m});i=new tinymce.Editor("wp_mce_fullscreen",e);i.onInit.add(function(k){var m=tinymce.DOM,l=m.select("a.mceButton",m.get("wp-fullscreen-buttons"));if(!a.isHidden()){k.setContent(a.getContent())}else{k.setContent(switchEditors.wpautop(k.getElement().value))}setTimeout(function(){k.onNodeChange.add(function(o,n,p){tinymce.each(l,function(s){var r,q;if(r=m.get("wp_mce_fullscreen_"+s.id.substr(6))){q=r.className;if(q){s.className=q}}})})},1000);k.dom.addClass(k.getBody(),"wp-fullscreen-editor");k.focus()});i.render();if("undefined"!=fullscreen){i.dom.bind(i.dom.doc,"mousemove",function(k){fullscreen.bounder("showToolbar","hideToolbar",2000,k)})}});if("undefined"!=fullscreen){a.addButton("wp_fullscreen",{title:"fullscreen.desc",onclick:function(){fullscreen.on()}})}if(a.getParam("fullscreen_is_enabled")||!a.getParam("wp_fullscreen_is_enabled")){return}function b(){var j=a.getDoc(),i=tinymce.DOM,k,h;if(tinymce.isWebKit){h=j.body.offsetHeight}else{h=j.body.scrollHeight}k=(h>300)?h:300;if(g!=k){i.setStyle(i.get(a.id+"_ifr"),"height",k+"px");g=k;a.getWin().scrollTo(0,0)}}a.onInit.add(function(i,h){i.onChange.add(b);i.onSetContent.add(b);i.onPaste.add(b);i.onKeyUp.add(b);i.onPostRender.add(b);i.getBody().style.overflowY="hidden"});if(a.getParam("autoresize_on_init",true)){a.onLoadContent.add(function(i,h){setTimeout(function(){b()},1200)})}a.addCommand("wpAutoResize",b)},getInfo:function(){return{longname:"WP Fullscreen",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpfullscreen",tinymce.plugins.wpFullscreenPlugin)})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin_src.js new file mode 100644 index 000000000..9d33795f4 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin_src.js @@ -0,0 +1,173 @@ +/** + * WP Fullscreen TinyMCE plugin + * + * Contains code from Moxiecode Systems AB released under LGPL License http://tinymce.moxiecode.com/license + */ + +(function() { + tinymce.create('tinymce.plugins.wpFullscreenPlugin', { + + init : function(ed, url) { + var t = this, oldHeight = 0, s = {}, DOM = tinymce.DOM; + + // Register commands + ed.addCommand('wpFullScreenClose', function() { + // this removes the editor, content has to be saved first with tinyMCE.execCommand('wpFullScreenSave'); + if ( ed.getParam('wp_fullscreen_is_enabled') ) { + DOM.win.setTimeout(function() { + tinyMCE.remove(ed); + DOM.remove('wp_mce_fullscreen_parent'); + tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings + }, 10); + } + }); + + ed.addCommand('wpFullScreenSave', function() { + var ed = tinyMCE.get('wp_mce_fullscreen'), edd; + + ed.focus(); + edd = tinyMCE.get( ed.getParam('wp_fullscreen_editor_id') ); + + edd.setContent( ed.getContent({format : 'raw'}), {format : 'raw'} ); + }); + + ed.addCommand('wpFullScreenInit', function() { + var d, b, fsed; + + ed = tinyMCE.activeEditor; + d = ed.getDoc(); + b = d.body; + + tinyMCE.oldSettings = tinyMCE.settings; // Store old settings + + tinymce.each(ed.settings, function(v, n) { + s[n] = v; + }); + + s.id = 'wp_mce_fullscreen'; + s.wp_fullscreen_is_enabled = true; + s.wp_fullscreen_editor_id = ed.id; + s.theme_advanced_resizing = false; + s.theme_advanced_statusbar_location = 'none'; + s.content_css = s.content_css ? s.content_css + ',' + s.wp_fullscreen_content_css : s.wp_fullscreen_content_css; + s.height = tinymce.isIE ? b.scrollHeight : b.offsetHeight; + + tinymce.each(ed.getParam('wp_fullscreen_settings'), function(v, k) { + s[k] = v; + }); + + fsed = new tinymce.Editor('wp_mce_fullscreen', s); + fsed.onInit.add(function(edd) { + var DOM = tinymce.DOM, buttons = DOM.select('a.mceButton', DOM.get('wp-fullscreen-buttons')); + + if ( !ed.isHidden() ) + edd.setContent( ed.getContent() ); + else + edd.setContent( switchEditors.wpautop( edd.getElement().value ) ); + + setTimeout(function(){ // add last + edd.onNodeChange.add(function(ed, cm, e){ + tinymce.each(buttons, function(c) { + var btn, cls; + + if ( btn = DOM.get( 'wp_mce_fullscreen_' + c.id.substr(6) ) ) { + cls = btn.className; + + if ( cls ) + c.className = cls; + } + }); + }); + }, 1000); + + edd.dom.addClass(edd.getBody(), 'wp-fullscreen-editor'); + edd.focus(); + }); + + fsed.render(); + + if ( 'undefined' != fullscreen ) { + fsed.dom.bind( fsed.dom.doc, 'mousemove', function(e){ + fullscreen.bounder( 'showToolbar', 'hideToolbar', 2000, e ); + }); + } + }); + + // Register buttons + if ( 'undefined' != fullscreen ) { + ed.addButton('wp_fullscreen', { + title : 'fullscreen.desc', + onclick : function(){ fullscreen.on(); } + }); + } + + // END fullscreen +//---------------------------------------------------------------- + // START autoresize + + if ( ed.getParam('fullscreen_is_enabled') || !ed.getParam('wp_fullscreen_is_enabled') ) + return; + + /** + * This method gets executed each time the editor needs to resize. + */ + function resize() { + var d = ed.getDoc(), DOM = tinymce.DOM, resizeHeight, myHeight; + + // Get height differently depending on the browser used + if ( tinymce.isWebKit ) + myHeight = d.body.offsetHeight; + else + myHeight = d.body.scrollHeight; + + // Don't make it smaller than 300px + resizeHeight = (myHeight > 300) ? myHeight : 300; + + // Resize content element + if ( oldHeight != resizeHeight ) { + DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); + oldHeight = resizeHeight; + ed.getWin().scrollTo(0,0); + } + }; + + // Add appropriate listeners for resizing content area + ed.onInit.add(function(ed, l) { + ed.onChange.add(resize); + ed.onSetContent.add(resize); + ed.onPaste.add(resize); + ed.onKeyUp.add(resize); + ed.onPostRender.add(resize); + + ed.getBody().style.overflowY = "hidden"; + }); + + if (ed.getParam('autoresize_on_init', true)) { + ed.onLoadContent.add(function(ed, l) { + // 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(); + }, 1200); + }); + } + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('wpAutoResize', resize); + }, + + getInfo : function() { + return { + longname : 'WP Fullscreen', + author : 'WordPress', + authorurl : 'http://wordpress.org', + infourl : '', + version : '1.0' + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('wpfullscreen', tinymce.plugins.wpFullscreenPlugin); +})(); diff --git a/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin.js b/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin.js index 0c2824ac7..d48e5a949 100644 --- a/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin.js +++ b/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin.js @@ -1 +1 @@ -(function(){tinymce.create("tinymce.plugins.wpGallery",{init:function(a,b){var c=this;c.url=b;c._createButtons();a.addCommand("WP_Gallery",function(){var h=a.selection.getNode(),f,e=tinymce.DOM.getViewPort(),g=e.h-80,d=(640<e.w)?640:e.w;if(h.nodeName!="IMG"){return}if(a.dom.getAttrib(h,"class").indexOf("wpGallery")==-1){return}f=tinymce.DOM.get("post_ID").value;tb_show("",tinymce.documentBaseURL+"/media-upload.php?post_id="+f+"&tab=gallery&TB_iframe=true&width="+d+"&height="+g);tinymce.DOM.setStyle(["TB_overlay","TB_window","TB_load"],"z-index","999999")});a.onMouseDown.add(function(d,f){if(f.target.nodeName=="IMG"&&d.dom.hasClass(f.target,"wpGallery")){d.plugins.wordpress._showButtons(f.target,"wp_gallerybtns")}});a.onBeforeSetContent.add(function(d,e){e.content=c._do_gallery(e.content)});a.onPostProcess.add(function(d,e){if(e.get){e.content=c._get_gallery(e.content)}})},_do_gallery:function(a){return a.replace(/\[gallery([^\]]*)\]/g,function(d,c){return'<img src="'+tinymce.baseURL+'/plugins/wpgallery/img/t.gif" class="wpGallery mceItem" title="gallery'+tinymce.DOM.encode(c)+'" />'})},_get_gallery:function(b){function a(c,d){d=new RegExp(d+'="([^"]+)"',"g").exec(c);return d?tinymce.DOM.decode(d[1]):""}return b.replace(/(?:<p[^>]*>)*(<img[^>]+>)(?:<\/p>)*/g,function(e,d){var c=a(d,"class");if(c.indexOf("wpGallery")!=-1){return"<p>["+tinymce.trim(a(d,"title"))+"]</p>"}return e})},_createButtons:function(){var b=this,a=tinyMCE.activeEditor,d=tinymce.DOM,e,c;d.remove("wp_gallerybtns");d.add(document.body,"div",{id:"wp_gallerybtns",style:"display:none;"});e=d.add("wp_gallerybtns","img",{src:b.url+"/img/edit.png",id:"wp_editgallery",width:"24",height:"24",title:a.getLang("wordpress.editgallery")});tinymce.dom.Event.add(e,"mousedown",function(g){var f=tinyMCE.activeEditor;f.windowManager.bookmark=f.selection.getBookmark("simple");f.execCommand("WP_Gallery")});c=d.add("wp_gallerybtns","img",{src:b.url+"/img/delete.png",id:"wp_delgallery",width:"24",height:"24",title:a.getLang("wordpress.delgallery")});tinymce.dom.Event.add(c,"mousedown",function(h){var f=tinyMCE.activeEditor,g=f.selection.getNode();if(g.nodeName=="IMG"&&f.dom.hasClass(g,"wpGallery")){f.dom.remove(g);f.execCommand("mceRepaint");return false}})},getInfo:function(){return{longname:"Gallery Settings",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpgallery",tinymce.plugins.wpGallery)})(); \ No newline at end of file +(function(){tinymce.create("tinymce.plugins.wpGallery",{init:function(a,b){var c=this;c.url=b;c._createButtons();a.addCommand("WP_Gallery",function(){var h=a.selection.getNode(),f,e=tinymce.DOM.getViewPort(),g=e.h-80,d=(640<e.w)?640:e.w;if(h.nodeName!="IMG"){return}if(a.dom.getAttrib(h,"class").indexOf("wpGallery")==-1){return}f=tinymce.DOM.get("post_ID").value;tb_show("",tinymce.documentBaseURL+"media-upload.php?post_id="+f+"&tab=gallery&TB_iframe=true&width="+d+"&height="+g);tinymce.DOM.setStyle(["TB_overlay","TB_window","TB_load"],"z-index","999999")});a.onMouseDown.add(function(d,f){if(f.target.nodeName=="IMG"&&d.dom.hasClass(f.target,"wpGallery")){d.plugins.wordpress._showButtons(f.target,"wp_gallerybtns")}});a.onBeforeSetContent.add(function(d,e){e.content=c._do_gallery(e.content)});a.onPostProcess.add(function(d,e){if(e.get){e.content=c._get_gallery(e.content)}})},_do_gallery:function(a){return a.replace(/\[gallery([^\]]*)\]/g,function(d,c){return'<img src="'+tinymce.baseURL+'/plugins/wpgallery/img/t.gif" class="wpGallery mceItem" title="gallery'+tinymce.DOM.encode(c)+'" />'})},_get_gallery:function(b){function a(c,d){d=new RegExp(d+'="([^"]+)"',"g").exec(c);return d?tinymce.DOM.decode(d[1]):""}return b.replace(/(?:<p[^>]*>)*(<img[^>]+>)(?:<\/p>)*/g,function(e,d){var c=a(d,"class");if(c.indexOf("wpGallery")!=-1){return"<p>["+tinymce.trim(a(d,"title"))+"]</p>"}return e})},_createButtons:function(){var b=this,a=tinyMCE.activeEditor,d=tinymce.DOM,e,c;d.remove("wp_gallerybtns");d.add(document.body,"div",{id:"wp_gallerybtns",style:"display:none;"});e=d.add("wp_gallerybtns","img",{src:b.url+"/img/edit.png",id:"wp_editgallery",width:"24",height:"24",title:a.getLang("wordpress.editgallery")});tinymce.dom.Event.add(e,"mousedown",function(g){var f=tinyMCE.activeEditor;f.windowManager.bookmark=f.selection.getBookmark("simple");f.execCommand("WP_Gallery")});c=d.add("wp_gallerybtns","img",{src:b.url+"/img/delete.png",id:"wp_delgallery",width:"24",height:"24",title:a.getLang("wordpress.delgallery")});tinymce.dom.Event.add(c,"mousedown",function(h){var f=tinyMCE.activeEditor,g=f.selection.getNode();if(g.nodeName=="IMG"&&f.dom.hasClass(g,"wpGallery")){f.dom.remove(g);f.execCommand("mceRepaint");return false}})},getInfo:function(){return{longname:"Gallery Settings",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpgallery",tinymce.plugins.wpGallery)})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js new file mode 100644 index 000000000..9b2d02809 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js @@ -0,0 +1,119 @@ + +(function() { + tinymce.create('tinymce.plugins.wpGallery', { + + init : function(ed, url) { + var t = this; + + t.url = url; + t._createButtons(); + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('...'); + ed.addCommand('WP_Gallery', function() { + var el = ed.selection.getNode(), post_id, vp = tinymce.DOM.getViewPort(), + H = vp.h - 80, W = ( 640 < vp.w ) ? 640 : vp.w; + + if ( el.nodeName != 'IMG' ) return; + if ( ed.dom.getAttrib(el, 'class').indexOf('wpGallery') == -1 ) return; + + post_id = tinymce.DOM.get('post_ID').value; + tb_show('', tinymce.documentBaseURL + 'media-upload.php?post_id='+post_id+'&tab=gallery&TB_iframe=true&width='+W+'&height='+H); + + tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' ); + }); + + ed.onMouseDown.add(function(ed, e) { + if ( e.target.nodeName == 'IMG' && ed.dom.hasClass(e.target, 'wpGallery') ) + ed.plugins.wordpress._showButtons(e.target, 'wp_gallerybtns'); + }); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = t._do_gallery(o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.get) + o.content = t._get_gallery(o.content); + }); + }, + + _do_gallery : function(co) { + return co.replace(/\[gallery([^\]]*)\]/g, function(a,b){ + return '<img src="'+tinymce.baseURL+'/plugins/wpgallery/img/t.gif" class="wpGallery mceItem" title="gallery'+tinymce.DOM.encode(b)+'" />'; + }); + }, + + _get_gallery : function(co) { + + function getAttr(s, n) { + n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s); + return n ? tinymce.DOM.decode(n[1]) : ''; + }; + + return co.replace(/(?:<p[^>]*>)*(<img[^>]+>)(?:<\/p>)*/g, function(a,im) { + var cls = getAttr(im, 'class'); + + if ( cls.indexOf('wpGallery') != -1 ) + return '<p>['+tinymce.trim(getAttr(im, 'title'))+']</p>'; + + return a; + }); + }, + + _createButtons : function() { + var t = this, ed = tinyMCE.activeEditor, DOM = tinymce.DOM, editButton, dellButton; + + DOM.remove('wp_gallerybtns'); + + DOM.add(document.body, 'div', { + id : 'wp_gallerybtns', + style : 'display:none;' + }); + + editButton = DOM.add('wp_gallerybtns', 'img', { + src : t.url+'/img/edit.png', + id : 'wp_editgallery', + width : '24', + height : '24', + title : ed.getLang('wordpress.editgallery') + }); + + tinymce.dom.Event.add(editButton, 'mousedown', function(e) { + var ed = tinyMCE.activeEditor; + ed.windowManager.bookmark = ed.selection.getBookmark('simple'); + ed.execCommand("WP_Gallery"); + }); + + dellButton = DOM.add('wp_gallerybtns', 'img', { + src : t.url+'/img/delete.png', + id : 'wp_delgallery', + width : '24', + height : '24', + title : ed.getLang('wordpress.delgallery') + }); + + tinymce.dom.Event.add(dellButton, 'mousedown', function(e) { + var ed = tinyMCE.activeEditor, el = ed.selection.getNode(); + + if ( el.nodeName == 'IMG' && ed.dom.hasClass(el, 'wpGallery') ) { + ed.dom.remove(el); + + ed.execCommand('mceRepaint'); + return false; + } + }); + }, + + getInfo : function() { + return { + longname : 'Gallery Settings', + author : 'WordPress', + authorurl : 'http://wordpress.org', + infourl : '', + version : "1.0" + }; + } + }); + + tinymce.PluginManager.add('wpgallery', tinymce.plugins.wpGallery); +})(); diff --git a/wp-includes/js/tinymce/plugins/wplink/editor_plugin_src.js b/wp-includes/js/tinymce/plugins/wplink/editor_plugin_src.js new file mode 100644 index 000000000..ff1c4ebc2 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wplink/editor_plugin_src.js @@ -0,0 +1,60 @@ +(function() { + tinymce.create('tinymce.plugins.wpLink', { + /** + * 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 disabled = true; + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); + ed.addCommand('WP_Link', function() { + if ( disabled ) + return; + ed.windowManager.open({ + id : 'wp-link', + width : 480, + height : "auto", + wpDialog : true, + title : ed.getLang('advlink.link_desc') + }, { + plugin_url : url // Plugin absolute URL + }); + }); + + // Register example button + ed.addButton('link', { + title : ed.getLang('advanced.link_desc'), + cmd : 'WP_Link' + }); + + ed.addShortcut('alt+shift+a', ed.getLang('advanced.link_desc'), 'WP_Link'); + + ed.onNodeChange.add(function(ed, cm, n, co) { + disabled = co && n.nodeName != 'A'; + }); + }, + /** + * 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 : 'WordPress Link Dialog', + author : 'WordPress', + authorurl : 'http://wordpress.org', + infourl : '', + version : "1.0" + }; + } + }); + + // Register plugin + tinymce.PluginManager.add('wplink', tinymce.plugins.wpLink); +})(); \ No newline at end of file diff --git a/wp-includes/js/tinymce/themes/advanced/about.htm b/wp-includes/js/tinymce/themes/advanced/about.htm index d4df984b6..d42b15408 100644 --- a/wp-includes/js/tinymce/themes/advanced/about.htm +++ b/wp-includes/js/tinymce/themes/advanced/about.htm @@ -2,9 +2,9 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.about_title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/mctabs.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/about.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/mctabs.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/about.js?ver=349-20120314"></script> </head> <body id="about" style="display: none"> <div class="tabs"> diff --git a/wp-includes/js/tinymce/themes/advanced/anchor.htm b/wp-includes/js/tinymce/themes/advanced/anchor.htm index 9a78c4508..654662101 100644 --- a/wp-includes/js/tinymce/themes/advanced/anchor.htm +++ b/wp-includes/js/tinymce/themes/advanced/anchor.htm @@ -2,8 +2,8 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.anchor_title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/anchor.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/anchor.js?ver=349-20120314"></script> </head> <body style="display: none" role="application" aria-labelledby="app_title"> <form onsubmit="AnchorDialog.update();return false;" action="#"> diff --git a/wp-includes/js/tinymce/themes/advanced/charmap.htm b/wp-includes/js/tinymce/themes/advanced/charmap.htm index b1afd1939..1a0b34bf2 100644 --- a/wp-includes/js/tinymce/themes/advanced/charmap.htm +++ b/wp-includes/js/tinymce/themes/advanced/charmap.htm @@ -2,10 +2,10 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.charmap_title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/charmap.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/charmap.js?ver=349-20120314"></script> </head> -<body id="charmap" style="display:none"> +<body id="charmap" style="display:none" role="application"> <table align="center" border="0" cellspacing="0" cellpadding="2" role="presentation"> <tr> <td colspan="2" class="title" ><label for="charmapView" id="charmap_label">{#advanced_dlg.charmap_title}</label></td> @@ -46,6 +46,10 @@ </table> </td> </tr> + <tr> + <td colspan="2" id="charmap_usage">{#advanced_dlg.charmap_usage}</td> + </tr> + </table> </body> </html> diff --git a/wp-includes/js/tinymce/themes/advanced/color_picker.htm b/wp-includes/js/tinymce/themes/advanced/color_picker.htm index 5a71c0346..08f217202 100644 --- a/wp-includes/js/tinymce/themes/advanced/color_picker.htm +++ b/wp-includes/js/tinymce/themes/advanced/color_picker.htm @@ -2,9 +2,9 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.colorpicker_title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/mctabs.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/color_picker.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/mctabs.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/color_picker.js?ver=349-20120314"></script> </head> <body id="colorpicker" style="display: none" role="application" aria-labelledby="app_label"> <span class="mceVoiceLabel" id="app_label" style="display:none;">{#advanced_dlg.colorpicker_title}</span> diff --git a/wp-includes/js/tinymce/themes/advanced/editor_template.js b/wp-includes/js/tinymce/themes/advanced/editor_template.js index 7f30c18e4..d85b4952e 100644 --- a/wp-includes/js/tinymce/themes/advanced/editor_template.js +++ b/wp-includes/js/tinymce/themes/advanced/editor_template.js @@ -1 +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);j.forcedHighContrastMode=j.settings.detect_highcontrast&&l._isHighContrast();j.settings.skin=j.forcedHighContrastMode?"highcontrast":j.settings.skin;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",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,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}if(j.settings.content_css!==false){j.contentCSS.push(j.baseURI.toAbsolute(k+"/skins/"+j.settings.skin+"/content.css"))}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l);j.onKeyUp.add(l._updateUndoStatus,l);j.onMouseUp.add(l._updateUndoStatus,l);j.dom.bind(j.dom.getRoot(),"dragend",function(){l._updateUndoStatus(j)})}});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")}},_isHighContrast:function(){var i,j=d.add(d.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});i=(d.getStyle(j,"background-color",true)+"").toLowerCase().replace(/ /g,"");d.remove(j);return i!="rgb(171,239,86)"&&i!="#abef56"},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){if(p[0]){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});if(m&&m.value==l){k.select(null)}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});if(o&&(o.value.fontSize==i.fontSize||o.value["class"]==i["class"])){n.select(null)}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",onselect:function(l){j.editor.execCommand("FormatBlock",false,l);return false}});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;if(r.settings){r.settings.aria_label=w.aria_label+r.getLang("advanced.help_shortcut")}m=j=d.create("span",{role:"application","aria-labelledby":r.id+"_voice",id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});d.add(m,"span",{"class":"mceVoiceLabel",style:"display:none;",id:r.id+"_voice"},w.aria_label);if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{role:"presentation",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=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:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;r.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){window.focus();v.toolbarGroup.focus();return b.cancel(n)}else{if(n.keyCode===o){d.get(p.id+"_path_row").focus();return b.cancel(n)}}}});r.addShortcut("alt+0","","mceShortcuts",v);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+"_ifr");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,m,k){var j=this.editor,l=this.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr");i=Math.max(l.theme_advanced_resizing_min_width||100,i);m=Math.max(l.theme_advanced_resizing_min_height||100,m);i=Math.min(l.theme_advanced_resizing_max_width||65535,i);m=Math.min(l.theme_advanced_resizing_max_height||65535,m);d.setStyle(n,"height","");d.setStyle(o,"height",m);if(l.theme_advanced_resize_horizontal){d.setStyle(n,"width","");d.setStyle(o,"width",i);if(i<n.clientWidth){i=n.clientWidth;d.setStyle(o,"width",n.clientWidth)}}if(k&&l.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+j.id+"_size",{cw:i,ch:m})}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(x,k){var A=this,p,m,r=A.editor,B=A.settings,z,j=r.controlManager,u,l,q=[],y,w;w=j.createToolbarGroup("toolbargroup",{name:r.getLang("advanced.toolbar"),tab_focus_toolbar:r.getParam("theme_advanced_tab_focus_toolbar")});A.toolbarGroup=w;y=B.theme_advanced_toolbar_align.toLowerCase();y="mce"+A._ufirst(y);l=d.add(d.add(x,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+y,role:"presentation"});for(p=1;(z=B["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(B["theme_advanced_buttons"+p+"_add"]){z+=","+B["theme_advanced_buttons"+p+"_add"]}if(B["theme_advanced_buttons"+p+"_add_before"]){z=B["theme_advanced_buttons"+p+"_add_before"]+","+z}A._addControls(z,m);w.add(m);k.deltaHeight-=B.theme_advanced_row_height}q.push(w.renderHTML());q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));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",role:"group","aria-labelledby":p.id+"_path_voice"});if(w.theme_advanced_path){d.add(k,"span",{id:p.id+"_path_voice"},p.translate("advanced.path"));d.add(k,"span",{},": ")}else{d.add(k,"span",{}," ")}if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});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","click",function(n){n.preventDefault()});b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){G.preventDefault();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);n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E,true)}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},_updateUndoStatus:function(j){var i=j.controlManager,k=j.undoManager;i.setDisabled("undo",!k.hasUndo()&&!k.typing);i.setDisabled("redo",!k.hasRedo())},_nodeChanged:function(m,r,D,q,E){var y=this,C,F=0,x,G,z=y.settings,w,k,u,B,l,j,i;e.each(y.stateControls,function(n){r.setActive(n,m.queryCommandState(y.controls[n][1]))});function o(p){var s,n=E.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}r.setActive("visualaid",m.hasVisual);y._updateUndoStatus(m);r.setDisabled("outdent",!m.queryCommandState("Outdent"));C=o("A");if(G=r.get("link")){if(!C||!C.name){G.setDisabled(!C&&q);G.setActive(!!C)}}if(G=r.get("unlink")){G.setDisabled(!C&&q);G.setActive(!!C&&!C.name)}if(G=r.get("anchor")){G.setActive(!q&&!!C&&C.name)}C=o("IMG");if(G=r.get("image")){G.setActive(!q&&!!C&&D.className.indexOf("mceItem")==-1)}if(G=r.get("styleselect")){y._importClasses();j=[];f(G.items,function(n){j.push(n.value)});i=m.formatter.matchAll(j);G.select(i[0])}if(G=r.get("formatselect")){C=o(d.isBlock);if(C){G.select(C.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!w&&p.className){w=p.className}}if(m.dom.is(p,z.theme_advanced_font_selector)){if(!k&&p.style.fontSize){k=p.style.fontSize}if(!u&&p.style.fontFamily){u=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!B&&p.style.color){B=p.style.color}if(!l&&p.style.backgroundColor){l=p.style.backgroundColor}}return false});if(G=r.get("fontselect")){G.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==u})}if(G=r.get("fontsizeselect")){if(z.theme_advanced_runtime_fontsize&&!k&&!w){k=m.dom.getStyle(D,"fontSize",true)}G.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===w){return true}})}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_path&&z.theme_advanced_statusbar_location){C=d.get(m.id+"_path")||d.add(m.id+"_path_row","span",{id:m.id+"_path"});if(y.statusKeyboardNavigation){y.statusKeyboardNavigation.destroy();y.statusKeyboardNavigation=null}d.setHTML(C,"");o(function(H){var p=H.nodeName.toLowerCase(),s,v,t="";if(H.nodeType!=1||p==="br"||H.getAttribute("data-mce-bogus")||d.hasClass(H,"mceItemHidden")||d.hasClass(H,"mceItemRemoved")){return}if(e.isIE&&H.scopeName!=="HTML"){p=H.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(x=d.getAttrib(H,"src")){t+="src: "+x+" "}break;case"a":if(x=d.getAttrib(H,"name")){t+="name: "+x+" ";p+="#"+x}if(x=d.getAttrib(H,"href")){t+="href: "+x+" "}break;case"font":if(x=d.getAttrib(H,"face")){t+="font: "+x+" "}if(x=d.getAttrib(H,"size")){t+="size: "+x+" "}if(x=d.getAttrib(H,"color")){t+="color: "+x+" "}break;case"span":if(x=d.getAttrib(H,"style")){t+="style: "+x+" "}break}if(x=d.getAttrib(H,"id")){t+="id: "+x+" "}if(x=H.className){x=x.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(x){t+="class: "+x+" ";if(d.isBlock(H)||p=="img"||p=="span"){p+="."+x}}}p=p.replace(/(html:)/g,"");p={name:p,node:H,title:t};y.onResolveName.dispatch(y,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(F++)},p);if(C.hasChildNodes()){C.insertBefore(d.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),C.firstChild);C.insertBefore(v,C.firstChild)}else{C.appendChild(v)}},m.getBody());if(d.select("a",C).length>0){y.statusKeyboardNavigation=new e.ui.KeyboardNavigation({root:m.id+"_path_row",items:d.select("a",C),excludeFromTabOrder:true,onCancel:function(){m.focus()}},d)}}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:250+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var i=this.editor;i.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file +(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);j.forcedHighContrastMode=j.settings.detect_highcontrast&&l._isHighContrast();j.settings.skin=j.forcedHighContrastMode?"highcontrast":j.settings.skin;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",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,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}if(j.settings.content_css!==false){j.contentCSS.push(j.baseURI.toAbsolute(k+"/skins/"+j.settings.skin+"/content.css"))}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l);j.onKeyUp.add(l._updateUndoStatus,l);j.onMouseUp.add(l._updateUndoStatus,l);j.dom.bind(j.dom.getRoot(),"dragend",function(){l._updateUndoStatus(j)})}});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")}},_isHighContrast:function(){var i,j=d.add(d.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});i=(d.getStyle(j,"background-color",true)+"").toLowerCase().replace(/ /g,"");d.remove(j);return i!="rgb(171,239,86)"&&i!="#abef56"},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){if(p[0]){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});if(m&&m.value==l){k.select(null)}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});if(o&&(o.value.fontSize==i.fontSize||o.value["class"]&&o.value["class"]==i["class"])){n.select(null)}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",onselect:function(l){j.editor.execCommand("FormatBlock",false,l);return false}});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;if(r.settings){r.settings.aria_label=w.aria_label+r.getLang("advanced.help_shortcut")}m=j=d.create("span",{role:"application","aria-labelledby":r.id+"_voice",id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});d.add(m,"span",{"class":"mceVoiceLabel",style:"display:none;",id:r.id+"_voice"},w.aria_label);if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{role:"presentation",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=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:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;r.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(e.isWebKit){window.focus()}v.toolbarGroup.focus();return b.cancel(n)}else{if(n.keyCode===o){d.get(p.id+"_path_row").focus();return b.cancel(n)}}}});r.addShortcut("alt+0","","mceShortcuts",v);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+"_ifr");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,m,k){var j=this.editor,l=this.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr");i=Math.max(l.theme_advanced_resizing_min_width||100,i);m=Math.max(l.theme_advanced_resizing_min_height||100,m);i=Math.min(l.theme_advanced_resizing_max_width||65535,i);m=Math.min(l.theme_advanced_resizing_max_height||65535,m);d.setStyle(n,"height","");d.setStyle(o,"height",m);if(l.theme_advanced_resize_horizontal){d.setStyle(n,"width","");d.setStyle(o,"width",i);if(i<n.clientWidth){i=n.clientWidth;d.setStyle(o,"width",n.clientWidth)}}if(k&&l.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+j.id+"_size",{cw:i,ch:m})}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(x,k){var A=this,p,m,r=A.editor,B=A.settings,z,j=r.controlManager,u,l,q=[],y,w;w=j.createToolbarGroup("toolbargroup",{name:r.getLang("advanced.toolbar"),tab_focus_toolbar:r.getParam("theme_advanced_tab_focus_toolbar")});A.toolbarGroup=w;y=B.theme_advanced_toolbar_align.toLowerCase();y="mce"+A._ufirst(y);l=d.add(d.add(x,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+y,role:"presentation"});for(p=1;(z=B["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(B["theme_advanced_buttons"+p+"_add"]){z+=","+B["theme_advanced_buttons"+p+"_add"]}if(B["theme_advanced_buttons"+p+"_add_before"]){z=B["theme_advanced_buttons"+p+"_add_before"]+","+z}A._addControls(z,m);w.add(m);k.deltaHeight-=B.theme_advanced_row_height}q.push(w.renderHTML());q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));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",role:"group","aria-labelledby":p.id+"_path_voice"});if(w.theme_advanced_path){d.add(k,"span",{id:p.id+"_path_voice"},p.translate("advanced.path"));d.add(k,"span",{},": ")}else{d.add(k,"span",{}," ")}if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});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","click",function(n){n.preventDefault()});b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){G.preventDefault();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);n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E,true)}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},_updateUndoStatus:function(j){var i=j.controlManager,k=j.undoManager;i.setDisabled("undo",!k.hasUndo()&&!k.typing);i.setDisabled("redo",!k.hasRedo())},_nodeChanged:function(m,r,D,q,E){var y=this,C,F=0,x,G,z=y.settings,w,k,u,B,l,j,i;e.each(y.stateControls,function(n){r.setActive(n,m.queryCommandState(y.controls[n][1]))});function o(p){var s,n=E.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}r.setActive("visualaid",m.hasVisual);y._updateUndoStatus(m);r.setDisabled("outdent",!m.queryCommandState("Outdent"));C=o("A");if(G=r.get("link")){if(!C||!C.name){G.setDisabled(!C&&q);G.setActive(!!C)}}if(G=r.get("unlink")){G.setDisabled(!C&&q);G.setActive(!!C&&!C.name)}if(G=r.get("anchor")){G.setActive(!q&&!!C&&C.name)}C=o("IMG");if(G=r.get("image")){G.setActive(!q&&!!C&&D.className.indexOf("mceItem")==-1)}if(G=r.get("styleselect")){y._importClasses();j=[];f(G.items,function(n){j.push(n.value)});i=m.formatter.matchAll(j);G.select(i[0])}if(G=r.get("formatselect")){C=o(d.isBlock);if(C){G.select(C.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!w&&p.className){w=p.className}}if(m.dom.is(p,z.theme_advanced_font_selector)){if(!k&&p.style.fontSize){k=p.style.fontSize}if(!u&&p.style.fontFamily){u=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!B&&p.style.color){B=p.style.color}if(!l&&p.style.backgroundColor){l=p.style.backgroundColor}}return false});if(G=r.get("fontselect")){G.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==u})}if(G=r.get("fontsizeselect")){if(z.theme_advanced_runtime_fontsize&&!k&&!w){k=m.dom.getStyle(D,"fontSize",true)}G.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===w){return true}})}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_path&&z.theme_advanced_statusbar_location){C=d.get(m.id+"_path")||d.add(m.id+"_path_row","span",{id:m.id+"_path"});if(y.statusKeyboardNavigation){y.statusKeyboardNavigation.destroy();y.statusKeyboardNavigation=null}d.setHTML(C,"");o(function(H){var p=H.nodeName.toLowerCase(),s,v,t="";if(H.nodeType!=1||p==="br"||H.getAttribute("data-mce-bogus")||d.hasClass(H,"mceItemHidden")||d.hasClass(H,"mceItemRemoved")){return}if(e.isIE&&H.scopeName!=="HTML"){p=H.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(x=d.getAttrib(H,"src")){t+="src: "+x+" "}break;case"a":if(x=d.getAttrib(H,"name")){t+="name: "+x+" ";p+="#"+x}if(x=d.getAttrib(H,"href")){t+="href: "+x+" "}break;case"font":if(x=d.getAttrib(H,"face")){t+="font: "+x+" "}if(x=d.getAttrib(H,"size")){t+="size: "+x+" "}if(x=d.getAttrib(H,"color")){t+="color: "+x+" "}break;case"span":if(x=d.getAttrib(H,"style")){t+="style: "+x+" "}break}if(x=d.getAttrib(H,"id")){t+="id: "+x+" "}if(x=H.className){x=x.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(x){t+="class: "+x+" ";if(d.isBlock(H)||p=="img"||p=="span"){p+="."+x}}}p=p.replace(/(html:)/g,"");p={name:p,node:H,title:t};y.onResolveName.dispatch(y,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(F++)},p);if(C.hasChildNodes()){C.insertBefore(d.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),C.firstChild);C.insertBefore(v,C.firstChild)}else{C.appendChild(v)}},m.getBody());if(d.select("a",C).length>0){y.statusKeyboardNavigation=new e.ui.KeyboardNavigation({root:m.id+"_path_row",items:d.select("a",C),excludeFromTabOrder:true,onCancel:function(){m.focus()}},d)}}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var i=this.editor;i.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file diff --git a/wp-includes/js/tinymce/themes/advanced/editor_template_src.js b/wp-includes/js/tinymce/themes/advanced/editor_template_src.js new file mode 100644 index 000000000..00b404a3d --- /dev/null +++ b/wp-includes/js/tinymce/themes/advanced/editor_template_src.js @@ -0,0 +1,1362 @@ +/** + * editor_template_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +(function(tinymce) { + var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode; + + // Tell it to load theme specific language pack(s) + tinymce.ThemeManager.requireLangPack('advanced'); + + tinymce.create('tinymce.themes.AdvancedTheme', { + sizes : [8, 10, 12, 14, 18, 24, 36], + + // Control name lookup, format: title, command + controls : { + bold : ['bold_desc', 'Bold'], + italic : ['italic_desc', 'Italic'], + underline : ['underline_desc', 'Underline'], + strikethrough : ['striketrough_desc', 'Strikethrough'], + justifyleft : ['justifyleft_desc', 'JustifyLeft'], + justifycenter : ['justifycenter_desc', 'JustifyCenter'], + justifyright : ['justifyright_desc', 'JustifyRight'], + justifyfull : ['justifyfull_desc', 'JustifyFull'], + bullist : ['bullist_desc', 'InsertUnorderedList'], + numlist : ['numlist_desc', 'InsertOrderedList'], + outdent : ['outdent_desc', 'Outdent'], + indent : ['indent_desc', 'Indent'], + cut : ['cut_desc', 'Cut'], + copy : ['copy_desc', 'Copy'], + paste : ['paste_desc', 'Paste'], + undo : ['undo_desc', 'Undo'], + redo : ['redo_desc', 'Redo'], + link : ['link_desc', 'mceLink'], + unlink : ['unlink_desc', 'unlink'], + image : ['image_desc', 'mceImage'], + cleanup : ['cleanup_desc', 'mceCleanup'], + help : ['help_desc', 'mceHelp'], + code : ['code_desc', 'mceCodeEditor'], + hr : ['hr_desc', 'InsertHorizontalRule'], + removeformat : ['removeformat_desc', 'RemoveFormat'], + sub : ['sub_desc', 'subscript'], + sup : ['sup_desc', 'superscript'], + forecolor : ['forecolor_desc', 'ForeColor'], + forecolorpicker : ['forecolor_desc', 'mceForeColor'], + backcolor : ['backcolor_desc', 'HiliteColor'], + backcolorpicker : ['backcolor_desc', 'mceBackColor'], + charmap : ['charmap_desc', 'mceCharMap'], + visualaid : ['visualaid_desc', 'mceToggleVisualAid'], + anchor : ['anchor_desc', 'mceInsertAnchor'], + newdocument : ['newdocument_desc', 'mceNewDocument'], + blockquote : ['blockquote_desc', 'mceBlockQuote'] + }, + + stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'], + + init : function(ed, url) { + var t = this, s, v, o; + + t.editor = ed; + t.url = url; + t.onResolveName = new tinymce.util.Dispatcher(this); + + ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast(); + ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin; + + // Default settings + t.settings = s = extend({ + 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", + theme_advanced_font_selector : "span", + theme_advanced_show_current_color: 0, + readonly : ed.settings.readonly + }, ed.settings); + + // Setup default font_size_style_values + if (!s.font_size_style_values) + s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt"; + + if (tinymce.is(s.theme_advanced_font_sizes, 'string')) { + s.font_size_style_values = tinymce.explode(s.font_size_style_values); + s.font_size_classes = tinymce.explode(s.font_size_classes || ''); + + // Parse string value + o = {}; + ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes; + each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) { + var cl; + + if (k == v && v >= 1 && v <= 7) { + k = v + ' (' + t.sizes[v - 1] + 'pt)'; + cl = s.font_size_classes[v - 1]; + v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt'); + } + + if (/^\s*\./.test(v)) + cl = v.replace(/\./g, ''); + + o[k] = cl ? {'class' : cl} : {fontSize : v}; + }); + + s.theme_advanced_font_sizes = o; + } + + if ((v = s.theme_advanced_path_location) && v != 'none') + s.theme_advanced_statusbar_location = s.theme_advanced_path_location; + + if (s.theme_advanced_statusbar_location == 'none') + s.theme_advanced_statusbar_location = 0; + + if (ed.settings.content_css !== false) + ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css")); + + // Init editor + ed.onInit.add(function() { + if (!ed.settings.readonly) { + ed.onNodeChange.add(t._nodeChanged, t); + ed.onKeyUp.add(t._updateUndoStatus, t); + ed.onMouseUp.add(t._updateUndoStatus, t); + ed.dom.bind(ed.dom.getRoot(), 'dragend', function() { + t._updateUndoStatus(ed); + }); + } + }); + + ed.onSetProgressState.add(function(ed, b, ti) { + var co, id = ed.id, tb; + + if (b) { + t.progressTimer = setTimeout(function() { + co = ed.getContainer(); + co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild); + tb = DOM.get(ed.id + '_tbl'); + + DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}}); + DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}}); + }, ti || 0); + } else { + DOM.remove(id + '_blocker'); + DOM.remove(id + '_progress'); + clearTimeout(t.progressTimer); + } + }); + + DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css"); + + if (s.skin_variant) + DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"); + }, + + _isHighContrast : function() { + var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'}); + + actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, ''); + DOM.remove(div); + + return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56'; + }, + + createControl : function(n, cf) { + var cd, c; + + if (c = cf.createControl(n)) + return c; + + switch (n) { + case "styleselect": + return this._createStyleSelect(); + + case "formatselect": + return this._createBlockFormats(); + + case "fontselect": + return this._createFontSelect(); + + case "fontsizeselect": + return this._createFontSizeSelect(); + + case "forecolor": + return this._createForeColorMenu(); + + case "backcolor": + return this._createBackColorMenu(); + } + + if ((cd = this.controls[n])) + return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); + }, + + execCommand : function(cmd, ui, val) { + var f = this['_' + cmd]; + + if (f) { + f.call(this, ui, val); + return true; + } + + return false; + }, + + _importClasses : function(e) { + var ed = this.editor, ctrl = ed.controlManager.get('styleselect'); + + if (ctrl.getLength() == 0) { + each(ed.dom.getClasses(), function(o, idx) { + var name = 'style_' + idx; + + 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) { + if (matches[0]) + 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; + }); + + if (cur && cur.value == v) { + c.select(null); + } + + return false; // No auto select + } + }); + + if (c) { + each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) { + c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''}); + }); + } + + return c; + }, + + _createFontSizeSelect : function() { + var t = this, ed = t.editor, c, i = 0, cl = []; + + c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) { + var cur = c.items[c.selectedIndex]; + + if (!v && cur) { + cur = cur.value; + + if (cur['class']) { + ed.formatter.toggle('fontsize_class', {value : cur['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else { + ed.execCommand('FontSize', false, cur.fontSize); + } + + return; + } + + if (v['class']) { + ed.focus(); + ed.undoManager.add(); + ed.formatter.toggle('fontsize_class', {value : v['class']}); + ed.undoManager.add(); + ed.nodeChanged(); + } else + ed.execCommand('FontSize', false, v.fontSize); + + // Fake selection, execCommand will fire a nodeChange and update the selection + c.select(function(sv) { + return v == sv; + }); + + if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] && cur.value['class'] == v['class'])) { + c.select(null); + } + + return false; // No auto select + }}); + + if (c) { + each(t.settings.theme_advanced_font_sizes, function(v, k) { + var fz = v.fontSize; + + if (fz >= 1 && fz <= 7) + fz = t.sizes[parseInt(fz) - 1] + 'pt'; + + c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))}); + }); + } + + return c; + }, + + _createBlockFormats : function() { + var c, fmts = { + p : 'advanced.paragraph', + address : 'advanced.address', + pre : 'advanced.pre', + h1 : 'advanced.h1', + h2 : 'advanced.h2', + h3 : 'advanced.h3', + h4 : 'advanced.h4', + h5 : 'advanced.h5', + h6 : 'advanced.h6', + div : 'advanced.div', + blockquote : 'advanced.blockquote', + code : 'advanced.code', + dt : 'advanced.dt', + dd : 'advanced.dd', + samp : 'advanced.samp' + }, t = this; + + c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) { + t.editor.execCommand('FormatBlock', false, v); + return false; + }}); + + if (c) { + each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { + c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v}); + }); + } + + return c; + }, + + _createForeColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_text_colors) + o.colors = v; + + if (s.theme_advanced_default_foreground_color) + o.default_color = s.theme_advanced_default_foreground_color; + + o.title = 'advanced.forecolor_desc'; + o.cmd = 'ForeColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('forecolor', o); + + return c; + }, + + _createBackColorMenu : function() { + var c, t = this, s = t.settings, o = {}, v; + + if (s.theme_advanced_more_colors) { + o.more_colors_func = function() { + t._mceColorPicker(0, { + color : c.value, + func : function(co) { + c.setColor(co); + } + }); + }; + } + + if (v = s.theme_advanced_background_colors) + o.colors = v; + + if (s.theme_advanced_default_background_color) + o.default_color = s.theme_advanced_default_background_color; + + o.title = 'advanced.backcolor_desc'; + o.cmd = 'HiliteColor'; + o.scope = this; + + c = t.editor.controlManager.createColorSplitButton('backcolor', o); + + return c; + }, + + renderUI : function(o) { + var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; + + if (ed.settings) { + ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut'); + } + + // TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for. + // Maybe actually inherit it from the original textara? + n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')}); + DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label); + + if (!DOM.boxModel) + n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); + + n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0}); + n = tb = DOM.add(n, 'tbody'); + + switch ((s.theme_advanced_layout_manager || '').toLowerCase()) { + case "rowlayout": + ic = t._rowLayout(s, tb, o); + break; + + case "customlayout": + ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p); + break; + + default: + ic = t._simpleLayout(s, tb, o, p); + } + + n = o.targetNode; + + // Add classes to first and last TRs + nl = sc.rows; + DOM.addClass(nl[0], 'mceFirst'); + DOM.addClass(nl[nl.length - 1], 'mceLast'); + + // Add classes to first and last TDs + each(DOM.select('tr', tb), function(n) { + DOM.addClass(n.firstChild, 'mceFirst'); + DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); + }); + + if (DOM.get(s.theme_advanced_toolbar_container)) + DOM.get(s.theme_advanced_toolbar_container).appendChild(p); + else + DOM.insertAfter(p, n); + + Event.add(ed.id + '_path_row', 'click', function(e) { + e = e.target; + + if (e.nodeName == 'A') { + t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); + + return 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 : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();}); + + if (s.theme_advanced_toolbar_location == 'external') + o.deltaHeight = 0; + + t.deltaHeight = o.deltaHeight; + o.targetNode = null; + + ed.onKeyDown.add(function(ed, evt) { + var DOM_VK_F10 = 121, DOM_VK_F11 = 122; + + if (evt.altKey) { + if (evt.keyCode === DOM_VK_F10) { + // Make sure focus is given to toolbar in Safari. + // We can't do this in IE as it prevents giving focus to toolbar when editor is in a frame + if (tinymce.isWebKit) { + window.focus(); + } + t.toolbarGroup.focus(); + return Event.cancel(evt); + } else if (evt.keyCode === DOM_VK_F11) { + DOM.get(ed.id + '_path_row').focus(); + return Event.cancel(evt); + } + } + }); + + // alt+0 is the UK recommended shortcut for accessing the list of access controls. + ed.addShortcut('alt+0', '', 'mceShortcuts', t); + + return { + iframeContainer : ic, + editorContainer : ed.id + '_parent', + sizeContainer : sc, + deltaHeight : o.deltaHeight + }; + }, + + getInfo : function() { + return { + longname : 'Advanced theme', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + version : tinymce.majorVersion + "." + tinymce.minorVersion + } + }, + + resizeBy : function(dw, dh) { + var e = DOM.get(this.editor.id + '_ifr'); + + this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); + }, + + resizeTo : function(w, h, store) { + var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'); + + // Boundery fix box + w = Math.max(s.theme_advanced_resizing_min_width || 100, w); + h = Math.max(s.theme_advanced_resizing_min_height || 100, h); + w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w); + h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h); + + // Resize iframe and container + DOM.setStyle(e, 'height', ''); + DOM.setStyle(ifr, 'height', h); + + if (s.theme_advanced_resize_horizontal) { + DOM.setStyle(e, 'width', ''); + DOM.setStyle(ifr, 'width', w); + + // Make sure that the size is never smaller than the over all ui + if (w < e.clientWidth) { + w = e.clientWidth; + DOM.setStyle(ifr, 'width', e.clientWidth); + } + } + + // Store away the size + if (store && s.theme_advanced_resizing_use_cookie) { + Cookie.setHash("TinyMCE_" + ed.id + "_size", { + cw : w, + ch : h + }); + } + }, + + destroy : function() { + var id = this.editor.id; + + Event.clear(id + '_resize'); + Event.clear(id + '_path_row'); + Event.clear(id + '_external_close'); + }, + + // Internal functions + + _simpleLayout : function(s, tb, o, p) { + var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; + + if (s.readonly) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + return ic; + } + + // Create toolbar container at top + if (lo == 'top') + t._addToolbars(tb, o); + + // Create external toolbar + if (lo == 'external') { + n = c = DOM.create('div', {style : 'position:relative'}); + n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); + DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); + n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); + etb = DOM.add(n, 'tbody'); + + if (p.firstChild.className == 'mceOldBoxModel') + p.firstChild.appendChild(c); + else + p.insertBefore(c, p.firstChild); + + t._addToolbars(etb, o); + + ed.onMouseUp.add(function() { + var e = DOM.get(ed.id + '_external'); + DOM.show(e); + + DOM.hide(lastExtID); + + var f = Event.add(ed.id + '_external_close', 'click', function() { + DOM.hide(ed.id + '_external'); + Event.remove(ed.id + '_external_close', 'click', f); + }); + + DOM.show(e); + DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); + + // Fixes IE rendering bug + DOM.hide(e); + DOM.show(e); + e.style.filter = ''; + + lastExtID = ed.id + '_external'; + + e = null; + }); + } + + if (sl == 'top') + t._addStatusBar(tb, o); + + // Create iframe container + if (!s.theme_advanced_toolbar_container) { + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + } + + // Create toolbar container at bottom + if (lo == 'bottom') + t._addToolbars(tb, o); + + if (sl == 'bottom') + t._addStatusBar(tb, o); + + return ic; + }, + + _rowLayout : function(s, tb, o) { + var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; + + dc = s.theme_advanced_containers_default_class || ''; + da = s.theme_advanced_containers_default_align || 'center'; + + each(explode(s.theme_advanced_containers || ''), function(c, i) { + var v = s['theme_advanced_container_' + c] || ''; + + switch (c.toLowerCase()) { + case 'mceeditor': + n = DOM.add(tb, 'tr'); + n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); + break; + + case 'mceelementpath': + t._addStatusBar(tb, o); + break; + + default: + a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(tb, 'tr'), 'td', { + 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da + }); + + to = cf.createToolbar("toolbar" + i); + t._addControls(v, to); + DOM.setHTML(n, to.renderHTML()); + o.deltaHeight -= s.theme_advanced_row_height; + } + }); + + return ic; + }, + + _addControls : function(v, tb) { + var t = this, s = t.settings, di, cf = t.editor.controlManager; + + if (s.theme_advanced_disable && !t._disabled) { + di = {}; + + each(explode(s.theme_advanced_disable), function(v) { + di[v] = 1; + }); + + t._disabled = di; + } else + di = t._disabled; + + each(explode(v), function(n) { + var c; + + if (di && di[n]) + return; + + // Compatiblity with 2.x + if (n == 'tablecontrols') { + each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) { + n = t.createControl(n, cf); + + if (n) + tb.add(n); + }); + + return; + } + + c = t.createControl(n, cf); + + if (c) + tb.add(c); + }); + }, + + _addToolbars : function(c, o) { + var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup; + + toolbarGroup = cf.createToolbarGroup('toolbargroup', { + 'name': ed.getLang('advanced.toolbar'), + 'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar') + }); + + t.toolbarGroup = toolbarGroup; + + a = s.theme_advanced_toolbar_align.toLowerCase(); + a = 'mce' + t._ufirst(a); + + n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"presentation"}); + + // 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); + toolbarGroup.add(tb); + + o.deltaHeight -= s.theme_advanced_row_height; + } + h.push(toolbarGroup.renderHTML()); + h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->')); + DOM.setHTML(n, h.join('')); + }, + + _addStatusBar : function(tb, o) { + var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td; + + n = DOM.add(tb, 'tr'); + n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); + n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'}); + if (s.theme_advanced_path) { + DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path')); + DOM.add(n, 'span', {}, ': '); + } else { + DOM.add(n, 'span', {}, ' '); + } + + + if (s.theme_advanced_resizing) { + DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize', tabIndex:"-1"}); + + if (s.theme_advanced_resizing_use_cookie) { + ed.onPostRender.add(function() { + var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl'); + + if (!o) + return; + + t.resizeTo(o.cw, o.ch); + }); + } + + ed.onPostRender.add(function() { + Event.add(ed.id + '_resize', 'click', function(e) { + e.preventDefault(); + }); + + Event.add(ed.id + '_resize', 'mousedown', function(e) { + var mouseMoveHandler1, mouseMoveHandler2, + mouseUpHandler1, mouseUpHandler2, + startX, startY, startWidth, startHeight, width, height, ifrElm; + + function resizeOnMove(e) { + e.preventDefault(); + + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + + t.resizeTo(width, height); + }; + + function endResize(e) { + // Stop listening + Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1); + Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2); + Event.remove(DOM.doc, 'mouseup', mouseUpHandler1); + Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2); + + width = startWidth + (e.screenX - startX); + height = startHeight + (e.screenY - startY); + t.resizeTo(width, height, true); + }; + + e.preventDefault(); + + // Get the current rect size + startX = e.screenX; + startY = e.screenY; + ifrElm = DOM.get(t.editor.id + '_ifr'); + startWidth = width = ifrElm.clientWidth; + startHeight = height = ifrElm.clientHeight; + + // Register envent handlers + mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove); + mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove); + mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize); + mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize); + }); + }); + } + + o.deltaHeight -= 21; + n = tb = null; + }, + + _updateUndoStatus : function(ed) { + var cm = ed.controlManager, um = ed.undoManager; + + cm.setDisabled('undo', !um.hasUndo() && !um.typing); + cm.setDisabled('redo', !um.hasRedo()); + }, + + _nodeChanged : function(ed, cm, n, co, ob) { + var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches; + + tinymce.each(t.stateControls, function(c) { + cm.setActive(c, ed.queryCommandState(t.controls[c][1])); + }); + + function getParent(name) { + var i, parents = ob.parents, func = name; + + if (typeof(name) == 'string') { + func = function(node) { + return node.nodeName == name; + }; + } + + for (i = 0; i < parents.length; i++) { + if (func(parents[i])) + return parents[i]; + } + }; + + cm.setActive('visualaid', ed.hasVisual); + t._updateUndoStatus(ed); + cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); + + p = getParent('A'); + if (c = cm.get('link')) { + 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(!co && !!p && p.name); + } + + p = getParent('IMG'); + if (c = cm.get('image')) + c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1); + + if (c = cm.get('styleselect')) { + t._importClasses(); + + formatNames = []; + each(c.items, function(item) { + formatNames.push(item.value); + }); + + matches = ed.formatter.matchAll(formatNames); + c.select(matches[0]); + } + + 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 (ed.dom.is(n, s.theme_advanced_font_selector)) { + if (!fz && n.style.fontSize) + fz = n.style.fontSize; + + if (!fn && n.style.fontFamily) + fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); + + if (!fc && n.style.color) + fc = n.style.color; + + if (!bc && n.style.backgroundColor) + bc = n.style.backgroundColor; + } + + return false; + }); + + if (c = cm.get('fontselect')) { + c.select(function(v) { + return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn; + }); + } + + // Select font size + if (c = cm.get('fontsizeselect')) { + // Use computed style + if (s.theme_advanced_runtime_fontsize && !fz && !cl) + fz = ed.dom.getStyle(n, 'fontSize', true); + + c.select(function(v) { + if (v.fontSize && v.fontSize === fz) + return true; + + if (v['class'] && v['class'] === cl) + return true; + }); + } + + if (s.theme_advanced_show_current_color) { + function updateColor(controlId, color) { + if (c = cm.get(controlId)) { + if (!color) + color = c.settings.default_color; + if (color !== c.value) { + c.displayColor(color); + } + } + } + updateColor('forecolor', fc); + updateColor('backcolor', bc); + } + + if (s.theme_advanced_show_current_color) { + function updateColor(controlId, color) { + if (c = cm.get(controlId)) { + if (!color) + color = c.settings.default_color; + if (color !== c.value) { + c.displayColor(color); + } + } + }; + + updateColor('forecolor', fc); + updateColor('backcolor', bc); + } + + if (s.theme_advanced_path && s.theme_advanced_statusbar_location) { + p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); + + if (t.statusKeyboardNavigation) { + t.statusKeyboardNavigation.destroy(); + t.statusKeyboardNavigation = null; + } + + DOM.setHTML(p, ''); + + getParent(function(n) { + var na = n.nodeName.toLowerCase(), u, pi, ti = ''; + + // Ignore non element and bogus/hidden elements + if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')) + return; + + // Handle prefix + if (tinymce.isIE && n.scopeName !== 'HTML') + 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:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); + + if (p.hasChildNodes()) { + p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild); + p.insertBefore(pi, p.firstChild); + } else + p.appendChild(pi); + }, ed.getBody()); + + if (DOM.select('a', p).length > 0) { + t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({ + root: ed.id + "_path_row", + items: DOM.select('a', p), + excludeFromTabOrder: true, + onCancel: function() { + ed.focus(); + } + }, DOM); + } + } + }, + + // Commands gets called by execCommand + + _sel : function(v) { + this.editor.execCommand('mceSelectNodeDepth', false, v); + }, + + _mceInsertAnchor : function(ui, v) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/anchor.htm', + width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)), + height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceCharMap : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/charmap.htm', + width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), + height : 265 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceHelp : function() { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/about.htm', + width : 480, + height : 380, + inline : true + }, { + theme_url : this.url + }); + }, + + _mceShortcuts : function() { + var ed = this.editor; + ed.windowManager.open({ + url: this.url + '/shortcuts.htm', + width: 480, + height: 380, + inline: true + }, { + theme_url: this.url + }); + }, + + _mceColorPicker : function(u, v) { + var ed = this.editor; + + v = v || {}; + + ed.windowManager.open({ + url : this.url + '/color_picker.htm', + width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)), + height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)), + close_previous : false, + inline : true + }, { + input_color : v.color, + func : v.func, + theme_url : this.url + }); + }, + + _mceCodeEditor : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/source_editor.htm', + width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)), + height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)), + inline : true, + resizable : true, + maximizable : true + }, { + theme_url : this.url + }); + }, + + _mceImage : function(ui, val) { + var ed = this.editor; + + // Internal image object like a flash placeholder + if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1) + return; + + ed.windowManager.open({ + url : this.url + '/image.htm', + width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)), + height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceLink : function(ui, val) { + var ed = this.editor; + + ed.windowManager.open({ + url : this.url + '/link.htm', + width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)), + height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)), + inline : true + }, { + theme_url : this.url + }); + }, + + _mceNewDocument : function() { + var ed = this.editor; + + ed.windowManager.confirm('advanced.newdocument', function(s) { + if (s) + ed.execCommand('mceSetContent', false, ''); + }); + }, + + _mceForeColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.fgColor, + func : function(co) { + t.fgColor = co; + t.editor.execCommand('ForeColor', false, co); + } + }); + }, + + _mceBackColor : function() { + var t = this; + + this._mceColorPicker(0, { + color: t.bgColor, + func : function(co) { + t.bgColor = co; + t.editor.execCommand('HiliteColor', false, co); + } + }); + }, + + _ufirst : function(s) { + return s.substring(0, 1).toUpperCase() + s.substring(1); + } + }); + + tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); +}(tinymce)); diff --git a/wp-includes/js/tinymce/themes/advanced/image.htm b/wp-includes/js/tinymce/themes/advanced/image.htm index 038ab97f9..bb0ba6535 100644 --- a/wp-includes/js/tinymce/themes/advanced/image.htm +++ b/wp-includes/js/tinymce/themes/advanced/image.htm @@ -2,10 +2,10 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.image_title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/mctabs.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/form_utils.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/image.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/mctabs.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/form_utils.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/image.js?ver=349-20120314"></script> </head> <body id="image" style="display: none"> <form onsubmit="ImageDialog.update();return false;" action="#"> diff --git a/wp-includes/js/tinymce/themes/advanced/js/anchor.js b/wp-includes/js/tinymce/themes/advanced/js/anchor.js index 7b556351d..b6c5b695c 100644 --- a/wp-includes/js/tinymce/themes/advanced/js/anchor.js +++ b/wp-includes/js/tinymce/themes/advanced/js/anchor.js @@ -30,9 +30,10 @@ var AnchorDialog = { ed.selection.collapse(1); elm = ed.dom.getParent(ed.selection.getNode(), 'A'); - if (elm) + if (elm) { + elm.setAttribute('name', name); elm.name = name; - else + } else ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, '')); tinyMCEPopup.close(); diff --git a/wp-includes/js/tinymce/themes/advanced/js/charmap.js b/wp-includes/js/tinymce/themes/advanced/js/charmap.js index 78bc080e1..cbb4172ba 100644 --- a/wp-includes/js/tinymce/themes/advanced/js/charmap.js +++ b/wp-includes/js/tinymce/themes/advanced/js/charmap.js @@ -281,13 +281,21 @@ tinyMCEPopup.onInit.add(function() { function addKeyboardNavigation(){ var tableElm, cells, settings; - cells = tinyMCEPopup.dom.select(".charmaplink", "charmapgroup"); + cells = tinyMCEPopup.dom.select("a.charmaplink", "charmapgroup"); settings ={ root: "charmapgroup", items: cells }; - + cells[0].tabindex=0; + tinyMCEPopup.dom.addClass(cells[0], "mceFocus"); + if (tinymce.isGecko) { + cells[0].focus(); + } else { + setTimeout(function(){ + cells[0].focus(); + }, 100); + } tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom); } @@ -306,7 +314,7 @@ function renderCharMapHTML() { previewCharFn = 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');'; html += '' + '<td class="charmap">' - + '<a class="charmaplink" role="button" onmouseover="'+previewCharFn+'" onfocus="'+previewCharFn+'" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">' + + '<a class="charmaplink" role="button" onmouseover="'+previewCharFn+'" onfocus="'+previewCharFn+'" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + ' '+ tinyMCEPopup.editor.translate("advanced_dlg.charmap_usage")+'">' + charmap[i][1] + '</a></td>'; if ((cols+1) % charsPerRow == 0) diff --git a/wp-includes/js/tinymce/themes/advanced/js/color_picker.js b/wp-includes/js/tinymce/themes/advanced/js/color_picker.js index cdf8c4c0c..3cbf32c4f 100644 --- a/wp-includes/js/tinymce/themes/advanced/js/color_picker.js +++ b/wp-includes/js/tinymce/themes/advanced/js/color_picker.js @@ -1,6 +1,6 @@ tinyMCEPopup.requireLangPack(); -var detail = 50, strhex = "0123456789ABCDEF", i, isMouseDown = false, isMouseOver = false; +var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; var colors = [ "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", @@ -266,10 +266,10 @@ function dechex(n) { } function computeColor(e) { - var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB; + var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB, pos = tinyMCEPopup.dom.getPos(e.target); - x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0); - y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0); + x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0); + y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.y : 0); partWidth = document.getElementById('colors').width / 6; partDetail = detail / 2; diff --git a/wp-includes/js/tinymce/themes/advanced/link.htm b/wp-includes/js/tinymce/themes/advanced/link.htm index fc5fa845d..008e8ad3e 100644 --- a/wp-includes/js/tinymce/themes/advanced/link.htm +++ b/wp-includes/js/tinymce/themes/advanced/link.htm @@ -2,11 +2,11 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.link_title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/mctabs.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/form_utils.js?ver=345-20110908"></script> - <script type="text/javascript" src="../../utils/validate.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/link.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/mctabs.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/form_utils.js?ver=349-20120314"></script> + <script type="text/javascript" src="../../utils/validate.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/link.js?ver=349-20120314"></script> </head> <body id="link" style="display: none"> <form onsubmit="LinkDialog.update();return false;" action="#"> diff --git a/wp-includes/js/tinymce/themes/advanced/shortcuts.htm b/wp-includes/js/tinymce/themes/advanced/shortcuts.htm index e1908905f..81cefe573 100644 --- a/wp-includes/js/tinymce/themes/advanced/shortcuts.htm +++ b/wp-includes/js/tinymce/themes/advanced/shortcuts.htm @@ -2,7 +2,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.accessibility_help}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> <script type="text/javascript">tinyMCEPopup.requireLangPack();</script> </head> <body id="content"> diff --git a/wp-includes/js/tinymce/themes/advanced/skins/default/content.css b/wp-includes/js/tinymce/themes/advanced/skins/default/content.css index b9adf6f02..4d63ca981 100644 --- a/wp-includes/js/tinymce/themes/advanced/skins/default/content.css +++ b/wp-includes/js/tinymce/themes/advanced/skins/default/content.css @@ -13,7 +13,7 @@ a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-mod span.mceItemNbsp {background: #DDD} td.mceSelected, th.mceSelected {background-color:#3399ff !important} img {border:0;} -table {cursor:default} +table, img, hr, .mceItemAnchor {cursor:default} table td, table th {cursor:text} ins {border-bottom:1px solid green; text-decoration: none; color:green} del {color:red; text-decoration:line-through} @@ -45,5 +45,6 @@ font[face=mceinline] {font-family:inherit !important} .mceItemRealMedia {background-image:url(../../img/realmedia.gif)} .mceItemVideo {background-image:url(../../img/video.gif)} .mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)} .mceItemIframe {background-image:url(../../img/iframe.gif)} .mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/content.css b/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/content.css index 46007b042..ee3d369d0 100644 --- a/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/content.css +++ b/wp-includes/js/tinymce/themes/advanced/skins/highcontrast/content.css @@ -11,7 +11,7 @@ a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !impo span.mceItemNbsp {background: #DDD} td.mceSelected, th.mceSelected {background-color:#3399ff !important} img {border:0;} -table {cursor:default} +table, img, hr, .mceItemAnchor {cursor:default} table td, table th {cursor:text} ins {border-bottom:1px solid green; text-decoration: none; color:green} del {color:red; text-decoration:line-through} diff --git a/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css b/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css index 47a39255a..631fa0ec8 100644 --- a/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css +++ b/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css @@ -12,7 +12,7 @@ a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !impo span.mceItemNbsp {background: #DDD} td.mceSelected, th.mceSelected {background-color:#3399ff !important} img {border:0;} -table {cursor:default} +table, img, hr, .mceItemAnchor {cursor:default} table td, table th {cursor:text} ins {border-bottom:1px solid green; text-decoration: none; color:green} del {color:red; text-decoration:line-through} diff --git a/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css b/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css index 065a00457..23fef64c9 100644 --- a/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css +++ b/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css @@ -1,8 +1,4 @@ -body { - font: 13px/19px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; - margin: 10px; - color: #000; -} + body.mceForceColors {background:#FFF; color:#000;} body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;} td {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} @@ -17,7 +13,7 @@ a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-mod span.mceItemNbsp {background: #DDD} td.mceSelected, th.mceSelected {background-color:#3399ff !important} img {border:0;} -table {cursor:default} +table, img, hr, .mceItemAnchor {cursor:default} table td, table th {cursor:text} ins {border-bottom:1px solid green; text-decoration: none; color:green} del {color:red; text-decoration:line-through} @@ -41,6 +37,24 @@ font[face=mceinline] {font-family:inherit !important} .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;} /* WordPress styles */ +body { + font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; + font-size: 13px; + line-height: 19px; + color: #333; + margin: 10px; + min-height: 100%; +} + +br[data-mce-bogus] { + line-height: 1em; + margin-top: -1em; +} + +br[data-mce-bogus]:only-child { + line-height: inherit; + margin-top: inherit; +} .aligncenter, dl.aligncenter { @@ -75,6 +89,7 @@ dl.aligncenter { margin: 0; padding: 0; border: 0 none; + -webkit-user-drag: none; } .wp-caption-dd { @@ -94,3 +109,36 @@ td { margin: 8px; } +/* Styles for the WordPress plugins */ +img.mceWPnextpage, +img.mceWPmore { + border: 0; + border-top: 1px dotted #cccccc; + display: block; + width: 95%; + height: 12px; + margin: 15px auto 0; +} + +img.mceWPmore { + background: transparent url("img/more_bug.gif") no-repeat right top; +} + +img.mceWPnextpage { + background: transparent url("img/page_bug.gif") no-repeat right top; +} + +img.wpGallery { + border: 1px dashed #888; + background: #f2f8ff url("img/gallery.png") no-repeat scroll center center; + width: 99%; + height: 250px; +} + +img.wp-oembed { + border: 1px dashed #888; + background: #f7f5f2 url("img/embedded.png") no-repeat scroll center center; + width: 300px; + height: 250px; +} + diff --git a/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/embedded.png b/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/embedded.png new file mode 100644 index 0000000000000000000000000000000000000000..173401ba5f118eab4be853d9fffc15c5bf88e677 GIT binary patch literal 28741 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¦&6_XV{P}u&=ZmAai;gX1E6Hh^miTFDixTS;!AbKTpE;AcYj4l# z^1R3Kdq1l3?2=^Xf4}&)-z9ODAC^JNUN4{5)qNM<9jw6mPI}*tf0wxHy%qPXM=jiQ z;q^C*EhR0@)!&=0Ni60(+;Qwj#D=7&rxHqPZeE)jyn0(-uV0c=L{x-_^<2MgCf4O8 zi4Wi8rr-JVGH&zFifOajnUmT6s+>He@FjEFqntKlHg(C&G|e{F4|e?gi!LrIUK&*- zx8Bg1?X5*|+B^e;oZFlFidHhj37pH^w)3L&0haUU7~dBuJ>9CN<1$5=KXK+#M;{K0 z=LP33pADMzm&IN{C^=B?fW+x5r=ET>@>lHX=n_o+%9XhB#IGn$$<7%Pt3NH8yE@WN zXoJi2>UVW5arcE;Bxhe=bF@WN#AzDG#C8)t4bN7W@0NF?l74+rntA%h#!S}#ubxfc zoOD*|o1BHq=QEjHPpzVoE9SjbXPjQ#{NT3zzq|f<i$3RQe&=fJ<ZyQM><P1J`7k~1 zhNXS+x8;8GEp}?1zH~uji{6ot?$l{(BLwwkM@ahl_~b-yFTA|%;zhQ&?5MM@*W)65 zo{K#fzjgN6_ma((J8sXlyAb2`es!2vI$QI;c(Z+HmYFHaM$9?gQQJ`JlqS4MN41M9 zqve1`%(93X?~U#6r|gMy<@{1?Hg$ExEdvi@vD=)DOt~U~IWNkqORPEPmbIsCcC{~L z(OPmvLm^JErOoMJ1IrQK=1Y=#yp27fi&INN771kah-_r;{(NZS5kYmvZe!i9i;-pF z$)|#nYfKiIMIE&C&q}p;C}MY|L@4py5zlA0Ipr4S@aXR^QP<!7Giq7b+D8}eG5>k6 zj-B%ahqr4F<J`1&t&Hz%y)s=^ZjafT?7eKtE_W9(`HHmq=j!V1Hqku-2etdZJr4@G z8gyuRK!C<nJCW(yZjZCM{u=eaIkD-@s^s?m*y4oy_qtO2URo#xwIwY*bL5AS@y?>w zmHj4R>!SAli%sqod}OigZr-oB-Or~-b)UR+=TBqW?n?b-ruO#M)ds$k*tL~=FK0dr zp3SrAqtngwmkjN$+OFI0KV$EI_w>id%vV>r!uMzFepOcVSHZw3$@o^cY}ZqziH1E_ zUi<X*ZLrmO(8TD;J|(c`Q}_L4T7pUsj_{kd^f+%W-g#&_%X?e*^fb*D#-j#{!gK;= zY8cv?ojWya`69OtZo^|oM7RyzvTH<?j~QHwIQKMst&8}v!bdw^Z&c@;l4hdyVb^QD z$G4={KRx6do$>wo&CS0R;%h%>a;c^KeB~*Y7A?}vHaj!w`O7!<%oa@*Hc?;BYUH^s zSv}=d%;w_P-y3VW{_@P)ZL(!b(8>O0y{r|j+AC)pJczmJ@Yq;TjO9P;`={Jot~=v2 z`#qL=F6j9#r^+=wa+&}92PZx{?{Mtubn4OY5izpd=F_huf4z5O>cLN@!P9dz^7k%@ zS{vNsG|OA}{>E7Ih*#-z&prB+RQ$5j@xIMuy<K7Y(KZ4e4>gnTtPI}lz3ujU?tA(y zUL8IieZ^iIZoFOK?BSApY08O=CJW_50qdsR*jOq%|IhLF0xpbN92eM}*1sqbo_5{+ z=dtJiJC@J0@z}iGWp{d~m*U!`e0c&w$26~IHP19YE}7DnmD+OA$*XY9p&6P%ae{_o zVwvUEcWQqhPPsYR=h~}3AKU9DZoM6rc!=}av-1TB=N0pQp4$FGXRe#O>Zz$*Q?nY+ z*M9yz$8PVD^?M#~W$`<4>G|}4dZ(zpNw1gP7TLo!)w|>v&&%HF&!<ULdlkBAPSv`> zWwZQEMcse7mg#eXSN5Ddy=Yb<Z;;5b6(_3h^G~_<vvN-Qea1<i31uDO`NvYTTi+}* z`Fwh<Z?lePk439qMh}-k;)#glo{1N=dfl3fN?SDaf_20+L%UoY9oFAoe);V$m6tzu zZtmV&bkRjAXv18wxS(bJe#Iqe6BP<7J5Dh?FLYCm^b&CE>7VlB)!*v2!uRglRbH8P zf7XQ;etN>$^_A`EfyIxN0#{r-_cTVC!(vPM#59BB5f+ZMdt5X`=NNur?|T-+ZyULE zf=Gn%)+XKC$1=WFzp1a`PftJJaGs+x(o0xMS^0`rYJlcl$N6txhiy*1tF^D}d-9dj zqVINoK39IfKIL2R|23_r1N5#i-Lv*PdnQ18y5{t*mc$mr2dzSj%p2_EUsSAH%Ku$j zLu&yW*Bp*V#s?o>d=aC1+BLk?&*Ef2i`{gm-~g>s_AQV4Q*NvY&=P5KTEi5Yy!(K6 zui6QtpT6sBw{E_Yl2|wGZyEn0n+#_KMyrq`RtsYC16GHZu8g_7^<t5(f}8uStYp?! zi<H}`*MoJ$3NpQBeJN!7^;XQym8VLUZRXN2t-`0K<^fzLdPYaCE$m{HJNxCP+39fI z!#ejH)E3;%3e>xzA>qvKox7&--Pg*W>o~bqdA#yIv$bDguHM=+mo{{9-dA~TCi!Lg z&Asmp{NI0{F;De^VyEVXZPONQiYb1ox+RKvng86>l0~O#cAtLsHTcWsDLa>{uA0hq z>jZbt!{;%d3)tcdKBjtR7iPXc^D=n0(QVy!sjfmpf6Fe{MG9xG`q!^}r1JdI9odSl zD|*WgWHv@O7<;YUFP`GJa8JjM&s|%Bp0kQNe&RP;A1Y#z%M*2=a;oN2WBz{4qselu zL7%deUo91J?s8e6-EcD4<h)(K{PEva$Ms&G`^efWW_7Z`QC*p*H7P`??_gyspHf%r z41+#R(brS7+p4zqaV2kIe0s{|Dp%vV3sy{vPln{}oqSsTMcMBu%?)w8eU~mMG<xvn zl8l+;1)JI_?{d1=yvQuCJ`y?q%#kBOilwqsBsyBERyOt~CY8)tb3ZwdMO<>3+o?A( z<%W-wP0jLVKbaQ&Zuv@^<fvdiEuZse3Tvt+W~nM&V%vCrewkf<WylFm&n(^bJAd+? zEL~soyWXbYLBYem+xzz}-D<J@-H(IEx1XDDTUc3Lw(HGi$2Avw%(AX%m2xee;1t3j za?f)@TI7Sh(ft4JS1&!V(w@)vnc|zy6}JPP6rI|<RWyWeSI4oXnPuzP8Uric&+fcn z^o3{g^I7Uast<}jhFUtTu3tNKmw0Z;$(Ba`uUYT!Ox?P{pzNlrc3s^CKfQTx%L+Z+ zG_PemKWQZKWmk!{Zr{8uI%mxd&6ImZAIWTF7tOq+<NwqtwL`1xhKPqm+qwlVj;a-b zJtFR$U2RviJ7gAdiFh+cN*Qn96pDDYw6IH*S!2@~VNaKa#Hxdz*5CgaB&E!|?D_1H z%VO@!&tLGfJ$sJnSmZCW#W5y#K7YxJS(Y(H>x;0r(kG|Oo1X7Td!K14e&*)P$E&rb zCjGx9oqzB4yPfP0=l1bf78m8)zMOyO=Ir@*D{h<T@BH)O%bRQe7DRi@?Pp3j>M>LF zw7N!^mdN5g^}5B2a;8bnzPYNSdi5qL@iYx~J06a$jsiTVDvqWuy0N}xUyv8e$44sp zg;KAQqcZFF%}%penHr%O7I!WA%3ZH+f8*(2bN)A+`ok#Pw&!7LxZjswFOQbr`_Iz< z-tv&kLN~S<97$R{lNhDL{5QOO6?<lz)t5I6OL;Gyk2s~%_?2bhq7a>ew88@wx`!C8 zUObNVQQ?wj-STW!%T%Qlf%GO}MIPs@UahU4G^WSwY&~E1aJGuAtESH4Pn#4nCm7wH z`}D#~%f2~whc6|~kJ@|eM8wRm+Q)B}C(QX#GGFK9$)^#ilR`x9E@{4cXj9b7R!)8A zD~)@$Etwi9o^#Wr%cHbzp?%q_FEv#~RU7B0-BeiRzb!oPPSNqx>vliTHsAO1tzO5Y zlEk#~zc1e14d1@I`Rn{&xA)gwJo#6Boma59_MAX2sii`*uj?$2TPqN<`pCWp?$2x| z*36$!)h(oGxL|KxNT$oey@5Op)d4n5=~8EN4|odJduVQLPIo>SkSok$^ql2ni>dap zn_G*Ov#;x@2hB=0F3z6hlA$j4k?VPz%9-YVW2>`f!Ba(Jiod4$ozoHc$sx<}NYu?y zEMt}1!zmB_|9$hG()>}TAW(yi$K=Y=GjsX>Pgt8B7NpVE)88AUb*#r{+DcZ#N6xQA zU6<!-n!l2;iIlsq!KdW3a#P+_qgSm`cT3vhwjbMf*?s5p#{A2<TP1RRHsxGp>Ge9Z zJ@2p4>g};EntU5Qonor~-JAcs^Pw|mzQ;Yb=8*Yw-}cOj%}6&k_Kw^saLdb7=ghf? z-B~w1uHL%0N%(kQ<P!6W2NSJ-$^V@Ce?!QRmmka)NBo#<|5sS|-swAcWa|Ik|NmOl zOe_A!NBh4wp7P6D{BwJ+`Os*wh?PlO>EzI9{_7Tm$uAT*{-d$|fPz)vU%#X^-&2=f z@s-Mxx~Fl@dzq<Q^?Y;dS9^}WvV8Sp5tH(%-@?n&QvWZU{AG^n6~+C(SKHfe-*7|C zNNPG~+|JKTlXmP$Ty#ID=*x{rzj;wdT-f$FzEoL%sgjxXXvRjjYv+RlmnwuzSYU83 zSc84aW2?ozT#1Hm6Tj>6MREFl_x#%sHfceQ+oRT`lnFZP|9yRAxA-yZH(Bd*GbeYy zv8(C%mgKcmWK-Jhu(I4+J=y0ApO@Pmp6qT@9C@PJyj)R+`MrTzbzJm6^(|j&!YdD^ z&1+qHFJnRIuH4U4HkVxx580M_muq*~*$Ats?zh3!-)>)=c=l-T>ub|u(%jR;Zmnkf zTet1|frJ0L*Y8`iJLl)8qxXLuwy%`f@%($;_wAOKKkqNNzhy<b-PikFmy6fFHeRp) z|IGb=2d_07v&TKI4ZA3J%sp9{U2wBE^ST`c%7F`eI^1UqEM5?xu|U-EnW$5nudEZB zpYo~ae-C)oUsb%;G4orSd-l^y?<Q%NM0@^^{>?X6N?v-kkbv;9oe5KTUw@BWcCk_5 zx|YeY;~PEob}x$ySk<(nWnHL<a>t^E3ml6~;%qvl!oE$Jz^CxlHp<p}ic^TbV7oz( zPVmeOgIgRD{jWo$l_lO5EL!;fWQ@~x`Gv;EukZV=a@x)9M(NF^YvQ)?JdL&~IdA@R zef*rXlbp)h*FNvtzo*|?u9m6zlk<_RIgP<3OraHxV&{J9i3K|C4KkT+rXxRdUYtkZ zq}+QOHbty;%hWV8<LYI7lPaFS`TM^IlDjut*tR-+&4%=}Ti0$K(9?afVeb{KYtyE# z%GfNnfh#q?_Q;nxlYf5y|BOAIr{=SMo@CA6?fF0Yr?^k8d$#WOSN``uw$!~j7;V-q zms9)v{NC4(`Rl$*PtFbtE10RcmHAy|lDt&|hx=X`1FKsL!d3@siE}zROH2=7nGqp5 zX-&q~TMA}36I?r*W;Fe<|JlC&PGcuiQZ5I#p;>8y%KGEos*{vHf7YFMZ}a@T<H4)6 zl0pwyDr&V~IV2#eb*aQ*rO?ExgD>{v2DeQW_nv>!ZE977f*z~Jg8Sz!F4&!Y@WG^* zTm2*(>!PAF5nDYZw6vZ!d_2arOl`S@yym1YI+riA|9Er1ep<6^`{#fT<#lzB-xoc; zeb2qMq3(WB)%ov{^5+(=3U1kWAxi4b=R-Pk(t|gj;S5Z<v1wb}{SB)giD(%&ZaeTZ zeD&>ZZ~c<Y*Wb_Z7g?68|8d*hcQ=#Um*<-MzUev{8m1|vzT{dW7vrw$f{QnYecV=^ z`m^n1)6S&HZ|lGRyLs*9%ew5OzgO>GkNNZIp!T_c&x{+VrQiF1?&|(6*{8$RFRM7d z7RZj?^H{w8<oi8Oe(kS)@$dIFd5cZ^@7e9FfAyww=S08l(u#|MPHy=$D`<i_`?S@D z!o7j7rfL=LJdv`sOMYdt35#P7m+if(paaV#?E+XF9hTpI{_VYeUrH0NsM^^L8a@jy zq)ZUycr{CqD<#sc&AmiUXiMXg%$*6Jvo0u}Tc)za!+x=Vl$sQ4*_ykqxj9XyTZPhn zyE4loWHjFGeO>nN(@Fj0y$|*t%5besnbZI0=JCktuf9`GF}}?_|4>~n?fuNhYa+L@ z^&Sd1VtH_PL!N(?{+UCrS2hP}e)+}xRwmgo;auqHbIrMz&$I<5%$2|4wKhRL=ct^$ z>3o@6_Otu?LN6KaJ+$mvWY1=+jvSGMMwf+`suZ_Kt2ZC4InA3jHK^j{vZ%M`+@E=$ z{q`^CU61!I-Ix07(~OJLXKt~RZj<t@UU>Y3hwr`5=dRDIc|1G*?wxWQ&-7)pZ!I(1 zXlCed_c7w(tL|yOayP!0JeIz{Z)?p>*63C3-`?iFvD~r$o~2dz>6&H5?eoJurnWV; zfAr{Z=W031w0J33t5>Vr%5y(%c|P)(yj1b%qGP`&cvwf3Ib3^n={w`oriC_9?%XV` z5+@Z5n%L%Oh%mA`OjcT$_CVybd;h1e@-`>t8T+mYcYdpM-Jt2f2k!Mdr)<o=@BR4I z_Ye8&brQBrNb9oy|0a>|ZS^D}K4Iq&ogg0V!$lk2IW9K3zZQRS>3r#oC%@&EZn-v# zZ35%T52@nO-YYMk`}bky-?Bv;buJz;`*_2BUd08eSnui6-QK=S@4MA#pDlk&``h%o zuT{JC0<KlQIgp(EG}qGXo5T9qaa;G!SQBlS_rChe6yG_U9Tf^!P6+$v%ig{G{I<tI z3qB?p*g3m)9njc%<Fj=B?{CUmz1F5oay<Xe-e&!_HQ75#v%_xsTAO{<+w*Br^672s z-|qihy53t^w#CcyzU4)W<zj4e?_FBy{QuRB%hmcem*+fRDgW--#9HGeZ&@cTt>ina zbIGoTE!$S_`8|okjI{>$Ccf%et#|LhlM_ZqmUn2_{XKg7!lZ>$mAFJ2%a@!>DEw06 zrxLurXs4K~h~^ffJs*#SZ+f{Y_Rp8|`#O1F>nreeS7uLbns;D+?bVM*Z}SOGo}el@ zeVyKfGrgDIESbX9mXaywnH=(H<I*Vx-iAB9zSdOO=kth{u3LM8`4Ov%!g_h}wgbyE z>|c~vZwu17y)*6nw9>TW?(VsYS~t1P{BO+_k4fm4o3*i;Uv@)i*e&aKmZ|rP4^OFm zp(6G+S3+|470DaD!OGjBj=G7>zHww$K%{cS^0~deW_Q<JN@<c%IAPpzSzY|efrIB> z%vzb++8X8^`pD_wr_<Ya$VyM&Tvd7W&E5U>U-x$HEV+BsY1Q52-``f{&fd1<{*Kpr zH#h8?xc9}O(|&7K^oDHDxz}c7_&Kq_<u7b4K<<vO|5(F9Ti32uvg&+%V<zMAK0PO% z=A*%9^h-ZBn{~b|dd~k&^{uT}K*$9#wzFp1=K0UJ*Zp2>^Y_MNn=dEord(SSzh6#s z$&^F9U#ir9o~Zx9T4MN2`Tx`HKX3Q{oBr^V+R=SGlXK+e9-0wTW4ZnB!~b>;=_}8# zj<Y>=GPrG`!Gl|`!wTN>KYw{sZmEK@LvpiT=f@d34#EqjC|`cnI?et3R)*)j^SICI zotvC$clEr?jl*qMvzsQK@+kRprnBPPo1|qS2gMe-ed@K|pSyl{+4R3F&115eLpQnH z2)|RX(zZfrleXHmo9pk_-6&f>-^;JuGfOaX!J61C&s}R&u4$xBzH<9!-{#e7TT0Eg zR=o9jpxym<U7vFAC%*Zv73_hUO9HN`y%dfuI%wr49V)rjed3NO3MT&+$=>Gjw<*43 zU;Jc6{MN!#{r$cz{cr7NoIUFjv$J+9(;WZmhn>R9B_(w~JqY%exxd|E^Q*$MS_zhA z%TBMnsmA9j=={LBWaY72E8otUxn0NhC(GY3d4Hev)@M)W)!2r|*XvsA?`oUA_hQkL z1DcP#=KkDy`GtgB)q>-VkJ~eQdOvdK|73Oe`1ba@WfGx3<>&91TmK_|e}|;(VXMUZ z7a6V1MKpUvG&SAVE}8j$>&<P2Jxzfsa~W&r&tAZ-Gn3<3ddfoQ>h9~a7(O4GB_SDh zVM@~(&Zs>aYp;Bn$+~K(m3>Xx`Zv427;UdRdMx4htR}ug3PSH!i|5bYGBwH8@gn=1 zJ3+J7#Th4==T~%=%2mJdnN;)jwtCK%IxSt6TW%Szr*56u!TM%p<(eN?+N`#59_w1N z^3tw*nNg2b<0pu8vC8ziO<nt1YoD>$j;F$|sUZ`}-Cj4u)gN%$Ju^3A`>YTf&&}fJ z&X_K}nU$@WSh8kOL&VXeEAIA7#s@A5@mTm|MutU6%p&`ao4fY)C_g&!(KY1338C)u zyCTFlS=?7UZPikxy7Ie9<e`m|-Cxd&O~|rI`FDlW>Ddg+t<$adZEi2$``GH=vt;|@ zw%_lZ{C8JYuI^2p-kl9H?aB8qF1`}p=JGX=MbV^-+g!xaQJq(!n<wv@VW8gT)M#e@ zGiOa!`ignxbQLNlIV;HuRJ8|o`G~Asa$bAwEBXHp=k{|)asF+5eqiHe6Kh|ywXvr~ zr^h(Tv|TwRD(=?UAfCHr)s$C-T33E)K5jC}c_h_(pr_-z^87!Sgq6eNH<n%5UcGqj z%zr2PG~Lu*8C{zA=)|o;W2T-55+A*KHP(OHpQsX2w<cXUcZ>5JwaXLIoYpX{obDXC zbx)V!!Qy#Nf-Z^+I|HLM#FS>8-M0JvMrJ$d2uW$_>ED9<_tpIle)n>+?e>~T!Kqxb zuQjz6MunuD6L#BB_?2aAR_B%GYivFZ!KzHb2iVyRQnVaj?s-}1nrxYUP3QSM_j3iW zzkmC1<zMg=uT;A~2h9sV`(771!l=LV-O@ENTYIwC?U-jEk+|{d!>-fjAAg1KYuj=^ z{r1!Mk1zXg4dhxTF0*#2TJqKzFAp~SJhITRWOv`seFCgMKX+}am^`6t!mS3C)7Ev~ zQTrXH+lActP`TK?amC7$g;)JgSrlq~GJD{+{`B&^pFFR_avz!M?>(3rH)D2e%FQDy z0#{r*b+YMG-xKfqmAC4ie%s9+|L5A{Z`$)K(yI~_x1@_7nKoxz;IlU;GS2;|Za$Os z+{*9gB956I-{VB5mrkoX#w#w-ahhAgFa6hX_0{eY6{m&$ZCw{%S`gJ8VQ6(Q`Mize zt^AE?ublS%d3)U8pANf!XWg$0bABB-|8~)BNrUZAI+Q-FRMx0ic8ojZwSZQ8$MK(k zera@1STseT<DhoyXD0y-KmYTe=d$xn*3td6>h-pyLrmK0ZZ~!$&e<Ta>HW&(H;eyh z=<j=@=5~s`;?v9JKR<=fOZs$w&69k)f0eW5YTo<&O#JhU?Rn4VTHil1Z`;CUNppgK z90~OLJg+WQCNe{FhLo+Rpp%kQiPj9Q6-*PXtitT`PyO}ZR5JBBXNsSS=M<h_exAH? zcmHb4zPA2xef_idJHIy`*O)H9I56_`r>UoRe&5Gl@v?XN?v)!oSss4>|HwOW@kNdM zpE~0|zIA-Xw0QSh*DCGlD-TX|PEk|nwds_&q@2zcsW~ZV_vAFUbWRI->1kW5BSrYd z6;}8xtm!#9+pE5%&Fr@KmMUAf)x3UZ&TX`kS{NsCt9gp7by)GobD<@-nCDr3+MyTb zG_!;2)s>Bz=XMF+GIPy#tn{5!@yOuFj0th)6~j1^T-h|1e^6R+CAqkhRe3@h=c$8j zQ&0bVxH8yg^M951HJ3|!{QDO69IQ?}x{NcdNAGz^_O!4?KaS;YFZlS4?RtDA=lMOK zO!{p;+1~qi%)I!ybC<kL2~+*StZi#`jN;y2dQ)w-W_?4D%3hIN)4g$SZ3!k7larkN zXIVC>sB(y~{XfJo{qyS<hL0+HUEbPNNO=Z_=}AAG^fvnEi{thE!tS$T_C0ou*^nzN z|6_0c+1YV_!{mNFe7omq@AXHlcHhk76MtUOsyzRCosWr-N%ZDl%Jtv(-g3A5uzBjq zhLrMX)u~3cOE<=C==RpF{;Il~yY}{W_HXAS)U~c^Wq+9)s>j^PtLOXil;SOo182;i zUx`Q+=}AmXoada*C-9onYVC~kcm7Mp6+IQ*^KWYS!XS&PUp&@jYo=?ji%8{4Joxwg z{{7egKiJ27r98%It%%Y6?Mp5lzR9J=vGJPW{dZ1JJohRJJ4#OV-hOOhE>|X}zHQaa zho`!?ZAdQeojZHI%j{DZlrwJal~ebVd%zw4&q#mQtEX$^qK|!B8Cs*h?(?+m`#5Kx zEBvgzF6HsI*^FnOaX<h0&))86`Frbg(d+k5X)~#OvF7oltRA*+@-ZoEw0`&mYHEqy z;(W~1#`B9Y&{nOuxxQ(W?fz-+K69BSh%_HLwP5<kGxL^nDof1nc(L7dw)tC!p!3V7 zuCDmmz21G!BmVlo_QLF@d3D$23+~_D{`qCJ-Km>t?eFiF8&%)-jrRP_&0}R2kQ}Jv zb+zQAir2;3Hw&a~{+#*qz*j$hrmtDp&1Uzs+zCI=bmf&;+r^hmSyr+9!m;Ks9--I! zexFzzbeiews_=Uqn$vD>sIiq^wyhy3W^?wOlN(p=VG}w0YUR`~yZu7FQs3MDdb|GS zx_8wdG|TM2@noClB|P3?@Z$KCQ;Ju!rfk0Jv(Po*N6pmLr@!)kWQ@}enwsP?d8;tn zSv|MrOQN411;>5OGWFlQ$MB$bevK_V|NIA64jNxM-v7yZ|360;&3Sbt`bV=`oPK;U zmtSsq`SGc@$$wsL>y^2=-g9$<!sRPot~Q7E1?R5Yk<)d0``U-QzrRhb^D8X7XcVP6 zNoT3Ve4!R8X}fy=+x9D$F8&m%5Scb}p6#(C5zX~Kj<3I%Gj~DM+Q8`0hpypq2N$;P zt@%(Zuh7G@`@3yl)aK5^>3)S@w_Y!NbR@EG-mdQ1dbO(c-@nR#xSU^S87Pvv**4{= zMPvY%^MWwWmA@P(9f?veE}nbvWAoaBCyXXn>8}pE#=X&7wlQdjfQ!uAxacTmZTqj2 zrWb#>U})9cQhGX!LHnHj@h3M#7~b+-SvBDcThFyFhF5#{*Ls()x)2(CwPSjGwdL<~ zQl}hGINe$-7~0{y@V<GaGi#H1lh@~3!^&{I#*?ly1VY}-l-ttwHcrx`LrTxqw(yro z`|{<Sw-j4nNo;Oj{^O_lzNu@Ta%#1u-7dPgj(daMV`uqa%G=^MP5r*-rF~J(!2oT( zjP1rgYcxY_XO`OhIism}$G~f)#D@1TBzMi_Tg`17S9Uf{?zhkUPcAOg_&DZ2z5k!* zfs$3e(V56!Zw}3=s`)<o)9LqrBEMd_r>>Y)@b&5Kile>e20<$}Ud~@8^E`X^`a3_9 z_K15;Wtx5cy~0bYb^9Mmy;6I0X{~Tf;X_uN0;z9r9N$K*oe+`ArExW6LYC}xucJF+ zE=^s%K5}x^(@nhDVd<XUzxDZLc=IP5ILsinT-<m0)u6{$C*3PM*cS84-NLH6N7?<^ zj*q8e8RpE4O)A>Mr}65l62tr-hu&`b`-r<K<rk;kz8u!<u)YsZ&e&)LWazU9W-O10 zda>vdOSW-O=LIDT#>tg6vlM0?eaLY{K~qONyv=(d)3fL464^dagxAd$)IR$<zS`K) z)ahf;p60)o)n`bQ#*`oSJ5pNld;jlZKD!T+T&ZW(_kZD!`Mqg-@!eTg@xPy$w0a1$ z&3d`Hmd!{(OKaBVT(h<DZZD2iT#t@F_1OQ;(ei&<sYWM0XfFBpld*o@7N0%!=j>;! z4A)u{Yq_+lY##6G>BU!<UjI-Y|HI_|p6_Od9D+4PUZyjb$=~;#c3qtF4b#d?GB=k? z_`6HQF8lF%eeJyEX|~7D9ay+*vBdG7uurGw&r!Q=66x!{x^P!*ZQ#An&rUam$5cDM zOpi0ROthYBQQB}mJaHM*<JHGf{$43szGa$v`TOIY&kw54dvG@YzvjJ<o9z!@ob1bX zt@!oZ{!cgFEkAF6bNl=HsJy?of*-Qq-<A8)yzXi4!<o+v`DAB4o@BbX;=M<QMjK;m z*Rv-z^RsrI*v9+V=L(m~HQ}zqiWP4^`YH3V&2(#L^j>S%aUpN(k5{?#AFsFnX>VD* z?P#cY?9tirzs;JmdQRQmcVmCP{p(||d~~Au7yUT!zGl|-xc^CAPaDo%659WJWB+6w zy~egJ0>PZ7jS|ORE4tb?9o&$3w&>p9U$J{0-CFCjmgDC;=IRrB9J`s{*QcbO{V!V} zIQe$>h1bzx{=Oe?h2L4>H`nI$xw+z>FJ<dJ{lvX4>FTG@=b;B&zVCScuDbGn{lE7- zYf?8}UU=R9wCeOXDeotmdA|Dj^!uK9oq^8E4OvPet7lcsnZLg#B;b^>nbZQ)x|>Tr zP0wFn+1j`7ck^E>J{FS|S04AK)~!?hdnA>sWToDnqT|zlF1G)vv3~c<>pvc_|C{jr z|F`uYI{&}_{O54){_`)FvI{(@-T#$y-}fhrU)BG+_<M^u=lfl+6W{HvH|Kw2f9|OG zm6z7dA2}yBstC`sF>1Fs?iw9#U>d6KD?5`z?<<GYYG)TopJx|XbiU5&IMB>*cP=~r zYu+*SYeAh%T3?O)W$T)v^Z#qfJ-jhfZ~l)r;ybIq&($!g|G4t}=FHn7`ITQo|9p(U zd+y9jv-%$o<DXrbl(uZ?iV&uzqMk0E<IAH(xTkFuE<H9~dQ0G&J4UTRU3>e_2pr+t zWHa~MDf@i6e>Dx=PwplkR`OEY>h(fAio56PDibN!XOkwMnfLC~-{brGizQ2K&&`he zZf5u4-t5k%hNC+r>ppxa|M_Ze{FD0nm!CzHkGihbdz_(uUYI@dkc;T6r+;RxRe8G5 zHa+uZjcSFXqhf>4k$IN0HHBCG*)KD5&(j@O->p1e{(ZyD$zM;Ke>`iQw{+K<g9pwP zUhXdc_=5laW9#pAGw=Vu+W&Ev`2OkY-@p7^ZU2vV+I8-_nma#!?z@q+MXBO%c6njW zGZrOAtH2{mnG!V{Ocq>~RN%@{n`5=pVRL%qEZ-GZl((&sTzvhF5F1~hz^f@tjLj;l zrQJRzT6-QY3lEmkyp(HN`Cb37PW{)9=RYo&|IcpaEh|^~M=Y-JY<6Up+Mnh8bu+v! zemq*8_mtN>_E37>-s$rzA4gwk6|^h=uGw@YSn2<IzNH(rRD}aqwskZ+T?~-o{20fv zy6s|7kA?jeoiF|gzxOmeUtP#5=$~TJ&L@AZy<dKEcuYC7yZ^kWEAO(ebW`0|c6<7d zH_!7Km!6zc@SmCe=Z*T`pZ~a*cJ|kO$lvkul=O}2J?-BsmtBA3AkuuJBiPq+e^L4W ziBnR0J8IdV&y2N^uPV`3ytARuDWq!M#@K?1PDZCM|Nj1A>Uw*v_}|aIOP=Xhj_mc; zzvVT#Qf~ia&wW2v);~Ep^LK#8zV8QYS&ly4lkr^jmFoUadP}FK)c-pf{nhn!)}F__ z`Hz41p9zvPWtpgKBpArks`LJjW?L8cHQ$1t-=^l=jCv@Wzq{?1M`sFy7x&8Y88<G> zd3{+%MQ3(|@1?DGzQ0(!W!kJi&*uNt+kI_M*Y|&Ks(<AFf9(9{ocsOb?si{xvpAmE z{qJmkfZT1DjFzQ-vz1i!cIL32Jt$QCS+;5~-_fLrpDKESy1W)x7G(8ZP8YY>ov>2$ z^beh*l?wycUpRkh&xh9sHR1~5cctw(afI<{R_o1gb2haH?YcYVZuNI#!+q0szuVou zTCY;|9H+lr#FGc_<W`5}y1Lvb`l!bzbN_Ik_q7dMH%?l5Q?B=<P%7&wr~Qv2qqZ0b zPOh}DoxEtz(|6VWn-WW#PX;z~=ovgZ_S&%1LodI|@vH6HIQP9DL&bk?|MzFT;pT!V z_kVt1kJw%`rF&ccvyIF7FTR|cwrEr9_x<1g{&b!dxM*VR8C{o8?fZWeAB=F^&Hw+C z|8LiFajvu9<?T*|Mt8f+Txge+u{~(bwVtV7f8<Zyv-Uande{5^bE@wfl~z07bY*wk zz^uSo)+I9ArE5!Qu4_on>5X#RBML>-3+K#VtFq~Fo_d*zcc04Yi<_)eCoMYa*QCJN zz~Z>*`cb_NwdG~6qTlV^Z+|b6q2xvUm)XxN<<ID)rQh56d|uW0pLNyN+&pV_E?Wnv zb+SiXjDPfE;pPWRb$FjdE#|OxuIjQBJ1yJN+VJ%Br$4{#|BBAK%6F*dzyk;V{l8xC zKls-C&bcRN4Ce@2vHjZd^IQ3*`u`f`_e<Edr#=07>G1i)U11llUiGf=ddPYqp3BI4 z$BYZHItFI3%3qF0nAT_(rU>Ykls~ncnZcvk;oSL`v)Qa%F6rD%9<A3C-Q}mAoT+&& z{>u5r#q2L$-f(fRROPSz>TNPx)7bcTM!}RLXBWB@-kjC_V}AWt%`~maCF`&Kc`q+_ z$TDKHOqSr3nulFmXEK|gGu$6=Q2W4xS9!mzHy?0dSvqCKzlC~HD-SOfyErXP%DA%Z zTG^A*s>9d3zqr@`a<=*P;(p=LWxgVR<MQqm@n*A`eR}pKZ(38&+VCGYUd7dYIs5#{ zg^8j{9)CC2fB*f@e4dRTZ-0`ZW77OSo02ECpDKOhE&W$Mc=7J+#O;T={^hN^VRGnY zr{y<!*~P14+@hN|MV?jKC}_Nymrs7as;91V?dl0Ty7zrjcwhNIuIz37r2f6%({Gmj z4Bhj4+xJIn94{*Hc>kzs@LGCob-v6aal0=H(%15jc+Z-`+^XI+m05L8>7EVMb1YgH ztFJnu%eb+nmB*|k!!`X{&q|S%qDjslggN)<mdrVQEX}`1Zu30(f*&uWryLRzkKZzJ ziRo$fcYiH@-fM{e`+feSqtmlxtpCb<zWiAt+tRkK>vrD$$-?YzmDhXUKbZME?&)p& z8%Mbs+ghKd_J{kWf4wOG-m4<>zlC-c`;P-}SHIAjyIWOQ!}Ho&nSyI6FZ^aP1RZ^F zV8ND2F54%$=I!~H$JcwU^8WgNXMQeDd48j^M11?+-}ehjO1hZaU#l!Tx&N2>d;i~` zWfQaJ{`zeHL-*g&zx(|bhdO#Ytl^m}YpbF9<TR_F&v`?;drEl{i*8)Fy!>QqU$FW! zjvD#gmJ?iVsmez(PZt)I^gS=PIWO%0=F$E?ALWe<Z!Rg16ldP6TKDZ9f1pOGp>g>% z6|*Z@ye%_!So*G<@%+R}$#uJubbt1l&Y2gX;Hgv~w_a|(`%k%Zj#~o{-<UF0n=59^ zM*C*Vql>3<Sxz+#oMqztX|vOx$((=YWN)=dzPTf9@1Eb=%69|{v;R1keE;FM+4;#y zg|jvqtM7Pxt$M{ZH3xQ<JkgzxL^&?pG<9$<oRP8d+&SCxMgL`^ZxkmmHtb{6SX@!! zKG&r6T$5YOp|j!o$s3~eWG;SwCRMSNPn$E+JhNNGzhzxfUsQ_p{69bMKRLG6xrc}M z!-e=7?m3IMMlcG#yZ1ri{{Lh78}oL|4^IB=nZ5kVWPO`=bw3}!-`JGd@^6C8_TLK2 zM1#w^j&L<MbH!I5>9q>HD^Srl`SRzE^(V6D&umrmYS9f}vt*r+f!OS(P{m$1=BGz{ zbmGt6uYcb@M`G^Nz3+Fn$N!wZ|3K*MbqNJGz1C!Z+Uvgm@caKa|0mU@vH7#_`SZ!I z&tK-@ZvOuhg1JjC@agw*?wMdxwkA5vNqeEFWM7|qhROR~b+*}IW%Fmhv@Tx8%dt{) z-nHBczweVXccf~1u{S3_J+L5pXV%>6`?m6lXJ482%(HZKWQ{4j>1y-iVE?B->yFQu zd-v?*|375<>)s#tIlK4Z|36=jZ}4OfkF8Z*>ZE^c%ZHEy>HEJat^TF(f>nRI!L5Rl zX{<|a_2MocJjv-kE9LK%<n%{dZWU!-lbR;`L`2E?>ar(RyPlLJpSx}PtBvi>lShhm z|JVPYCT(A(?6{NXKtTDtweKs{l@6u<|CYVyzjFLW`Ren#KNKk+?7YeI#M`?kzM$nU zYn-i#`{fLq_|Jd5(*<)atgk2BKd2ca-Jszmvrm7@>B=Rk8*k2?cv>^d^UUV+Zy!99 z-ezcIb6}db{^R_8UnJ|^um7+8C_S~sZSlcnTc;P@w_d;aMs&iLE17aT9xvbV@s#w= zl*^_)ax<2$SvY~;vsZO`xW!sSw~D_%c-)Uai`c&I%z*&?&r_uo-q_oCuDz(Blc81G zeK_gJA|u<M`?+g4CkPmEygd0cvh>A|*RN)+jlNOzG3?b=w%Wb6J$-u*{pt??SS<g? z^x1O%4-@M@O3$(QVN?Hg>iPga+h<anWh^TvTv=Mtsw92AY-2&vw7b^lg5ESqyIbA- z95q*dzlo<`>luBM6O|8sM#}6gzCTCm<w4zZl7$wRt_aN(NKGtyV{v_rglGF7#(jVI z?@x&T_cH!b=W@A6SN<6{BqcHZ`?ovv+#5UQ1Lyx=IzQok%)uW?r}sbJSA99Z{x|RW zrng$vM?{-9^}W+O`|2ITa#LPymO8Ut7a#r>IV7X$bS_+^Tk$lTmB*aZL9U($FK<bE zJ~M6x%d-=uR_pftQOmnorT+cyC%skOqRXDCy?p;l`T5sR7x?8Av#x2DmtVHFaMJeV zIP5yF_G9WY@!)Iv+QHq*Rn{i${rW{&HH`PQ*orLO*iOv|bJ9Mm^KItl?ltkDDGP<R zo<C8_R{hIgA^Kls<Kt;;4uxTYt`mEseWhPC#8%&b(Cd8MAnsIK>GYyUFABHiSF*bw zyQdIpINLn`>Cfrk6Xz!XJ)su1ZpW0^-Sd+wGG=5cFWa+f`q9V7XXHoynqHZ+e}#u0 zPheC=lH{xNX~%=v*M_n3{F<tq?DzP>KE+VYrA_B=+-aGcy)DO9bJzO1_kz2s%|AVx zT|LuY^5LAN+jk$8UOxZXzy3O=*D~@uUfS0DH2(hKd;ITpyI+5M`{%>Y=U0!!_~zZ) zH*?yiC54AJ9TbY&=prQ@S64eHZSm1rSLd#|f5+W!dauFHd5dB`ynK5?Sn@!oN9&H8 zDQAxfuG|01P3)O+-mNO`Xua5j(#y*~KH^^gY32Dpa;+N<IN3gJ4ey(DeO6Ir1Mh3I zPk-g@kNjBqIHu<3)Ge<*sMr5dweoV>IOp(p5$?c43xiF2Holm&D9Zl=)2-8qzNczZ zCnhg8Eqi0<kbhFWQ+Ul*mv3*EyWc<8zIq$GJL@cs&Z}3hEOFU*@Uq<LDt61tM-tWd zDkh(+vA4coGiis|<uxHcJ~Yoi;&S>%^%DzeGaljNp=`Ua75q3MQQZBx<5I_gk8{~2 zWf(#Q!oG>Vcza1FL}bRAE1wT#^By}ccGtLi)~5XT7q{@t2x;~^+3M;iYrF1M?~%J3 z_ImrytL&YW^I&`Z>*y_7muvo7>n9w2zW)CY$GD20#tn<>cXY@644PKHuK4JN33fjk z*$<cB|7)oIqau#;{^gKm(R+4$H%VXq>dI=tl@aT9m$dAwVYFv3?DNuH7S{cN=|nc~ zBqfO`U-x)-b@SM2%j)m@n>wQ;*rmhQK74Z0*{9zuVvgv%>W`u_oLU7LEt`a{@#ig& z+d5<Zob<D8iCvB})#u$f`e~n1R3@9%XPpqCGPyab2PR3mrk9`i)F|}(-ke82ZnDm+ z{wQ(0@603i2Nx`qEAsDe`L!*uYWGXk!vV7`b|>WTefRg*OY!)JXPJ**2zu~hqj1Ty z?mcy{SkCYJpwk|2>v2Ayao)YSYilD9Kezks$~D){dfqMn_<H&2akG|3t~I)Fz4OWM znbx%v>TAAP80(&%xRFcw^zNV64zvHbCM+z$?Z3BX!p4)8KaZ#TUle$r{np^rq$PaQ zO<uf?PTc?P#PiY+|GUTSzgf#zea_XpRl)kb_JiKPulaQ|@@uyrJ#lO8pIiHX@?8C; zq;F&C_5IXY9h37PE=>P_tc?H0lfK*X6PS0;d)#$;x5iZ4tZPModKO;ok&KzRJmka6 zcUN>mgby_>OMP(UC0Ct-%Gxz=Pi}c0Hg)-m<ATEJ{>AsL?;m#BdsNxJs_Edt&^OjQ zrU$#Loh;3GBocS$udJVc|HT{^8Ohnpt^_U<m@;FI^zx{g=|^XY?%DF0Lx2AduDJBh zc||9t`Oa;br*xvaW#O|kH(3h~W#`X(`lB;bO<by^^!deo{Tp?SBrgA#XKG)ge=4{y z?aG99`TMhNK3{q5bME?$?f(tTF3MOJ&v<!}D?2=A$&K4*Uv4z?leavw`~9xT*W;@D zq}RWF^zZljr{(sQ`r==C7ae|jMXdFDpZw!><+;xu^ewM^x>Rasjf4MmcmMjv<7GXc z-mJ5n)otju^vUO0_cr+@tquq~@Y7}GhRnlhmd5q7?*Gx>Kkwh2>i6aBetw^p?*GlS z|6BHc-`uK6-FmBwO8&q8^Wya6H@E)V$XC2))7$&bOmAn!?5YRN|1a5ozvF#0clPy9 zSM}{r&))6+QeJA2vcN38wEq)bFNJ8ZRz{t>=#gY2ZeSR@G;H<dyMZYSZ@Fw~H)`4{ zsdH+hvippfIf*%GU0Hii3hUeVdRE;mI%;iMQDVOT`~81C*W+g|36V;QJbqNhZqNMP zdHd(i+ou@z?R(+HUEUWP`3sw$o^FqjkzTqrK=s9&Ls`!0=N7Myd2;24&HvBZ>pvcQ zsHwF!?Aq>d9)abB6Iq`pZ;bf+O{w0xaehAM6}x$1b0lq_oDE$zWA^;zS8kp^#(TZ+ z@U`lfZ{Mc;{<?ib-ruxk&z42J{l*;)TMMw_OvCF(Zw{%fdsy*cp7(}p&-d5VssG)} z7{2E9qkj9JdU<!Zb>>dbUG(Do!ao8}TNX`!ys0#Hj)nDcpS6zZ>z@4FSFAE`eT<pg zYLA)uM^-p#)ql~hKk;_^KI@u4t?DzS=Rf~<d)<>`tJf{tlVe%`&3ymCcDoPNGFCrL z>;65Kch^*$)nD;v<?*|J&bVwUyD4?~l>WABIX922_P6nCSsI|TdEfQ}AB{yPsVoib z_Y`)`Ke;?AKQJ;w@JWrB_-q+@+u2X|NX+pKoMf;mOH_Z)AED~+ZyxVjJNu<>S>PG% zYrQdt@0Q;^`SRo6C*GFd-rhdHuUXjVjQ_`b)!TwsU$?X?n-*JLb|LVcdZFFd9e(BM z`j4y210pTDzj@18#VU$diFh&k$@uRt=$U*x?IgQh<MIoZt;K9})gsh2PT!XLS|4_J z`n+>z&Lv&yXnkeVdO^KQ%wx8$pX_|~>8Fcto(Q{F`rZ9xrK#JswF|Ac&*8uSUE%-Z z?DGw!e-7S%lkk(PKS=Yz$MC)n?DOkqp0BO7k6wTCz=d6*Ggf$Z9qL%Xv{0EtqqF@} zY}0aqz_5u64|aU!*qWU4WeV@s<ILsvq$js*di!g3ChOx2-ue&o?ay}_x8JO~I=AHO zv>7%#IS#nL+uwb9{l0s3|E=Rcor;aMnsUKA>cZ`tr>{IT=j3L!va-F_Gv#EZU7{S9 zA`f4gQQfvv8-tB|e9wG*;_W_TRz%L>%Jgng*I6@vW@>R8y96aC7EaXGzj^G@Ba!9m z{F|%JK9!kUGj-+7*fmo3j!gW!`$zZrKZ0J7O&bpU@-}PsT%ms^c<niXD#eZ0I!=B5 z!oTm}>FQ%IUcFKZ5RmYV_wQVoI(G?Er9Qjn3Xz@$PLW4JmwH;Bs|!^`?`2$Fu;ko~ zBfR?2=WksVFaGkPPEA`~v*gR=>$lGy3_h+=QnI1$s+8UDrT-5kpZ_!C-NUPY9_;?l zzq0hr&ArpZk{hc^8z&xQtomK-(?9=Mm930D@6VuT{NAh!FB<rS2kluW6CtR&Pq3g< zculv*Qr8!(KEA%1?4K5=m#;cLud*$xxNqGf0sVJ1Qx}^4{Zh{JVXOQfbGuLP{3o3M zy1D#(@|vjo-ShP;uIKI#^_wsEIwLGfrGmDLL0KI82MuKO;yF1>V!UqPPD=F=NN zsfi1NIxVVlCT&jUma#N+*7oEqw(~yX9(DL;r?F1-wpqvL*UgZ({cP~}wAU4_?wG2N zT6TZ-eJ}bu^?gdxH<R$#I&SUjI?7+IX3U(Cc(p6lXYR}++`k=6H}3LKv2*9^FaD@{ z_fF+&Qy+gBwKLfQtv|X<{4&jEiJYo)lbNEpG>LcSQ^P*fyRGvLyzH0XVLG))&~&@S z!?OL~RMx-0?Wvu2;qvB5S-JC+)sN4RvOc{~`Ekt)=KqsUoA-V&|NmH+XWIHDQIQWm z%69*`;=i{$+bqtne4+IHtSd=A?)i;D%a3IrW%2r8l5t*HpkJf+<rf<pUBBnfAA+Y! z9kgsUx{$SW$|=j|E_)1Kl!WKsJoS)y_ssP^MK_;L|FqX#?$Js4eJ9plzvprNgqPjl z<MB_$>z{8Haot>f-L5)ePn!7}-ZyV@j!yfucSgv?EtY=otL7bcKRz=%ZA<7aVYlO} zY(D-8^y@vpdBzc!z%D*po4GUnueb5|uT8uidV9yuWv_pnV6UH-8y@4mSWd7?_0cn( z<;Ra#Jh;nW^y-V@w>=+iZm-+b-hDmq>E`%9V)MeE9QbJXuKKu|-KWOrmEo_}ywUxz z^8XKp>+!Xkui3&kK3#R%@U64Z-L#Hb^ZGgVHiR^)*RdJDI$^djV%M+sGh1(OFMj*& zZOr!C-~P)Up3CBry?ZTq-;-vhh4PyU-!9FGDOTON;K-vIr**5_545Ue_WA!k?q7Vn zx~`LVcG!lpzf)^ozMh}<*;RYS3Vi_)t{(lc3l?FyH_n{Y65--{YcxxHEsJ)Osn|zZ zKL07*rkxQVbEKtXFJGCaZJxjIV#W#ceg8{0CmuHAn{RRKO-XBe{U0fJzTUw3c@vft z%UEt}@4mL?`44I97w<%_t&^I@f2Y><&*k@fG$OWWeQj>2T6^llC#CB-(T5vr^93~I zRmIlU98yR~+<5fk<>C%eoBQe>OW*ESb)LJ$X_kbOX29I_MYl`0U%Y+!{KLn`Pkt5A z{95){^KAEeTVIEX4;vNPs@NnY@0{4IZ+mQ6ciYca{`*ICx5pj2Usr2x8|#{u{<`Mr z!tft&#OFPFaU=6sw&fJ>fJuRQHyzS%6hwUxjX0llIY%sDXU^JPzpQ^;n0x*6CvW|e z=cdO^dY!jp-t7E+Pyc%#j+H)iX!+vw)Geu}=Wg3we&OraUJv6{6V7KFW_F+Y6Iu29 z)1RmRf9?5QzW=Z1H2!Hn&))xI@P7CA>y=;L+jp;C&hvHslLsFkuZg;Lcv|)}W1|42 zEC;(U7a9*;=2|O~xPn7Pd+VzM%Ib}#$2!ZJ3N_Cyog(l|yYcrU`!@mSru@8SzW-pt zajUo+KP`Hz4yn#wmvD4f>YH1e=PO(_c`m)?_MXnm!TBFP^2e*b-~C?g`_+6uj|h#7 zHP4#g-#Yeodz|b22U6E~rf>dbVs$t()G6G(Zw;H`%%9(kcsCzQx~05J>U2r&Eav3( zi*3$!22Y-$ky!J^g1vmN=f2_z&+GrF=-dBS>OLEprj@><@OPP;d;g`tqL@u-roX?3 z&X_SrIs5~M?ZG8|M^tid)CiuEvYET!))_%omTcB|%^H1$>D<P9D&=E-FVI}&wkouL z`W$2H@;w^oZNI;{J?;KE*4#xh#lgu|^Q`u4l2~%|XRD-n?95D4q0Xb)>fB%3ByEem zN=r+#CT}YV|GxB|@9q5d6VI<j>ph$lo%bx=zR=d$Hn!wx(VhC^9G5TamhCT_RKt;R z@Uq;#^@WQ*Og*%Mr}rZNoS>+mPDw)3eGf^f|G2eS(066*?(a%UPrRDfL~ico-}8R* zlh1P7@0BpWuR6azs8_4yr_Jtf@{byK*H1fN_wV<dncHRT_9evGS30eKfA)Bx)aR-0 zWuLd^?>{ipc<~qh{1dZ&PTlg-rX@<*t#ZLsw@z0R$;Nrc9b0Ek43R5b+tyXX_0wij z6kFT%!mKw2b5FBZKAPx0u}0qZbXP{GT5ibAjjtKD-zyQX|9v!HAo9nnWdDgK$33F> zIJ+0fvhs?)JTgP%?Q<g~2Xzhm&0RCrh(@U@s7!FmTJVPbjYWmmHyL~8$n%FSE%(no zaNe>y&~D4CH?`l`_nxo+zghX+n|HlGj~(p&SyH2su<gxHiTziCMI~pvjonuH@a$su zSN3(U*wx;=oG@8^*^ejd|FwqCUio72@?$L<_+?BcH*8qrY1+|zApA!}kFZcS=afU@ z^Rq55J9liQm~Pl@9j&sq1N;VRMT^tFXBv1_`aarna^+*=mN<t6Ry+SLi;gr4NlE-D za@zgc=E}dZTT;6A&3XD#_V>{v>0e_uKdrgHe0R(eQD@B)#_``jY;~NnK%}K{ndH)l zKn+2c$_QPK$i)e_o;d|B^6X81tU9~m)k|5MosU_?mP^l>JLBnzm(5T9>gDZzDVBGq zh=1)brPX0;Q&WDr=Is8Z=GSBEd&#JTb#KnyBH7rddQpW_D>k~m-=vqb>f>D3DN5oR z97fqQ9(_2(v-Hrft}Ed;b#`0K5i{ugw5ju<jO3CzQIr1JuYSldPu{?E|A`}4nDXD< zU%$)B>d?Y}#}AukhZWzvrX3zv{?%+(*p0L)>(;J|{&(@#x$FF<r}j#V|NCNGKco6V z<Nqr~TJ!B~KWZiJ()|DQz5EBgXv>uM_pH|3w`dN$X|ZK@MJWHfH#Y42;X6`%`OV|5 z9Zt6Pe>pi_D4^rHh@a3Umks9<gx{<+w^>ki>hH_V=j&Xxde!*veCM?K#8~{*%DsQi zlk|I^yKVlwc>d$i^nX+C|Jq)EO51wglh^kvS@&N!do`SA)s`}`PM%If51EHw`Gn0y z_o+Y6ur!%Dt(vK`sAKDj2oK#QN*U~$Y^#&{WF(LFU;8vy-OhhAXTF@(iQemX&M%!F z<F;?cr1Pm~1<t>z>^MH}m(ohv2j_0Te|j~%{L_cz_7~C;i>|F%G-Xj(^Xl!r0!Mw5 z#GB7Kuz84FYuMD(`QX-CXP2~w>-;7G9A+n1>@HGjY1Fg*GWY#yR;j%EVGs5NO^WCi zn;8%#x~BAKjNWoinQInevvtqOSsYvU_xO)?c{|0%=Ns#;IwaoScA9(p{i^2=>VNm% ze(^5KbE%o|_iwzRYyQhWdU|-ZSfBix6>*iB{L0zgRsO=0U0!6ltXOktmG!jHyRtGV zO%oqB$-TJ#jJbU6v*7w-pUmVbj5)6ww^`g*oU|%E{?EQOQc@FtrcHe)DlWJ^t>Wha zo2MI&%wx_k`uk1#=gQyjpZ3;r^Q^yd;%>Q}hQG~6Te}|@{Wlp{OII~*nWMUKTHiUF zFs~(M$Fxqmb-5_+@;$D|6)3g#V5L~=;ae%3+<gx19q%i?{ggeUZ&q+@L+a_WXKBxF zZ2vEDJ#Y7n>-@dJBFE=mukScsUeoHn?`P@1uloPh?-gEd|FL@iZ<hEUr`;=R|0nj% zm3eGi9(UwX(wW)$It6EQ<xH1mEYz58VtecP8yBDQ@&mll*9BM(H9lsaIV<auch}S@ z%eE$HP7-`vwq@!LRu8ihEv2{T)TRU}U3;MUclYM4zru?f_wN&Fdv9`TZNaSHUU3$8 zLSK9c?m1HEbjhpY^9hOS{+>_U<9{n^9Q<xFeO;8~ox0y^|GwY#*-USD#?h`v+vKKv z6ZGA*_XN{xgNs?K+SQt}w)S1De6D>}`n)L<Z^cfBm7?10i_`xZ7Rogkd2r2=>AuSK zb*FJv<#(^Ev2V(+$9~t#DmL|sGgs@~QFK}LjrETCuk-I5x_W(X((`r8cP3pn{c|w> zpZ2?5um5h_oPNZ|w@<1!xuVkimgFLd8eNU$7n44k9(iV?zG~8$_1fo8SF!T!F!62` zahhbZ!eqJSk7LDm3csJ<nEbpyK&a^QS$U^NBAwYbUyca>xw`y+$L+k`GSmO$&#Qa4 z`%dxk^B+Ex+aDL-_fLJ#`+M;Z-~900mV5I+UwD7etG6y)Ql^t@>(V_V?p;1Q^P<|* zyoHiiPd>H!ag;wN<<EhrZ+}*>i$|_0-QshLU8Hfr+8a^^_bOTDf979m(rYp8X4Y1= zJ=gYqnDQ^hUGY69&-23{))g6k-`93RSNqi8$fai*HuhDO_J#M)OZk3L|C9UtpNA~P z65}<m@$&!Ney_^?f9UOXkFL$$#-AIrSuS6p-{OAGznSl@INX((o#py^ak*H<6L~A2 z%bNES3eG8)>YiH4xNgrUzv<tdZU@G#Uln}$)aiCJub^{tWS6c_Z@61M|9R)}e}3!s zKa8vUaKt?I>Z<OYNxyaftl$4X_vhRApG7Ys&+pGjHWw)R@xf-VvtS1Q>I0u!OiumT z##$4fm~`^Mmy;L#r)-pzcX{-o#&xri_p9G~9$)*ux$G=k+1_6or%$c+xKuf>`lmtm z^|&Lt*Y6zQ|Nk*EXlwgb?Q0*N?*D62|4-fjqrBbU=YPK6|686Dw_EnU{^z^$``W}0 z|1HmX7IJmL79|d*oIM^(L_=i*SBQQncAc};B+cD&>+`}z(~iE*INUFF+t;l;mT6W> zgHPJYCE9|8wo50y))jSasFK-kcxLJD-2b{0&Ru`qS^SQpAmww{(~UwqQ#*4HKDw|- zqpakjc#EETV=(K|M;6PjW*M1pKhP-rcu(P@?iKnqjDfp)=kq;v@{8YB)f%_4D)h$X z{XJ8aSKrw8l*{aE&!+V<j~>0ba4oC<n$z95+OKcltxVq^KRGEbGkI_0hG4C$8w;|^ zVnla&t&xgZt<~FgE$(7&-0qn-S5E$OW$yn|e~(W8x3})k&-_<!rPup$H7cK(-g&8V z&!qm9kv1(&%R6cu*Cg~LEzmz6v(&S6V{4#Py28PPxyQV^KH97?ozg60U-MAjqAW{) zVf>R@uiq;b@Z}#>?K$5wk>6IX_F1*c*37!!!t#%AitjtS@A3MA`?>rdUVQCW&T5<Z z@O9=DzoO%FuNzrCf4InX)>*OR$E0~mm&NR>WZnO{Sh=GuEOk=+zw7(YmGA%0vG->~ z>fzNMO6_O69QQipM;|VBNItpb^*7aXw~p-6QTR4t#a>Azh5KgQatl;fU!M0ycY63Y zk*+O1hlFg`WM1~%Hmg^?U&rsxbwM`s?iH`CKR>-4rW?KQXiJ=4N!XN6OQljDY&fg2 zFl_awN7C+wzxx;@@3!bWz4%>HKIN9p(Wdv$CG5Yp{d+e5&mrcW^NOOf^X9y~RS~Kj zx#e?j#=?6SZ{F8xZ?0RS8rpmP&35^}Y~t(pU%6dfu-<%6)#CDxuU_xXdg`-c>+<;8 z&pO)eE!o@kmM3zbG0o2K7p`b~7}I(2C0CtZ>f>Ec*TmmF@67)`txQizgQL@QL2``J z3zcIFZ*2a4{EYAXNAs%fPF#5-lNoWKoO9|g4R*eL2ku_KdwPGxgY=4TJM%xhx|d&k zI`@0Qle6zHd_A~3V#eIGHAQo7p5)bu7FGBu6x?0>rM%?RKWla)&xmeA&EIh~E&u=h zu0LXL_n&KCan7v`V&~7Rbx-NzF!Jg;x2;V7Wbe`izSCOv-N;&b&dHJS$)N}0)u)b5 zjcq-2(@o^9=iIs5uDRxZ7GP>D=F^?CczbMB2K%GdY~NYSK4<<?`S2uW?YB(EDH`h^ zye@ToaDT<t`pEK)KML(RA}(HUzs$$PFPojzd7*Pc2De}O3*nW{KW9DNdsjx@c4gD% zI)lPLH$Exvo|pEs%Pwr)%?EmshL3i2FONO#^>otwy7Z8>`p4oDBY*vB443-L95?Go zp;4mvq*F<)F)v=c);E@}bXn%Obe4g2?BbdIFLg7d3Z1S9OfpH^u>Qoe(psCMPdtHl z7x|RMPs>?!m7jUt-6HkXR$&udOvAqEKR<J_wnu08q*pm-{x~(CtY`?%-*@KV#s+u! zpWN^2|Ihz?_r1-rx3}XTzS$_b@59vdAFt2<$6{aVFS)k$_qK1342}fOmH+$T{m)PT ze`w3qKlKgDetGI=%+^HRL_Pn_SCyuJeyKm*(#p*9G-s0U&b4>FF9{lzt>^hB&9SC< z(SqAu3%2gtwme|pHAdUkq?WL)8eQK^FMaV%K2x#wYSoR0T_1&9PO$PXcCcLBSeIaZ z)2F#qKr;RH)f-_Qll8S!kNyk#C!U;LdN<|EjU$@JG;QS5LoU2Jk!|lel`l8W=iCI9 zzALIMj&jd=gs-y9Tvwb^!ZWWnbk6!E+VKeqPXo@MIF-u7zdq&bE7KVJOXq(T-L3sr zUOzEr=j}{;0aZCift2t1T$7z9J*;ln>T|~BjF0)t_oW?rANr*A(rXqT`S{p6^XkDP zVukB`r#};1?Wec*S8~nkkLL|61U6Ql-L}TJeBXiE_dg8|A8yWxtC!vXd47H8=H+rv zUTLp?R$O1k=C5t{YvbOI%`SzL_v+Wp&aZu2ZS!SqyQT5`zz(bIm!C|h=SR7}Xw6VC z>~g!bNYIsMy^K?VNf5KA*PPVE#M@4*x6Qe~=%Jl}$)qPsYXnNNBsQFTHdSMzSL?Z3 z7x)iFS0DNi)_x&cul7{r#4CU13+viB8TT&w_FH|AY1EfndXK!aH(tv+xJ**Wh{^B5 zxrxCGYm47}sY<B47kvH6=c8YvRz93_O}td((`znAfh8TEn3u=cF<1p$n-JkGbzH{U z<kUTL{$$_k9<^jmv8AlN)B0*W{L9%7Yq!6Ar)9XQOg2$3AtTa0@QFmEsn5p6K9{;? z=9U@NT@t*meP>&y>D=$@lXJowO*{+z1go1im7d9-pL}KOj>Y@iMV$q1xO?<pk&u*0 zS&-kcGWhq0)1_s#Zv(ZiM(+FL{(stDYyZLpM*bqpQ|=ypo1D}5)OG%9^Yx2ExHh_7 z%u>4|)fQCFW-D~O)aLEO4H}atWNB!$b_A?Gy8L$by^QQir`bi@FYN1bxG5f1>BTFt z<n;9_-v_^6ZwdNad0zhFzIS2=#kX{@O`g$H{=2C?`~93Nfh(`gzQ1~TpsC?Y#W`1Q zTb%VZnzBqnBPVLxoAc6{Rr6jjY)~p`UwF6r*O%sVhCCsStP6aXs^0u2@G|D^{qOfb z?<_bF=Wu9oY1lm8E$23b6l$m**{E8io0GKCZ1$3~GqQvfucf_d*ZH_T<!P{L?liTn zEJaf;hE1>aEnnGPqxm}L>mi}c+KFC!kNTwYX-|ll92jZc8p^jZw??Ayd61>Zl$xU+ z_2RL6Pk;FA>UAsWlU(Ae8LQ1Rbgp?SHOGH?p)0CU_B7J+#^J`p=`-iA4$@$`GTU%< z__v^yrW=nLhOhK}V^#8HKhxy{DZgj2y}HL*#B||UphvH+)rw=s-mE<S(Q$!7fXLEQ zjhCE%8c1AIdV1h<`14PR?H1}z$EIcEKD&G*c<$f1bNS0=vwXC9oRjqWY=%|gyO5+y zKdZE@l4Lip^flU+G5xGVM?;yI`l*L0mODb{=re9VX%O>Dq3oRO<|g5jX{)B3W)t&y z_2G|=`Z=FBJuya6r=DNyoLqD6^4(U0`>{G~b^be-1T|~4L|r=c-9|?&{^yNv8<$7S zo_MbN6hn=QbL$1OqndLwRi>G&dgwI&-GSr<>$&;m!!L<&22^%0v8#&{$iBES;QEDC z$F98M-f=)#Kz_B7*lOQb#~#L%y}P@@bZ5=wEUQzMQGr~Iiz0hhoY5DWt+vsa<=lgx zeIHM<Zc!I0uH5|nMd$HbVI`dM=1YA~?RC-FR<iW%=`HnfO~;G)qRvHK-n8wO*JNi0 zg@8p$3)L@8=5KcNua0e8K27vb%=Yzj(tCpEi6_jxdhUCvVE)eKUyIb)vRNLl@m?$X zblQd3%|8xVb>wLI#qhbG`RSu{-Av)to%eH2KYn9*>06Ka*@Y!uQpeXu3CXTDjpBa$ z{t5F+p+LUtYg-;!uiy9Q*-qnb)!Auxv^Wi$4&4yRwTbbYXd*44lcZy|HR5&Rk(3$B z5<MIhcs@zUboO36vO&Q|-z2giG^&?nI)@wg-JeFXvJ3tQ?VW3B#`}Hq>#c>C7`o!x zT&J^ck9;L=nYizsQr6ZF0W6li^WQsdZuk~8^R$=fQKyDWN%N~q{|k2-a=$h0(iix# z)8@`Lab>n7!Kg<oX1`(0&2LiVX5e|g+H7Mp%k!oqJ7+GrIm>3hr<iTvs*np=sRAvr zUQ3q0sBHe}r03zg$|aMj&_yX}&Z!fzv0_&>H%8`HX$RIGy`*pXan-eBYmd4m-?B(+ zsQPVZvOz*UQ_FS2j^5+14lKHmF-P52B}YlyVZ)ZoxnZF^y~%0k8z(2Pp2nY>Wh&iq zn&aivG8bR(_W|nRv1U%CicUus*76?-^bR_7<Pj^=spmJ-%Y;R`cO03c9cBGIW2vs) zzlZ!m^XI8wpL}?inwgOb*PpO?KX;tk^v^MC_qSjkFBKM#*;npGvT|zN58(Rr#D+gv zDC_KulQS=eh)b<-cwE^P<leaR=+TVtjgS4^Jd0NCHCy{_t4hg2U7Oo+9TFK@s@;z` zdP~=SJ0x~%mgu(l_r?1Z>d%Q5{Bv<*JQZmjy}fMDyd_c`=?ABGX%w9H-g&2C{a!!+ zlnoQOPq!Yp&L?=}(V9cMcsTYgkBM8jRY64Z&0D9)rw4YqO_~*UXIB2vv^$q~&Dg@@ zaqQ~Mxl&O<(}k99<2qAdr?K~gT(Lv?gO@c4GQ37T;_8x-evf24MFJxuQWnak@?`Uw zNQzaxk+I^{m}aAu>7p0f;ai|}+oUl_XB!VE_ZxXzmc^Aly#;3eI)ZYXD+TAA3)(*^ z{ov+YF8%<$qo-R{cu$usJ@w^|%+(b$4_0X`+#a&%3A@SVBX4fjKlw0oXRG;brf&_d zjk8WaTB_O@eIQn&fKer2m!49ickpzp^g<QA%UY$48=6&h^W$GN9gT^K@D@vHO_5(? zY$2F+H7)!9PS^F<{**D81#lEKTgI1bzc~H8$oACtEi+u!eEJ~7XgDcK<$1Rj>r=+Y z#uH1999v-YZhzTn{v#Vx7i`{Bw(;tRMQKx9u9+UV+IYg!BvRo<#*&k#LY6LJ`=iP| zu_>ZCuU}I4%40Kc7dICDjk&WWoM)I6c0SPd&N4PoVOL?A*qNcX>`Bqno<CvFHAPGs zUnyRcdYiOs_vtSsQv<ZlG95O1=hpO~`{{+3moIE$**Rfd(aa>p{)pp$?j&VDUm2{P z_H5Pi1E#lM%Q2QtU0Z&5Z|LF4s*T$XnK#9^G{#@{(p(#w(R1-ylxOeeV>^#HUFmC` zZn9hPLXo&g{;lu}b^G0Z?|f9_^(_9w9?o^gQ`HK#h?(+V-}GzVw5YS}EQvey?<H)U z^IA+<*3$p`R44oSY*8wvkE#_L=Qo|4ylr>Vn&ulvN}h0^-gW9|szrep$DAU~N0XMk zoOESNR$;B8xX7uq7Dt2Eot-)BsK7q?4I4HD%%7z*qi>y4`wE8CXp85~5?kh*=4i}S z=cwIqa;NJ@BPHKy-@jbADr$6JXOYjLKQU*LE(feXC!osviaR0JNx4YGOYV}7;u((L zHBSRyo!ETle6mpc=fcU{pFeh9JbBW1^Jn$obn)Br+e1P!8K!P4(^tAuXmTrR{}k)n zOU0eV)L*3Toy#2cGHKSbq@J$_US6@tUGuTWblz4!%XW$E!Uacm9!TSuGOLF_!1_aM znyJ`rsdfK5H|U$JXWp|_?83Fp#g4}>?O*pdj!|iz1=Ex-qD;0kJ|CWRX_v9U)#?0) zlk`69HCx{tq?K%YAno2&t8TGgA${#oE9aC;Yg|3H2J@bL^`cj0<28vb9iOI77nIBD z_LQ}g6VmANGM?@><u8Nwg-s7S4<@cO(cL!hLXK(SDd$9v!!gqLZcWf<EooytwUkM= zu1~B@M)So4lTCSRjP9;6j}jK1+Iln1cxJ)#>x##J8ozV9-E{5Np?Q3wpV=&DMwEA* zvATXcd&ahfn_L+Jl{S@SEC}E7WbM{TYHq&gbyw8r1<bqFwMO3|@^whknr+v#p3jL$ zpIYoE*<N-{bIw=aX|kcWnf@$i+8gkp`K@$(5x4g({kO8S^X=n{lxKbZcqGVRQ_4~% z1#8BVONw3ln%?ubBnDhs#MHRY>6|`$oj}{XYf&X(lQNq*qnB>}rZqdEsi*Mn0}o*X zv$GxxHWf24@J|EX5pe9?8bvXVm^AxhrbVJn?Hb(~?w;)yEeE(iILV(E|0I>OVzV&U z$sfT{R!eThB$Vx&sdr86dGceiG;y)#LX-V0+^;;#j`<ar`1@z;I+I-P-I_BuJeNHq z%Di=kg{7cs+M>OR(|mSUbMM}uG12$%>D{(#ouA8Gi_rYWfAZ$W!syjuCJ{^LUOe@g z(?<THm+sY#Yqln>DZLhTK63e*;!{zJdrBuQJ11FqENV*exn10gYFV4#&iOF^7{jVu z#infm`aQA_YUb|Pz4x(h{#qHX=YOvU-P#%QHdylN%8ErX{p!08e-1Sas5|+2?}5wn zj@{g2aVm<lwP@e<rA>!c)dX;ac1#L+{G0P!TZhF**C~Q?gx+d>?Q&hSNoZD9>Z;7S zUUQx-&pOMsF;UO!(dBEq+@e2EGh4G||L33yGBE}By;p8}So2C|^4pzaGw-is>fV>O zE=1$nA`{E#>|?^>d#?SFXJX%xba$2C(vXJDdY!^Mzo*L|S#|E#ktZU@`{gcwE>7R` z?9ra^^?t8ch-w!4afUT1Oj)D1Ho!~7!gErH^z$PUiwpdg9$R%rD?;=pk4m&A=Lxli zQ#N;;?dYwYJ$1$N%GZqlT9;RQGp36_FaEr=BJt((j_uck_3ngtTmB6?o2Xf_^sn{9 z8m(9JZ+A?}oZ)2iI%dwwPVd48EXp@)^<@oob-%QJkI%aAys?%)rl9^M>!Em|4?(x~ zO!3#}tnaK}cJrQvsej;E_PVVhI#;9vZDLoNKG*vpUH#_>=lA+87L~U)r)X|G+_-$} z?LE1(x4P{%7UoVXDY5apbmFYvyoono7Uo8AYjwWL`gF!KKdmfmvYMB`N1KT?dg@0N zj$Dok+PFw3X^!CJsHst_=WLx66~6sk=Ic2Y*(`ImowLe5ntd$uvd%)`Iq@@=R`WH6 zY|@wBCa#r{e_xeR_vs?<u%yhyrF#Rp=G6af%}agx(Bi$7g7v5Vle5;|YASgYvs>uJ zIoHkJz0J>>&To6myJ3p5{?ErtU&o}*{2W!kuuNanKd5oZ+w;ne%Y>p9hVh>Np4A$2 z<CUIx6vtVwwL7Qu-MpNB?Cz=5)Az-)uX0H!F22Ei_(JafUs79yEN#t>emcl_O#NBp z&Z6GcSF=_wKN`C?wYfI;zTVdQ_i~>WPFl?Vy?Xia<DrW;El6Abyd-Na-<B0gitX}0 zf;ftw*a~L5gd7uiEtEWEW5>p0Qj@EWS#dJ2?kzp_aE)h>X!LB2i7LKpyb5nF;=C5l zVliiH1zSn=)@gTg4ppADo9?Tjs@r>d`L{XNk+&km<GepI&FQzi7u2}N!9qN5($WK$ z|4#n@d%x|pdzU|j`T8%J8)a#*?r)3&*A|z3VG}oQ6J@Cj(P~-Sm!!Dz_)AM;J4@52 zY`=b=ukGB<Wn*nsV3F>+;A+pz8LJHJ<I}5_J^Hkh>GbrUXU<(s{d!`9cdn9c?cA)- zN2NV{nt#9Fb^F)8F59KCQto?x-HQ9Z_kEqa{u$rbvexlp`$b<HpIj8Qpi3@D>sjcF z=O38jTP^QbMlEc;k+R(A)>ikjwS`e@riv`?Dbz9*n;p?}W0ly3mBDPQH)*ZrT;seo zNIJ4yZ$ou=Tl+q}sZ4XD*Blp$T>j+Fcl+?0BCMw_pW1$I)s?h*^``gdlDVuFo(=go zt*@bY_VfAGJC>R?m95yTa)<l=@rg?Vx6S=1(HO$nx%^1QDepit)6Pz*jh=fpD8JQu z{%BrbP?X;EoTV3|R?Xk6@@BiJ#W~CCZXb*F9?Qi>WLPbAxwbymO~#$$(66h^JiMis zFH07ExKS9nJFWTlj(<vSVc)pLq6$wPc@vqp>#x|(qSsH??cZ%LX<K?~u1)2n<7INH zhPUR{eC7Q6$@_fA;+4j$ZoJWYZrWPoH|0~#+OYD&+S8R43Z=S>C&{LE9J18D7BxqB z`i+pt*GHDDG&<(Or(HRDlGH(o$3p3Aoi?y}=6ap`eko|>gX3bUvo{8JShXv^ofGj` zg~xU-xAWVWMU#$X7Wz#(bMvK{qvbJ+&b84+?D^j#e%U*VEm3Nks$*TiAvFJcw3_uQ z%kqrpQx0`?a88kMi9D!!P2#qX(Bds-vU^uw5^a|Dxsx^HUBaP~Dc#$)Z+^2Z?b+Fy z)O#=Mjj}(LdGv(M30_z0btCfB?yuSH7S@K(r*KGL(_0+FbK<$pA%)E?({pc~cz3<u zD|h3oU)9w!X2veL=#i4P?%}#!o2K(BXEUT!R7B+M_~>R{AR8h*!ROB$>n-{1bLXsF zVmy^?dB2RnWH*_bkI|Phj$Vl_t^K|G{#$=}JB@koJ>!ZJWZjRQdl1>)AsVl(DN-cT z?6Bq9gQ6yl<y$;vMF|!rtr4B9w9<2KDO>hhmz5j8y4~WbnIDktd(6MD*e|kR$x4g0 zp${}u*Yq!+Q+BTN{Tz+f1x6=6m>BkD^`t}}(3-t4U7^YKNaXT4#ctYx=Q=N+vMTIw zRXKc0=&5&@_J>=~zcp=Jw6<cAOQ-3v2x--8Qpv%qr-+=cT~?pa`}S4j%dV$#(HbSU zH>dOM-nSs{^wCA9pEDo%>>KWW{r~M7Gyj|@4Nd%0{%-cG(9-J<=B?U&%h^UHub@C; ziiJvpgP?Vbl8TConTNs>otqmHj_*G#wUNh3fKf<6sHyq!jlA8~v9_V1*MGd)Tm3%q z<0-aB5;yjQ>fT%Zo-h5!x$m}Hf7z7^IC_88+Y{dVxZ%0JX~nwWSB>ot>(|YAm~tj# zQgK~z_u&syZk{PLli6Hf(4{!3_u4L}oh7lAktZ%TUeB54nV#C5zxQYCvEVcB?^|CL zkDK*y%Y*LwKQ`8X=)eEz;{5uD^`EZspFLmy%UGC2!LdQC&wT&q+G|$fe}BLK=gQZ= z%cuRgk?a>0Yw7Ob?(ck$TUH1qaO-=@ObpQqnH1nGEUmAqvMP1{t%t6zp>sS0x}MBD zx=LAJCT{P?j*90;7FV<vo;#hq`>g`cmVF}1jtZ^e{TdU+YZkEhxiGUFe9X$(Q+1R@ zsH=lrRNhs!`3h51#KzXkp3_d(Jo_VJBGU2bN`CCV6R%!X`cB(^<wz;-;|ONXEkP@P zW^G-0xp4lG`ZZU*dK7-OitGLPzs~K`jb(B(&ONhW5BxIa&$e^jmd6^3`@Eu-#;w0# z`)cF&!ucwlo|9Fp(uK7$J)(U7{VkegA+T2Bd}h7c!oY1&e)p_jWtz<vc3oJqu6Am8 z{@ozq{?Mb@0xlhfDRrmP(r3%>`Kr9Xdj0u#2Mw41W&C_|j?U?)3GesqD_DEbb9;8( z-`VjSuSKO=Nt`%&k@4_FkF?Dz^*=dX+0h!iT;Y{!C$DD$$D<hrU7V^Zn!ZQ9J7;x; zf7R;hTGg?=EHPAXhJgIc8&j0Fsy<{?ezkUTK+m+=@^Gn(QR}4+l+5v*mfquLS(zwk z`1C+C%dTzPw8H1_Z}K;<ow4m@&YI1aqLe(csxIl5OgsH}@hxt*M;1$?va=?+3b`-+ z-fGyNeEt8{!&6&7sI3TZIy&d7dcCOx|Au>o&)?b3I=wpNa=_ZpclOqcU*tONZMv&n zeb49Pit3jqtl$4pC|p|cu*{lv6P?+jt)Y53OLf9qZ_CSdZ%y6r7IW~QV9}0QnF{?| zkDSVzCV0MN&73diGjzf^mUw>8IMe!eTVDCCnER3H2KUO>#Xj0PJ^y9VS|=%YpR{1X z^>5_g7{4uFT3@2lemwT)@B8IDx0@e%#vEgpYBhU8ult<d<tgVl?+JD|n=-uL@G7M^ zw>N5*-kF@1yY21gW-v7?G){Z)@Zi*m(>JqSc_0?kaCNI_l=SO4_xGJSbxZ5{weuHq zu2z0*oqa{xbk<t2`W@}}sxK^-dv3By@fgdlU6YEhY)^4raqp=}<ub<r#hzp(@fATv zSyyVSiazMPzo<Ti<^Abv$JCqsp35%2I74Gq#`~NukEv0nOJ{}MxMSg7ojdzuir4oY z-7KsBJT9Aldi%DWwL4x^ORH@63!lxY?R)Tdf#7y6ogF-`jE^%vx_sEqvzfPDJ>BMx z{nfO+$1<!I#(7(AzdXS^T6f#E>0kcUc|PCuwe|Xqob{KjZI^~cKl|rieJgJD=dIWG zGnKj7y;F8vQ-6Ezhuz=(BKx?^W*g4jTCzL6q+c!K><oXms59wCFJw<gzHeynFZ2A= zzGd2K3;hb+9W}}A(eeM(7H?MU=kr_e;mWkt4GNA<2~(!$+4Xbsmdn+h_<rvX-`O-- z=Oeqf-+%h&C!e^PwaF^cWyS5E`)+M2Dou~xJ}op*J5#72PxH}R`*$B#STl$Vwi&)U zJ=6N@|5MEKA2xivzt=r<>cN7Z&t8e#@7~;dc<7ng*`;jmdz1aDYI~LmwXNJ&|J?TG z&NAQq-(LAL2|v2>;ivfg#nmAbEiykO)GsOT*FFAt!h$K~%QQj`F=TPR5f9tE(v@dL z=>n}4$#c$n`}V3Y`a8jeF;i;swW7aS?O}V}R!?2^-Eyi$lKS35Z~4E!lq<{JDkU-b z!@;?+eY-8iZ+kO{xH{%XBsiTetUqLPp0led^5~R@Q&<F~?%1fT*>c3C^qRKzt(_Ik z3x0*G@v|*i>1cSvXXn4A;T4Z(-&f;d{&m>0T3-I~)qn_9p`$xBt*>A2csyZxd|hj| zxV4P@cZr^~kVR(V*5MWJE}31cnql$C#Y6t<jQOc53q2AOw@%y;;~ijgEt09U;%j$T z^~$y3T*{||eIBJV{gcR;Sd`<T!CJaYy>^x7Tz<Qn1KrlvC1KVvIq^!J!fSM&{F-Vi z<;^Rosj1q$F?Drq-|O&ObNGtYKCjzTzq{Qe+_cjtlG*fWp%4ep@i-m6%1K<)&)?jl zA!+CsVPv)UQclRus+Fv9k+Ca<S{*a>U5}WYmgq^#*?L>!kdC$lPurZ{Wfq~UJTuE4 zt0qigzw($t_=rTO=V~_L<2UYHzL#O7KV>g7cUIxGM{||Mmu^_fyz_+<SH!`ml7UNd z)?S}^zRz;|9D`ZsB<Aw&tb1%}xBatFf8V#0YSRvHmRsxAd{X7{4)Y^c?iz}VA4){8 zoT#FBO}mnj&3_*ERg(o<V-&Yf`*}yNB0ZJ$foJKT&X#AJvu)?+C9_t9_Hf+1^ZB5A zwT9*VokcUx9a9Sw5n|=uTm0Vh(F~P7&78^@cSRwoEpgp5&lTPKdD+(LZK&JtV3X4+ zi{nC1vOaH3Tbt4`rGAm!v7I%=foa9vr<6(~bPlQXy<DSj`_*t$LX(v8ijPMMPox+< zJ$IKmE7Un^WucYC$Afv(d(RfHx$3k>EApY^6cfG9&Z#CTdqW>?v3E{w$=W&Dw#%Y9 zdW!QYS=AK|LSdPvv+vZKJUDod)2}#en)IC=b&aRRuV=0|_ng#F&A+=P(I>3pS9&s& zvdc@MYWCQ=pWhVc|GnfJxBud^zwO0o*90XFR`!2p4AkLqn|AZgwDNoV7jNs>vq!&E f>J!hI|D2_zcO4p>f~PSsFfe$!`njxgN@xNA>6|R4 literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery.png b/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/gallery.png new file mode 100644 index 0000000000000000000000000000000000000000..803ad630c015d80b318f7b2144aba0b583efc1b6 GIT binary patch literal 27676 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 literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/more_bug.gif b/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/more_bug.gif new file mode 100644 index 0000000000000000000000000000000000000000..4589cb4dc6a7557359e523877b28ebf87d5251d4 GIT binary patch literal 146 zcmZ?wbhEHbY-QkLn8*ME_g{QGbLPzd|Nj+#vapIUFf-_YL_zWlOv!WlSDt>$|5$M0 zt?teHoPP1QDTOjRB;>8S*7=URUZrZ;>)5Ry&wbv^x#dQa<J5KSK2>!qmTeBx%IiC| x%Jg81-FAytUstD0Yf)F{jnZS^^Wa-vTX*rDFY_MsoqzrPPwij+A3+QZ)&OEJL(2dF literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/page_bug.gif b/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/img/page_bug.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ea3565692f721dea7425f0050d27e299e869be9 GIT binary patch literal 180 zcmZ?wbhEHbY-QkLn8*ME_g{QGbLPzd|Nj+#vapIUFf-_YL_zWlOs#YJSDt>W+cam( zt?teH9{uER^H{<-X=mhtu4U2c$BKN?vM<~cowZxShMP;=^vv3$UXSvGpH4cSlG$*0 z)rJZ~*QGvp`W8L0trlJNRp-#EY3c@_Zs&BLl-Xi?_uH$Z%b$q7*~YqbYI{;yyT_Bw iCssT!njw*?;1HQv**SCN&Yhc9YH~_xbp<dmSOWlrN>Zi( literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/themes/advanced/source_editor.htm b/wp-includes/js/tinymce/themes/advanced/source_editor.htm index 1116ff434..a2d3f1ae0 100644 --- a/wp-includes/js/tinymce/themes/advanced/source_editor.htm +++ b/wp-includes/js/tinymce/themes/advanced/source_editor.htm @@ -1,8 +1,8 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>{#advanced_dlg.code_title}</title> - <script type="text/javascript" src="../../tiny_mce_popup.js?ver=345-20110908"></script> - <script type="text/javascript" src="js/source_editor.js?ver=345-20110908"></script> + <script type="text/javascript" src="../../tiny_mce_popup.js?ver=349-20120314"></script> + <script type="text/javascript" src="js/source_editor.js?ver=349-20120314"></script> </head> <body onresize="resizeInputs();" style="display:none; overflow:hidden;"> <form name="source" onsubmit="saveContent();return false;" action="#"> @@ -18,11 +18,11 @@ <div class="mceActionPanel"> <div style="float: left"> - <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" /> + <input type="button" role="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" /> </div> <div style="float: right"> - <input type="submit" name="insert" value="{#update}" id="insert" /> + <input type="submit" role="button" name="insert" value="{#update}" id="insert" /> </div> </div> </form> diff --git a/wp-includes/js/tinymce/tiny_mce.js b/wp-includes/js/tinymce/tiny_mce.js index 808f9ee46..38069d197 100644 --- a/wp-includes/js/tinymce/tiny_mce.js +++ b/wp-includes/js/tinymce/tiny_mce.js @@ -1 +1 @@ -(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"4.5",releaseDate:"2011-09-06",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=d.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(d.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){if(r=f[m].href){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==e}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==e){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];b.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];b.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(k,j){var h,g,f=arguments;for(h=1,g=f.length;h<g;h++){j=f[h];b.each(j,function(i,l){if(i!==e){k[l]=i}})}return k},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}b.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}b.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this;j={func:j,scope:i||this};if(!h.unloads){function g(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(d.detachEvent){d.detachEvent("onbeforeunload",k);d.detachEvent("onunload",g)}else{if(d.removeEventListener){d.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(d.CollectGarbage){CollectGarbage()}}}function k(){var l=document;if(l.readyState=="interactive"){function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l){l.attachEvent("onstop",f)}d.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}if(d.attachEvent){d.attachEvent("onunload",g);d.attachEvent("onbeforeunload",k)}else{if(d.addEventListener){d.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;b.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){return f?b.map(f.split(g||","),b.trim):f},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(c){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===e){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};b._init();d.tinymce=d.tinyMCE=b})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=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)}})})();(function(){function serialize(o,quote){var i,v,t;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&o instanceof Array){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(i in o){v+=typeof o[i]!="function"?(v.length>1?","+quote:quote)+i+quote+":"+serialize(o[i],quote):""}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;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){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={DELETE:46,BACKSPACE:8}})(tinymce);(function(d){var f=d.VK,e=f.BACKSPACE,c=f.DELETE;function b(g){var i=g.dom,h=g.selection;g.onKeyDown.add(function(k,o){var j,p,m,n,l;l=o.keyCode==c;if(l||o.keyCode==e){o.preventDefault();j=h.getRng();p=i.getParent(j.startContainer,i.isBlock);if(l){p=i.getNext(p,i.isBlock)}if(p){m=p.firstChild;if(m&&m.nodeName==="SPAN"){n=m.cloneNode(false)}}k.getDoc().execCommand(l?"ForwardDelete":"Delete",false,null);p=i.getParent(j.startContainer,i.isBlock);d.each(i.select("span.Apple-style-span,font.Apple-style-span",p),function(r){var q=i.createRng();q.setStartBefore(r);q.setEndBefore(r);if(n){i.replace(n.cloneNode(false),r,true)}else{i.remove(r,true)}h.setRng(q)})}})}function a(g){g.onKeyUp.add(function(h,j){var i=j.keyCode;if(i==c||i==e){if(h.dom.isEmpty(h.getBody())){h.setContent("",{format:"raw"});h.nodeChanged();return}}})}d.create("tinymce.util.Quirks",{Quirks:function(g){if(d.isWebKit){b(g);a(g)}if(d.isIE){a(g)}}})})(tinymce);(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(r){var y={},p,n,v,q,u=d.url_converter,x=d.url_converter_scope||this;function o(C,F){var E,B,A,D;E=y[C+"-top"+F];if(!E){return}B=y[C+"-right"+F];if(E!=B){return}A=y[C+"-bottom"+F];if(B!=A){return}D=y[C+"-left"+F];if(A!=D){return}y[C+F]=D;delete y[C+"-top"+F];delete y[C+"-right"+F];delete y[C+"-bottom"+F];delete y[C+"-left"+F]}function t(B){var C=y[B],A;if(!C||C.indexOf(" ")<0){return}C=C.split(" ");A=C.length;while(A--){if(C[A]!==C[0]){return false}}y[B]=C[0];return true}function z(C,B,A,D){if(!t(B)){return}if(!t(A)){return}if(!t(D)){return}y[C]=y[B]+" "+y[A]+" "+y[D];delete y[B];delete y[A];delete y[D]}function s(A){q=true;return a[A]}function i(B,A){if(q){B=B.replace(/\uFEFF[0-9]/g,function(C){return a[C]})}if(!A){B=B.replace(/\\([\'\";:])/g,"$1")}return B}if(r){r=r.replace(/\\[\"\';:\uFEFF]/g,s).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(A){return A.replace(/[;:]/g,s)});while(p=b.exec(r)){n=p[1].replace(l,"").toLowerCase();v=p[2].replace(l,"");if(n&&v.length>0){if(n==="font-weight"&&v==="700"){v="bold"}else{if(n==="color"||n==="background-color"){v=v.toLowerCase()}}v=v.replace(k,c);v=v.replace(h,function(B,A,E,D,F,C){F=F||C;if(F){F=i(F);return"'"+F.replace(/\'/g,"\\'")+"'"}A=i(A||E||D);if(u){A=u.call(x,A,"style")}return"url('"+A.replace(/\'/g,"\\'")+"')"});y[n]=q?i(v,true):v}b.lastIndex=p.index+p[0].length}o("border","");o("border","-width");o("border","-color");o("border","-style");o("padding","");o("margin","");z("border","border-width","border-style","border-color");if(y.border==="medium none"){delete y.border}}return y},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(m){var h={},j,l,g,f,c={},b,e,d=m.makeMap,k=m.each;function i(o,n){return o.split(n||",")}function a(r,q){var o,p={};function n(s){return s.replace(/[A-Z]+/g,function(t){return n(r[t])})}for(o in r){if(r.hasOwnProperty(o)){r[o]=n(r[o])}}n(q).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(v,t,s,u){s=i(s,"|");p[t]={attributes:d(s),attributesOrder:s,children:d(u,"|",{"#comment":{}})}});return p}l="h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,noscript,menu,isindex,samp,header,footer,article,section,hgroup";l=d(l,",",d(l.toUpperCase()));h=a({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]");j=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,autoplay,loop,controls");g=d("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source");f=m.extend(d("td,th,iframe,video,audio,object"),g);b=d("pre,script,style,textarea");e=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");m.html.Schema=function(r){var A=this,n={},o={},y=[],q,p;r=r||{};if(r.verify_html===false){r.valid_elements="*[*]"}if(r.valid_styles){q={};k(r.valid_styles,function(C,B){q[B]=m.explode(C)})}p=r.whitespace_elements?d(r.whitespace_elements):b;function z(B){return new RegExp("^"+B.replace(/([?+*])/g,".$1")+"$")}function t(I){var H,D,W,S,X,C,F,R,U,N,V,Z,L,G,T,B,P,E,Y,aa,M,Q,K=/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,O=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,J=/[*?+]/;if(I){I=i(I);if(n["@"]){P=n["@"].attributes;E=n["@"].attributesOrder}for(H=0,D=I.length;H<D;H++){C=K.exec(I[H]);if(C){T=C[1];N=C[2];B=C[3];U=C[4];L={};G=[];F={attributes:L,attributesOrder:G};if(T==="#"){F.paddEmpty=true}if(T==="-"){F.removeEmpty=true}if(P){for(aa in P){L[aa]=P[aa]}G.push.apply(G,E)}if(U){U=i(U,"|");for(W=0,S=U.length;W<S;W++){C=O.exec(U[W]);if(C){R={};Z=C[1];V=C[2].replace(/::/g,":");T=C[3];Q=C[4];if(Z==="!"){F.attributesRequired=F.attributesRequired||[];F.attributesRequired.push(V);R.required=true}if(Z==="-"){delete L[V];G.splice(m.inArray(G,V),1);continue}if(T){if(T==="="){F.attributesDefault=F.attributesDefault||[];F.attributesDefault.push({name:V,value:Q});R.defaultValue=Q}if(T===":"){F.attributesForced=F.attributesForced||[];F.attributesForced.push({name:V,value:Q});R.forcedValue=Q}if(T==="<"){R.validValues=d(Q,"?")}}if(J.test(V)){F.attributePatterns=F.attributePatterns||[];R.pattern=z(V);F.attributePatterns.push(R)}else{if(!L[V]){G.push(V)}L[V]=R}}}}if(!P&&N=="@"){P=L;E=G}if(B){F.outputName=N;n[B]=F}if(J.test(N)){F.pattern=z(N);y.push(F)}else{n[N]=F}}}}}function v(B){n={};y=[];t(B);k(h,function(D,C){o[C]=D.children})}function s(C){var B=/^(~)?(.+)$/;if(C){k(i(C),function(G){var E=B.exec(G),F=E[1]==="~",H=F?"span":"div",D=E[2];o[D]=o[H];c[D]=H;if(!F){l[D]={}}k(o,function(I,J){if(I[H]){I[D]=I[H]}})})}}function u(C){var B=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(C){k(i(C),function(G){var F=B.exec(G),D,E;if(F){E=F[1];if(E){D=o[F[2]]}else{D=o[F[2]]={"#comment":{}}}D=o[F[2]];k(i(F[3],"|"),function(H){if(E==="-"){delete D[H]}else{D[H]={}}})}})}}function x(B){var D=n[B],C;if(D){return D}C=y.length;while(C--){D=y[C];if(D.pattern.test(B)){return D}}}if(!r.valid_elements){k(h,function(C,B){n[B]={attributes:C.attributes,attributesOrder:C.attributesOrder};o[B]=C.children});k(i("strong/b,em/i"),function(B){B=i(B,"/");n[B[1]].outputName=B[0]});n.img.attributesDefault=[{name:"alt",value:""}];k(i("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr"),function(B){n[B].removeEmpty=true});k(i("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(B){n[B].paddEmpty=true})}else{v(r.valid_elements)}s(r.custom_elements);u(r.valid_children);t(r.extended_valid_elements);u("+ol[ul|ol],+ul[ul|ol]");if(!x("span")){t("span[!data-mce-type|*]")}if(r.invalid_elements){m.each(m.explode(r.invalid_elements),function(B){if(n[B]){delete n[B]}})}A.children=o;A.styles=q;A.getBoolAttrs=function(){return j};A.getBlockElements=function(){return l};A.getShortEndedElements=function(){return g};A.getSelfClosingElements=function(){return e};A.getNonEmptyElements=function(){return f};A.getWhiteSpaceElements=function(){return p};A.isValidChild=function(B,D){var C=o[B];return !!(C&&C[D])};A.getElementRule=x;A.getCustomElements=function(){return c};A.addValidElements=t;A.setValidElements=v;A.addCustomElements=s;A.addValidChildren=u};m.html.Schema.boolAttrMap=j;m.html.Schema.blockElementsMap=l})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(D){var n=this,g,F=0,H,A,z=[],M,P,B,q,y,r,L,G,N,u,m,k,s,Q,o,O,E,R,K,f,I,l,C,J,h,v=0,j=a.html.Entities.decode,x,p;function t(S){var U,T;U=z.length;while(U--){if(z[U].name===S){break}}if(U>=0){for(T=z.length-1;T>=U;T--){S=z[T];if(S.valid){n.end(S.name)}}z.length=U}}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)\\s*((?:[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*)>))","g");C=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;J={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};L=e.getShortEndedElements();I=e.getSelfClosingElements();G=e.getBoolAttrs();u=c.validate;r=c.remove_internals;x=c.fix_self_closing;p=a.isIE;o=/^:/;while(g=l.exec(D)){if(F<g.index){n.text(j(D.substr(F,g.index-F)))}if(H=g[6]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}t(H)}else{if(H=g[7]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}N=H in L;if(x&&I[H]&&z.length>0&&z[z.length-1].name===H){t(H)}if(!u||(m=e.getElementRule(H))){k=true;if(u){O=m.attributes;E=m.attributePatterns}if(Q=g[8]){y=Q.indexOf("data-mce-type")!==-1;if(y&&r){k=false}M=[];M.map={};Q.replace(C,function(T,S,X,W,V){var Y,U;S=S.toLowerCase();X=S in G?S:j(X||W||V||"");if(u&&!y&&S.indexOf("data-")!==0){Y=O[S];if(!Y&&E){U=E.length;while(U--){Y=E[U];if(Y.pattern.test(S)){break}}if(U===-1){Y=null}}if(!Y){return}if(Y.validValues&&!(X in Y.validValues)){return}}M.map[S]=X;M.push({name:S,value:X})})}else{M=[];M.map={}}if(u&&!y){R=m.attributesRequired;K=m.attributesDefault;f=m.attributesForced;if(f){P=f.length;while(P--){s=f[P];q=s.name;h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}if(K){P=K.length;while(P--){s=K[P];q=s.name;if(!(q in M.map)){h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}}if(R){P=R.length;while(P--){if(R[P] in M.map){break}}if(P===-1){k=false}}if(M.map["data-mce-bogus"]){k=false}}if(k){n.start(H,M,N)}}else{k=false}if(A=J[H]){A.lastIndex=F=g.index+g[0].length;if(g=A.exec(D)){if(k){B=D.substr(F,g.index-F)}F=g.index+g[0].length}else{B=D.substr(F);F=D.length}if(k&&B.length>0){n.text(B,true)}if(k){n.end(H)}l.lastIndex=F;continue}if(!N){if(!Q||Q.indexOf("/")!=Q.length-1){z.push({name:H,valid:k})}else{if(k){n.end(H)}}}}else{if(H=g[1]){n.comment(H)}else{if(H=g[2]){n.cdata(H)}else{if(H=g[3]){n.doctype(H)}else{if(H=g[4]){n.pi(H,g[5])}}}}}}F=g.index+g[0].length}if(F<D.length){n.text(j(D.substr(F)))}for(P=z.length-1;P>=0;P--){H=z[P];if(H.valid){n.end(H.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-")===0){return false}}}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(m){var o,p,x,v,z,n,q,l,t,u,k,s,y,r;s=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();for(o=0;o<m.length;o++){p=m[o];if(!p.parent){continue}v=[p];for(x=p.parent;x&&!h.isValidChild(x.name,p.name)&&!s[x.name];x=x.parent){v.push(x)}if(x&&v.length>1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t<v.length-1;t++){if(h.isValidChild(n.name,v[t].name)){q=f.filterNode(v[t].clone());n.append(q)}else{q=n}for(l=v[t].firstChild;l&&l!=v[t+1];){r=l.next;q.append(l);l=r}n=q}if(!z.isEmpty(k)){x.insert(z,v[0],true);x.insert(p,z)}else{x.insert(p,v[0],true)}x=v[0];if(x.isEmpty(k)||x.firstChild===x.lastChild&&x.firstChild.name==="br"){x.empty().remove()}}else{if(p.parent){if(p.name==="li"){y=p.prev;if(y&&(y.name==="ul"||y.name==="ul")){y.append(p);continue}y=p.next;if(y&&(y.name==="ul"||y.name==="ul")){y.insert(p,y.firstChild,true);continue}p.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(p.parent.name,"div")&&h.isValidChild("div",p.name)){p.wrap(f.filterNode(new a("div",1)))}else{if(p.name==="style"||p.name==="script"){p.empty().remove()}else{p.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,H,A,z,C,B,x,r,E,K,y,o,D,J=[],t,k,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;y=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();D=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;function F(){var L=H.firstChild,l,M;while(L){l=L.next;if(L.type==3||(L.type==1&&L.name!=="p"&&!o[L.name]&&!L.attr("data-mce-type"))){if(!M){M=I(q,1);H.insert(M,L);M.append(L)}else{M.append(L)}}else{M=null}L=l}}function I(l,L){var M=new a(l,L),N;if(l in e){N=i[l];if(N){N.push(M)}else{i[l]=[M]}}return M}function G(M){var N,l,L;for(N=M.prev;N&&N.type===3;){l=N.value.replace(t,"");if(l.length>0){N.value=l;N=N.prev}else{L=N.prev;N.remove();N=L}}}n=new b.html.SaxParser({validate:y,fix_self_closing:!y,cdata:function(l){A.append(I("#cdata",4)).value=l},text:function(M,l){var L;if(!s[A.name]){M=M.replace(k," ");if(A.lastChild&&o[A.lastChild.name]){M=M.replace(D,"")}}if(M.length!==0){L=I("#text",3);L.raw=!!l;A.append(L).value=M}},comment:function(l){A.append(I("#comment",8)).value=l},pi:function(l,L){A.append(I(l,7)).value=L;G(A)},doctype:function(L){var l;l=A.append(I("#doctype",10));l.value=L;G(A)},start:function(l,T,M){var R,O,N,L,P,U,S,Q;N=y?h.getElementRule(l):{};if(N){R=I(N.outputName||l,1);R.attributes=T;R.shortEnded=M;A.append(R);Q=p[A.name];if(Q&&p[R.name]&&!Q[R.name]){J.push(R)}O=d.length;while(O--){P=d[O].name;if(P in T.map){E=c[P];if(E){E.push(R)}else{c[P]=[R]}}}if(o[l]){G(R)}if(!M){A=R}}},end:function(l){var P,M,O,L,N;M=y?h.getElementRule(l):{};if(M){if(o[l]){if(!s[A.name]){for(P=A.firstChild;P&&P.type===3;){O=P.value.replace(D,"");if(O.length>0){P.value=O;P=P.next}else{L=P.next;P.remove();P=L}}for(P=A.lastChild;P&&P.type===3;){O=P.value.replace(t,"");if(O.length>0){P.value=O;P=P.prev}else{L=P.prev;P.remove();P=L}}}P=A.prev;if(P&&P.type===3){O=P.value.replace(D,"");if(O.length>0){P.value=O}else{P.remove()}}}if(M.removeEmpty||M.paddEmpty){if(A.isEmpty(u)){if(M.paddEmpty){A.empty().append(new a("#text","3")).value="\u00a0"}else{if(!A.attributes.map.name){N=A.parent;A.empty().remove();A=N;return}}}}A=A.parent}}},h);H=A=new a(m.context||g.root_name,11);n.parse(v);if(y&&J.length){if(!m.context){j(J)}else{m.invalid=true}}if(q&&H.name=="body"){F()}if(!m.invalid){for(K in i){E=e[K];z=i[K];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(C=0,B=E.length;C<B;C++){E[C](z,K,m)}}for(C=0,B=d.length;C<B;C++){E=d[C];if(E.name in c){z=c[E.name];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(x=0,r=E.callbacks.length;x<r;x++){E.callbacks[x](z,E.name,m)}}}}return H};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,u=h.getBlockElements(),k=h.getNonEmptyElements(),s,p,t;u.body=1;for(r=0;r<q;r++){o=n[r];s=o.parent;if(u[o.parent.name]&&o===s.lastChild){p=o.prev;while(p){t=p.name;if(t!=="span"||p.attr("data-mce-type")!=="bookmark"){if(t!=="br"){break}if(t==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(s.isEmpty(k)){elementRule=h.getElementRule(s.name);if(elementRule){if(elementRule.removeEmpty){s.remove()}else{if(elementRule.paddEmpty){s.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);(function(h){var f=h.each,e=h.is,d=h.isWebKit,b=h.isIE,c=h.html.Entities,a=/^([a-z0-9],?)+$/i,g=h.html.Schema.blockElementsMap,i=/^[ \t\r\n]*$/;h.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(o,m){var l=this,j,k;l.doc=o;l.win=window;l.files={};l.cssFlicker=false;l.counter=0;l.stdMode=!h.isIE||o.documentMode>=8;l.boxModel=!h.isIE||o.compatMode=="CSS1Compat"||l.stdMode;l.hasOuterHTML="outerHTML" in o.createElement("a");l.settings=m=h.extend({keep_values:false,hex_colors:1},m);l.schema=m.schema;l.styles=new h.html.Styles({url_converter:m.url_converter,url_converter_scope:m.url_converter_scope},m.schema);if(h.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(n){l.cssFlicker=true}}if(b&&m.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(p){o.createElement(p)});for(k in m.schema.getCustomElements()){o.createElement(k)}}h.addUnload(l.destroy,l)},getRoot:function(){var j=this,k=j.settings;return(k&&j.get(k.root_element))||j.doc.body},getViewPort:function(k){var l,j;k=!k?this.win:k;l=k.document;j=this.boxModel?l.documentElement:l.body;return{x:k.pageXOffset||j.scrollLeft,y:k.pageYOffset||j.scrollTop,w:k.innerWidth||j.clientWidth,h:k.innerHeight||j.clientHeight}},getRect:function(m){var l,j=this,k;m=j.get(m);l=j.getPos(m);k=j.getSize(m);return{x:l.x,y:l.y,w:k.w,h:k.h}},getSize:function(m){var k=this,j,l;m=k.get(m);j=k.getStyle(m,"width");l=k.getStyle(m,"height");if(j.indexOf("px")===-1){j=0}if(l.indexOf("px")===-1){l=0}return{w:parseInt(j)||m.offsetWidth||m.clientWidth,h:parseInt(l)||m.offsetHeight||m.clientHeight}},getParent:function(l,k,j){return this.getParents(l,k,j,false)},getParents:function(u,p,l,s){var k=this,j,m=k.settings,q=[];u=k.get(u);s=s===undefined;if(m.strict_root){l=l||k.getRoot()}if(e(p,"string")){j=p;if(p==="*"){p=function(o){return o.nodeType==1}}else{p=function(o){return k.is(o,j)}}}while(u){if(u==l||!u.nodeType||u.nodeType===9){break}if(!p||p(u)){if(s){q.push(u)}else{return u}}u=u.parentNode}return s?q:null},get:function(j){var k;if(j&&this.doc&&typeof(j)=="string"){k=j;j=this.doc.getElementById(j);if(j&&j.id!==k){return this.doc.getElementsByName(k)[1]}}return j},getNext:function(k,j){return this._findSib(k,j,"nextSibling")},getPrev:function(k,j){return this._findSib(k,j,"previousSibling")},select:function(l,k){var j=this;return h.dom.Sizzle(l,j.get(k)||j.get(j.settings.root_element)||j.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(a.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return h.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(m,q,j,l,o){var k=this;return this.run(m,function(s){var r,n;r=e(q,"string")?k.doc.createElement(q):q;k.setAttribs(r,j);if(l){if(l.nodeType){r.appendChild(l)}else{k.setHTML(r,l)}}return !o?s.appendChild(r):r})},create:function(l,j,k){return this.add(this.doc.createElement(l),l,j,k,1)},createHTML:function(r,j,p){var q="",m=this,l;q+="<"+r;for(l in j){if(j.hasOwnProperty(l)){q+=" "+l+'="'+m.encode(j[l])+'"'}}if(typeof(p)!="undefined"){return q+">"+p+"</"+r+">"}return q+" />"},remove:function(j,k){return this.run(j,function(m){var n,l=m.parentNode;if(!l){return null}if(k){while(n=m.firstChild){if(!h.isIE||n.nodeType!==3||n.nodeValue){l.insertBefore(n,m)}else{m.removeChild(n)}}}return l.removeChild(m)})},setStyle:function(m,j,k){var l=this;return l.run(m,function(p){var o,n;o=p.style;j=j.replace(/-(\D)/g,function(r,q){return q.toUpperCase()});if(l.pixelStyles.test(j)&&(h.is(k,"number")||/^[\-0-9\.]+$/.test(k))){k+="px"}switch(j){case"opacity":if(b){o.filter=k===""?"":"alpha(opacity="+(k*100)+")";if(!m.currentStyle||!m.currentStyle.hasLayout){o.display="inline-block"}}o[j]=o["-moz-opacity"]=o["-khtml-opacity"]=k||"";break;case"float":b?o.styleFloat=k:o.cssFloat=k;break;default:o[j]=k||""}if(l.settings.update_styles){l.setAttrib(p,"data-mce-style")}})},getStyle:function(m,j,l){m=this.get(m);if(!m){return}if(this.doc.defaultView&&l){j=j.replace(/[A-Z]/g,function(n){return"-"+n});try{return this.doc.defaultView.getComputedStyle(m,null).getPropertyValue(j)}catch(k){return null}}j=j.replace(/-(\D)/g,function(o,n){return n.toUpperCase()});if(j=="float"){j=b?"styleFloat":"cssFloat"}if(m.currentStyle&&l){return m.currentStyle[j]}return m.style?m.style[j]:undefined},setStyles:function(m,n){var k=this,l=k.settings,j;j=l.update_styles;l.update_styles=0;f(n,function(o,p){k.setStyle(m,p,o)});l.update_styles=j;if(l.update_styles){k.setAttrib(m,l.cssText)}},removeAllAttribs:function(j){return this.run(j,function(m){var l,k=m.attributes;for(l=k.length-1;l>=0;l--){m.removeAttributeNode(k.item(l))}})},setAttrib:function(l,m,j){var k=this;if(!l||!m){return}if(k.settings.strict){m=m.toLowerCase()}return this.run(l,function(o){var n=k.settings;switch(m){case"style":if(!e(j,"string")){f(j,function(p,q){k.setStyle(o,q,p)});return}if(n.keep_values){if(j&&!k._isRes(j)){o.setAttribute("data-mce-style",j,2)}else{o.removeAttribute("data-mce-style",2)}}o.style.cssText=j;break;case"class":o.className=j||"";break;case"src":case"href":if(n.keep_values){if(n.url_converter){j=n.url_converter.call(n.url_converter_scope||k,j,m,o)}k.setAttrib(o,"data-mce-"+m,j,2)}break;case"shape":o.setAttribute("data-mce-style",j);break}if(e(j)&&j!==null&&j.length!==0){o.setAttribute(m,""+j,2)}else{o.removeAttribute(m,2)}})},setAttribs:function(k,l){var j=this;return this.run(k,function(m){f(l,function(o,p){j.setAttrib(m,p,o)})})},getAttrib:function(o,p,l){var j,k=this,m;o=k.get(o);if(!o||o.nodeType!==1){return l===m?false:l}if(!e(l)){l=""}if(/^(src|href|style|coords|shape)$/.test(p)){j=o.getAttribute("data-mce-"+p);if(j){return j}}if(b&&k.props[p]){j=o[k.props[p]];j=j&&j.nodeValue?j.nodeValue:j}if(!j){j=o.getAttribute(p,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(p)){if(o[k.props[p]]===true&&j===""){return p}return j?p:""}if(o.nodeName==="FORM"&&o.getAttributeNode(p)){return o.getAttributeNode(p).nodeValue}if(p==="style"){j=j||o.style.cssText;if(j){j=k.serializeStyle(k.parseStyle(j),o.nodeName);if(k.settings.keep_values&&!k._isRes(j)){o.setAttribute("data-mce-style",j)}}}if(d&&p==="class"&&j){j=j.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(p){case"rowspan":case"colspan":if(j===1){j=""}break;case"size":if(j==="+0"||j===20||j===0){j=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(j===0){j=""}break;case"hspace":if(j===-1){j=""}break;case"maxlength":case"tabindex":if(j===32768||j===2147483647||j==="32768"){j=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(j===65535){return p}return l;case"shape":j=j.toLowerCase();break;default:if(p.indexOf("on")===0&&j){j=h._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+j)}}}return(j!==m&&j!==null&&j!=="")?""+j:l},getPos:function(s,m){var k=this,j=0,q=0,o,p=k.doc,l;s=k.get(s);m=m||p.body;if(s){if(s.getBoundingClientRect){s=s.getBoundingClientRect();o=k.boxModel?p.documentElement:p.body;j=s.left+(p.documentElement.scrollLeft||p.body.scrollLeft)-o.clientTop;q=s.top+(p.documentElement.scrollTop||p.body.scrollTop)-o.clientLeft;return{x:j,y:q}}l=s;while(l&&l!=m&&l.nodeType){j+=l.offsetLeft||0;q+=l.offsetTop||0;l=l.offsetParent}l=s.parentNode;while(l&&l!=m&&l.nodeType){j-=l.scrollLeft||0;q-=l.scrollTop||0;l=l.parentNode}}return{x:j,y:q}},parseStyle:function(j){return this.styles.parse(j)},serializeStyle:function(k,j){return this.styles.serialize(k,j)},loadCSS:function(j){var l=this,m=l.doc,k;if(!j){j=""}k=l.select("head")[0];f(j.split(","),function(n){var o;if(l.files[n]){return}l.files[n]=true;o=l.create("link",{rel:"stylesheet",href:h._addVer(n)});if(b&&m.documentMode&&m.recalc){o.onload=function(){if(m.recalc){m.recalc()}o.onload=null}}k.appendChild(o)})},addClass:function(j,k){return this.run(j,function(l){var m;if(!k){return 0}if(this.hasClass(l,k)){return l.className}m=this.removeClass(l,k);return l.className=(m!=""?(m+" "):"")+k})},removeClass:function(l,m){var j=this,k;return j.run(l,function(o){var n;if(j.hasClass(o,m)){if(!k){k=new RegExp("(^|\\s+)"+m+"(\\s+|$)","g")}n=o.className.replace(k," ");n=h.trim(n!=" "?n:"");o.className=n;if(!n){o.removeAttribute("class");o.removeAttribute("className")}return n}return o.className})},hasClass:function(k,j){k=this.get(k);if(!k||!j){return false}return(" "+k.className+" ").indexOf(" "+j+" ")!==-1},show:function(j){return this.setStyle(j,"display","block")},hide:function(j){return this.setStyle(j,"display","none")},isHidden:function(j){j=this.get(j);return !j||j.style.display=="none"||this.getStyle(j,"display")=="none"},uniqueId:function(j){return(!j?"mce_":j)+(this.counter++)},setHTML:function(l,k){var j=this;return j.run(l,function(n){if(b){while(n.firstChild){n.removeChild(n.firstChild)}try{n.innerHTML="<br />"+k;n.removeChild(n.firstChild)}catch(m){n=j.create("div");n.innerHTML="<br />"+k;f(n.childNodes,function(p,o){if(o){n.appendChild(p)}})}}else{n.innerHTML=k}return k})},getOuterHTML:function(l){var k,j=this;l=j.get(l);if(!l){return null}if(l.nodeType===1&&j.hasOuterHTML){return l.outerHTML}k=(l.ownerDocument||j.doc).createElement("body");k.appendChild(l.cloneNode(true));return k.innerHTML},setOuterHTML:function(m,k,n){var j=this;function l(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){j.insertAfter(s.cloneNode(true),p);s=s.previousSibling}j.remove(p)}return this.run(m,function(p){p=j.get(p);if(p.nodeType==1){n=n||p.ownerDocument||j.doc;if(b){try{if(b&&p.nodeType==1){p.outerHTML=k}else{l(p,k,n)}}catch(o){l(p,k,n)}}else{l(p,k,n)}}})},decode:c.decode,encode:c.encodeAllRaw,insertAfter:function(j,k){k=this.get(k);return this.run(j,function(m){var l,n;l=k.parentNode;n=k.nextSibling;if(n){l.insertBefore(m,n)}else{l.appendChild(m)}return m})},isBlock:function(k){var j=k.nodeType;if(j){return !!(j===1&&g[k.nodeName])}return !!g[k]},replace:function(p,m,j){var l=this;if(e(m,"array")){p=p.cloneNode(true)}return l.run(m,function(k){if(j){f(h.grep(k.childNodes),function(n){p.appendChild(n)})}return k.parentNode.replaceChild(p,k)})},rename:function(m,j){var l=this,k;if(m.nodeName!=j.toUpperCase()){k=l.create(j);f(l.getAttribs(m),function(n){l.setAttrib(k,n.nodeName,l.getAttrib(m,n.nodeName))});l.replace(k,m,1)}return k||m},findCommonAncestor:function(l,j){var m=l,k;while(m){k=j;while(k&&m!=k){k=k.parentNode}if(m==k){break}m=m.parentNode}if(!m&&l.ownerDocument){return l.ownerDocument.documentElement}return m},toHex:function(j){var l=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(j);function k(m){m=parseInt(m).toString(16);return m.length>1?m:"0"+m}if(l){j="#"+k(l[1])+k(l[2])+k(l[3]);return j}return j},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(r){f(r.imports,function(s){q(s)});f(r.cssRules||r.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){f(s.selectorText.split(","),function(t){t=t.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(t)||!/\.[\w\-]+$/.test(t)){return}l=t;t=h._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",t);if(p&&!(t=p(t,l))){return}if(!o[t]){j.push({"class":t});o[t]=1}})}break;case 3:q(s.styleSheet);break}})}try{f(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(m,l,k){var j=this,n;if(j.doc&&typeof(m)==="string"){m=j.get(m)}if(!m){return false}k=k||this;if(!m.nodeType&&(m.length||m.length===0)){n=[];f(m,function(p,o){if(p){if(typeof(p)=="string"){p=j.doc.getElementById(p)}n.push(l.call(k,p,o))}});return n}return l.call(k,m)},getAttribs:function(k){var j;k=this.get(k);if(!k){return[]}if(b){j=[];if(k.nodeName=="OBJECT"){return k.attributes}if(k.nodeName==="OPTION"&&this.getAttrib(k,"selected")){j.push({specified:1,nodeName:"selected"})}k.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(l){j.push({specified:1,nodeName:l})});return j}return k.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p;m=m.firstChild;if(m){j=new h.dom.TreeWalker(m);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){p=m.parentNode;if(l==="br"&&r.isBlock(p)&&p.firstChild===m&&p.lastChild===m){continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if((q===3&&!i.test(m.nodeValue))){return false}}while(m=j.next())}return true},destroy:function(k){var j=this;if(j.events){j.events.destroy()}j.win=j.doc=j.root=j.events=null;if(!k){h.removeUnload(j.destroy)}},createRng:function(){var j=this.doc;return j.createRange?j.createRange():new h.dom.Range(this)},nodeIndex:function(n,o){var j=0,l,m,k;if(n){for(l=n.nodeType,n=n.previousSibling,m=n;n;n=n.previousSibling){k=n.nodeType;if(o&&k==3){if(k==l||!n.nodeValue.length){continue}}j++;l=k}}return j},split:function(n,m,q){var s=this,j=s.createRng(),o,l,p;function k(v){var t,r=v.childNodes,u=v.nodeType;if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){k(r[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){if(!s.isBlock(v.parentNode)||h.trim(v.nodeValue).length>0){return}}else{if(u==1){r=v.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(r[0],v)}if(r.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}s.remove(v)}return v}if(n&&m){j.setStart(n.parentNode,s.nodeIndex(n));j.setEnd(m.parentNode,s.nodeIndex(m));o=j.extractContents();j=s.createRng();j.setStart(m.parentNode,s.nodeIndex(m)+1);j.setEnd(n.parentNode,s.nodeIndex(n)+1);l=j.extractContents();p=n.parentNode;p.insertBefore(k(o),n);if(q){p.replaceChild(q,m)}else{p.insertBefore(m,n)}p.insertBefore(k(l),n);s.remove(n);return q||m}},bind:function(n,j,m,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.add(n,j,m,l||this)},unbind:function(m,j,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.remove(m,j,l)},_findSib:function(m,j,k){var l=this,n=j;if(m){if(e(n,"string")){n=function(o){return l.is(o,j)}}for(m=m[k];m;m=m[k]){if(n(m)){return m}}}return null},_isRes:function(j){return/^(top|left|bottom|right|width|height)/i.test(j)||/;\s*(top|left|bottom|right|width|height)/i.test(j)}});h.DOM=new h.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(Y,t){var ab=N[h],W=N[U],aa=N[P],V=N[z],Z=t.startContainer,ad=t.startOffset,X=t.endContainer,ac=t.endOffset;if(Y===0){return G(ab,W,Z,ad)}if(Y===1){return G(aa,V,Z,ad)}if(Y===2){return G(aa,V,X,ac)}if(Y===3){return G(ab,W,X,ac)}}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(Z<Y){return -1}return 1}aa=V;while(aa&&aa.parentNode!=X){aa=aa.parentNode}if(aa){W=0;t=X.firstChild;while(t!=aa&&W<Z){W++;t=t.nextSibling}if(Z<=W){return -1}return 1}aa=X;while(aa&&aa.parentNode!=V){aa=aa.parentNode}if(aa){W=0;t=V.firstChild;while(t!=aa&&W<Y){W++;t=t.nextSibling}if(W<Y){return -1}return 1}ab=c.findCommonAncestor(X,V);ad=X;while(ad&&ad.parentNode!=ab){ad=ad.parentNode}if(!ad){ad=ab}ac=V;while(ac&&ac.parentNode!=ab){ac=ac.parentNode}if(!ac){ac=ab}if(ad==ac){return 0}t=ab.firstChild;while(t){if(t==ad){return -1}if(t==ac){return 1}t=t.nextSibling}}function B(V,Y,X){var t,W;if(V){N[h]=Y;N[U]=X}else{N[P]=Y;N[z]=X}t=N[P];while(t.parentNode){t=t.parentNode}W=N[h];while(W.parentNode){W=W.parentNode}if(W==t){if(G(N[h],N[U],N[P],N[z])>0){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(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}k.setEndPoint(j?"EndToStart":"EndToEnd",i);if(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)>0){k=i.duplicate();k.collapse(j);o=-1;while(s==k.parentElement()){if(k.move("character",-1)==0){break}o++}}o=o||k.text.replace("\r\n"," ").length}else{k.collapse(true);k.setEndPoint(j?"StartToStart":"StartToEnd",i);o=k.text.replace("\r\n"," ").length}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var u,t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,s,q,r=d.dom.doc,m=r.body;function j(z){var u,y,t,x,v;t=h.create("a");u=z?k:s;y=z?p:q;x=n.duplicate();if(u==r||u==r.documentElement){u=m;y=0}if(u.nodeType==3){u.parentNode.insertBefore(t,u);x.moveToElementText(t);x.moveStart("character",y);h.remove(t);n.setEndPoint(z?"StartToStart":"EndToEnd",x)}else{v=u.childNodes;if(v.length){if(y>=v.length){h.insertAfter(t,v[v.length-1])}else{u.insertBefore(t,v[y])}x.moveToElementText(t)}else{t=r.createTextNode("\uFEFF");u.appendChild(t);x.moveToElementText(t.parentNode);x.collapse(c)}n.setEndPoint(z?"StartToStart":"EndToEnd",x);h.remove(t)}}k=i.startContainer;p=i.startOffset;s=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==s&&k.nodeType==1&&p==q-1){if(p==q-1){try{l=m.createControlRange();l.addElement(k.childNodes[p]);l.select();return}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}return r};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(y,e,z){var x;if(!y){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.leftMatch[v].exec(y))){var r=u[1];u.splice(1,1);if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");x=f.find[v](u,e,z);if(x!=null){y=y.replace(f.match[v],"");break}}}}if(!x){x=e.getElementsByTagName("*")}return{set:x,expr:y}};b.filter=function(C,B,F,u){var s=C,H=[],z=B,x,e,y=B&&B[0]&&b.isXML(B[0]);while(C&&B.length){for(var A in f.filter){if((x=f.leftMatch[A].exec(C))!=null&&x[2]){var r=f.filter[A],G,E,t=x[1];e=false;x.splice(1,1);if(t.substr(t.length-1)==="\\"){continue}if(z===H){H=[]}if(f.preFilter[A]){x=f.preFilter[A](x,z,F,H,u,y);if(!x){e=G=true}else{if(x===true){continue}}}if(x){for(var v=0;(E=z[v])!=null;v++){if(E){G=r(E,x,v,z);var D=u^!!G;if(F&&G!=null){if(D){e=true}else{z[v]=false}}else{if(D){H.push(E);e=true}}}}}if(G!==undefined){if(!F){z=H}C=C.replace(f.match[A],"");if(!e){return[]}break}}}if(C===s){if(e==null){b.error(C)}else{break}}s=C}return z};b.error=function(e){throw"Syntax error, unrecognized expression: "+e};var f=b.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,r){var t=typeof r==="string",v=t&&!/\W/.test(r),y=t&&!v;if(v){r=r.toLowerCase()}for(var s=0,e=x.length,u;s<e;s++){if((u=x[s])){while((u=u.previousSibling)&&u.nodeType!==1){}x[s]=y||u&&u.nodeName.toLowerCase()===r?u||false:u===r}}if(y){b.filter(r,x,true)}},">":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s<e;s++){v=x[s];if(v){var t=v.parentNode;x[s]=t.nodeName.toLowerCase()===r?t:false}}}else{for(;s<e;s++){v=x[s];if(v){x[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,x,true)}}},"":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,x,y){t=" "+t[1].replace(/\\/g,"")+" ";if(y){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(x^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v<u;v++){if(t[v]===s){return false}}return true}else{b.error("Syntax error, unrecognized expression: "+e)}}}},CHILD:function(e,t){var x=t[1],r=e;switch(x){case"only":case"first":while((r=r.previousSibling)){if(r.nodeType===1){return false}}if(x==="first"){return true}r=e;case"last":while((r=r.nextSibling)){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],A=t[3];if(s===1&&A===0){return true}var v=t[0],z=e.parentNode;if(z&&(z.sizcache!==v||!e.nodeIndex)){var u=0;for(r=z.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}z.sizcache=v}var y=e.nodeIndex-A;if(s===0){return y===0}else{return(y%s===0&&y/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s<e;s++){r.push(u[s])}}else{for(;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){if(!r.compareDocumentPosition||!e.compareDocumentPosition){if(r==e){o=true}return r.compareDocumentPosition?-1:1}var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){o=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){if(!r.sourceIndex||!e.sourceIndex){if(r==e){o=true}return r.sourceIndex?-1:1}var s=r.sourceIndex-e.sourceIndex;if(s===0){o=true}return s}}else{if(document.createRange){c=function(t,r){if(!t.ownerDocument||!r.ownerDocument){if(t==r){o=true}return t.ownerDocument?-1:1}var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){o=true}return u}}}}b.getText=function(e){var r="",t;for(var s=0;e[s];s++){t=e[s];if(t.nodeType===3||t.nodeType===4){r+=t.nodeValue}else{if(t.nodeType!==8){r+=b.getText(t.childNodes)}}}return r};(function(){var r=document.createElement("div"),s="script"+(new Date()).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName.toLowerCase()===x){u=e;break}e=e[r]}A[t]=u}}}function q(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof x!=="string"){if(e===x){u=true;break}}else{if(b.filter(x,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x<r;x++){b(e,s[x],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(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<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}if(c.isIE&&i.boxModel){this._fixIESelection()}c.addUnload(f.destroy,f)},setCursorLocation:function(h,i){var f=this;var g=f.dom.createRng();g.setStart(h,i);g.setEnd(h,i);f.setRng(g);f.collapse(false)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";g.forced_root_block="";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML="<br>"+(h.item?h.item(0).outerHTML:h.htmlText);l.removeChild(l.firstChild)}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(g,i){var n=this,f=n.getRng(),j,k=n.win.document,m,l;i=i||{format:"html"};i.set=true;g=i.content=g;if(!i.no_events){n.onBeforeSetContent.dispatch(n,i)}g=i.content;if(f.insertNode){g+='<span id="__caret">_</span>';if(f.startContainer==k&&f.endContainer==k){k.body.innerHTML=g}else{f.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=g}else{if(f.createContextualFragment){f.insertNode(f.createContextualFragment(g))}else{m=k.createDocumentFragment();l=k.createElement("div");m.appendChild(l);l.outerHTML=g;f.insertNode(m)}}}j=n.dom.get("__caret");f=k.createRange();f.setStartBefore(j);f.setEndBefore(j);n.setRng(f);n.dom.remove("__caret");try{n.setRng(f)}catch(h){}}else{if(f.item){k.execCommand("Delete",false,null);f=n.getRng()}if(/^\s+/.test(g)){f.pasteHTML('<span id="__mce_tmp">_</span>'+g);n.dom.remove("__mce_tmp")}else{f.pasteHTML(g)}}if(!i.no_events){n.onSetContent.dispatch(n,i)}},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}}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(r,s){var v=this,m=v.dom,g,j,i,n,h,o,p,l="\uFEFF",u;function f(x,y){var t=0;d(m.select(x),function(A,z){if(A==y){t=z}});return t}if(r==2){function k(){var x=v.getRng(true),t=m.getRoot(),y={};function z(C,H){var B=C[H?"startContainer":"endContainer"],G=C[H?"startOffset":"endOffset"],A=[],D,F,E=0;if(B.nodeType==3){if(s){for(D=B.previousSibling;D&&D.nodeType==3;D=D.previousSibling){G+=D.nodeValue.length}}A.push(G)}else{F=B.childNodes;if(G>=F.length&&F.length){E=1;G=Math.max(0,F.length-1)}A.push(v.dom.nodeIndex(F[G],s)+E)}for(;B&&B!=t;B=B.parentNode){A.push(v.dom.nodeIndex(B,s))}return A}y.start=z(x,true);if(!v.isCollapsed()){y.end=z(x)}return y}if(v.tridentSel){return v.tridentSel.getBookmark(r)}return k()}if(r){return{rng:v.getRng()}}g=v.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();u="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();try{g.collapse();g.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_start" style="'+u+'">'+l+"</span>");if(!n){j.collapse(false);g.moveToElementText(j.parentElement());if(g.compareEndPoints("StartToEnd",j)==0){j.move("character",-1)}j.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_end" style="'+u+'">'+l+"</span>")}}catch(q){return null}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=v.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",{"data-mce-type":"bookmark",id:i+"_end",style:u},l))}g.collapse(true);g.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_start",style:u},l))}v.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(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){y=t[0];for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(t[v]>u.length-1){return}x=u[t[v]]}if(x.nodeType===3){y=Math.min(t[0],x.nodeValue.length)}if(x.nodeType===1){y=Math.min(t[0],x.childNodes.length)}if(z){f.setStart(x,y)}else{f.setEnd(x,y)}}return true}if(r.tridentSel){return r.tridentSel.moveToBookmark(n)}if(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&&!c.isOpera){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(l.isBlock(t)&&!t.innerHTML){t.innerHTML=!a?'<br data-mce-bogus="1" />':" "}return t}k("start");k("end");if(j){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;if(k){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 h=this,g=h.getRng(),i;if(g.item){i=g.item(0);g=h.win.document.body.createTextRange();g.moveToElementText(i)}g.collapse(!!f);h.setRng(g)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(l){var g=this,h,i,k,j=g.win.document;if(l&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():j.createRange())}}catch(f){}if(c.isIE&&i&&i.setStart&&j.selection.createRange().item){k=j.selection.createRange().item(0);i=j.createRange();i.setStartBefore(k);i.setEndAfter(k)}if(!i){i=j.createRange?j.createRange():j.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;try{h.removeAllRanges()}catch(f){}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 h=this,g=h.getRng(),i=h.getSel(),l,k=g.startContainer,f=g.endContainer;if(!g){return h.dom.getRoot()}if(g.setStart){l=g.commonAncestorContainer;if(!g.collapsed){if(g.startContainer==g.endContainer){if(g.endOffset-g.startOffset<2){if(g.startContainer.hasChildNodes()){l=g.startContainer.childNodes[g.startOffset]}}}if(k.nodeType===3&&f.nodeType===3){function j(p,m){var o=p;while(p&&p.nodeType===3&&p.length===0){p=m?p.nextSibling:p.previousSibling}return p||o}if(k.length===g.startOffset){k=j(k.nextSibling,true)}else{k=k.parentNode}if(g.endOffset===0){f=j(f.previousSibling,false)}else{f=f.parentNode}if(k&&k===f){return k}}}if(l&&l.nodeType==3){return l.parentNode}return l}return g.item?g.item(0):g.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},normalize:function(){var g=this,f,i;if(c.isIE){return}function h(p){var k,o,n,m=g.dom,j=m.getRoot(),l;k=f[(p?"start":"end")+"Container"];o=f[(p?"start":"end")+"Offset"];if(k.nodeType===9){k=k.body;o=0}if(k===j){if(k.hasChildNodes()){k=k.childNodes[Math.min(!p&&o>0?o-1:o,k.childNodes.length-1)];o=0;if(k.hasChildNodes()){l=k;n=new c.dom.TreeWalker(k,j);do{if(l.nodeType===3){o=p?0:l.nodeValue.length-1;k=l;break}if(l.nodeName==="BR"){o=m.nodeIndex(l);k=l.parentNode;break}}while(l=(p?n.next():n.prev()));i=true}}}if(i){f["set"+(p?"Start":"End")](k,o)}}f=g.getRng();h(true);if(f.collapsed){h()}if(i){g.setRng(f)}},destroy:function(g){var f=this;f.win=null;if(!g){c.removeUnload(f.destroy)}},_fixIESelection:function(){var g=this.dom,m=g.doc,h=m.body,j,n,f;m.documentElement.unselectable=true;function i(o,r){var p=h.createTextRange();try{p.moveToPoint(o,r)}catch(q){p=null}return p}function l(p){var o;if(p.button){o=i(p.x,p.y);if(o){if(o.compareEndPoints("StartToStart",n)>0){o.setEndPoint("StartToStart",n)}else{o.setEndPoint("EndToEnd",n)}o.select()}}else{k()}}function k(){var o=m.selection.createRange();if(n&&!o.item&&o.compareEndPoints("StartToEnd",o)===0){n.select()}g.unbind(m,"mouseup",k);g.unbind(m,"mousemove",l);n=j=0}g.bind(m,["mousedown","contextmenu"],function(o){if(o.target.nodeName==="HTML"){if(j){k()}f=m.documentElement;if(f.scrollHeight>f.clientHeight){return}j=1;n=i(o.x,o.y);if(n){g.bind(m,"mouseup",k);g.bind(m,"mousemove",l);g.win.focus();n.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}e.remove_trailing_brs=true;i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/\s*mce(Item\w+|Selected)\s*/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,"").replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(m.getInner?o.innerHTML:a.trim(i.getOuterHTML(o),m),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,r){var h=d.startContainer,k=d.startOffset,s=d.endContainer,l=d.endOffset,i,f,n,g,q,p,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(t){r([t])});return}function o(v,u,t){var x=[];for(;v&&v!=t;v=v[u]){x.push(v)}return x}function m(u,t){do{if(u.parentNode==t){return u}u=u.parentNode}while(u)}function j(v,u,x){var t=x?"nextSibling":"previousSibling";for(g=v,q=g.parentNode;g&&g!=u;g=q){q=g.parentNode;p=o(g==v?g:g[t],t);if(p.length){if(!x){p.reverse()}r(p)}}}if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[k]}if(s.nodeType==1&&s.hasChildNodes()){s=s.childNodes[Math.min(l-1,s.childNodes.length-1)]}i=c.findCommonAncestor(h,s);if(h==s){return r([h])}for(g=h;g;g=g.parentNode){if(g==s){return j(h,i,true)}if(g==i){break}}for(g=s;g;g=g.parentNode){if(g==h){return j(s,i)}if(g==i){break}}f=m(h,i)||h;n=m(s,i)||s;j(h,f,true);p=o(f==h?f:f.nextSibling,"nextSibling",n==s?n.nextSibling:n);if(p.length){r(p)}j(s,n)}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var p=this,m=e.root,l=e.items,n=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,k=e.excludeFromTabOrder,j,h,o,d,g;f=f||b.DOM;j=function(q){g=q.target.id};h=function(q){f.setAttrib(q.target.id,"tabindex","-1")};d=function(q){var r=f.get(g);f.setAttrib(r,"tabindex","0");r.focus()};p.focus=function(){f.get(g).focus()};p.destroy=function(){c(l,function(q){f.unbind(f.get(q.id),"focus",j);f.unbind(f.get(q.id),"blur",h)});f.unbind(f.get(m),"focus",d);f.unbind(f.get(m),"keydown",o);l=f=m=p.focus=j=h=o=d=null;p.destroy=function(){}};p.moveFocus=function(u,r){var q=-1,t=p.controls,s;if(!g){return}c(l,function(x,v){if(x.id===g){q=v;return false}});q+=u;if(q<0){q=l.length-1}else{if(q>=l.length){q=0}}s=l[q];f.setAttrib(g,"tabindex","-1");f.setAttrib(s.id,"tabindex","0");f.get(s.id).focus();if(e.actOnFocus){e.onAction(s.id)}if(r){a.cancel(r)}};o=function(y){var u=37,t=39,x=38,z=40,q=27,s=14,r=13,v=32;switch(y.keyCode){case u:if(i){p.moveFocus(-1)}break;case t:if(i){p.moveFocus(1)}break;case x:if(n){p.moveFocus(-1)}break;case z:if(n){p.moveFocus(1)}break;case q:if(e.onCancel){e.onCancel();a.cancel(y)}break;case s:case r:case v:if(e.onAction){e.onAction(g);a.cancel(y)}break}};c(l,function(s,q){var r;if(!s.id){s.id=f.uniqueId("_mce_item_")}if(k){f.bind(s.id,"blur",h);r="-1"}else{r=(q===0?"0":"-1")}f.setAttrib(s.id,"tabindex",r);f.bind(f.get(s.id),"focus",j)});if(l[0]){g=l[0].id}f.setAttrib(m,"tabindex","-1");f.bind(f.get(m),"focus",d);f.bind(f.get(m),"keydown",o)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.select("#menu_"+g.id)[0];h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" />'+c}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var c=this,d=c.settings;b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){return d.onclick.call(d.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(i,h,f){var g=this;g.parent(i,h,f);g.items=[];g.onChange=new a(g);g.onPostRender=new a(g);g.onAdd=new a(g);g.onRenderMenu=new d.util.Dispatcher(this);g.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var g=this,h,i;if(f!=g.selectedIndex){h=c.get(g.id+"_text");i=g.items[f];if(i){g.selectedValue=i.value;g.selectedIndex=f;c.setHTML(h,c.encode(i.title));c.removeClass(h,"mceTitle");c.setAttrib(g.id,"aria-valuenow",i.title)}else{c.setHTML(h,c.encode(g.settings.title));c.addClass(h,"mceTitle");g.selectedValue=g.selectedIndex=null;c.setAttrib(g.id,"aria-valuenow",g.settings.title)}h=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<span role="button" aria-haspopup="true" aria-labelledby="'+f.id+'_text" aria-describedby="'+f.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("span",{id:f.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},f.settings.title);i+=c.createHTML("a",{id:f.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";i+="</tr></tbody></table></span>";return i},showMenu:function(){var g=this,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(j){if(j.value===g.selectedValue){f.items[j.id].setSelected(1);g.oldID=j.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){c.removeClass(f.id,f.classPrefix+"Selected");if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(function(){g.hideMenu();g.focus()});f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id,"keydown",function(h){if(h.keyCode==32){f.showMenu(h);b.cancel(h)}});b.add(f.id,"focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id,"keydown",function(h){if(h.keyCode==40){f.showMenu();b.cancel(h)}});f.keyPressHandler=b.add(f.id,"keypress",function(i){var h;if(i.keyCode==13){h=f.selectedValue;f.selectedValue=null;b.cancel(i);f.settings.onselect(h)}})}f._focused=1});b.add(f.id,"blur",function(){b.remove(f.id,"keydown",f.keyDownHandler);b.remove(f.id,"keypress",f.keyPressHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f;this.setAriaProperty("disabled",f)},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox","aria-labelledby":f.id+"_aria"},g);g+=c.createHTML("span",{id:f.id+"_aria",style:"display: none"},f.settings.title);return g},postRender:function(){var g=this,h,i=true;g.rendered=true;function f(k){var j=g.items[k.target.selectedIndex-1];if(j&&(j=j.value)){g.onChange.dispatch(g,j);if(g.settings.onselect){g.settings.onselect(j)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(k){var j;b.remove(g.id,"change",h);i=false;j=b.add(g.id,"blur",function(){if(i){return}i=true;b.add(g.id,"change",f);b.remove(g.id,"blur",j)});if(d.isWebKit&&(k.keyCode==37||k.keyCode==39)){return b.prevent(k)}if(k.keyCode==13||k.keyCode==32){f(k);return b.cancel(k)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{id:f.id,role:"presentation",tabindex:"0","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("span",{role:"button","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(i){i=i.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");g=c.add(g,"a",{role:"option",href:"javascript:;",style:{backgroundColor:"#"+i},title:p.editor.getLang("colors."+i,i),"data-mce-color":"#"+i});if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+i;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");new d.ui.KeyboardNavigation({root:p.id+"_menu",items:c.select("a",p.id+"_menu"),onCancel:function(){p.hideMenu();p.focus()}});a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return a.cancel(i)});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){this.keyNav.focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(m){var n=m.DOM,j=m.dom.Event,f=m.extend,k=m.util.Dispatcher,i=m.each,a=m.isGecko,b=m.isIE,e=m.isWebKit,d=m.is,h=m.ThemeManager,c=m.PluginManager,o=m.inArray,l=m.grep,g=m.explode;m.create("tinymce.Editor",{Editor:function(r,q){var p=this;p.id=p.editorId=r;p.execCommands={};p.queryStateCommands={};p.queryValueCommands={};p.isNotDirty=false;p.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState"],function(s){p[s]=new k(p)});p.settings=q=f({id:r,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:m.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:m.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",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",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",validate:true,entity_encoding:"named",url_converter:p.convertURL,url_converter_scope:p,ie7_compat:true},q);p.documentBaseURI=new m.util.URI(q.document_base_url||m.documentBaseURL,{base_uri:tinyMCE.baseURI});p.baseURI=m.baseURI;p.contentCSS=[];p.execCallback("setup",p)},render:function(r){var u=this,v=u.settings,x=u.id,p=m.ScriptLoader;if(!j.domLoaded){j.add(document,"init",function(){u.render()});return}tinyMCE.settings=v;if(!u.getElement()){return}if(m.isIDevice&&!m.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(u.getElement().nodeName)&&v.hidden_input&&n.getParent(x,"form")){n.insertAfter(n.create("input",{type:"hidden",name:x}),x)}if(m.WindowManager){u.windowManager=new m.WindowManager(u)}if(v.encoding=="xml"){u.onGetContent.add(function(s,t){if(t.save){t.content=n.encode(t.content)}})}if(v.add_form_submit_trigger){u.onSubmit.addToTop(function(){if(u.initialized){u.save();u.isNotDirty=1}})}if(v.add_unload_trigger){u._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(u.initialized&&!u.destroyed&&!u.isHidden()){u.save({format:"raw",no_events:true})}})}m.addUnload(u.destroy,u);if(v.submit_patch){u.onBeforeRenderUI.add(function(){var s=u.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){u.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){m.triggerSave();u.isNotDirty=1;return u.formElement._mceOldSubmit(u.formElement)}}s=null})}function q(){if(v.language&&v.language_load!==false){p.add(m.baseURL+"/langs/"+v.language+".js")}if(v.theme&&v.theme.charAt(0)!="-"&&!h.urls[v.theme]){h.load(v.theme,"themes/"+v.theme+"/editor_template"+m.suffix+".js")}i(g(v.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(z){var y={prefix:"plugins/",resource:z,suffix:"/editor_plugin"+m.suffix+".js"};var z=c.createUrl(y,z);c.load(z.resource,z)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+m.suffix+".js"})}}});p.loadQueue(function(){if(!u.removed){u.init()}})}q()},init:function(){var r,H=this,I=H.settings,E,A,D=H.getElement(),q,p,F,y,C,G,z,v=[];m.add(H);I.aria_label=I.aria_label||n.getAttrib(D,"aria-label",H.getLang("aria.rich_text_area"));if(I.theme){I.theme=I.theme.replace(/-/,"");q=h.get(I.theme);H.theme=new q();if(H.theme.init&&I.init_theme){H.theme.init(H,h.urls[I.theme]||m.documentBaseURL.replace(/\/$/,""))}}function B(J){var K=c.get(J),t=c.urls[J]||m.documentBaseURL.replace(/\/$/,""),s;if(K&&m.inArray(v,J)===-1){i(c.dependencies(J),function(u){B(u)});s=new K(H,t);H.plugins[J]=s;if(s.init){s.init(H,t);v.push(J)}}}i(g(I.plugins.replace(/\-/g,"")),B);if(I.popup_css!==false){if(I.popup_css){I.popup_css=H.documentBaseURI.toAbsolute(I.popup_css)}else{I.popup_css=H.baseURI.toAbsolute("themes/"+I.theme+"/skins/"+I.skin+"/dialog.css")}}if(I.popup_css_add){I.popup_css+=","+H.documentBaseURI.toAbsolute(I.popup_css_add)}H.controlManager=new m.ControlManager(H);if(I.custom_undo_redo){H.onBeforeExecCommand.add(function(t,J,u,K,s){if(J!="Undo"&&J!="Redo"&&J!="mceRepaint"&&(!s||!s.skip_undo)){H.undoManager.beforeChange()}});H.onExecCommand.add(function(t,J,u,K,s){if(J!="Undo"&&J!="Redo"&&J!="mceRepaint"&&(!s||!s.skip_undo)){H.undoManager.add()}})}H.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){H.nodeChanged()}});if(a){function x(s,t){if(!t||!t.initial){H.execCommand("mceRepaint")}}H.onUndo.add(x);H.onRedo.add(x);H.onSetContent.add(x)}H.onBeforeRenderUI.dispatch(H,H.controlManager);if(I.render_ui){E=I.width||D.style.width||D.offsetWidth;A=I.height||D.style.height||D.offsetHeight;H.orgDisplay=D.style.display;G=/^[0-9\.]+(|px)$/i;if(G.test(""+E)){E=Math.max(parseInt(E)+(q.deltaWidth||0),100)}if(G.test(""+A)){A=Math.max(parseInt(A)+(q.deltaHeight||0),100)}q=H.theme.renderUI({targetNode:D,width:E,height:A,deltaWidth:I.delta_width,deltaHeight:I.delta_height});H.editorContainer=q.editorContainer}if(document.domain&&location.hostname!=document.domain){m.relaxedDomain=document.domain}n.setStyles(q.sizeContainer||q.editorContainer,{width:E,height:A});if(I.content_css){m.each(g(I.content_css),function(s){H.contentCSS.push(H.documentBaseURI.toAbsolute(s))})}A=(q.iframeHeight||A)+(typeof(A)=="number"?(q.deltaHeight||0):"");if(A<100){A=100}H.iframeHTML=I.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(I.document_base_url!=m.documentBaseURL){H.iframeHTML+='<base href="'+H.documentBaseURI.getURI()+'" />'}if(I.ie7_compat){H.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{H.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}H.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';y=I.body_id||"tinymce";if(y.indexOf("=")!=-1){y=H.getParam("body_id","","hash");y=y[H.id]||y}C=I.body_class||"";if(C.indexOf("=")!=-1){C=H.getParam("body_class","","hash");C=C[H.id]||""}H.iframeHTML+='</head><body id="'+y+'" class="mceContentBody '+C+'"><br></body></html>';if(m.relaxedDomain&&(b||(m.isOpera&&parseFloat(opera.version())<11))){F='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+H.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}r=n.add(q.iframeContainer,"iframe",{id:H.id+"_ifr",src:F||'javascript:""',frameBorder:"0",allowTransparency:"true",title:I.aria_label,style:{width:"100%",height:A,display:"block"}});H.contentAreaContainer=q.iframeContainer;n.get(q.editorContainer).style.display=H.orgDisplay;n.get(H.id).style.display="none";n.setAttrib(H.id,"aria-hidden",true);if(!m.relaxedDomain||!F){H.setupIframe()}D=r=q=null},setupIframe:function(){var q=this,v=q.settings,x=n.get(q.id),y=q.getDoc(),u,p;if(!b||!m.relaxedDomain){if(a&&!Range.prototype.getClientRects){q.onMouseDown.add(function(t,z){if(z.target.nodeName==="HTML"){var s=q.getBody();s.blur();setTimeout(function(){s.focus()},0)}})}y.open();y.write(q.iframeHTML);y.close();if(m.relaxedDomain){y.domain=m.relaxedDomain}}p=q.getBody();p.disabled=true;if(!v.readonly){p.contentEditable=true}p.disabled=false;q.schema=new m.html.Schema(v);q.dom=new m.dom.DOMUtils(q.getDoc(),{keep_values:true,url_converter:q.convertURL,url_converter_scope:q,hex_colors:v.force_hex_style_colors,class_filter:v.class_filter,update_styles:1,fix_ie_paragraphs:1,schema:q.schema});q.parser=new m.html.DomParser(v,q.schema);if(!q.settings.allow_html_in_named_anchor){q.parser.addAttributeFilter("name",function(s,t){var A=s.length,C,z,B,D;while(A--){D=s[A];if(D.name==="a"&&D.firstChild){B=D.parent;C=D.lastChild;do{z=C.prev;B.insert(C,D);C=z}while(C)}}})}q.parser.addAttributeFilter("src,href,style",function(s,t){var z=s.length,B,D=q.dom,C,A;while(z--){B=s[z];C=B.attr(t);A="data-mce-"+t;if(!B.attributes.map[A]){if(t==="style"){B.attr(A,D.serializeStyle(D.parseStyle(C),B.name))}else{B.attr(A,q.convertURL(C,t,B.name))}}}});q.parser.addNodeFilter("script",function(s,t){var z=s.length;while(z--){s[z].attr("type","mce-text/javascript")}});q.parser.addNodeFilter("#cdata",function(s,t){var z=s.length,A;while(z--){A=s[z];A.type=8;A.name="#comment";A.value="[CDATA["+A.value+"]]"}});q.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,z){var A=t.length,B,s=q.schema.getNonEmptyElements();while(A--){B=t[A];if(B.isEmpty(s)){B.empty().append(new m.html.Node("br",1)).shortEnded=true}}});q.serializer=new m.dom.Serializer(v,q.dom,q.schema);q.selection=new m.dom.Selection(q.dom,q.getWin(),q.serializer);q.formatter=new m.Formatter(this);q.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"}},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"}},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,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",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"}}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(s){return true},onformat:function(z,s,t){i(t,function(B,A){q.dom.setAttrib(z,A,B)})}},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}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){q.formatter.register(s,{block:s,remove:"all"})});q.formatter.register(q.settings.formats);q.undoManager=new m.UndoManager(q);q.undoManager.onAdd.add(function(t,s){if(t.hasUndo()){return q.onChange.dispatch(q,s,t)}});q.undoManager.onUndo.add(function(t,s){return q.onUndo.dispatch(q,s,t)});q.undoManager.onRedo.add(function(t,s){return q.onRedo.dispatch(q,s,t)});q.forceBlocks=new m.ForceBlocks(q,{forced_root_block:v.forced_root_block});q.editorCommands=new m.EditorCommands(q);q.serializer.onPreProcess.add(function(s,t){return q.onPreProcess.dispatch(q,t,s)});q.serializer.onPostProcess.add(function(s,t){return q.onPostProcess.dispatch(q,t,s)});q.onPreInit.dispatch(q);if(!v.gecko_spellcheck){q.getBody().spellcheck=0}if(!v.readonly){q._addEvents()}q.controlManager.onPostRender.dispatch(q,q.controlManager);q.onPostRender.dispatch(q);q.quirks=new m.util.Quirks(this);if(v.directionality){q.getBody().dir=v.directionality}if(v.nowrap){q.getBody().style.whiteSpace="nowrap"}if(v.handle_node_change_callback){q.onNodeChange.add(function(t,s,z){q.execCallback("handle_node_change_callback",q.id,z,-1,-1,true,q.selection.isCollapsed())})}if(v.save_callback){q.onSaveContent.add(function(s,z){var t=q.execCallback("save_callback",q.id,z.content,q.getBody());if(t){z.content=t}})}if(v.onchange_callback){q.onChange.add(function(t,s){q.execCallback("onchange_callback",q,s)})}if(v.protect){q.onBeforeSetContent.add(function(s,t){if(v.protect){i(v.protect,function(z){t.content=t.content.replace(z,function(A){return"<!--mce:protected "+escape(A)+"-->"})})}})}if(v.convert_newlines_to_brs){q.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(v.preformatted){q.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(v.verify_css_classes){q.serializer.attribValueFilter=function(B,z){var A,t;if(B=="class"){if(!q.classesRE){t=q.dom.getClasses();if(t.length>0){A="";i(t,function(s){A+=(A?"|":"")+s["class"]});q.classesRE=new RegExp("("+A+")","gi")}}return !q.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(z)||q.classesRE.test(z)?z:""}return z}}if(v.cleanup_callback){q.onBeforeSetContent.add(function(s,t){t.content=q.execCallback("cleanup_callback","insert_to_editor",t.content,t)});q.onPreProcess.add(function(s,t){if(t.set){q.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){q.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});q.onPostProcess.add(function(s,t){if(t.set){t.content=q.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=q.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(v.save_callback){q.onGetContent.add(function(s,t){if(t.save){t.content=q.execCallback("save_callback",q.id,t.content,q.getBody())}})}if(v.handle_event_callback){q.onEvent.add(function(s,t,z){if(q.execCallback("handle_event_callback",t,s,z)===false){j.cancel(t)}})}q.onSetContent.add(function(){q.addVisual(q.getBody())});if(v.padd_empty_editor){q.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>( | |\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function r(s,t){i(s.dom.select("a"),function(A){var z=A.parentNode;if(s.dom.isBlock(z)&&z.lastChild===A){s.dom.add(z,"br",{"data-mce-bogus":1})}})}q.onExecCommand.add(function(s,t){if(t==="CreateLink"){r(s)}});q.onSetContent.add(q.selection.onSetContent.add(r))}q.load({initial:true,format:"html"});q.startContent=q.getContent({format:"raw"});q.undoManager.add();q.initialized=true;q.onInit.dispatch(q);q.execCallback("setupcontent_callback",q.id,q.getBody(),q.getDoc());q.execCallback("init_instance_callback",q);q.focus(true);q.nodeChanged({initial:1});i(q.contentCSS,function(s){q.dom.loadCSS(s)});if(v.auto_focus){setTimeout(function(){var s=m.get(v.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getBody().focus();s.getWin().focus()},100)}x=null},focus:function(u){var y,q=this,s=q.selection,x=q.settings.content_editable,r,p,v=q.getDoc();if(!u){r=s.getRng();if(r.item){p=r.item(0)}q._refreshContentEditable();s.normalize();if(!x){q.getWin().focus()}if(m.isGecko){q.getBody().focus()}if(p&&p.ownerDocument==v){r=v.body.createControlRange();r.addElement(p);r.select()}}if(m.activeEditor!=q){if((y=m.activeEditor)!=null){y.onDeactivate.dispatch(y,q)}q.onActivate.dispatch(q,y)}m._setActive(q)},execCallback:function(u){var p=this,r=p.settings[u],q;if(!r){return}if(p.callbackLookup&&(q=p.callbackLookup[u])){r=q.func;q=q.scope}if(d(r,"string")){q=r.replace(/\.\w+$/,"");q=q?m.resolve(q):0;r=m.resolve(r);p.callbackLookup=p.callbackLookup||{};p.callbackLookup[u]={func:r,scope:q}}return r.apply(q||p,Array.prototype.slice.call(arguments,1))},translate:function(p){var r=this.settings.language||"en",q=m.i18n;if(!p){return""}return q[r+"."+p]||p.replace(/{\#([^}]+)\}/g,function(t,s){return q[r+"."+s]||"{#"+s+"}"})},getLang:function(q,p){return m.i18n[(this.settings.language||"en")+"."+q]||(d(p)?p:"{#"+q+"}")},getParam:function(u,r,p){var s=m.trim,q=d(this.settings[u])?this.settings[u]:r,t;if(p==="hash"){t={};if(d(q,"string")){i(q.indexOf("=")>0?q.split(/[;,](?![^=;,]*(?:[;,]|$))/):q.split(","),function(x){x=x.split("=");if(x.length>1){t[s(x[0])]=s(x[1])}else{t[s(x[0])]=s(x)}})}else{t=q}return t}return q},nodeChanged:function(r){var p=this,q=p.selection,u=q.getStart()||p.getBody();if(p.initialized){r=r||{};u=b&&u.ownerDocument!=p.getDoc()?p.getBody():u;r.parents=[];p.dom.getParent(u,function(s){if(s.nodeName=="BODY"){return true}r.parents.push(s)});p.onNodeChange.dispatch(p,r?r.controlManager||p.controlManager:p.controlManager,u,q.isCollapsed(),r)}},addButton:function(r,q){var p=this;p.buttons=p.buttons||{};p.buttons[r]=q},addCommand:function(p,r,q){this.execCommands[p]={func:r,scope:q||this}},addQueryStateHandler:function(p,r,q){this.queryStateCommands[p]={func:r,scope:q||this}},addQueryValueHandler:function(p,r,q){this.queryValueCommands[p]={func:r,scope:q||this}},addShortcut:function(r,u,p,s){var q=this,v;if(!q.settings.custom_shortcuts){return false}q.shortcuts=q.shortcuts||{};if(d(p,"string")){v=p;p=function(){q.execCommand(v,false,null)}}if(d(p,"object")){v=p;p=function(){q.execCommand(v[0],v[1],v[2])}}i(g(r),function(t){var x={func:p,scope:s||this,desc:u,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(y){switch(y){case"alt":case"ctrl":case"shift":x[y]=true;break;default:x.charCode=y.charCodeAt(0);x.keyCode=y.toUpperCase().charCodeAt(0)}});q.shortcuts[(x.ctrl?"ctrl":"")+","+(x.alt?"alt":"")+","+(x.shift?"shift":"")+","+x.keyCode]=x});return true},execCommand:function(x,v,z,p){var r=this,u=0,y,q;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(x)&&(!p||!p.skip_focus)){r.focus()}y={};r.onBeforeExecCommand.dispatch(r,x,v,z,y);if(y.terminate){return false}if(r.execCallback("execcommand_callback",r.id,r.selection.getNode(),x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(y=r.execCommands[x]){q=y.func.call(y.scope,v,z);if(q!==true){r.onExecCommand.dispatch(r,x,v,z,p);return q}}i(r.plugins,function(s){if(s.execCommand&&s.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);u=1;return false}});if(u){return true}if(r.theme&&r.theme.execCommand&&r.theme.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(r.editorCommands.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}r.getDoc().execCommand(x,v,z);r.onExecCommand.dispatch(r,x,v,z,p)},queryCommandState:function(u){var q=this,v,r;if(q._isHidden()){return}if(v=q.queryStateCommands[u]){r=v.func.call(v.scope);if(r!==true){return r}}v=q.editorCommands.queryCommandState(u);if(v!==-1){return v}try{return this.getDoc().queryCommandState(u)}catch(p){}},queryCommandValue:function(v){var q=this,u,r;if(q._isHidden()){return}if(u=q.queryValueCommands[v]){r=u.func.call(u.scope);if(r!==true){return r}}u=q.editorCommands.queryCommandValue(v);if(d(u)){return u}try{return this.getDoc().queryCommandValue(v)}catch(p){}},show:function(){var p=this;n.show(p.getContainer());n.hide(p.id);p.load()},hide:function(){var p=this,q=p.getDoc();if(b&&q){q.execCommand("SelectAll")}p.save();n.hide(p.getContainer());n.setStyle(p.id,"display",p.orgDisplay)},isHidden:function(){return !n.isHidden(this.id)},setProgressState:function(p,q,r){this.onSetProgressState.dispatch(this,p,q,r);return p},load:function(s){var p=this,r=p.getElement(),q;if(r){s=s||{};s.load=true;q=p.setContent(d(r.value)?r.value:r.innerHTML,s);s.element=r;if(!s.no_events){p.onLoadContent.dispatch(p,s)}s.element=r=null;return q}},save:function(u){var p=this,s=p.getElement(),q,r;if(!s||!p.initialized){return}u=u||{};u.save=true;if(!u.no_events){p.undoManager.typing=false;p.undoManager.add()}u.element=s;q=u.content=p.getContent(u);if(!u.no_events){p.onSaveContent.dispatch(p,u)}q=u.content;if(!/TEXTAREA|INPUT/i.test(s.nodeName)){s.innerHTML=q;if(r=n.getParent(p.id,"form")){i(r.elements,function(t){if(t.name==p.id){t.value=q;return false}})}}else{s.value=q}u.element=s=null;return q},setContent:function(u,s){var r=this,q,p=r.getBody(),t;s=s||{};s.format=s.format||"html";s.set=true;s.content=u;if(!s.no_events){r.onBeforeSetContent.dispatch(r,s)}u=s.content;if(!m.isIE&&(u.length===0||/^\s+$/.test(u))){t=r.settings.forced_root_block;if(t){u="<"+t+'><br data-mce-bogus="1"></'+t+">"}else{u='<br data-mce-bogus="1">'}p.innerHTML=u;r.selection.select(p,true);r.selection.collapse(true);return}if(s.format!=="raw"){u=new m.html.Serializer({},r.schema).serialize(r.parser.parse(u))}s.content=m.trim(u);r.dom.setHTML(p,s.content);if(!s.no_events){r.onSetContent.dispatch(r,s)}r.selection.normalize();return s.content},getContent:function(q){var p=this,r;q=q||{};q.format=q.format||"html";q.get=true;if(!q.no_events){p.onBeforeGetContent.dispatch(p,q)}if(q.format=="raw"){r=p.getBody().innerHTML}else{r=p.serializer.serialize(p.getBody(),q)}q.content=m.trim(r);if(!q.no_events){p.onGetContent.dispatch(p,q)}return q.content},isDirty:function(){var p=this;return m.trim(p.startContent)!=m.trim(p.getContent({format:"raw",no_events:1}))&&!p.isNotDirty},getContainer:function(){var p=this;if(!p.container){p.container=n.get(p.editorContainer||p.id+"_parent")}return p.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return n.get(this.settings.content_element||this.id)},getWin:function(){var p=this,q;if(!p.contentWindow){q=n.get(p.id+"_ifr");if(q){p.contentWindow=q.contentWindow}}return p.contentWindow},getDoc:function(){var q=this,p;if(!q.contentDocument){p=q.getWin();if(p){q.contentDocument=p.document}}return q.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(p,x,v){var q=this,r=q.settings;if(r.urlconverter_callback){return q.execCallback("urlconverter_callback",p,v,true,x)}if(!r.convert_urls||(v&&v.nodeName=="LINK")||p.indexOf("file:")===0){return p}if(r.relative_urls){return q.documentBaseURI.toRelative(p)}p=q.documentBaseURI.toAbsolute(p,r.remove_script_host);return p},addVisual:function(r){var p=this,q=p.settings;r=r||p.getBody();if(!d(p.hasVisual)){p.hasVisual=q.visual}i(p.dom.select("table,a",r),function(t){var s;switch(t.nodeName){case"TABLE":s=p.dom.getAttrib(t,"border");if(!s||s=="0"){if(p.hasVisual){p.dom.addClass(t,q.visual_table_class)}else{p.dom.removeClass(t,q.visual_table_class)}}return;case"A":s=p.dom.getAttrib(t,"name");if(s){if(p.hasVisual){p.dom.addClass(t,"mceItemAnchor")}else{p.dom.removeClass(t,"mceItemAnchor")}}return}});p.onVisualAid.dispatch(p,r,p.hasVisual)},remove:function(){var p=this,q=p.getContainer();p.removed=1;p.hide();p.execCallback("remove_instance_callback",p);p.onRemove.dispatch(p);p.onExecCommand.listeners=[];m.remove(p);n.remove(q)},destroy:function(q){var p=this;if(p.destroyed){return}if(!q){m.removeUnload(p.destroy);tinyMCE.onBeforeUnload.remove(p._beforeUnload);if(p.theme&&p.theme.destroy){p.theme.destroy()}p.controlManager.destroy();p.selection.destroy();p.dom.destroy();if(!p.settings.content_editable){j.clear(p.getWin());j.clear(p.getDoc())}j.clear(p.getBody());j.clear(p.formElement)}if(p.formElement){p.formElement.submit=p.formElement._mceOldSubmit;p.formElement._mceOldSubmit=null}p.contentAreaContainer=p.formElement=p.container=p.settings.content_element=p.bodyElement=p.contentDocument=p.contentWindow=null;if(p.selection){p.selection=p.selection.win=p.selection.dom=p.selection.dom.doc=null}p.destroyed=1},_addEvents:function(){var B=this,r,C=B.settings,q=B.dom,x={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function p(t,D){var s=t.type;if(B.removed){return}if(B.onEvent.dispatch(B,t,D)!==false){B[x[t.fakeType||t.type]].dispatch(B,t,D)}}i(x,function(t,s){switch(s){case"contextmenu":q.bind(B.getDoc(),s,p);break;case"paste":q.bind(B.getBody(),s,function(D){p(D)});break;case"submit":case"reset":q.bind(B.getElement().form||n.getParent(B.id,"form"),s,p);break;default:q.bind(C.content_editable?B.getBody():B.getDoc(),s,p)}});q.bind(C.content_editable?B.getBody():(a?B.getDoc():B.getWin()),"focus",function(s){B.focus(true)});if(m.isGecko){q.bind(B.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("data-mce-src"))){t.src=B.documentBaseURI.toAbsolute(s)}})}if(a){function u(){var E=this,G=E.getDoc(),F=E.settings;if(a&&!F.readonly){E._refreshContentEditable();try{G.execCommand("styleWithCSS",0,false)}catch(D){if(!E._isHidden()){try{G.execCommand("useCSS",0,true)}catch(D){}}}if(!F.table_inline_editing){try{G.execCommand("enableInlineTableEditing",false,false)}catch(D){}}if(!F.object_resizing){try{G.execCommand("enableObjectResizing",false,false)}catch(D){}}}}B.onBeforeExecCommand.add(u);B.onMouseDown.add(u)}B.onClick.add(function(s,t){t=t.target;if(m.isWebKit&&t.nodeName=="IMG"){B.selection.getSel().setBaseAndExtent(t,0,t,1)}if(t.nodeName=="A"&&q.hasClass(t,"mceItemAnchor")){B.selection.select(t)}B.nodeChanged()});B.onMouseUp.add(B.nodeChanged);B.onKeyUp.add(function(s,t){var D=t.keyCode;if((D>=33&&D<=36)||(D>=37&&D<=40)||D==13||D==45||D==46||D==8||(m.isMac&&(D==91||D==93))||t.ctrlKey){B.nodeChanged()}});B.onKeyDown.add(function(t,D){if(D.keyCode!=8){return}var F=t.selection.getRng().startContainer;var E=t.selection.getRng().startOffset;while(F&&F.nodeType&&F.nodeType!=1&&F.parentNode){F=F.parentNode}if(F&&F.parentNode&&F.parentNode.tagName==="BLOCKQUOTE"&&F.parentNode.firstChild==F&&E==0){t.formatter.toggle("blockquote",null,F.parentNode);var s=t.selection.getRng();s.setStart(F,0);s.setEnd(F,0);t.selection.setRng(s);t.selection.collapse(false)}});B.onReset.add(function(){B.setContent(B.startContent,{format:"raw"})});if(C.custom_shortcuts){if(C.custom_undo_redo_keyboard_shortcuts){B.addShortcut("ctrl+z",B.getLang("undo_desc"),"Undo");B.addShortcut("ctrl+y",B.getLang("redo_desc"),"Redo")}B.addShortcut("ctrl+b",B.getLang("bold_desc"),"Bold");B.addShortcut("ctrl+i",B.getLang("italic_desc"),"Italic");B.addShortcut("ctrl+u",B.getLang("underline_desc"),"Underline");for(r=1;r<=6;r++){B.addShortcut("ctrl+"+r,"",["FormatBlock",false,"h"+r])}B.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);B.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);B.addShortcut("ctrl+9","",["FormatBlock",false,"address"]);function v(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(B.shortcuts,function(D){if(m.isMac&&D.ctrl!=t.metaKey){return}else{if(!m.isMac&&D.ctrl!=t.ctrlKey){return}}if(D.alt!=t.altKey){return}if(D.shift!=t.shiftKey){return}if(t.keyCode==D.keyCode||(t.charCode&&t.charCode==D.charCode)){s=D;return false}});return s}B.onKeyUp.add(function(s,t){var D=v(t);if(D){return j.cancel(t)}});B.onKeyPress.add(function(s,t){var D=v(t);if(D){return j.cancel(t)}});B.onKeyDown.add(function(s,t){var D=v(t);if(D){D.func.call(D.scope);return j.cancel(t)}})}if(m.isIE){q.bind(B.getDoc(),"controlselect",function(D){var t=B.resizeInfo,s;D=D.target;if(D.nodeName!=="IMG"){return}if(t){q.unbind(t.node,t.ev,t.cb)}if(!q.hasClass(D,"mceItemNoResize")){ev="resizeend";s=q.bind(D,ev,function(F){var E;F=F.target;if(E=q.getStyle(F,"width")){q.setAttrib(F,"width",E.replace(/[^0-9%]+/g,""));q.setStyle(F,"width","")}if(E=q.getStyle(F,"height")){q.setAttrib(F,"height",E.replace(/[^0-9%]+/g,""));q.setStyle(F,"height","")}})}else{ev="resizestart";s=q.bind(D,"resizestart",j.cancel,j)}t=B.resizeInfo={node:D,ev:ev,cb:s}})}if(m.isOpera){B.onClick.add(function(s,t){j.prevent(t)})}if(C.custom_undo_redo){function y(){B.undoManager.typing=false;B.undoManager.add()}q.bind(B.getDoc(),"focusout",function(s){if(!B.removed&&B.undoManager.typing){y()}});B.dom.bind(B.dom.getRoot(),"dragend",function(s){y()});B.onKeyUp.add(function(s,D){var t=D.keyCode;if((t>=33&&t<=36)||(t>=37&&t<=40)||t==13||t==45||D.ctrlKey){y()}});B.onKeyDown.add(function(s,E){var D=E.keyCode,t;if(D==8){t=B.getDoc().selection;if(t&&t.createRange&&t.createRange().item){B.undoManager.beforeChange();s.dom.remove(t.createRange().item(0));y();return j.cancel(E)}}if((D>=33&&D<=36)||(D>=37&&D<=40)||D==13||D==45){if(m.isIE&&D==13){B.undoManager.beforeChange()}if(B.undoManager.typing){y()}return}if((D<16||D>20)&&D!=224&&D!=91&&!B.undoManager.typing){B.undoManager.beforeChange();B.undoManager.typing=true;B.undoManager.add()}});B.onMouseDown.add(function(){if(B.undoManager.typing){y()}})}if(m.isWebKit){q.bind(B.getDoc(),"selectionchange",function(){if(B.selectionTimer){clearTimeout(B.selectionTimer);B.selectionTimer=0}B.selectionTimer=window.setTimeout(function(){B.nodeChanged()},50)})}if(m.isGecko){function A(){var s=B.dom.getAttribs(B.selection.getStart().cloneNode(false));return function(){var t=B.selection.getStart();if(t!==B.getBody()){B.dom.removeAllAttribs(t);i(s,function(D){t.setAttributeNode(D.cloneNode(true))})}}}function z(){var t=B.selection;return !t.isCollapsed()&&t.getStart()!=t.getEnd()}B.onKeyPress.add(function(s,D){var t;if((D.keyCode==8||D.keyCode==46)&&z()){t=A();B.getDoc().execCommand("delete",false,null);t();return j.cancel(D)}});B.dom.bind(B.getDoc(),"cut",function(t){var s;if(z()){s=A();B.onKeyUp.addToTop(j.cancel,j);setTimeout(function(){s();B.onKeyUp.remove(j.cancel,j)},0)}})}},_refreshContentEditable:function(){var q=this,p,r;if(q._isHidden()){p=q.getBody();r=p.parentNode;r.removeChild(p);r.appendChild(p);p.focus()}},_isHidden:function(){var p;if(!a){return 0}p=this.selection.getSel();return(!p||!p.rangeCount||p.rangeCount==0)}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return b}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return b}function u(v,x){x=x||"exec";d(v,function(z,y){d(y.toLowerCase().split(","),function(A){j[x][A]=z})})}c.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===e){x=b}if(v===e){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:e)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);d("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=c.explode(k.font_size_style_values);v=c.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return b}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new c.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=n.selection.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=c.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){d(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();v.setStart(x,0);v.setEnd(x,x.childNodes.length);n.selection.setRng(v)}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){return t("align"+v.substring(7))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(v){return m.getParent(p.getNode(),v=="insertunorderedlist"?"UL":"OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");if(k.custom_undo_redo){u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(f){var d,e=0,h=[],c;function g(){return b.trim(f.getContent({format:"raw",no_events:1}))}return d={typing:false,onAdd:new a(d),onUndo:new a(d),onRedo:new a(d),beforeChange:function(){c=f.selection.getBookmark(2,true)},add:function(m){var j,k=f.settings,l;m=m||{};m.content=g();l=h[e];if(l&&l.content==m.content){return null}if(h[e]){h[e].beforeBookmark=c}if(k.custom_undo_redo_levels){if(h.length>k.custom_undo_redo_levels){for(j=0;j<h.length-1;j++){h[j]=h[j+1]}h.length--;e=h.length}}m.bookmark=f.selection.getBookmark(2,true);if(e<h.length-1){h.length=e+1}h.push(m);e=h.length-1;d.onAdd.dispatch(d,m);f.isNotDirty=0;return m},undo:function(){var k,j;if(d.typing){d.add();d.typing=false}if(e>0){k=h[--e];f.setContent(k.content,{format:"raw"});f.selection.moveToBookmark(k.beforeBookmark);d.onUndo.dispatch(d,k)}return k},redo:function(){var i;if(e<h.length-1){i=h[++e];f.setContent(i.content,{format:"raw"});f.selection.moveToBookmark(i.bookmark);d.onRedo.dispatch(d,i)}return i},clear:function(){h=[];e=0;d.typing=false},hasUndo:function(){return e>0||this.typing},hasRedo:function(){return e<h.length-1&&!this.typing}}}})(tinymce);(function(l){var j=l.dom.Event,c=l.isIE,a=l.isGecko,b=l.isOpera,i=l.each,h=l.extend,d=true,g=false;function k(o){var p,n,m;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(o.nodeName)){if(p){n=o.cloneNode(false);n.appendChild(p);p=n}else{p=m=o.cloneNode(false)}p.removeAttribute("id")}}while(o=o.parentNode);if(p){return{wrapper:p,inner:m}}}function f(n,o){var m=o.ownerDocument.createRange();m.setStart(n.endContainer,n.endOffset);m.setEndAfter(o);return m.cloneContents().textContent.length==0}function e(o,q,m){var n,p;if(q.isEmpty(m)){n=q.getParent(m,"ul,ol");if(!q.getParent(n.parentNode,"ul,ol")){q.split(n,m);p=q.create("p",0,'<br data-mce-bogus="1" />');q.replace(p,m);o.select(p,1)}return g}return d}l.create("tinymce.ForceBlocks",{ForceBlocks:function(m){var n=this,o=m.settings,p;n.editor=m;n.dom=m.dom;p=(o.forced_root_block||"p").toLowerCase();o.element=p.toUpperCase();m.onPreInit.add(n.setup,n)},setup:function(){var n=this,m=n.editor,p=m.settings,u=m.dom,o=m.selection,q=m.schema.getBlockElements();if(p.forced_root_block){function v(){var y=o.getStart(),t=m.getBody(),s,z,D,F,E,x,A,B=-16777215;if(!y||y.nodeType!==1){return}while(y!=t){if(q[y.nodeName]){return}y=y.parentNode}s=o.getRng();if(s.setStart){z=s.startContainer;D=s.startOffset;F=s.endContainer;E=s.endOffset}else{if(s.item){s=m.getDoc().body.createTextRange();s.moveToElementText(s.item(0))}tmpRng=s.duplicate();tmpRng.collapse(true);D=tmpRng.move("character",B)*-1;if(!tmpRng.collapsed){tmpRng=s.duplicate();tmpRng.collapse(false);E=(tmpRng.move("character",B)*-1)-D}}for(y=t.firstChild;y;y){if(y.nodeType===3||(y.nodeType==1&&!q[y.nodeName])){if(!x){x=u.create(p.forced_root_block);y.parentNode.insertBefore(x,y)}A=y;y=y.nextSibling;x.appendChild(A)}else{x=null;y=y.nextSibling}}if(s.setStart){s.setStart(z,D);s.setEnd(F,E);o.setRng(s)}else{try{s=m.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(true);s.moveStart("character",D);if(E>0){s.moveEnd("character",E)}s.select()}catch(C){}}m.nodeChanged()}m.onKeyUp.add(v);m.onClick.add(v)}if(p.force_br_newlines){if(c){m.onKeyPress.add(function(s,t){var x;if(t.keyCode==13&&o.getNode().nodeName!="LI"){o.setContent('<br id="__" /> ',{format:"raw"});x=u.get("__");x.removeAttribute("id");o.select(x);o.collapse();return j.cancel(t)}})}}if(p.force_p_newlines){if(!c){m.onKeyPress.add(function(s,t){if(t.keyCode==13&&!t.shiftKey&&!n.insertPara(t)){j.cancel(t)}})}else{l.addUnload(function(){n._previousFormats=0});m.onKeyPress.add(function(s,t){n._previousFormats=0;if(t.keyCode==13&&!t.shiftKey&&s.selection.isCollapsed()&&p.keep_styles){n._previousFormats=k(s.selection.getStart())}});m.onKeyUp.add(function(t,y){if(y.keyCode==13&&!y.shiftKey){var x=t.selection.getStart(),s=n._previousFormats;if(!x.hasChildNodes()&&s){x=u.getParent(x,u.isBlock);if(x&&x.nodeName!="LI"){x.innerHTML="";if(n._previousFormats){x.appendChild(s.wrapper);s.inner.innerHTML="\uFEFF"}else{x.innerHTML="\uFEFF"}o.select(x,1);o.collapse(true);t.getDoc().execCommand("Delete",false,null);n._previousFormats=0}}}})}if(a){m.onKeyDown.add(function(s,t){if((t.keyCode==8||t.keyCode==46)&&!t.shiftKey){n.backspaceDelete(t,t.keyCode==8)}})}}if(l.isWebKit){function r(t){var s=o.getRng(),x,A=u.create("div",null," "),z,y=u.getViewPort(t.getWin()).h;s.insertNode(x=u.create("br"));s.setStartAfter(x);s.setEndAfter(x);o.setRng(s);if(o.getSel().focusNode==x.previousSibling){o.select(u.insertAfter(u.doc.createTextNode("\u00a0"),x));o.collapse(d)}u.insertAfter(A,x);z=u.getPos(A).y;u.remove(A);if(z>y){t.getWin().scrollTo(0,z)}}m.onKeyPress.add(function(s,t){if(t.keyCode==13&&(t.shiftKey||(p.force_br_newlines&&!u.getParent(o.getNode(),"h1,h2,h3,h4,h5,h6,ol,ul")))){r(s);j.cancel(t)}})}if(c){if(p.element!="P"){m.onKeyPress.add(function(s,t){n.lastElm=o.getNode().nodeName});m.onKeyUp.add(function(t,x){var z,y=o.getNode(),s=t.getBody();if(s.childNodes.length===1&&y.nodeName=="P"){y=u.rename(y,p.element);o.select(y);o.collapse();t.nodeChanged()}else{if(x.keyCode==13&&!x.shiftKey&&n.lastElm!="P"){z=u.getParent(y,"p");if(z){u.rename(z,p.element);t.nodeChanged()}}}})}}},getParentBlock:function(o){var m=this.dom;return m.getParent(o,m.isBlock)},insertPara:function(Q){var E=this,v=E.editor,M=v.dom,R=v.getDoc(),V=v.settings,F=v.selection.getSel(),G=F.getRangeAt(0),U=R.body;var J,K,H,O,N,q,o,u,z,m,C,T,p,x,I,L=M.getViewPort(v.getWin()),B,D,A;v.undoManager.beforeChange();J=R.createRange();J.setStart(F.anchorNode,F.anchorOffset);J.collapse(d);K=R.createRange();K.setStart(F.focusNode,F.focusOffset);K.collapse(d);H=J.compareBoundaryPoints(J.START_TO_END,K)<0;O=H?F.anchorNode:F.focusNode;N=H?F.anchorOffset:F.focusOffset;q=H?F.focusNode:F.anchorNode;o=H?F.focusOffset:F.anchorOffset;if(O===q&&/^(TD|TH)$/.test(O.nodeName)){if(O.firstChild.nodeName=="BR"){M.remove(O.firstChild)}if(O.childNodes.length==0){v.dom.add(O,V.element,null,"<br />");T=v.dom.add(O,V.element,null,"<br />")}else{I=O.innerHTML;O.innerHTML="";v.dom.add(O,V.element,null,I);T=v.dom.add(O,V.element,null,"<br />")}G=R.createRange();G.selectNodeContents(T);G.collapse(1);v.selection.setRng(G);return g}if(O==U&&q==U&&U.firstChild&&v.dom.isBlock(U.firstChild)){O=q=O.firstChild;N=o=0;J=R.createRange();J.setStart(O,0);K=R.createRange();K.setStart(q,0)}if(!R.body.hasChildNodes()){R.body.appendChild(M.create("br"))}O=O.nodeName=="HTML"?R.body:O;O=O.nodeName=="BODY"?O.firstChild:O;q=q.nodeName=="HTML"?R.body:q;q=q.nodeName=="BODY"?q.firstChild:q;u=E.getParentBlock(O);z=E.getParentBlock(q);m=u?u.nodeName:V.element;if(I=E.dom.getParent(u,"li,pre")){if(I.nodeName=="LI"){return e(v.selection,E.dom,I)}return d}if(u&&(u.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;u=null}if(z&&(z.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;z=null}if(/(TD|TABLE|TH|CAPTION)/.test(m)||(u&&m=="DIV"&&/left|right/gi.test(M.getStyle(u,"float",1)))){m=V.element;u=z=null}C=(u&&u.nodeName==m)?u.cloneNode(0):v.dom.create(m);T=(z&&z.nodeName==m)?z.cloneNode(0):v.dom.create(m);T.removeAttribute("id");if(/^(H[1-6])$/.test(m)&&f(G,u)){T=v.dom.create(V.element)}I=p=O;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}p=I}while((I=I.previousSibling?I.previousSibling:I.parentNode));I=x=q;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}x=I}while((I=I.nextSibling?I.nextSibling:I.parentNode));if(p.nodeName==m){J.setStart(p,0)}else{J.setStartBefore(p)}J.setEnd(O,N);C.appendChild(J.cloneContents()||R.createTextNode(""));try{K.setEndAfter(x)}catch(P){}K.setStart(q,o);T.appendChild(K.cloneContents()||R.createTextNode(""));G=R.createRange();if(!p.previousSibling&&p.parentNode.nodeName==m){G.setStartBefore(p.parentNode)}else{if(J.startContainer.nodeName==m&&J.startOffset==0){G.setStartBefore(J.startContainer)}else{G.setStart(J.startContainer,J.startOffset)}}if(!x.nextSibling&&x.parentNode.nodeName==m){G.setEndAfter(x.parentNode)}else{G.setEnd(K.endContainer,K.endOffset)}G.deleteContents();if(b){v.getWin().scrollTo(0,L.y)}if(C.firstChild&&C.firstChild.nodeName==m){C.innerHTML=C.firstChild.innerHTML}if(T.firstChild&&T.firstChild.nodeName==m){T.innerHTML=T.firstChild.innerHTML}function S(y,s){var r=[],X,W,t;y.innerHTML="";if(V.keep_styles){W=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(W.nodeName)){X=W.cloneNode(g);M.setAttrib(X,"id","");r.push(X)}}while(W=W.parentNode)}if(r.length>0){for(t=r.length-1,X=y;t>=0;t--){X=X.appendChild(r[t])}r[0].innerHTML=b?"\u00a0":"<br />";return r[0]}else{y.innerHTML=b?"\u00a0":"<br />"}}if(M.isEmpty(C)){S(C,O)}if(M.isEmpty(T)){A=S(T,q)}if(b&&parseFloat(opera.version())<9.5){G.insertNode(C);G.insertNode(T)}else{G.insertNode(T);G.insertNode(C)}T.normalize();C.normalize();v.selection.select(T,true);v.selection.collapse(true);B=v.dom.getPos(T).y;if(B<L.y||B+25>L.y+L.h){v.getWin().scrollTo(0,B<L.y?B:B-L.h+25)}v.undoManager.add();return g},backspaceDelete:function(u,B){var C=this,s=C.editor,y=s.getBody(),q=s.dom,p,v=s.selection,o=v.getRng(),x=o.startContainer,p,z,A,m;if(!B&&o.collapsed&&x.nodeType==1&&o.startOffset==x.childNodes.length){m=new l.dom.TreeWalker(x.lastChild,x);for(p=x.lastChild;p;p=m.prev()){if(p.nodeType==3){o.setStart(p,p.nodeValue.length);o.collapse(true);v.setRng(o);return}}}if(x&&s.dom.isBlock(x)&&!/^(TD|TH)$/.test(x.nodeName)&&B){if(x.childNodes.length==0||(x.childNodes.length==1&&x.firstChild.nodeName=="BR")){p=x;while((p=p.previousSibling)&&!s.dom.isBlock(p)){}if(p){if(x!=y.firstChild){z=s.dom.doc.createTreeWalker(p,NodeFilter.SHOW_TEXT,null,g);while(A=z.nextNode()){p=A}o=s.getDoc().createRange();o.setStart(p,p.nodeValue?p.nodeValue.length:0);o.setEnd(p,p.nodeValue?p.nodeValue.length:0);v.setRng(o);s.dom.remove(x)}return j.cancel(u)}}}}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;if(g.settings.use_native_selects){k=new c.ui.NativeListBox(m,i)}else{f=l||h._cls.listbox||c.ui.ListBox;k=new f(m,i,g)}h.controls[m]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){g.bookmark=g.selection.getBookmark(1)});a.add(o,"focus",function(){g.selection.moveToBookmark(g.bookmark);g.bookmark=null})})}if(k.hideMenu){g.onMouseDown.add(k.hideMenu,k)}return h.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(V){var M={},O=a.each,c=V.dom,q=V.selection,t=a.dom.TreeWalker,K=new a.dom.RangeUtils(c),d=V.schema.isValidChild,F=c.isBlock,l=V.settings.forced_root_block,s=c.nodeIndex,E="\uFEFF",e=/^(src|href|style)$/,S=false,B=true,p,P={apply:[],remove:[]};function z(W){return W instanceof Array}function m(X,W){return c.getParents(X,W,c.getRoot())}function b(W){return W.nodeType===1&&(W.face==="mceinline"||W.style.fontFamily==="mceinline")}function R(W){return W?M[W]:M}function k(W,X){if(W){if(typeof(W)!=="string"){O(W,function(Z,Y){k(Y,Z)})}else{X=X.length?X:[X];O(X,function(Y){if(Y.deep===p){Y.deep=!Y.selector}if(Y.split===p){Y.split=!Y.selector||Y.inline}if(Y.remove===p&&Y.selector&&!Y.inline){Y.remove="none"}if(Y.selector&&Y.inline){Y.mixed=true;Y.block_expand=true}if(typeof(Y.classes)==="string"){Y.classes=Y.classes.split(/\s+/)}});M[W]=X}}}var i=function(X){var W;V.dom.getParent(X,function(Y){W=V.dom.getStyle(Y,"text-decoration");return W&&W!=="none"});return W};var I=function(W){var X;if(W.nodeType===1&&W.parentNode&&W.parentNode.nodeType===1){X=i(W.parentNode);if(V.dom.getStyle(W,"color")&&X){V.dom.setStyle(W,"text-decoration",X)}else{if(V.dom.getStyle(W,"textdecoration")===X){V.dom.setStyle(W,"text-decoration",null)}}}};function T(Z,ah,ac){var ad=R(Z),ai=ad[0],ag,X,af,ae=q.isCollapsed();function aa(am){var al=am.startContainer,ap=am.startOffset,ao,an;if(al.nodeType==1||al.nodeValue===""){al=al.nodeType==1?al.childNodes[ap]:al;if(al){ao=new t(al,al.parentNode);for(an=ao.current();an;an=ao.next()){if(an.nodeType==3&&!f(an)){am.setStart(an,0);break}}}}return am}function W(am,al){al=al||ai;if(am){if(al.onformat){al.onformat(am,al,ah,ac)}O(al.styles,function(ao,an){c.setStyle(am,an,r(ao,ah))});O(al.attributes,function(ao,an){c.setAttrib(am,an,r(ao,ah))});O(al.classes,function(an){an=r(an,ah);if(!c.hasClass(am,an)){c.addClass(am,an)}})}}function ab(){function an(au,ar){var at=new t(ar);for(ac=at.current();ac;ac=at.prev()){if(ac.childNodes.length>1||ac==au){return ac}}}var am=V.selection.getRng();var aq=am.startContainer;var al=am.endContainer;if(aq!=al&&am.endOffset==0){var ap=an(aq,al);var ao=ap.nodeType==3?ap.length:ap.childNodes.length;am.setEnd(ap,ao)}return am}function Y(ao,au,ar,aq,am){var al=[],an=-1,at,aw=-1,ap=-1,av;O(ao.childNodes,function(ay,ax){if(ay.nodeName==="UL"||ay.nodeName==="OL"){an=ax;at=ay;return false}});O(ao.childNodes,function(ay,ax){if(ay.nodeName==="SPAN"&&c.getAttrib(ay,"data-mce-type")=="bookmark"){if(ay.id==au.id+"_start"){aw=ax}else{if(ay.id==au.id+"_end"){ap=ax}}}});if(an<=0||(aw<an&&ap>an)){O(a.grep(ao.childNodes),am);return 0}else{av=ar.cloneNode(S);O(a.grep(ao.childNodes),function(ay,ax){if((aw<an&&ax<an)||(aw>an&&ax>an)){al.push(ay);ay.parentNode.removeChild(ay)}});if(aw<an){ao.insertBefore(av,at)}else{if(aw>an){ao.insertBefore(av,at.nextSibling)}}aq.push(av);O(al,function(ax){av.appendChild(ax)});return av}}function aj(am,ao){var al=[],ap,an;ap=ai.inline||ai.block;an=c.create(ap);W(an);K.walk(am,function(aq){var ar;function at(au){var ax=au.nodeName.toLowerCase(),aw=au.parentNode.nodeName.toLowerCase(),av;if(g(ax,"br")){ar=0;if(ai.block){c.remove(au)}return}if(ai.wrapper&&x(au,Z,ah)){ar=0;return}if(ai.block&&!ai.wrapper&&G(ax)){au=c.rename(au,ap);W(au);al.push(au);ar=0;return}if(ai.selector){O(ad,function(ay){if("collapsed" in ay&&ay.collapsed!==ae){return}if(c.is(au,ay.selector)&&!b(au)){W(au,ay);av=true}});if(!ai.inline||av){ar=0;return}}if(d(ap,ax)&&d(aw,ap)&&!(au.nodeType===3&&au.nodeValue.length===1&&au.nodeValue.charCodeAt(0)===65279)){if(!ar){ar=an.cloneNode(S);au.parentNode.insertBefore(ar,au);al.push(ar)}ar.appendChild(au)}else{if(ax=="li"&&ao){ar=Y(au,ao,an,al,at)}else{ar=0;O(a.grep(au.childNodes),at);ar=0}}}O(aq,at)});if(ai.wrap_links===false){O(al,function(aq){function ar(aw){var av,au,at;if(aw.nodeName==="A"){au=an.cloneNode(S);al.push(au);at=a.grep(aw.childNodes);for(av=0;av<at.length;av++){au.appendChild(at[av])}aw.appendChild(au)}O(a.grep(aw.childNodes),ar)}ar(aq)})}O(al,function(at){var aq;function au(aw){var av=0;O(aw.childNodes,function(ax){if(!f(ax)&&!H(ax)){av++}});return av}function ar(av){var ax,aw;O(av.childNodes,function(ay){if(ay.nodeType==1&&!H(ay)&&!b(ay)){ax=ay;return S}});if(ax&&h(ax,ai)){aw=ax.cloneNode(S);W(aw);c.replace(aw,av,B);c.remove(ax,1)}return aw||av}aq=au(at);if((al.length>1||!F(at))&&aq===0){c.remove(at,1);return}if(ai.inline||ai.wrapper){if(!ai.exact&&aq===1){at=ar(at)}O(ad,function(av){O(c.select(av.inline,at),function(ax){var aw;if(av.wrap_links===false){aw=ax.parentNode;do{if(aw.nodeName==="A"){return}}while(aw=aw.parentNode)}U(av,ah,ax,av.exact?ax:null)})});if(x(at.parentNode,Z,ah)){c.remove(at,1);at=0;return B}if(ai.merge_with_parents){c.getParent(at.parentNode,function(av){if(x(av,Z,ah)){c.remove(at,1);at=0;return B}})}if(at&&ai.merge_siblings!==false){at=u(C(at),at);at=u(at,C(at,B))}}})}if(ai){if(ac){X=c.createRng();X.setStartBefore(ac);X.setEndAfter(ac);aj(o(X,ad))}else{if(!ae||!ai.inline||c.select("td.mceSelected,th.mceSelected").length){var ak=V.selection.getNode();V.selection.setRng(ab());ag=q.getBookmark();aj(o(q.getRng(B),ad),ag);if(ai.styles&&(ai.styles.color||ai.styles.textDecoration)){a.walk(ak,I,"childNodes");I(ak)}q.moveToBookmark(ag);q.setRng(aa(q.getRng(B)));V.nodeChanged()}else{Q("apply",Z,ah)}}}}function A(Y,ah,ab){var ac=R(Y),aj=ac[0],ag,af,X;function aa(am){var al=am.startContainer,ar=am.startOffset,aq,ap,an,ao;if(al.nodeType==3&&ar>=al.nodeValue.length-1){al=al.parentNode;ar=s(al)+1}if(al.nodeType==1){an=al.childNodes;al=an[Math.min(ar,an.length-1)];aq=new t(al);if(ar>an.length-1){aq.next()}for(ap=aq.current();ap;ap=aq.next()){if(ap.nodeType==3&&!f(ap)){ao=c.create("a",null,E);ap.parentNode.insertBefore(ao,ap);am.setStart(ap,0);q.setRng(am);c.remove(ao);return}}}}function Z(ao){var an,am,al;an=a.grep(ao.childNodes);for(am=0,al=ac.length;am<al;am++){if(U(ac[am],ah,ao,ao)){break}}if(aj.deep){for(am=0,al=an.length;am<al;am++){Z(an[am])}}}function ad(al){var am;O(m(al.parentNode).reverse(),function(an){var ao;if(!am&&an.id!="_start"&&an.id!="_end"){ao=x(an,Y,ah);if(ao&&ao.split!==false){am=an}}});return am}function W(ao,al,aq,au){var av,at,ar,an,ap,am;if(ao){am=ao.parentNode;for(av=al.parentNode;av&&av!=am;av=av.parentNode){at=av.cloneNode(S);for(ap=0;ap<ac.length;ap++){if(U(ac[ap],ah,at,at)){at=0;break}}if(at){if(ar){at.appendChild(ar)}if(!an){an=at}ar=at}}if(au&&(!aj.mixed||!F(ao))){al=c.split(ao,al)}if(ar){aq.parentNode.insertBefore(ar,aq);an.appendChild(aq)}}return al}function ai(al){return W(ad(al),al,al,true)}function ae(an){var am=c.get(an?"_start":"_end"),al=am[an?"firstChild":"lastChild"];if(H(al)){al=al[an?"firstChild":"lastChild"]}c.remove(am,true);return al}function ak(al){var am,an;al=o(al,ac,B);if(aj.split){am=J(al,B);an=J(al);if(am!=an){am=N(am,"span",{id:"_start","data-mce-type":"bookmark"});an=N(an,"span",{id:"_end","data-mce-type":"bookmark"});ai(am);ai(an);am=ae(B);an=ae()}else{am=an=ai(am)}al.startContainer=am.parentNode;al.startOffset=s(am);al.endContainer=an.parentNode;al.endOffset=s(an)+1}K.walk(al,function(ao){O(ao,function(ap){Z(ap);if(ap.nodeType===1&&V.dom.getStyle(ap,"text-decoration")==="underline"&&ap.parentNode&&i(ap.parentNode)==="underline"){U({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,ap)}})})}if(ab){X=c.createRng();X.setStartBefore(ab);X.setEndAfter(ab);ak(X);return}if(!q.isCollapsed()||!aj.inline||c.select("td.mceSelected,th.mceSelected").length){ag=q.getBookmark();ak(q.getRng(B));q.moveToBookmark(ag);if(j(Y,ah,q.getStart())){aa(q.getRng(true))}V.nodeChanged()}else{Q("remove",Y,ah)}}function D(X,Z,Y){var W=R(X);if(j(X,Z,Y)&&(!("toggle" in W[0])||W[0]["toggle"])){A(X,Z,Y)}else{T(X,Z,Y)}}function x(X,W,ac,aa){var Y=R(W),ad,ab,Z;function ae(ai,ak,al){var ah,aj,af=ak[al],ag;if(ak.onmatch){return ak.onmatch(ai,ak,al)}if(af){if(af.length===p){for(ah in af){if(af.hasOwnProperty(ah)){if(al==="attributes"){aj=c.getAttrib(ai,ah)}else{aj=L(ai,ah)}if(aa&&!aj&&!ak.exact){return}if((!aa||ak.exact)&&!g(aj,r(af[ah],ac))){return}}}}else{for(ag=0;ag<af.length;ag++){if(al==="attributes"?c.getAttrib(ai,af[ag]):L(ai,af[ag])){return ak}}}}return ak}if(Y&&X){for(ab=0;ab<Y.length;ab++){ad=Y[ab];if(h(X,ad)&&ae(X,ad,"attributes")&&ae(X,ad,"styles")){if(Z=ad.classes){for(ab=0;ab<Z.length;ab++){if(!c.hasClass(X,Z[ab])){return}}}return ad}}}}function j(Y,ab,aa){var X,Z;function W(ac){ac=c.getParent(ac,function(ad){return !!x(ad,Y,ab,true)});return x(ac,Y,ab)}if(aa){return W(aa)}if(q.isCollapsed()){for(Z=P.apply.length-1;Z>=0;Z--){if(P.apply[Z].name==Y){return true}}for(Z=P.remove.length-1;Z>=0;Z--){if(P.remove[Z].name==Y){return false}}return W(q.getNode())}aa=q.getNode();if(W(aa)){return B}X=q.getStart();if(X!=aa){if(W(X)){return B}}return S}function v(ad,ac){var aa,ab=[],Z={},Y,X,W;if(q.isCollapsed()){for(X=0;X<ad.length;X++){for(Y=P.remove.length-1;Y>=0;Y--){W=ad[X];if(P.remove[Y].name==W){Z[W]=true;break}}}for(Y=P.apply.length-1;Y>=0;Y--){for(X=0;X<ad.length;X++){W=ad[X];if(!Z[W]&&P.apply[Y].name==W){Z[W]=true;ab.push(W)}}}}aa=q.getStart();c.getParent(aa,function(ag){var af,ae;for(af=0;af<ad.length;af++){ae=ad[af];if(!Z[ae]&&x(ag,ae,ac)){Z[ae]=true;ab.push(ae)}}});return ab}function y(aa){var ac=R(aa),Z,Y,ab,X,W;if(ac){Z=q.getStart();Y=m(Z);for(X=ac.length-1;X>=0;X--){W=ac[X].selector;if(!W){return B}for(ab=Y.length-1;ab>=0;ab--){if(c.is(Y[ab],W)){return B}}}}return S}a.extend(this,{get:R,register:k,apply:T,remove:A,toggle:D,match:j,matchAll:v,matchNode:x,canApply:y});function h(W,X){if(g(W,X.inline)){return B}if(g(W,X.block)){return B}if(X.selector){return c.is(W,X.selector)}}function g(X,W){X=X||"";W=W||"";X=""+(X.nodeName||X);W=""+(W.nodeName||W);return X.toLowerCase()==W.toLowerCase()}function L(X,W){var Y=c.getStyle(X,W);if(W=="color"||W=="backgroundColor"){Y=c.toHex(Y)}if(W=="fontWeight"&&Y==700){Y="bold"}return""+Y}function r(W,X){if(typeof(W)!="string"){W=W(X)}else{if(X){W=W.replace(/%(\w+)/g,function(Z,Y){return X[Y]||Z})}}return W}function f(W){return W&&W.nodeType===3&&/^([\s\r\n]+|)$/.test(W.nodeValue)}function N(Y,X,W){var Z=c.create(X,W);Y.parentNode.insertBefore(Z,Y);Z.appendChild(Y);return Z}function o(W,ag,Z){var Y=W.startContainer,ad=W.startOffset,aj=W.endContainer,ae=W.endOffset,ai,af,ac;function ah(am,an,ak,al){var ao,ap;al=al||c.getRoot();for(;;){ao=am.parentNode;if(ao==al||(!ag[0].block_expand&&F(ao))){return am}for(ai=ao[an];ai&&ai!=am;ai=ai[ak]){if(ai.nodeType==1&&!H(ai)){return am}if(ai.nodeType==3&&!f(ai)){return am}}am=am.parentNode}return am}function ab(ak,al){if(al===p){al=ak.nodeType===3?ak.length:ak.childNodes.length}while(ak&&ak.hasChildNodes()){ak=ak.childNodes[al];if(ak){al=ak.nodeType===3?ak.length:ak.childNodes.length}}return{node:ak,offset:al}}if(Y.nodeType==1&&Y.hasChildNodes()){af=Y.childNodes.length-1;Y=Y.childNodes[ad>af?af:ad];if(Y.nodeType==3){ad=0}}if(aj.nodeType==1&&aj.hasChildNodes()){af=aj.childNodes.length-1;aj=aj.childNodes[ae>af?af:ae-1];if(aj.nodeType==3){ae=aj.nodeValue.length}}if(H(Y.parentNode)){Y=Y.parentNode}if(H(Y)){Y=Y.nextSibling||Y}if(H(aj.parentNode)){ae=c.nodeIndex(aj);aj=aj.parentNode}if(H(aj)&&aj.previousSibling){aj=aj.previousSibling;ae=aj.length}if(ag[0].inline){ac=ab(aj,ae);if(ac.node){while(ac.node&&ac.offset===0&&ac.node.previousSibling){ac=ab(ac.node.previousSibling)}if(ac.node&&ac.offset>0&&ac.node.nodeType===3&&ac.node.nodeValue.charAt(ac.offset-1)===" "){if(ac.offset>1){aj=ac.node;aj.splitText(ac.offset-1)}else{if(ac.node.previousSibling){aj=ac.node.previousSibling}}}}}if(ag[0].inline||ag[0].block_expand){Y=ah(Y,"firstChild","nextSibling");aj=ah(aj,"lastChild","previousSibling")}if(ag[0].selector&&ag[0].expand!==S&&!ag[0].inline){function aa(al,ak){var am,an,ap,ao;if(al.nodeType==3&&al.nodeValue.length==0&&al[ak]){al=al[ak]}am=m(al);for(an=0;an<am.length;an++){for(ap=0;ap<ag.length;ap++){ao=ag[ap];if("collapsed" in ao&&ao.collapsed!==W.collapsed){continue}if(c.is(am[an],ao.selector)){return am[an]}}}return al}Y=aa(Y,"previousSibling");aj=aa(aj,"nextSibling")}if(ag[0].block||ag[0].selector){function X(al,ak,an){var am;if(!ag[0].wrapper){am=c.getParent(al,ag[0].block)}if(!am){am=c.getParent(al.nodeType==3?al.parentNode:al,F)}if(am&&ag[0].wrapper){am=m(am,"ul,ol").reverse()[0]||am}if(!am){am=al;while(am[ak]&&!F(am[ak])){am=am[ak];if(g(am,"br")){break}}}return am||al}Y=X(Y,"previousSibling");aj=X(aj,"nextSibling");if(ag[0].block){if(!F(Y)){Y=ah(Y,"firstChild","nextSibling")}if(!F(aj)){aj=ah(aj,"lastChild","previousSibling")}}}if(Y.nodeType==1){ad=s(Y);Y=Y.parentNode}if(aj.nodeType==1){ae=s(aj)+1;aj=aj.parentNode}return{startContainer:Y,startOffset:ad,endContainer:aj,endOffset:ae}}function U(ac,ab,Z,W){var Y,X,aa;if(!h(Z,ac)){return S}if(ac.remove!="all"){O(ac.styles,function(ae,ad){ae=r(ae,ab);if(typeof(ad)==="number"){ad=ae;W=0}if(!W||g(L(W,ad),ae)){c.setStyle(Z,ad,"")}aa=1});if(aa&&c.getAttrib(Z,"style")==""){Z.removeAttribute("style");Z.removeAttribute("data-mce-style")}O(ac.attributes,function(af,ad){var ae;af=r(af,ab);if(typeof(ad)==="number"){ad=af;W=0}if(!W||g(c.getAttrib(W,ad),af)){if(ad=="class"){af=c.getAttrib(Z,ad);if(af){ae="";O(af.split(/\s+/),function(ag){if(/mce\w+/.test(ag)){ae+=(ae?" ":"")+ag}});if(ae){c.setAttrib(Z,ad,ae);return}}}if(ad=="class"){Z.removeAttribute("className")}if(e.test(ad)){Z.removeAttribute("data-mce-"+ad)}Z.removeAttribute(ad)}});O(ac.classes,function(ad){ad=r(ad,ab);if(!W||c.hasClass(W,ad)){c.removeClass(Z,ad)}});X=c.getAttribs(Z);for(Y=0;Y<X.length;Y++){if(X[Y].nodeName.indexOf("_")!==0){return S}}}if(ac.remove!="none"){n(Z,ac);return B}}function n(Y,Z){var W=Y.parentNode,X;if(Z.block){if(!l){function aa(ac,ab,ad){ac=C(ac,ab,ad);return !ac||(ac.nodeName=="BR"||F(ac))}if(F(Y)&&!F(W)){if(!aa(Y,S)&&!aa(Y.firstChild,B,1)){Y.insertBefore(c.create("br"),Y.firstChild)}if(!aa(Y,B)&&!aa(Y.lastChild,S,1)){Y.appendChild(c.create("br"))}}}else{if(W==c.getRoot()){if(!Z.list_block||!g(Y,Z.list_block)){O(a.grep(Y.childNodes),function(ab){if(d(l,ab.nodeName.toLowerCase())){if(!X){X=N(ab,l)}else{X.appendChild(ab)}}else{X=0}})}}}}if(Z.selector&&Z.inline&&!g(Z.inline,Y)){return}c.remove(Y,1)}function C(X,W,Y){if(X){W=W?"nextSibling":"previousSibling";for(X=Y?X:X[W];X;X=X[W]){if(X.nodeType==1||!f(X)){return X}}}}function H(W){return W&&W.nodeType==1&&W.getAttribute("data-mce-type")=="bookmark"}function u(aa,Z){var W,Y,X;function ac(af,ae){if(af.nodeName!=ae.nodeName){return S}function ad(ah){var ai={};O(c.getAttribs(ah),function(aj){var ak=aj.nodeName.toLowerCase();if(ak.indexOf("_")!==0&&ak!=="style"){ai[ak]=c.getAttrib(ah,ak)}});return ai}function ag(ak,aj){var ai,ah;for(ah in ak){if(ak.hasOwnProperty(ah)){ai=aj[ah];if(ai===p){return S}if(ak[ah]!=ai){return S}delete aj[ah]}}for(ah in aj){if(aj.hasOwnProperty(ah)){return S}}return B}if(!ag(ad(af),ad(ae))){return S}if(!ag(c.parseStyle(c.getAttrib(af,"style")),c.parseStyle(c.getAttrib(ae,"style")))){return S}return B}if(aa&&Z){function ab(ae,ad){for(Y=ae;Y;Y=Y[ad]){if(Y.nodeType==3&&Y.nodeValue.length!==0){return ae}if(Y.nodeType==1&&!H(Y)){return Y}}return ae}aa=ab(aa,"previousSibling");Z=ab(Z,"nextSibling");if(ac(aa,Z)){for(Y=aa.nextSibling;Y&&Y!=Z;){X=Y;Y=Y.nextSibling;aa.appendChild(X)}c.remove(Z);O(a.grep(Z.childNodes),function(ad){aa.appendChild(ad)});return aa}}return Z}function G(W){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(W)}function J(X,aa){var W,Z,Y;W=X[aa?"startContainer":"endContainer"];Z=X[aa?"startOffset":"endOffset"];if(W.nodeType==1){Y=W.childNodes.length-1;if(!aa&&Z){Z--}W=W.childNodes[Z>Y?Y:Z]}return W}function Q(ad,Y,ac){var aa,X=P[ad],ae=P[ad=="apply"?"remove":"apply"];function af(){return P.apply.length||P.remove.length}function ab(){P.apply=[];P.remove=[]}function ag(ah){O(P.apply.reverse(),function(ai){T(ai.name,ai.vars,ah);if(ai.name==="forecolor"&&ai.vars.value){I(ah.parentNode)}});O(P.remove.reverse(),function(ai){A(ai.name,ai.vars,ah)});c.remove(ah,1);ab()}for(aa=X.length-1;aa>=0;aa--){if(X[aa].name==Y){return}}X.push({name:Y,vars:ac});for(aa=ae.length-1;aa>=0;aa--){if(ae[aa].name==Y){ae.splice(aa,1)}}if(af()){V.getDoc().execCommand("FontName",false,"mceinline");P.lastRng=q.getRng();O(c.select("font,span"),function(ai){var ah;if(b(ai)){ah=q.getBookmark();ag(ai);q.moveToBookmark(ah);V.nodeChanged()}});if(!P.isListening&&af()){P.isListening=true;function W(ai,aj){var ah=c.createRng();ag(ai);ah.setStart(aj,aj.nodeValue.length);ah.setEnd(aj,aj.nodeValue.length);q.setRng(ah);V.nodeChanged()}var Z=false;O("onKeyDown,onKeyUp,onKeyPress,onMouseUp".split(","),function(ah){V[ah].addToTop(function(ai,al){if(al.keyCode==13&&!al.shiftKey){Z=true;return}if(af()&&!a.dom.RangeUtils.compareRanges(P.lastRng,q.getRng())){var aj=false;O(c.select("font,span"),function(ao){var ap,an;if(b(ao)){aj=true;ap=ao.firstChild;while(ap&&ap.nodeType!=3){ap=ap.firstChild}if(ap){W(ao,ap)}else{c.remove(ao)}}});if(Z&&!aj){var ak=q.getNode();var am=ak;while(am&&am.nodeType!=3){am=am.firstChild}if(am){ak=am.parentNode;while(!F(ak)){ak=ak.parentNode}W(ak,am)}}if(al.type=="keyup"||al.type=="mouseup"){ab();Z=false}}})})}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_style_values);function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}}); \ No newline at end of file +(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"4.9",releaseDate:"2012-02-23",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=d.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(d.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){if(r=f[m].href){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==e}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==e){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];b.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];b.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(k,j){var h,g,f=arguments;for(h=1,g=f.length;h<g;h++){j=f[h];b.each(j,function(i,l){if(i!==e){k[l]=i}})}return k},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}b.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}b.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this;j={func:j,scope:i||this};if(!h.unloads){function g(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(d.detachEvent){d.detachEvent("onbeforeunload",k);d.detachEvent("onunload",g)}else{if(d.removeEventListener){d.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(d.CollectGarbage){CollectGarbage()}}}function k(){var l=document;if(l.readyState=="interactive"){function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l){l.attachEvent("onstop",f)}d.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}if(d.attachEvent){d.attachEvent("onunload",g);d.attachEvent("onbeforeunload",k)}else{if(d.addEventListener){d.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;b.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){return f?b.map(f.split(g||","),b.trim):f},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(c){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===e){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};b._init();d.tinymce=d.tinyMCE=b})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d.length>0?d:[g.scope]);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=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)}})})();(function(){function serialize(o,quote){var i,v,t;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&o instanceof Array){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(i in o){if(o.hasOwnProperty(i)){v+=typeof o[i]!="function"?(v.length>1?","+quote:quote)+i+quote+":"+serialize(o[i],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;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){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={DELETE:46,BACKSPACE:8,ENTER:13,TAB:9,SPACEBAR:32,UP:38,DOWN:40,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey}}})(tinymce);(function(l){var j=l.VK,k=j.BACKSPACE,h=j.DELETE;function c(n){var p=n.dom,o=n.selection;n.onKeyDown.add(function(r,v){var q,x,t,u,s;s=v.keyCode==h;if((s||v.keyCode==k)&&!j.modifierPressed(v)){v.preventDefault();q=o.getRng();x=p.getParent(q.startContainer,p.isBlock);if(s){x=p.getNext(x,p.isBlock)}if(x){t=x.firstChild;while(t&&t.nodeType==3&&t.nodeValue.length==0){t=t.nextSibling}if(t&&t.nodeName==="SPAN"){u=t.cloneNode(false)}}r.getDoc().execCommand(s?"ForwardDelete":"Delete",false,null);x=p.getParent(q.startContainer,p.isBlock);l.each(p.select("span.Apple-style-span,font.Apple-style-span",x),function(y){var z=o.getBookmark();if(u){p.replace(u.cloneNode(false),y,true)}else{p.remove(y,true)}o.moveToBookmark(z)})}})}function d(n){function o(r){var q=n.dom.create("body");var s=r.cloneContents();q.appendChild(s);return n.selection.serializer.serialize(q,{format:"html"})}function p(q){var s=o(q);var t=n.dom.createRng();t.selectNode(n.getBody());var r=o(t);return s===r}n.onKeyDown.addToTop(function(r,t){var s=t.keyCode;if(s==h||s==k){var q=r.selection.getRng(true);if(!q.collapsed&&p(q)){r.setContent("",{format:"raw"});r.nodeChanged();t.preventDefault()}}})}function b(n){n.dom.bind(n.getDoc(),"focusin",function(){n.selection.setRng(n.selection.getRng())})}function e(n){n.onKeyDown.add(function(o,r){if(r.keyCode===k){if(o.selection.isCollapsed()&&o.selection.getRng(true).startOffset===0){var q=o.selection.getNode();var p=q.previousSibling;if(p&&p.nodeName&&p.nodeName.toLowerCase()==="hr"){o.dom.remove(p);l.dom.Event.cancel(r)}}}})}function g(n){if(!Range.prototype.getClientRects){n.onMouseDown.add(function(p,q){if(q.target.nodeName==="HTML"){var o=p.getBody();o.blur();setTimeout(function(){o.focus()},0)}})}}function f(n){n.onClick.add(function(o,p){p=p.target;if(/^(IMG|HR)$/.test(p.nodeName)){o.selection.getSel().setBaseAndExtent(p,0,p,1)}if(p.nodeName=="A"&&o.dom.hasClass(p,"mceItemAnchor")){o.selection.select(p)}o.nodeChanged()})}function i(n){n.onKeyDown.add(function(o,p){function q(r){var s=r.selection.getNode();var t="h1,h2,h3,h4,h5,h6";return r.dom.is(s,t)||r.dom.getParent(s,t)!==null}if(p.keyCode===j.ENTER&&!j.modifierPressed(p)&&q(o)){setTimeout(function(){var r=o.selection.getNode();if(o.dom.is(r,"p")){o.dom.setAttrib(r,"style",null);o.execCommand("mceCleanup")}},0)}})}function m(n){var p,o;n.dom.bind(n.getDoc(),"selectionchange",function(){if(o){clearTimeout(o);o=0}o=window.setTimeout(function(){var q=n.selection.getRng();if(!p||!l.dom.RangeUtils.compareRanges(q,p)){n.nodeChanged();p=q}},50)})}function a(n){document.body.setAttribute("role","application")}l.create("tinymce.util.Quirks",{Quirks:function(n){if(l.isWebKit){c(n);d(n);b(n);f(n);if(l.isIDevice){m(n)}}if(l.isIE){e(n);d(n);a(n);i(n)}if(l.isGecko){e(n);g(n)}}})})(tinymce);(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(r){var y={},p,n,v,q,u=d.url_converter,x=d.url_converter_scope||this;function o(C,F){var E,B,A,D;E=y[C+"-top"+F];if(!E){return}B=y[C+"-right"+F];if(E!=B){return}A=y[C+"-bottom"+F];if(B!=A){return}D=y[C+"-left"+F];if(A!=D){return}y[C+F]=D;delete y[C+"-top"+F];delete y[C+"-right"+F];delete y[C+"-bottom"+F];delete y[C+"-left"+F]}function t(B){var C=y[B],A;if(!C||C.indexOf(" ")<0){return}C=C.split(" ");A=C.length;while(A--){if(C[A]!==C[0]){return false}}y[B]=C[0];return true}function z(C,B,A,D){if(!t(B)){return}if(!t(A)){return}if(!t(D)){return}y[C]=y[B]+" "+y[A]+" "+y[D];delete y[B];delete y[A];delete y[D]}function s(A){q=true;return a[A]}function i(B,A){if(q){B=B.replace(/\uFEFF[0-9]/g,function(C){return a[C]})}if(!A){B=B.replace(/\\([\'\";:])/g,"$1")}return B}if(r){r=r.replace(/\\[\"\';:\uFEFF]/g,s).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(A){return A.replace(/[;:]/g,s)});while(p=b.exec(r)){n=p[1].replace(l,"").toLowerCase();v=p[2].replace(l,"");if(n&&v.length>0){if(n==="font-weight"&&v==="700"){v="bold"}else{if(n==="color"||n==="background-color"){v=v.toLowerCase()}}v=v.replace(k,c);v=v.replace(h,function(B,A,E,D,F,C){F=F||C;if(F){F=i(F);return"'"+F.replace(/\'/g,"\\'")+"'"}A=i(A||E||D);if(u){A=u.call(x,A,"style")}return"url('"+A.replace(/\'/g,"\\'")+"')"});y[n]=q?i(v,true):v}b.lastIndex=p.index+p[0].length}o("border","");o("border","-width");o("border","-color");o("border","-style");o("padding","");o("margin","");z("border","border-width","border-style","border-color");if(y.border==="medium none"){delete y.border}}return y},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(m){var h={},j,l,g,f,c={},b,e,d=m.makeMap,k=m.each;function i(o,n){return o.split(n||",")}function a(r,q){var o,p={};function n(s){return s.replace(/[A-Z]+/g,function(t){return n(r[t])})}for(o in r){if(r.hasOwnProperty(o)){r[o]=n(r[o])}}n(q).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(v,t,s,u){s=i(s,"|");p[t]={attributes:d(s),attributesOrder:s,children:d(u,"|",{"#comment":{}})}});return p}l="h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,noscript,menu,isindex,samp,header,footer,article,section,hgroup,aside,audio,canvas,figcaption,figure,nav,output,video";l=d(l,",",d(l.toUpperCase()));h=a({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]");j=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,autoplay,loop,controls");g=d("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source");f=m.extend(d("td,th,iframe,video,audio,object"),g);b=d("pre,script,style,textarea");e=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");m.html.Schema=function(r){var A=this,n={},o={},y=[],q,p;r=r||{};if(r.verify_html===false){r.valid_elements="*[*]"}if(r.valid_styles){q={};k(r.valid_styles,function(C,B){q[B]=m.explode(C)})}p=r.whitespace_elements?d(r.whitespace_elements):b;function z(B){return new RegExp("^"+B.replace(/([?+*])/g,".$1")+"$")}function t(I){var H,D,W,S,X,C,F,R,U,N,V,Z,L,G,T,B,P,E,Y,aa,M,Q,K=/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,O=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,J=/[*?+]/;if(I){I=i(I);if(n["@"]){P=n["@"].attributes;E=n["@"].attributesOrder}for(H=0,D=I.length;H<D;H++){C=K.exec(I[H]);if(C){T=C[1];N=C[2];B=C[3];U=C[4];L={};G=[];F={attributes:L,attributesOrder:G};if(T==="#"){F.paddEmpty=true}if(T==="-"){F.removeEmpty=true}if(P){for(aa in P){L[aa]=P[aa]}G.push.apply(G,E)}if(U){U=i(U,"|");for(W=0,S=U.length;W<S;W++){C=O.exec(U[W]);if(C){R={};Z=C[1];V=C[2].replace(/::/g,":");T=C[3];Q=C[4];if(Z==="!"){F.attributesRequired=F.attributesRequired||[];F.attributesRequired.push(V);R.required=true}if(Z==="-"){delete L[V];G.splice(m.inArray(G,V),1);continue}if(T){if(T==="="){F.attributesDefault=F.attributesDefault||[];F.attributesDefault.push({name:V,value:Q});R.defaultValue=Q}if(T===":"){F.attributesForced=F.attributesForced||[];F.attributesForced.push({name:V,value:Q});R.forcedValue=Q}if(T==="<"){R.validValues=d(Q,"?")}}if(J.test(V)){F.attributePatterns=F.attributePatterns||[];R.pattern=z(V);F.attributePatterns.push(R)}else{if(!L[V]){G.push(V)}L[V]=R}}}}if(!P&&N=="@"){P=L;E=G}if(B){F.outputName=N;n[B]=F}if(J.test(N)){F.pattern=z(N);y.push(F)}else{n[N]=F}}}}}function v(B){n={};y=[];t(B);k(h,function(D,C){o[C]=D.children})}function s(C){var B=/^(~)?(.+)$/;if(C){k(i(C),function(G){var E=B.exec(G),F=E[1]==="~",H=F?"span":"div",D=E[2];o[D]=o[H];c[D]=H;if(!F){l[D]={}}k(o,function(I,J){if(I[H]){I[D]=I[H]}})})}}function u(C){var B=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(C){k(i(C),function(G){var F=B.exec(G),D,E;if(F){E=F[1];if(E){D=o[F[2]]}else{D=o[F[2]]={"#comment":{}}}D=o[F[2]];k(i(F[3],"|"),function(H){if(E==="-"){delete D[H]}else{D[H]={}}})}})}}function x(B){var D=n[B],C;if(D){return D}C=y.length;while(C--){D=y[C];if(D.pattern.test(B)){return D}}}if(!r.valid_elements){k(h,function(C,B){n[B]={attributes:C.attributes,attributesOrder:C.attributesOrder};o[B]=C.children});k(i("strong/b,em/i"),function(B){B=i(B,"/");n[B[1]].outputName=B[0]});n.img.attributesDefault=[{name:"alt",value:""}];k(i("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr"),function(B){n[B].removeEmpty=true});k(i("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(B){n[B].paddEmpty=true})}else{v(r.valid_elements)}s(r.custom_elements);u(r.valid_children);t(r.extended_valid_elements);u("+ol[ul|ol],+ul[ul|ol]");if(!x("span")){t("span[!data-mce-type|*]")}if(r.invalid_elements){m.each(m.explode(r.invalid_elements),function(B){if(n[B]){delete n[B]}})}A.children=o;A.styles=q;A.getBoolAttrs=function(){return j};A.getBlockElements=function(){return l};A.getShortEndedElements=function(){return g};A.getSelfClosingElements=function(){return e};A.getNonEmptyElements=function(){return f};A.getWhiteSpaceElements=function(){return p};A.isValidChild=function(B,D){var C=o[B];return !!(C&&C[D])};A.getElementRule=x;A.getCustomElements=function(){return c};A.addValidElements=t;A.setValidElements=v;A.addCustomElements=s;A.addValidChildren=u};m.html.Schema.boolAttrMap=j;m.html.Schema.blockElementsMap=l})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(D){var n=this,g,F=0,H,A,z=[],M,P,B,q,y,r,L,G,N,u,m,k,s,Q,o,O,E,R,K,f,I,l,C,J,h,v=0,j=a.html.Entities.decode,x,p;function t(S){var U,T;U=z.length;while(U--){if(z[U].name===S){break}}if(U>=0){for(T=z.length-1;T>=U;T--){S=z[T];if(S.valid){n.end(S.name)}}z.length=U}}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/)>))","g");C=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;J={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};L=e.getShortEndedElements();I=e.getSelfClosingElements();G=e.getBoolAttrs();u=c.validate;r=c.remove_internals;x=c.fix_self_closing;p=a.isIE;o=/^:/;while(g=l.exec(D)){if(F<g.index){n.text(j(D.substr(F,g.index-F)))}if(H=g[6]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}t(H)}else{if(H=g[7]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}N=H in L;if(x&&I[H]&&z.length>0&&z[z.length-1].name===H){t(H)}if(!u||(m=e.getElementRule(H))){k=true;if(u){O=m.attributes;E=m.attributePatterns}if(Q=g[8]){y=Q.indexOf("data-mce-type")!==-1;if(y&&r){k=false}M=[];M.map={};Q.replace(C,function(T,S,X,W,V){var Y,U;S=S.toLowerCase();X=S in G?S:j(X||W||V||"");if(u&&!y&&S.indexOf("data-")!==0){Y=O[S];if(!Y&&E){U=E.length;while(U--){Y=E[U];if(Y.pattern.test(S)){break}}if(U===-1){Y=null}}if(!Y){return}if(Y.validValues&&!(X in Y.validValues)){return}}M.map[S]=X;M.push({name:S,value:X})})}else{M=[];M.map={}}if(u&&!y){R=m.attributesRequired;K=m.attributesDefault;f=m.attributesForced;if(f){P=f.length;while(P--){s=f[P];q=s.name;h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}if(K){P=K.length;while(P--){s=K[P];q=s.name;if(!(q in M.map)){h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}}if(R){P=R.length;while(P--){if(R[P] in M.map){break}}if(P===-1){k=false}}if(M.map["data-mce-bogus"]){k=false}}if(k){n.start(H,M,N)}}else{k=false}if(A=J[H]){A.lastIndex=F=g.index+g[0].length;if(g=A.exec(D)){if(k){B=D.substr(F,g.index-F)}F=g.index+g[0].length}else{B=D.substr(F);F=D.length}if(k&&B.length>0){n.text(B,true)}if(k){n.end(H)}l.lastIndex=F;continue}if(!N){if(!Q||Q.indexOf("/")!=Q.length-1){z.push({name:H,valid:k})}else{if(k){n.end(H)}}}}else{if(H=g[1]){n.comment(H)}else{if(H=g[2]){n.cdata(H)}else{if(H=g[3]){n.doctype(H)}else{if(H=g[4]){n.pi(H,g[5])}}}}}}F=g.index+g[0].length}if(F<D.length){n.text(j(D.substr(F)))}for(P=z.length-1;P>=0;P--){H=z[P];if(H.valid){n.end(H.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-")===0){return false}}}if(j.type===8){return false}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(m){var o,p,x,v,z,n,q,l,t,u,k,s,y,r;s=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();for(o=0;o<m.length;o++){p=m[o];if(!p.parent){continue}v=[p];for(x=p.parent;x&&!h.isValidChild(x.name,p.name)&&!s[x.name];x=x.parent){v.push(x)}if(x&&v.length>1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t<v.length-1;t++){if(h.isValidChild(n.name,v[t].name)){q=f.filterNode(v[t].clone());n.append(q)}else{q=n}for(l=v[t].firstChild;l&&l!=v[t+1];){r=l.next;q.append(l);l=r}n=q}if(!z.isEmpty(k)){x.insert(z,v[0],true);x.insert(p,z)}else{x.insert(p,v[0],true)}x=v[0];if(x.isEmpty(k)||x.firstChild===x.lastChild&&x.firstChild.name==="br"){x.empty().remove()}}else{if(p.parent){if(p.name==="li"){y=p.prev;if(y&&(y.name==="ul"||y.name==="ul")){y.append(p);continue}y=p.next;if(y&&(y.name==="ul"||y.name==="ul")){y.insert(p,y.firstChild,true);continue}p.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(p.parent.name,"div")&&h.isValidChild("div",p.name)){p.wrap(f.filterNode(new a("div",1)))}else{if(p.name==="style"||p.name==="script"){p.empty().remove()}else{p.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,H,A,z,C,B,x,r,E,K,y,o,D,J=[],t,k,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;y=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();D=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;function F(){var L=H.firstChild,l,M;while(L){l=L.next;if(L.type==3||(L.type==1&&L.name!=="p"&&!o[L.name]&&!L.attr("data-mce-type"))){if(!M){M=I(q,1);H.insert(M,L);M.append(L)}else{M.append(L)}}else{M=null}L=l}}function I(l,L){var M=new a(l,L),N;if(l in e){N=i[l];if(N){N.push(M)}else{i[l]=[M]}}return M}function G(M){var N,l,L;for(N=M.prev;N&&N.type===3;){l=N.value.replace(t,"");if(l.length>0){N.value=l;N=N.prev}else{L=N.prev;N.remove();N=L}}}n=new b.html.SaxParser({validate:y,fix_self_closing:!y,cdata:function(l){A.append(I("#cdata",4)).value=l},text:function(M,l){var L;if(!s[A.name]){M=M.replace(k," ");if(A.lastChild&&o[A.lastChild.name]){M=M.replace(D,"")}}if(M.length!==0){L=I("#text",3);L.raw=!!l;A.append(L).value=M}},comment:function(l){A.append(I("#comment",8)).value=l},pi:function(l,L){A.append(I(l,7)).value=L;G(A)},doctype:function(L){var l;l=A.append(I("#doctype",10));l.value=L;G(A)},start:function(l,T,M){var R,O,N,L,P,U,S,Q;N=y?h.getElementRule(l):{};if(N){R=I(N.outputName||l,1);R.attributes=T;R.shortEnded=M;A.append(R);Q=p[A.name];if(Q&&p[R.name]&&!Q[R.name]){J.push(R)}O=d.length;while(O--){P=d[O].name;if(P in T.map){E=c[P];if(E){E.push(R)}else{c[P]=[R]}}}if(o[l]){G(R)}if(!M){A=R}}},end:function(l){var P,M,O,L,N;M=y?h.getElementRule(l):{};if(M){if(o[l]){if(!s[A.name]){for(P=A.firstChild;P&&P.type===3;){O=P.value.replace(D,"");if(O.length>0){P.value=O;P=P.next}else{L=P.next;P.remove();P=L}}for(P=A.lastChild;P&&P.type===3;){O=P.value.replace(t,"");if(O.length>0){P.value=O;P=P.prev}else{L=P.prev;P.remove();P=L}}}P=A.prev;if(P&&P.type===3){O=P.value.replace(D,"");if(O.length>0){P.value=O}else{P.remove()}}}if(M.removeEmpty||M.paddEmpty){if(A.isEmpty(u)){if(M.paddEmpty){A.empty().append(new a("#text","3")).value="\u00a0"}else{if(!A.attributes.map.name){N=A.parent;A.empty().remove();A=N;return}}}}A=A.parent}}},h);H=A=new a(m.context||g.root_name,11);n.parse(v);if(y&&J.length){if(!m.context){j(J)}else{m.invalid=true}}if(q&&H.name=="body"){F()}if(!m.invalid){for(K in i){E=e[K];z=i[K];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(C=0,B=E.length;C<B;C++){E[C](z,K,m)}}for(C=0,B=d.length;C<B;C++){E=d[C];if(E.name in c){z=c[E.name];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(x=0,r=E.callbacks.length;x<r;x++){E.callbacks[x](z,E.name,m)}}}}return H};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,u=h.getBlockElements(),k=h.getNonEmptyElements(),s,p,t;u.body=1;for(r=0;r<q;r++){o=n[r];s=o.parent;if(u[o.parent.name]&&o===s.lastChild){p=o.prev;while(p){t=p.name;if(t!=="span"||p.attr("data-mce-type")!=="bookmark"){if(t!=="br"){break}if(t==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(s.isEmpty(k)){elementRule=h.getElementRule(s.name);if(elementRule){if(elementRule.removeEmpty){s.remove()}else{if(elementRule.paddEmpty){s.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);(function(h){var f=h.each,e=h.is,d=h.isWebKit,b=h.isIE,c=h.html.Entities,a=/^([a-z0-9],?)+$/i,g=h.html.Schema.blockElementsMap,i=/^[ \t\r\n]*$/;h.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(o,m){var l=this,j,k;l.doc=o;l.win=window;l.files={};l.cssFlicker=false;l.counter=0;l.stdMode=!h.isIE||o.documentMode>=8;l.boxModel=!h.isIE||o.compatMode=="CSS1Compat"||l.stdMode;l.hasOuterHTML="outerHTML" in o.createElement("a");l.settings=m=h.extend({keep_values:false,hex_colors:1},m);l.schema=m.schema;l.styles=new h.html.Styles({url_converter:m.url_converter,url_converter_scope:m.url_converter_scope},m.schema);if(h.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(n){l.cssFlicker=true}}if(b&&m.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(p){o.createElement(p)});for(k in m.schema.getCustomElements()){o.createElement(k)}}h.addUnload(l.destroy,l)},getRoot:function(){var j=this,k=j.settings;return(k&&j.get(k.root_element))||j.doc.body},getViewPort:function(k){var l,j;k=!k?this.win:k;l=k.document;j=this.boxModel?l.documentElement:l.body;return{x:k.pageXOffset||j.scrollLeft,y:k.pageYOffset||j.scrollTop,w:k.innerWidth||j.clientWidth,h:k.innerHeight||j.clientHeight}},getRect:function(m){var l,j=this,k;m=j.get(m);l=j.getPos(m);k=j.getSize(m);return{x:l.x,y:l.y,w:k.w,h:k.h}},getSize:function(m){var k=this,j,l;m=k.get(m);j=k.getStyle(m,"width");l=k.getStyle(m,"height");if(j.indexOf("px")===-1){j=0}if(l.indexOf("px")===-1){l=0}return{w:parseInt(j)||m.offsetWidth||m.clientWidth,h:parseInt(l)||m.offsetHeight||m.clientHeight}},getParent:function(l,k,j){return this.getParents(l,k,j,false)},getParents:function(u,p,l,s){var k=this,j,m=k.settings,q=[];u=k.get(u);s=s===undefined;if(m.strict_root){l=l||k.getRoot()}if(e(p,"string")){j=p;if(p==="*"){p=function(o){return o.nodeType==1}}else{p=function(o){return k.is(o,j)}}}while(u){if(u==l||!u.nodeType||u.nodeType===9){break}if(!p||p(u)){if(s){q.push(u)}else{return u}}u=u.parentNode}return s?q:null},get:function(j){var k;if(j&&this.doc&&typeof(j)=="string"){k=j;j=this.doc.getElementById(j);if(j&&j.id!==k){return this.doc.getElementsByName(k)[1]}}return j},getNext:function(k,j){return this._findSib(k,j,"nextSibling")},getPrev:function(k,j){return this._findSib(k,j,"previousSibling")},select:function(l,k){var j=this;return h.dom.Sizzle(l,j.get(k)||j.get(j.settings.root_element)||j.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(a.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return h.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(m,q,j,l,o){var k=this;return this.run(m,function(s){var r,n;r=e(q,"string")?k.doc.createElement(q):q;k.setAttribs(r,j);if(l){if(l.nodeType){r.appendChild(l)}else{k.setHTML(r,l)}}return !o?s.appendChild(r):r})},create:function(l,j,k){return this.add(this.doc.createElement(l),l,j,k,1)},createHTML:function(r,j,p){var q="",m=this,l;q+="<"+r;for(l in j){if(j.hasOwnProperty(l)){q+=" "+l+'="'+m.encode(j[l])+'"'}}if(typeof(p)!="undefined"){return q+">"+p+"</"+r+">"}return q+" />"},remove:function(j,k){return this.run(j,function(m){var n,l=m.parentNode;if(!l){return null}if(k){while(n=m.firstChild){if(!h.isIE||n.nodeType!==3||n.nodeValue){l.insertBefore(n,m)}else{m.removeChild(n)}}}return l.removeChild(m)})},setStyle:function(m,j,k){var l=this;return l.run(m,function(p){var o,n;o=p.style;j=j.replace(/-(\D)/g,function(r,q){return q.toUpperCase()});if(l.pixelStyles.test(j)&&(h.is(k,"number")||/^[\-0-9\.]+$/.test(k))){k+="px"}switch(j){case"opacity":if(b){o.filter=k===""?"":"alpha(opacity="+(k*100)+")";if(!m.currentStyle||!m.currentStyle.hasLayout){o.display="inline-block"}}o[j]=o["-moz-opacity"]=o["-khtml-opacity"]=k||"";break;case"float":b?o.styleFloat=k:o.cssFloat=k;break;default:o[j]=k||""}if(l.settings.update_styles){l.setAttrib(p,"data-mce-style")}})},getStyle:function(m,j,l){m=this.get(m);if(!m){return}if(this.doc.defaultView&&l){j=j.replace(/[A-Z]/g,function(n){return"-"+n});try{return this.doc.defaultView.getComputedStyle(m,null).getPropertyValue(j)}catch(k){return null}}j=j.replace(/-(\D)/g,function(o,n){return n.toUpperCase()});if(j=="float"){j=b?"styleFloat":"cssFloat"}if(m.currentStyle&&l){return m.currentStyle[j]}return m.style?m.style[j]:undefined},setStyles:function(m,n){var k=this,l=k.settings,j;j=l.update_styles;l.update_styles=0;f(n,function(o,p){k.setStyle(m,p,o)});l.update_styles=j;if(l.update_styles){k.setAttrib(m,l.cssText)}},removeAllAttribs:function(j){return this.run(j,function(m){var l,k=m.attributes;for(l=k.length-1;l>=0;l--){m.removeAttributeNode(k.item(l))}})},setAttrib:function(l,m,j){var k=this;if(!l||!m){return}if(k.settings.strict){m=m.toLowerCase()}return this.run(l,function(q){var p=k.settings;var n=q.getAttribute(m);if(j!==null){switch(m){case"style":if(!e(j,"string")){f(j,function(r,s){k.setStyle(q,s,r)});return}if(p.keep_values){if(j&&!k._isRes(j)){q.setAttribute("data-mce-style",j,2)}else{q.removeAttribute("data-mce-style",2)}}q.style.cssText=j;break;case"class":q.className=j||"";break;case"src":case"href":if(p.keep_values){if(p.url_converter){j=p.url_converter.call(p.url_converter_scope||k,j,m,q)}k.setAttrib(q,"data-mce-"+m,j,2)}break;case"shape":q.setAttribute("data-mce-style",j);break}}if(e(j)&&j!==null&&j.length!==0){q.setAttribute(m,""+j,2)}else{q.removeAttribute(m,2)}if(tinyMCE.activeEditor&&n!=j){var o=tinyMCE.activeEditor;o.onSetAttrib.dispatch(o,q,m,j)}})},setAttribs:function(k,l){var j=this;return this.run(k,function(m){f(l,function(o,p){j.setAttrib(m,p,o)})})},getAttrib:function(o,p,l){var j,k=this,m;o=k.get(o);if(!o||o.nodeType!==1){return l===m?false:l}if(!e(l)){l=""}if(/^(src|href|style|coords|shape)$/.test(p)){j=o.getAttribute("data-mce-"+p);if(j){return j}}if(b&&k.props[p]){j=o[k.props[p]];j=j&&j.nodeValue?j.nodeValue:j}if(!j){j=o.getAttribute(p,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(p)){if(o[k.props[p]]===true&&j===""){return p}return j?p:""}if(o.nodeName==="FORM"&&o.getAttributeNode(p)){return o.getAttributeNode(p).nodeValue}if(p==="style"){j=j||o.style.cssText;if(j){j=k.serializeStyle(k.parseStyle(j),o.nodeName);if(k.settings.keep_values&&!k._isRes(j)){o.setAttribute("data-mce-style",j)}}}if(d&&p==="class"&&j){j=j.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(p){case"rowspan":case"colspan":if(j===1){j=""}break;case"size":if(j==="+0"||j===20||j===0){j=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(j===0){j=""}break;case"hspace":if(j===-1){j=""}break;case"maxlength":case"tabindex":if(j===32768||j===2147483647||j==="32768"){j=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(j===65535){return p}return l;case"shape":j=j.toLowerCase();break;default:if(p.indexOf("on")===0&&j){j=h._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+j)}}}return(j!==m&&j!==null&&j!=="")?""+j:l},getPos:function(s,m){var k=this,j=0,q=0,o,p=k.doc,l;s=k.get(s);m=m||p.body;if(s){if(s.getBoundingClientRect){s=s.getBoundingClientRect();o=k.boxModel?p.documentElement:p.body;j=s.left+(p.documentElement.scrollLeft||p.body.scrollLeft)-o.clientTop;q=s.top+(p.documentElement.scrollTop||p.body.scrollTop)-o.clientLeft;return{x:j,y:q}}l=s;while(l&&l!=m&&l.nodeType){j+=l.offsetLeft||0;q+=l.offsetTop||0;l=l.offsetParent}l=s.parentNode;while(l&&l!=m&&l.nodeType){j-=l.scrollLeft||0;q-=l.scrollTop||0;l=l.parentNode}}return{x:j,y:q}},parseStyle:function(j){return this.styles.parse(j)},serializeStyle:function(k,j){return this.styles.serialize(k,j)},loadCSS:function(j){var l=this,m=l.doc,k;if(!j){j=""}k=l.select("head")[0];f(j.split(","),function(n){var o;if(l.files[n]){return}l.files[n]=true;o=l.create("link",{rel:"stylesheet",href:h._addVer(n)});if(b&&m.documentMode&&m.recalc){o.onload=function(){if(m.recalc){m.recalc()}o.onload=null}}k.appendChild(o)})},addClass:function(j,k){return this.run(j,function(l){var m;if(!k){return 0}if(this.hasClass(l,k)){return l.className}m=this.removeClass(l,k);return l.className=(m!=""?(m+" "):"")+k})},removeClass:function(l,m){var j=this,k;return j.run(l,function(o){var n;if(j.hasClass(o,m)){if(!k){k=new RegExp("(^|\\s+)"+m+"(\\s+|$)","g")}n=o.className.replace(k," ");n=h.trim(n!=" "?n:"");o.className=n;if(!n){o.removeAttribute("class");o.removeAttribute("className")}return n}return o.className})},hasClass:function(k,j){k=this.get(k);if(!k||!j){return false}return(" "+k.className+" ").indexOf(" "+j+" ")!==-1},show:function(j){return this.setStyle(j,"display","block")},hide:function(j){return this.setStyle(j,"display","none")},isHidden:function(j){j=this.get(j);return !j||j.style.display=="none"||this.getStyle(j,"display")=="none"},uniqueId:function(j){return(!j?"mce_":j)+(this.counter++)},setHTML:function(l,k){var j=this;return j.run(l,function(n){if(b){while(n.firstChild){n.removeChild(n.firstChild)}try{n.innerHTML="<br />"+k;n.removeChild(n.firstChild)}catch(m){n=j.create("div");n.innerHTML="<br />"+k;f(n.childNodes,function(p,o){if(o){n.appendChild(p)}})}}else{n.innerHTML=k}return k})},getOuterHTML:function(l){var k,j=this;l=j.get(l);if(!l){return null}if(l.nodeType===1&&j.hasOuterHTML){return l.outerHTML}k=(l.ownerDocument||j.doc).createElement("body");k.appendChild(l.cloneNode(true));return k.innerHTML},setOuterHTML:function(m,k,n){var j=this;function l(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){j.insertAfter(s.cloneNode(true),p);s=s.previousSibling}j.remove(p)}return this.run(m,function(p){p=j.get(p);if(p.nodeType==1){n=n||p.ownerDocument||j.doc;if(b){try{if(b&&p.nodeType==1){p.outerHTML=k}else{l(p,k,n)}}catch(o){l(p,k,n)}}else{l(p,k,n)}}})},decode:c.decode,encode:c.encodeAllRaw,insertAfter:function(j,k){k=this.get(k);return this.run(j,function(m){var l,n;l=k.parentNode;n=k.nextSibling;if(n){l.insertBefore(m,n)}else{l.appendChild(m)}return m})},isBlock:function(k){var j=k.nodeType;if(j){return !!(j===1&&g[k.nodeName])}return !!g[k]},replace:function(p,m,j){var l=this;if(e(m,"array")){p=p.cloneNode(true)}return l.run(m,function(k){if(j){f(h.grep(k.childNodes),function(n){p.appendChild(n)})}return k.parentNode.replaceChild(p,k)})},rename:function(m,j){var l=this,k;if(m.nodeName!=j.toUpperCase()){k=l.create(j);f(l.getAttribs(m),function(n){l.setAttrib(k,n.nodeName,l.getAttrib(m,n.nodeName))});l.replace(k,m,1)}return k||m},findCommonAncestor:function(l,j){var m=l,k;while(m){k=j;while(k&&m!=k){k=k.parentNode}if(m==k){break}m=m.parentNode}if(!m&&l.ownerDocument){return l.ownerDocument.documentElement}return m},toHex:function(j){var l=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(j);function k(m){m=parseInt(m).toString(16);return m.length>1?m:"0"+m}if(l){j="#"+k(l[1])+k(l[2])+k(l[3]);return j}return j},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(r){f(r.imports,function(s){q(s)});f(r.cssRules||r.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){f(s.selectorText.split(","),function(t){t=t.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(t)||!/\.[\w\-]+$/.test(t)){return}l=t;t=h._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",t);if(p&&!(t=p(t,l))){return}if(!o[t]){j.push({"class":t});o[t]=1}})}break;case 3:q(s.styleSheet);break}})}try{f(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(m,l,k){var j=this,n;if(j.doc&&typeof(m)==="string"){m=j.get(m)}if(!m){return false}k=k||this;if(!m.nodeType&&(m.length||m.length===0)){n=[];f(m,function(p,o){if(p){if(typeof(p)=="string"){p=j.doc.getElementById(p)}n.push(l.call(k,p,o))}});return n}return l.call(k,m)},getAttribs:function(k){var j;k=this.get(k);if(!k){return[]}if(b){j=[];if(k.nodeName=="OBJECT"){return k.attributes}if(k.nodeName==="OPTION"&&this.getAttrib(k,"selected")){j.push({specified:1,nodeName:"selected"})}k.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(l){j.push({specified:1,nodeName:l})});return j}return k.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p;m=m.firstChild;if(m){j=new h.dom.TreeWalker(m);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){p=m.parentNode;if(l==="br"&&r.isBlock(p)&&p.firstChild===m&&p.lastChild===m){continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!i.test(m.nodeValue))){return false}}while(m=j.next())}return true},destroy:function(k){var j=this;if(j.events){j.events.destroy()}j.win=j.doc=j.root=j.events=null;if(!k){h.removeUnload(j.destroy)}},createRng:function(){var j=this.doc;return j.createRange?j.createRange():new h.dom.Range(this)},nodeIndex:function(n,o){var j=0,l,m,k;if(n){for(l=n.nodeType,n=n.previousSibling,m=n;n;n=n.previousSibling){k=n.nodeType;if(o&&k==3){if(k==l||!n.nodeValue.length){continue}}j++;l=k}}return j},split:function(n,m,q){var s=this,j=s.createRng(),o,l,p;function k(x){var u,t=x.childNodes,v=x.nodeType;function y(B){var A=B.previousSibling&&B.previousSibling.nodeName=="SPAN";var z=B.nextSibling&&B.nextSibling.nodeName=="SPAN";return A&&z}if(v==1&&x.getAttribute("data-mce-type")=="bookmark"){return}for(u=t.length-1;u>=0;u--){k(t[u])}if(v!=9){if(v==3&&x.nodeValue.length>0){var r=h.trim(x.nodeValue).length;if(!s.isBlock(x.parentNode)||r>0||r==0&&y(x)){return}}else{if(v==1){t=x.childNodes;if(t.length==1&&t[0]&&t[0].nodeType==1&&t[0].getAttribute("data-mce-type")=="bookmark"){x.parentNode.insertBefore(t[0],x)}if(t.length||/^(br|hr|input|img)$/i.test(x.nodeName)){return}}}s.remove(x)}return x}if(n&&m){j.setStart(n.parentNode,s.nodeIndex(n));j.setEnd(m.parentNode,s.nodeIndex(m));o=j.extractContents();j=s.createRng();j.setStart(m.parentNode,s.nodeIndex(m)+1);j.setEnd(n.parentNode,s.nodeIndex(n)+1);l=j.extractContents();p=n.parentNode;p.insertBefore(k(o),n);if(q){p.replaceChild(q,m)}else{p.insertBefore(m,n)}p.insertBefore(k(l),n);s.remove(n);return q||m}},bind:function(n,j,m,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.add(n,j,m,l||this)},unbind:function(m,j,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.remove(m,j,l)},_findSib:function(m,j,k){var l=this,n=j;if(m){if(e(n,"string")){n=function(o){return l.is(o,j)}}for(m=m[k];m;m=m[k]){if(n(m)){return m}}}return null},_isRes:function(j){return/^(top|left|bottom|right|width|height)/i.test(j)||/;\s*(top|left|bottom|right|width|height)/i.test(j)}});h.DOM=new h.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(Y,t){var ab=N[h],W=N[U],aa=N[P],V=N[z],Z=t.startContainer,ad=t.startOffset,X=t.endContainer,ac=t.endOffset;if(Y===0){return G(ab,W,Z,ad)}if(Y===1){return G(aa,V,Z,ad)}if(Y===2){return G(aa,V,X,ac)}if(Y===3){return G(ab,W,X,ac)}}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(Z<Y){return -1}return 1}aa=V;while(aa&&aa.parentNode!=X){aa=aa.parentNode}if(aa){W=0;t=X.firstChild;while(t!=aa&&W<Z){W++;t=t.nextSibling}if(Z<=W){return -1}return 1}aa=X;while(aa&&aa.parentNode!=V){aa=aa.parentNode}if(aa){W=0;t=V.firstChild;while(t!=aa&&W<Y){W++;t=t.nextSibling}if(W<Y){return -1}return 1}ab=c.findCommonAncestor(X,V);ad=X;while(ad&&ad.parentNode!=ab){ad=ad.parentNode}if(!ad){ad=ab}ac=V;while(ac&&ac.parentNode!=ab){ac=ac.parentNode}if(!ac){ac=ab}if(ad==ac){return 0}t=ab.firstChild;while(t){if(t==ad){return -1}if(t==ac){return 1}t=t.nextSibling}}function B(V,Y,X){var t,W;if(V){N[h]=Y;N[U]=X}else{N[P]=Y;N[z]=X}t=N[P];while(t.parentNode){t=t.parentNode}W=N[h];while(W.parentNode){W=W.parentNode}if(W==t){if(G(N[h],N[U],N[P],N[z])>0){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(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}k.setEndPoint(j?"EndToStart":"EndToEnd",i);if(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)>0){k=i.duplicate();k.collapse(j);o=-1;while(s==k.parentElement()){if(k.move("character",-1)==0){break}o++}}o=o||k.text.replace("\r\n"," ").length}else{k.collapse(true);k.setEndPoint(j?"StartToStart":"StartToEnd",i);o=k.text.replace("\r\n"," ").length}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var u,t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,s,q,r=d.dom.doc,m=r.body;function j(z){var u,y,t,x,v;t=h.create("a");u=z?k:s;y=z?p:q;x=n.duplicate();if(u==r||u==r.documentElement){u=m;y=0}if(u.nodeType==3){u.parentNode.insertBefore(t,u);x.moveToElementText(t);x.moveStart("character",y);h.remove(t);n.setEndPoint(z?"StartToStart":"EndToEnd",x)}else{v=u.childNodes;if(v.length){if(y>=v.length){h.insertAfter(t,v[v.length-1])}else{u.insertBefore(t,v[y])}x.moveToElementText(t)}else{t=r.createTextNode("\uFEFF");u.appendChild(t);x.moveToElementText(t.parentNode);x.collapse(c)}n.setEndPoint(z?"StartToStart":"EndToEnd",x);h.remove(t)}}k=i.startContainer;p=i.startOffset;s=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==s&&k.nodeType==1&&p==q-1){if(p==q-1){try{l=m.createControlRange();l.addElement(k.childNodes[p]);l.select();return}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}return r};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(y,e,z){var x;if(!y){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.leftMatch[v].exec(y))){var r=u[1];u.splice(1,1);if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");x=f.find[v](u,e,z);if(x!=null){y=y.replace(f.match[v],"");break}}}}if(!x){x=e.getElementsByTagName("*")}return{set:x,expr:y}};b.filter=function(C,B,F,u){var s=C,H=[],z=B,x,e,y=B&&B[0]&&b.isXML(B[0]);while(C&&B.length){for(var A in f.filter){if((x=f.leftMatch[A].exec(C))!=null&&x[2]){var r=f.filter[A],G,E,t=x[1];e=false;x.splice(1,1);if(t.substr(t.length-1)==="\\"){continue}if(z===H){H=[]}if(f.preFilter[A]){x=f.preFilter[A](x,z,F,H,u,y);if(!x){e=G=true}else{if(x===true){continue}}}if(x){for(var v=0;(E=z[v])!=null;v++){if(E){G=r(E,x,v,z);var D=u^!!G;if(F&&G!=null){if(D){e=true}else{z[v]=false}}else{if(D){H.push(E);e=true}}}}}if(G!==undefined){if(!F){z=H}C=C.replace(f.match[A],"");if(!e){return[]}break}}}if(C===s){if(e==null){b.error(C)}else{break}}s=C}return z};b.error=function(e){throw"Syntax error, unrecognized expression: "+e};var f=b.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,r){var t=typeof r==="string",v=t&&!/\W/.test(r),y=t&&!v;if(v){r=r.toLowerCase()}for(var s=0,e=x.length,u;s<e;s++){if((u=x[s])){while((u=u.previousSibling)&&u.nodeType!==1){}x[s]=y||u&&u.nodeName.toLowerCase()===r?u||false:u===r}}if(y){b.filter(r,x,true)}},">":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s<e;s++){v=x[s];if(v){var t=v.parentNode;x[s]=t.nodeName.toLowerCase()===r?t:false}}}else{for(;s<e;s++){v=x[s];if(v){x[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,x,true)}}},"":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,x,y){t=" "+t[1].replace(/\\/g,"")+" ";if(y){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(x^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v<u;v++){if(t[v]===s){return false}}return true}else{b.error("Syntax error, unrecognized expression: "+e)}}}},CHILD:function(e,t){var x=t[1],r=e;switch(x){case"only":case"first":while((r=r.previousSibling)){if(r.nodeType===1){return false}}if(x==="first"){return true}r=e;case"last":while((r=r.nextSibling)){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],A=t[3];if(s===1&&A===0){return true}var v=t[0],z=e.parentNode;if(z&&(z.sizcache!==v||!e.nodeIndex)){var u=0;for(r=z.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}z.sizcache=v}var y=e.nodeIndex-A;if(s===0){return y===0}else{return(y%s===0&&y/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s<e;s++){r.push(u[s])}}else{for(;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){if(!r.compareDocumentPosition||!e.compareDocumentPosition){if(r==e){o=true}return r.compareDocumentPosition?-1:1}var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){o=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){if(!r.sourceIndex||!e.sourceIndex){if(r==e){o=true}return r.sourceIndex?-1:1}var s=r.sourceIndex-e.sourceIndex;if(s===0){o=true}return s}}else{if(document.createRange){c=function(t,r){if(!t.ownerDocument||!r.ownerDocument){if(t==r){o=true}return t.ownerDocument?-1:1}var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){o=true}return u}}}}b.getText=function(e){var r="",t;for(var s=0;e[s];s++){t=e[s];if(t.nodeType===3||t.nodeType===4){r+=t.nodeValue}else{if(t.nodeType!==8){r+=b.getText(t.childNodes)}}}return r};(function(){var r=document.createElement("div"),s="script"+(new Date()).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName.toLowerCase()===x){u=e;break}e=e[r]}A[t]=u}}}function q(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof x!=="string"){if(e===x){u=true;break}}else{if(b.filter(x,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x<r;x++){b(e,s[x],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(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.readyState==="complete"){g._pageInit(i);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<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}if(c.isIE&&i.boxModel){this._fixIESelection()}c.addUnload(f.destroy,f)},setCursorLocation:function(h,i){var f=this;var g=f.dom.createRng();g.setStart(h,i);g.setEnd(h,i);f.setRng(g);f.collapse(false)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";g.forced_root_block="";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML="<br>"+(h.item?h.item(0).outerHTML:h.htmlText);l.removeChild(l.firstChild)}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(g,i){var n=this,f=n.getRng(),j,k=n.win.document,m,l;i=i||{format:"html"};i.set=true;g=i.content=g;if(!i.no_events){n.onBeforeSetContent.dispatch(n,i)}g=i.content;if(f.insertNode){g+='<span id="__caret">_</span>';if(f.startContainer==k&&f.endContainer==k){k.body.innerHTML=g}else{f.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=g}else{if(f.createContextualFragment){f.insertNode(f.createContextualFragment(g))}else{m=k.createDocumentFragment();l=k.createElement("div");m.appendChild(l);l.outerHTML=g;f.insertNode(m)}}}j=n.dom.get("__caret");f=k.createRange();f.setStartBefore(j);f.setEndBefore(j);n.setRng(f);n.dom.remove("__caret");try{n.setRng(f)}catch(h){}}else{if(f.item){k.execCommand("Delete",false,null);f=n.getRng()}if(/^\s+/.test(g)){f.pasteHTML('<span id="__mce_tmp">_</span>'+g);n.dom.remove("__mce_tmp")}else{f.pasteHTML(g)}}if(!i.no_events){n.onSetContent.dispatch(n,i)}},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}}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(r,s){var v=this,m=v.dom,g,j,i,n,h,o,p,l="\uFEFF",u;function f(x,y){var t=0;d(m.select(x),function(A,z){if(A==y){t=z}});return t}if(r==2){function k(){var x=v.getRng(true),t=m.getRoot(),y={};function z(C,H){var B=C[H?"startContainer":"endContainer"],G=C[H?"startOffset":"endOffset"],A=[],D,F,E=0;if(B.nodeType==3){if(s){for(D=B.previousSibling;D&&D.nodeType==3;D=D.previousSibling){G+=D.nodeValue.length}}A.push(G)}else{F=B.childNodes;if(G>=F.length&&F.length){E=1;G=Math.max(0,F.length-1)}A.push(v.dom.nodeIndex(F[G],s)+E)}for(;B&&B!=t;B=B.parentNode){A.push(v.dom.nodeIndex(B,s))}return A}y.start=z(x,true);if(!v.isCollapsed()){y.end=z(x)}return y}if(v.tridentSel){return v.tridentSel.getBookmark(r)}return k()}if(r){return{rng:v.getRng()}}g=v.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();u="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();try{g.collapse();g.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_start" style="'+u+'">'+l+"</span>");if(!n){j.collapse(false);g.moveToElementText(j.parentElement());if(g.compareEndPoints("StartToEnd",j)==0){j.move("character",-1)}j.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_end" style="'+u+'">'+l+"</span>")}}catch(q){return null}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=v.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",{"data-mce-type":"bookmark",id:i+"_end",style:u},l))}g.collapse(true);g.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_start",style:u},l))}v.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(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){y=t[0];for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(t[v]>u.length-1){return}x=u[t[v]]}if(x.nodeType===3){y=Math.min(t[0],x.nodeValue.length)}if(x.nodeType===1){y=Math.min(t[0],x.childNodes.length)}if(z){f.setStart(x,y)}else{f.setEnd(x,y)}}return true}if(r.tridentSel){return r.tridentSel.moveToBookmark(n)}if(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&&!c.isOpera){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(l.isBlock(t)&&!t.innerHTML){t.innerHTML=!a?'<br data-mce-bogus="1" />':" "}return t}k("start");k("end");if(j){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;if(k){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 h=this,g=h.getRng(),i;if(g.item){i=g.item(0);g=h.win.document.body.createTextRange();g.moveToElementText(i)}g.collapse(!!f);h.setRng(g)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(l){var g=this,h,i,k,j=g.win.document;if(l&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():j.createRange())}}catch(f){}if(c.isIE&&i&&i.setStart&&j.selection.createRange().item){k=j.selection.createRange().item(0);i=j.createRange();i.setStartBefore(k);i.setEndAfter(k)}if(!i){i=j.createRange?j.createRange():j.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;try{h.removeAllRanges()}catch(f){}h.addRange(i);g.selectedRange=h.rangeCount>0?h.getRangeAt(0):null}}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 h=this,g=h.getRng(),i=h.getSel(),l,k=g.startContainer,f=g.endContainer;if(!g){return h.dom.getRoot()}if(g.setStart){l=g.commonAncestorContainer;if(!g.collapsed){if(g.startContainer==g.endContainer){if(g.endOffset-g.startOffset<2){if(g.startContainer.hasChildNodes()){l=g.startContainer.childNodes[g.startOffset]}}}if(k.nodeType===3&&f.nodeType===3){function j(p,m){var o=p;while(p&&p.nodeType===3&&p.length===0){p=m?p.nextSibling:p.previousSibling}return p||o}if(k.length===g.startOffset){k=j(k.nextSibling,true)}else{k=k.parentNode}if(g.endOffset===0){f=j(f.previousSibling,false)}else{f=f.parentNode}if(k&&k===f){return k}}}if(l&&l.nodeType==3){return l.parentNode}return l}return g.item?g.item(0):g.parentElement()},getSelectedBlocks:function(o,g){var m=this,j=m.dom,l,k,h,i=[];l=j.getParent(o||m.getStart(),j.isBlock);k=j.getParent(g||m.getEnd(),j.isBlock);if(l){i.push(l)}if(l&&k&&l!=k){h=l;var f=new c.dom.TreeWalker(l,j.getRoot());while((h=f.next())&&h!=k){if(j.isBlock(h)){i.push(h)}}}if(k&&l!=k){i.push(k)}return i},normalize:function(){var g=this,f,i;if(c.isIE){return}function h(p){var k,o,n,m=g.dom,j=m.getRoot(),l;k=f[(p?"start":"end")+"Container"];o=f[(p?"start":"end")+"Offset"];if(k.nodeType===9){k=k.body;o=0}if(k===j){if(k.hasChildNodes()){k=k.childNodes[Math.min(!p&&o>0?o-1:o,k.childNodes.length-1)];o=0;if(k.hasChildNodes()){l=k;n=new c.dom.TreeWalker(k,j);do{if(l.nodeType===3){o=p?0:l.nodeValue.length-1;k=l;i=true;break}if(/^(BR|IMG)$/.test(l.nodeName)){o=m.nodeIndex(l);k=l.parentNode;if(l.nodeName=="IMG"&&!p){o++}i=true;break}}while(l=(p?n.next():n.prev()))}}}if(i){f["set"+(p?"Start":"End")](k,o)}}f=g.getRng();h(true);if(!f.collapsed){h()}if(i){g.setRng(f)}},destroy:function(g){var f=this;f.win=null;if(!g){c.removeUnload(f.destroy)}},_fixIESelection:function(){var g=this.dom,m=g.doc,h=m.body,j,n,f;m.documentElement.unselectable=true;function i(o,r){var p=h.createTextRange();try{p.moveToPoint(o,r)}catch(q){p=null}return p}function l(p){var o;if(p.button){o=i(p.x,p.y);if(o){if(o.compareEndPoints("StartToStart",n)>0){o.setEndPoint("StartToStart",n)}else{o.setEndPoint("EndToEnd",n)}o.select()}}else{k()}}function k(){var o=m.selection.createRange();if(n&&!o.item&&o.compareEndPoints("StartToEnd",o)===0){n.select()}g.unbind(m,"mouseup",k);g.unbind(m,"mousemove",l);n=j=0}g.bind(m,["mousedown","contextmenu"],function(o){if(o.target.nodeName==="HTML"){if(j){k()}f=m.documentElement;if(f.scrollHeight>f.clientHeight){return}j=1;n=i(o.x,o.y);if(n){g.bind(m,"mouseup",k);g.bind(m,"mousemove",l);g.win.focus();n.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/\s*mce(Item\w+|Selected)\s*/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(m.getInner?o.innerHTML:a.trim(i.getOuterHTML(o),m),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF|\u200B/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var p=this,m=e.root,l=e.items,n=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,k=e.excludeFromTabOrder,j,h,o,d,g;f=f||b.DOM;j=function(q){g=q.target.id};h=function(q){f.setAttrib(q.target.id,"tabindex","-1")};d=function(q){var r=f.get(g);f.setAttrib(r,"tabindex","0");r.focus()};p.focus=function(){f.get(g).focus()};p.destroy=function(){c(l,function(q){f.unbind(f.get(q.id),"focus",j);f.unbind(f.get(q.id),"blur",h)});f.unbind(f.get(m),"focus",d);f.unbind(f.get(m),"keydown",o);l=f=m=p.focus=j=h=o=d=null;p.destroy=function(){}};p.moveFocus=function(u,r){var q=-1,t=p.controls,s;if(!g){return}c(l,function(x,v){if(x.id===g){q=v;return false}});q+=u;if(q<0){q=l.length-1}else{if(q>=l.length){q=0}}s=l[q];f.setAttrib(g,"tabindex","-1");f.setAttrib(s.id,"tabindex","0");f.get(s.id).focus();if(e.actOnFocus){e.onAction(s.id)}if(r){a.cancel(r)}};o=function(y){var u=37,t=39,x=38,z=40,q=27,s=14,r=13,v=32;switch(y.keyCode){case u:if(i){p.moveFocus(-1)}break;case t:if(i){p.moveFocus(1)}break;case x:if(n){p.moveFocus(-1)}break;case z:if(n){p.moveFocus(1)}break;case q:if(e.onCancel){e.onCancel();a.cancel(y)}break;case s:case r:case v:if(e.onAction){e.onAction(g);a.cancel(y)}break}};c(l,function(s,q){var r;if(!s.id){s.id=f.uniqueId("_mce_item_")}if(k){f.bind(s.id,"blur",h);r="-1"}else{r=(q===0?"0":"-1")}f.setAttrib(s.id,"tabindex",r);f.bind(f.get(s.id),"focus",j)});if(l[0]){g=l[0].id}f.setAttrib(m,"tabindex","-1");f.bind(f.get(m),"focus",d);f.bind(f.get(m),"keydown",o)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" />'+c}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(i,h,f){var g=this;g.parent(i,h,f);g.items=[];g.onChange=new a(g);g.onPostRender=new a(g);g.onAdd=new a(g);g.onRenderMenu=new d.util.Dispatcher(this);g.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var h=this,i,j,g;if(f!=h.selectedIndex){i=c.get(h.id+"_text");g=c.get(h.id+"_voiceDesc");j=h.items[f];if(j){h.selectedValue=j.value;h.selectedIndex=f;c.setHTML(i,c.encode(j.title));c.setHTML(g,h.settings.title+" - "+j.title);c.removeClass(i,"mceTitle");c.setAttrib(h.id,"aria-valuenow",j.title)}else{c.setHTML(i,c.encode(h.settings.title));c.setHTML(g,c.encode(h.settings.title));c.addClass(i,"mceTitle");h.selectedValue=h.selectedIndex=null;c.setAttrib(h.id,"aria-valuenow",h.settings.title)}i=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<span role="listbox" aria-haspopup="true" aria-labelledby="'+f.id+'_voiceDesc" aria-describedby="'+f.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("span",{id:f.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},f.settings.title);i+=c.createHTML("a",{id:f.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";i+="</tr></tbody></table></span>";return i},showMenu:function(){var g=this,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(j){if(j.value===g.selectedValue){f.items[j.id].setSelected(1);g.oldID=j.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){c.removeClass(f.id,f.classPrefix+"Selected");if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(function(){g.hideMenu();g.focus()});f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.role="option";h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id,"keydown",function(h){if(h.keyCode==32){f.showMenu(h);b.cancel(h)}});b.add(f.id,"focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id,"keydown",function(h){if(h.keyCode==40){f.showMenu();b.cancel(h)}});f.keyPressHandler=b.add(f.id,"keypress",function(i){var h;if(i.keyCode==13){h=f.selectedValue;f.selectedValue=null;b.cancel(i);f.settings.onselect(h)}})}f._focused=1});b.add(f.id,"blur",function(){b.remove(f.id,"keydown",f.keyDownHandler);b.remove(f.id,"keypress",f.keyPressHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f;this.setAriaProperty("disabled",f)},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox","aria-labelledby":f.id+"_aria"},g);g+=c.createHTML("span",{id:f.id+"_aria",style:"display: none"},f.settings.title);return g},postRender:function(){var g=this,h,i=true;g.rendered=true;function f(k){var j=g.items[k.target.selectedIndex-1];if(j&&(j=j.value)){g.onChange.dispatch(g,j);if(g.settings.onselect){g.settings.onselect(j)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(k){var j;b.remove(g.id,"change",h);i=false;j=b.add(g.id,"blur",function(){if(i){return}i=true;b.add(g.id,"change",f);b.remove(g.id,"blur",j)});if(d.isWebKit&&(k.keyCode==37||k.keyCode==39)){return b.prevent(k)}if(k.keyCode==13||k.keyCode==32){f(k);return b.cancel(k)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");new d.ui.KeyboardNavigation({root:p.id+"_menu",items:c.select("a",p.id+"_menu"),onCancel:function(){p.hideMenu();p.focus()}});a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return a.cancel(i)});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(n){var o=n.DOM,k=n.dom.Event,f=n.extend,l=n.util.Dispatcher,i=n.each,a=n.isGecko,b=n.isIE,e=n.isWebKit,d=n.is,h=n.ThemeManager,c=n.PluginManager,p=n.inArray,m=n.grep,g=n.explode,j=n.VK;n.create("tinymce.Editor",{Editor:function(u,r){var q=this;q.id=q.editorId=u;q.execCommands={};q.queryStateCommands={};q.queryValueCommands={};q.isNotDirty=false;q.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(s){q[s]=new l(q)});q.settings=r=f({id:u,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:n.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:n.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",validate:true,entity_encoding:"named",url_converter:q.convertURL,url_converter_scope:q,ie7_compat:true},r);q.documentBaseURI=new n.util.URI(r.document_base_url||n.documentBaseURL,{base_uri:tinyMCE.baseURI});q.baseURI=n.baseURI;q.contentCSS=[];q.execCallback("setup",q)},render:function(u){var v=this,x=v.settings,y=v.id,q=n.ScriptLoader;if(!k.domLoaded){k.add(document,"init",function(){v.render()});return}tinyMCE.settings=x;if(!v.getElement()){return}if(n.isIDevice&&!n.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(v.getElement().nodeName)&&x.hidden_input&&o.getParent(y,"form")){o.insertAfter(o.create("input",{type:"hidden",name:y}),y)}if(n.WindowManager){v.windowManager=new n.WindowManager(v)}if(x.encoding=="xml"){v.onGetContent.add(function(s,t){if(t.save){t.content=o.encode(t.content)}})}if(x.add_form_submit_trigger){v.onSubmit.addToTop(function(){if(v.initialized){v.save();v.isNotDirty=1}})}if(x.add_unload_trigger){v._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(v.initialized&&!v.destroyed&&!v.isHidden()){v.save({format:"raw",no_events:true})}})}n.addUnload(v.destroy,v);if(x.submit_patch){v.onBeforeRenderUI.add(function(){var s=v.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){v.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){n.triggerSave();v.isNotDirty=1;return v.formElement._mceOldSubmit(v.formElement)}}s=null})}function r(){if(x.language&&x.language_load!==false){q.add(n.baseURL+"/langs/"+x.language+".js")}if(x.theme&&x.theme.charAt(0)!="-"&&!h.urls[x.theme]){h.load(x.theme,"themes/"+x.theme+"/editor_template"+n.suffix+".js")}i(g(x.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(A){var z={prefix:"plugins/",resource:A,suffix:"/editor_plugin"+n.suffix+".js"};var A=c.createUrl(z,A);c.load(A.resource,A)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+n.suffix+".js"})}}});q.loadQueue(function(){if(!v.removed){v.init()}})}r()},init:function(){var v,I=this,J=I.settings,F,B,E=I.getElement(),r,q,G,z,D,H,A,x=[];n.add(I);J.aria_label=J.aria_label||o.getAttrib(E,"aria-label",I.getLang("aria.rich_text_area"));if(J.theme){J.theme=J.theme.replace(/-/,"");r=h.get(J.theme);I.theme=new r();if(I.theme.init&&J.init_theme){I.theme.init(I,h.urls[J.theme]||n.documentBaseURL.replace(/\/$/,""))}}function C(K){var L=c.get(K),t=c.urls[K]||n.documentBaseURL.replace(/\/$/,""),s;if(L&&n.inArray(x,K)===-1){i(c.dependencies(K),function(u){C(u)});s=new L(I,t);I.plugins[K]=s;if(s.init){s.init(I,t);x.push(K)}}}i(g(J.plugins.replace(/\-/g,"")),C);if(J.popup_css!==false){if(J.popup_css){J.popup_css=I.documentBaseURI.toAbsolute(J.popup_css)}else{J.popup_css=I.baseURI.toAbsolute("themes/"+J.theme+"/skins/"+J.skin+"/dialog.css")}}if(J.popup_css_add){J.popup_css+=","+I.documentBaseURI.toAbsolute(J.popup_css_add)}I.controlManager=new n.ControlManager(I);if(J.custom_undo_redo){I.onBeforeExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.beforeChange()}});I.onExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.add()}})}I.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){I.nodeChanged()}});if(a){function y(s,t){if(!t||!t.initial){I.execCommand("mceRepaint")}}I.onUndo.add(y);I.onRedo.add(y);I.onSetContent.add(y)}I.onBeforeRenderUI.dispatch(I,I.controlManager);if(J.render_ui){F=J.width||E.style.width||E.offsetWidth;B=J.height||E.style.height||E.offsetHeight;I.orgDisplay=E.style.display;H=/^[0-9\.]+(|px)$/i;if(H.test(""+F)){F=Math.max(parseInt(F)+(r.deltaWidth||0),100)}if(H.test(""+B)){B=Math.max(parseInt(B)+(r.deltaHeight||0),100)}r=I.theme.renderUI({targetNode:E,width:F,height:B,deltaWidth:J.delta_width,deltaHeight:J.delta_height});I.editorContainer=r.editorContainer}if(document.domain&&location.hostname!=document.domain){n.relaxedDomain=document.domain}o.setStyles(r.sizeContainer||r.editorContainer,{width:F,height:B});if(J.content_css){n.each(g(J.content_css),function(s){I.contentCSS.push(I.documentBaseURI.toAbsolute(s))})}B=(r.iframeHeight||B)+(typeof(B)=="number"?(r.deltaHeight||0):"");if(B<100){B=100}I.iframeHTML=J.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(J.document_base_url!=n.documentBaseURL){I.iframeHTML+='<base href="'+I.documentBaseURI.getURI()+'" />'}if(J.ie7_compat){I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}I.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(A=0;A<I.contentCSS.length;A++){I.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+I.contentCSS[A]+'" />'}I.contentCSS=[];z=J.body_id||"tinymce";if(z.indexOf("=")!=-1){z=I.getParam("body_id","","hash");z=z[I.id]||z}D=J.body_class||"";if(D.indexOf("=")!=-1){D=I.getParam("body_class","","hash");D=D[I.id]||""}I.iframeHTML+='</head><body id="'+z+'" class="mceContentBody '+D+'" onload="window.parent.tinyMCE.get(\''+I.id+"').onLoad.dispatch();\"><br></body></html>";if(n.relaxedDomain&&(b||(n.isOpera&&parseFloat(opera.version())<11))){G='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+I.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}v=o.add(r.iframeContainer,"iframe",{id:I.id+"_ifr",src:G||'javascript:""',frameBorder:"0",allowTransparency:"true",title:J.aria_label,style:{width:"100%",height:B,display:"block"}});I.contentAreaContainer=r.iframeContainer;o.get(r.editorContainer).style.display=I.orgDisplay;o.get(I.id).style.display="none";o.setAttrib(I.id,"aria-hidden",true);if(!n.relaxedDomain||!G){I.setupIframe()}E=v=r=null},setupIframe:function(){var r=this,x=r.settings,y=o.get(r.id),z=r.getDoc(),v,q;if(!b||!n.relaxedDomain){z.open();z.write(r.iframeHTML);z.close();if(n.relaxedDomain){z.domain=n.relaxedDomain}}q=r.getBody();q.disabled=true;if(!x.readonly){q.contentEditable=true}q.disabled=false;r.schema=new n.html.Schema(x);r.dom=new n.dom.DOMUtils(r.getDoc(),{keep_values:true,url_converter:r.convertURL,url_converter_scope:r,hex_colors:x.force_hex_style_colors,class_filter:x.class_filter,update_styles:1,fix_ie_paragraphs:1,schema:r.schema});r.parser=new n.html.DomParser(x,r.schema);if(!r.settings.allow_html_in_named_anchor){r.parser.addAttributeFilter("name",function(s,t){var B=s.length,D,A,C,E;while(B--){E=s[B];if(E.name==="a"&&E.firstChild){C=E.parent;D=E.lastChild;do{A=D.prev;C.insert(D,E);D=A}while(D)}}})}r.parser.addAttributeFilter("src,href,style",function(s,t){var A=s.length,C,E=r.dom,D,B;while(A--){C=s[A];D=C.attr(t);B="data-mce-"+t;if(!C.attributes.map[B]){if(t==="style"){C.attr(B,E.serializeStyle(E.parseStyle(D),C.name))}else{C.attr(B,r.convertURL(D,t,C.name))}}}});r.parser.addNodeFilter("script",function(s,t){var A=s.length,B;while(A--){B=s[A];B.attr("type","mce-"+(B.attr("type")||"text/javascript"))}});r.parser.addNodeFilter("#cdata",function(s,t){var A=s.length,B;while(A--){B=s[A];B.type=8;B.name="#comment";B.value="[CDATA["+B.value+"]]"}});r.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,A){var B=t.length,C,s=r.schema.getNonEmptyElements();while(B--){C=t[B];if(C.isEmpty(s)){C.empty().append(new n.html.Node("br",1)).shortEnded=true}}});r.serializer=new n.dom.Serializer(x,r.dom,r.schema);r.selection=new n.dom.Selection(r.dom,r.getWin(),r.serializer);r.formatter=new n.Formatter(this);r.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"}},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"}},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,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",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"}}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(s){return true},onformat:function(A,s,t){i(t,function(C,B){r.dom.setAttrib(A,B,C)})}},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}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){r.formatter.register(s,{block:s,remove:"all"})});r.formatter.register(r.settings.formats);r.undoManager=new n.UndoManager(r);r.undoManager.onAdd.add(function(t,s){if(t.hasUndo()){return r.onChange.dispatch(r,s,t)}});r.undoManager.onUndo.add(function(t,s){return r.onUndo.dispatch(r,s,t)});r.undoManager.onRedo.add(function(t,s){return r.onRedo.dispatch(r,s,t)});r.forceBlocks=new n.ForceBlocks(r,{forced_root_block:x.forced_root_block});r.editorCommands=new n.EditorCommands(r);r.serializer.onPreProcess.add(function(s,t){return r.onPreProcess.dispatch(r,t,s)});r.serializer.onPostProcess.add(function(s,t){return r.onPostProcess.dispatch(r,t,s)});r.onPreInit.dispatch(r);if(!x.gecko_spellcheck){r.getBody().spellcheck=0}if(!x.readonly){r._addEvents()}r.controlManager.onPostRender.dispatch(r,r.controlManager);r.onPostRender.dispatch(r);r.quirks=new n.util.Quirks(this);if(x.directionality){r.getBody().dir=x.directionality}if(x.nowrap){r.getBody().style.whiteSpace="nowrap"}if(x.handle_node_change_callback){r.onNodeChange.add(function(t,s,A){r.execCallback("handle_node_change_callback",r.id,A,-1,-1,true,r.selection.isCollapsed())})}if(x.save_callback){r.onSaveContent.add(function(s,A){var t=r.execCallback("save_callback",r.id,A.content,r.getBody());if(t){A.content=t}})}if(x.onchange_callback){r.onChange.add(function(t,s){r.execCallback("onchange_callback",r,s)})}if(x.protect){r.onBeforeSetContent.add(function(s,t){if(x.protect){i(x.protect,function(A){t.content=t.content.replace(A,function(B){return"<!--mce:protected "+escape(B)+"-->"})})}})}if(x.convert_newlines_to_brs){r.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(x.preformatted){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(x.verify_css_classes){r.serializer.attribValueFilter=function(C,A){var B,t;if(C=="class"){if(!r.classesRE){t=r.dom.getClasses();if(t.length>0){B="";i(t,function(s){B+=(B?"|":"")+s["class"]});r.classesRE=new RegExp("("+B+")","gi")}}return !r.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(A)||r.classesRE.test(A)?A:""}return A}}if(x.cleanup_callback){r.onBeforeSetContent.add(function(s,t){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)});r.onPreProcess.add(function(s,t){if(t.set){r.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){r.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});r.onPostProcess.add(function(s,t){if(t.set){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=r.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(x.save_callback){r.onGetContent.add(function(s,t){if(t.save){t.content=r.execCallback("save_callback",r.id,t.content,r.getBody())}})}if(x.handle_event_callback){r.onEvent.add(function(s,t,A){if(r.execCallback("handle_event_callback",t,s,A)===false){k.cancel(t)}})}r.onSetContent.add(function(){r.addVisual(r.getBody())});if(x.padd_empty_editor){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>( | |\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function u(s,t){i(s.dom.select("a"),function(B){var A=B.parentNode;if(s.dom.isBlock(A)&&A.lastChild===B){s.dom.add(A,"br",{"data-mce-bogus":1})}})}r.onExecCommand.add(function(s,t){if(t==="CreateLink"){u(s)}});r.onSetContent.add(r.selection.onSetContent.add(u))}r.load({initial:true,format:"html"});r.startContent=r.getContent({format:"raw"});r.undoManager.add();r.initialized=true;r.onInit.dispatch(r);r.execCallback("setupcontent_callback",r.id,r.getBody(),r.getDoc());r.execCallback("init_instance_callback",r);r.focus(true);r.nodeChanged({initial:1});i(r.contentCSS,function(s){r.dom.loadCSS(s)});if(x.auto_focus){setTimeout(function(){var s=n.get(x.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getBody().focus();s.getWin().focus()},100)}y=null},focus:function(v){var z,r=this,u=r.selection,y=r.settings.content_editable,s,q,x=r.getDoc();if(!v){s=u.getRng();if(s.item){q=s.item(0)}r._refreshContentEditable();if(!y){r.getWin().focus()}if(n.isGecko){r.getBody().focus()}if(q&&q.ownerDocument==x){s=x.body.createControlRange();s.addElement(q);s.select()}}if(n.activeEditor!=r){if((z=n.activeEditor)!=null){z.onDeactivate.dispatch(z,r)}r.onActivate.dispatch(r,z)}n._setActive(r)},execCallback:function(v){var q=this,u=q.settings[v],r;if(!u){return}if(q.callbackLookup&&(r=q.callbackLookup[v])){u=r.func;r=r.scope}if(d(u,"string")){r=u.replace(/\.\w+$/,"");r=r?n.resolve(r):0;u=n.resolve(u);q.callbackLookup=q.callbackLookup||{};q.callbackLookup[v]={func:u,scope:r}}return u.apply(r||q,Array.prototype.slice.call(arguments,1))},translate:function(q){var t=this.settings.language||"en",r=n.i18n;if(!q){return""}return r[t+"."+q]||q.replace(/{\#([^}]+)\}/g,function(u,s){return r[t+"."+s]||"{#"+s+"}"})},getLang:function(r,q){return n.i18n[(this.settings.language||"en")+"."+r]||(d(q)?q:"{#"+r+"}")},getParam:function(x,s,q){var t=n.trim,r=d(this.settings[x])?this.settings[x]:s,u;if(q==="hash"){u={};if(d(r,"string")){i(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(y){y=y.split("=");if(y.length>1){u[t(y[0])]=t(y[1])}else{u[t(y[0])]=t(y)}})}else{u=r}return u}return r},nodeChanged:function(u){var q=this,r=q.selection,v=r.getStart()||q.getBody();if(q.initialized){u=u||{};v=b&&v.ownerDocument!=q.getDoc()?q.getBody():v;u.parents=[];q.dom.getParent(v,function(s){if(s.nodeName=="BODY"){return true}u.parents.push(s)});q.onNodeChange.dispatch(q,u?u.controlManager||q.controlManager:q.controlManager,v,r.isCollapsed(),u)}},addButton:function(u,r){var q=this;q.buttons=q.buttons||{};q.buttons[u]=r},addCommand:function(q,s,r){this.execCommands[q]={func:s,scope:r||this}},addQueryStateHandler:function(q,s,r){this.queryStateCommands[q]={func:s,scope:r||this}},addQueryValueHandler:function(q,s,r){this.queryValueCommands[q]={func:s,scope:r||this}},addShortcut:function(s,v,q,u){var r=this,x;if(!r.settings.custom_shortcuts){return false}r.shortcuts=r.shortcuts||{};if(d(q,"string")){x=q;q=function(){r.execCommand(x,false,null)}}if(d(q,"object")){x=q;q=function(){r.execCommand(x[0],x[1],x[2])}}i(g(s),function(t){var y={func:q,scope:u||this,desc:v,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(z){switch(z){case"alt":case"ctrl":case"shift":y[z]=true;break;default:y.charCode=z.charCodeAt(0);y.keyCode=z.toUpperCase().charCodeAt(0)}});r.shortcuts[(y.ctrl?"ctrl":"")+","+(y.alt?"alt":"")+","+(y.shift?"shift":"")+","+y.keyCode]=y});return true},execCommand:function(y,x,A,q){var u=this,v=0,z,r;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(y)&&(!q||!q.skip_focus)){u.focus()}q=f({},q);u.onBeforeExecCommand.dispatch(u,y,x,A,q);if(q.terminate){return false}if(u.execCallback("execcommand_callback",u.id,u.selection.getNode(),y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(z=u.execCommands[y]){r=z.func.call(z.scope,x,A);if(r!==true){u.onExecCommand.dispatch(u,y,x,A,q);return r}}i(u.plugins,function(s){if(s.execCommand&&s.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);v=1;return false}});if(v){return true}if(u.theme&&u.theme.execCommand&&u.theme.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(u.editorCommands.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}u.getDoc().execCommand(y,x,A);u.onExecCommand.dispatch(u,y,x,A,q)},queryCommandState:function(v){var r=this,x,u;if(r._isHidden()){return}if(x=r.queryStateCommands[v]){u=x.func.call(x.scope);if(u!==true){return u}}x=r.editorCommands.queryCommandState(v);if(x!==-1){return x}try{return this.getDoc().queryCommandState(v)}catch(q){}},queryCommandValue:function(x){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryValueCommands[x]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandValue(x);if(d(v)){return v}try{return this.getDoc().queryCommandValue(x)}catch(q){}},show:function(){var q=this;o.show(q.getContainer());o.hide(q.id);q.load()},hide:function(){var q=this,r=q.getDoc();if(b&&r){r.execCommand("SelectAll")}q.save();o.hide(q.getContainer());o.setStyle(q.id,"display",q.orgDisplay)},isHidden:function(){return !o.isHidden(this.id)},setProgressState:function(q,r,s){this.onSetProgressState.dispatch(this,q,r,s);return q},load:function(u){var q=this,s=q.getElement(),r;if(s){u=u||{};u.load=true;r=q.setContent(d(s.value)?s.value:s.innerHTML,u);u.element=s;if(!u.no_events){q.onLoadContent.dispatch(q,u)}u.element=s=null;return r}},save:function(v){var q=this,u=q.getElement(),r,s;if(!u||!q.initialized){return}v=v||{};v.save=true;if(!v.no_events){q.undoManager.typing=false;q.undoManager.add()}v.element=u;r=v.content=q.getContent(v);if(!v.no_events){q.onSaveContent.dispatch(q,v)}r=v.content;if(!/TEXTAREA|INPUT/i.test(u.nodeName)){u.innerHTML=r;if(s=o.getParent(q.id,"form")){i(s.elements,function(t){if(t.name==q.id){t.value=r;return false}})}}else{u.value=r}v.element=u=null;return r},setContent:function(v,t){var s=this,r,q=s.getBody(),u;t=t||{};t.format=t.format||"html";t.set=true;t.content=v;if(!t.no_events){s.onBeforeSetContent.dispatch(s,t)}v=t.content;if(!n.isIE&&(v.length===0||/^\s+$/.test(v))){u=s.settings.forced_root_block;if(u){v="<"+u+'><br data-mce-bogus="1"></'+u+">"}else{v='<br data-mce-bogus="1">'}q.innerHTML=v;s.selection.select(q,true);s.selection.collapse(true);return}if(t.format!=="raw"){v=new n.html.Serializer({},s.schema).serialize(s.parser.parse(v))}t.content=n.trim(v);s.dom.setHTML(q,t.content);if(!t.no_events){s.onSetContent.dispatch(s,t)}s.selection.normalize();return t.content},getContent:function(r){var q=this,s;r=r||{};r.format=r.format||"html";r.get=true;if(!r.no_events){q.onBeforeGetContent.dispatch(q,r)}if(r.format=="raw"){s=q.getBody().innerHTML}else{s=q.serializer.serialize(q.getBody(),r)}r.content=n.trim(s);if(!r.no_events){q.onGetContent.dispatch(q,r)}return r.content},isDirty:function(){var q=this;return n.trim(q.startContent)!=n.trim(q.getContent({format:"raw",no_events:1}))&&!q.isNotDirty},getContainer:function(){var q=this;if(!q.container){q.container=o.get(q.editorContainer||q.id+"_parent")}return q.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return o.get(this.settings.content_element||this.id)},getWin:function(){var q=this,r;if(!q.contentWindow){r=o.get(q.id+"_ifr");if(r){q.contentWindow=r.contentWindow}}return q.contentWindow},getDoc:function(){var r=this,q;if(!r.contentDocument){q=r.getWin();if(q){r.contentDocument=q.document}}return r.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(q,y,x){var r=this,v=r.settings;if(v.urlconverter_callback){return r.execCallback("urlconverter_callback",q,x,true,y)}if(!v.convert_urls||(x&&x.nodeName=="LINK")||q.indexOf("file:")===0){return q}if(v.relative_urls){return r.documentBaseURI.toRelative(q)}q=r.documentBaseURI.toAbsolute(q,v.remove_script_host);return q},addVisual:function(u){var q=this,r=q.settings;u=u||q.getBody();if(!d(q.hasVisual)){q.hasVisual=r.visual}i(q.dom.select("table,a",u),function(t){var s;switch(t.nodeName){case"TABLE":s=q.dom.getAttrib(t,"border");if(!s||s=="0"){if(q.hasVisual){q.dom.addClass(t,r.visual_table_class)}else{q.dom.removeClass(t,r.visual_table_class)}}return;case"A":s=q.dom.getAttrib(t,"name");if(s){if(q.hasVisual){q.dom.addClass(t,"mceItemAnchor")}else{q.dom.removeClass(t,"mceItemAnchor")}}return}});q.onVisualAid.dispatch(q,u,q.hasVisual)},remove:function(){var q=this,r=q.getContainer();q.removed=1;q.hide();q.execCallback("remove_instance_callback",q);q.onRemove.dispatch(q);q.onExecCommand.listeners=[];n.remove(q);o.remove(r)},destroy:function(r){var q=this;if(q.destroyed){return}if(!r){n.removeUnload(q.destroy);tinyMCE.onBeforeUnload.remove(q._beforeUnload);if(q.theme&&q.theme.destroy){q.theme.destroy()}q.controlManager.destroy();q.selection.destroy();q.dom.destroy();if(!q.settings.content_editable){k.clear(q.getWin());k.clear(q.getDoc())}k.clear(q.getBody());k.clear(q.formElement)}if(q.formElement){q.formElement.submit=q.formElement._mceOldSubmit;q.formElement._mceOldSubmit=null}q.contentAreaContainer=q.formElement=q.container=q.settings.content_element=q.bodyElement=q.contentDocument=q.contentWindow=null;if(q.selection){q.selection=q.selection.win=q.selection.dom=q.selection.dom.doc=null}q.destroyed=1},_addEvents:function(){var D=this,u,E=D.settings,r=D.dom,y={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function q(t,F){var s=t.type;if(D.removed){return}if(D.onEvent.dispatch(D,t,F)!==false){D[y[t.fakeType||t.type]].dispatch(D,t,F)}}i(y,function(t,s){switch(s){case"contextmenu":r.bind(D.getDoc(),s,q);break;case"paste":r.bind(D.getBody(),s,function(F){q(F)});break;case"submit":case"reset":r.bind(D.getElement().form||o.getParent(D.id,"form"),s,q);break;default:r.bind(E.content_editable?D.getBody():D.getDoc(),s,q)}});r.bind(E.content_editable?D.getBody():(a?D.getDoc():D.getWin()),"focus",function(s){D.focus(true)});if(n.isGecko){r.bind(D.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("data-mce-src"))){t.src=D.documentBaseURI.toAbsolute(s)}})}if(a){function v(){var G=this,I=G.getDoc(),H=G.settings;if(a&&!H.readonly){G._refreshContentEditable();try{I.execCommand("styleWithCSS",0,false)}catch(F){if(!G._isHidden()){try{I.execCommand("useCSS",0,true)}catch(F){}}}if(!H.table_inline_editing){try{I.execCommand("enableInlineTableEditing",false,false)}catch(F){}}if(!H.object_resizing){try{I.execCommand("enableObjectResizing",false,false)}catch(F){}}}}D.onBeforeExecCommand.add(v);D.onMouseDown.add(v)}D.onMouseUp.add(D.nodeChanged);D.onKeyUp.add(function(s,t){var F=t.keyCode;if((F>=33&&F<=36)||(F>=37&&F<=40)||F==13||F==45||F==46||F==8||(n.isMac&&(F==91||F==93))||t.ctrlKey){D.nodeChanged()}});D.onKeyDown.add(function(t,F){if(F.keyCode!=j.BACKSPACE){return}var s=t.selection.getRng();if(!s.collapsed){return}var H=s.startContainer;var G=s.startOffset;while(H&&H.nodeType&&H.nodeType!=1&&H.parentNode){H=H.parentNode}if(H&&H.parentNode&&H.parentNode.tagName==="BLOCKQUOTE"&&H.parentNode.firstChild==H&&G==0){t.formatter.toggle("blockquote",null,H.parentNode);s.setStart(H,0);s.setEnd(H,0);t.selection.setRng(s);t.selection.collapse(false)}});D.onReset.add(function(){D.setContent(D.startContent,{format:"raw"})});if(E.custom_shortcuts){if(E.custom_undo_redo_keyboard_shortcuts){D.addShortcut("ctrl+z",D.getLang("undo_desc"),"Undo");D.addShortcut("ctrl+y",D.getLang("redo_desc"),"Redo")}D.addShortcut("ctrl+b",D.getLang("bold_desc"),"Bold");D.addShortcut("ctrl+i",D.getLang("italic_desc"),"Italic");D.addShortcut("ctrl+u",D.getLang("underline_desc"),"Underline");for(u=1;u<=6;u++){D.addShortcut("ctrl+"+u,"",["FormatBlock",false,"h"+u])}D.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);D.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);D.addShortcut("ctrl+9","",["FormatBlock",false,"address"]);function x(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(D.shortcuts,function(F){if(n.isMac&&F.ctrl!=t.metaKey){return}else{if(!n.isMac&&F.ctrl!=t.ctrlKey){return}}if(F.alt!=t.altKey){return}if(F.shift!=t.shiftKey){return}if(t.keyCode==F.keyCode||(t.charCode&&t.charCode==F.charCode)){s=F;return false}});return s}D.onKeyUp.add(function(s,t){var F=x(t);if(F){return k.cancel(t)}});D.onKeyPress.add(function(s,t){var F=x(t);if(F){return k.cancel(t)}});D.onKeyDown.add(function(s,t){var F=x(t);if(F){F.func.call(F.scope);return k.cancel(t)}})}if(n.isIE){r.bind(D.getDoc(),"controlselect",function(F){var t=D.resizeInfo,s;F=F.target;if(F.nodeName!=="IMG"){return}if(t){r.unbind(t.node,t.ev,t.cb)}if(!r.hasClass(F,"mceItemNoResize")){ev="resizeend";s=r.bind(F,ev,function(H){var G;H=H.target;if(G=r.getStyle(H,"width")){r.setAttrib(H,"width",G.replace(/[^0-9%]+/g,""));r.setStyle(H,"width","")}if(G=r.getStyle(H,"height")){r.setAttrib(H,"height",G.replace(/[^0-9%]+/g,""));r.setStyle(H,"height","")}})}else{ev="resizestart";s=r.bind(F,"resizestart",k.cancel,k)}t=D.resizeInfo={node:F,ev:ev,cb:s}})}if(n.isOpera){D.onClick.add(function(s,t){k.prevent(t)})}if(E.custom_undo_redo){function A(){D.undoManager.typing=false;D.undoManager.add()}var z=n.isGecko?"blur":"focusout";r.bind(D.getDoc(),z,function(s){if(!D.removed&&D.undoManager.typing){A()}});D.dom.bind(D.dom.getRoot(),"dragend",function(s){A()});D.onKeyUp.add(function(s,F){var t=F.keyCode;if((t>=33&&t<=36)||(t>=37&&t<=40)||t==13||t==45||F.ctrlKey){A()}});D.onKeyDown.add(function(s,G){var F=G.keyCode,t;if(F==8){t=D.getDoc().selection;if(t&&t.createRange&&t.createRange().item){D.undoManager.beforeChange();s.dom.remove(t.createRange().item(0));A();return k.cancel(G)}}if((F>=33&&F<=36)||(F>=37&&F<=40)||F==13||F==45){if(n.isIE&&F==13){D.undoManager.beforeChange()}if(D.undoManager.typing){A()}return}if((F<16||F>20)&&F!=224&&F!=91&&!D.undoManager.typing){D.undoManager.beforeChange();D.undoManager.typing=true;D.undoManager.add()}});D.onMouseDown.add(function(){if(D.undoManager.typing){A()}})}if(n.isGecko){function C(){var s=D.dom.getAttribs(D.selection.getStart().cloneNode(false));return function(){var t=D.selection.getStart();if(t!==D.getBody()){D.dom.setAttrib(t,"style",null);i(s,function(F){t.setAttributeNode(F.cloneNode(true))})}}}function B(){var t=D.selection;return !t.isCollapsed()&&t.getStart()!=t.getEnd()}D.onKeyPress.add(function(s,F){var t;if((F.keyCode==8||F.keyCode==46)&&B()){t=C();D.getDoc().execCommand("delete",false,null);t();return k.cancel(F)}});D.dom.bind(D.getDoc(),"cut",function(t){var s;if(B()){s=C();D.onKeyUp.addToTop(k.cancel,k);setTimeout(function(){s();D.onKeyUp.remove(k.cancel,k)},0)}})}},_refreshContentEditable:function(){var r=this,q,s;if(r._isHidden()){q=r.getBody();s=q.parentNode;s.removeChild(q);s.appendChild(q);q.focus()}},_isHidden:function(){var q;if(!a){return 0}q=this.selection.getSel();return(!q||!q.rangeCount||q.rangeCount==0)}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return b}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return b}function u(v,x){x=x||"exec";d(v,function(z,y){d(y.toLowerCase().split(","),function(A){j[x][A]=z})})}c.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===e){x=b}if(v===e){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:e)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);d("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=c.explode(k.font_size_style_values);v=c.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return b}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new c.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=n.selection.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=c.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){d(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();v.setStart(x,0);v.setEnd(x,x.childNodes.length);n.selection.setRng(v)}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[p.getNode()]:p.getSelectedBlocks();var y=c.map(v,function(A){return !!q.matchNode(A,x)});return c.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(v){return m.getParent(p.getNode(),v=="insertunorderedlist"?"UL":"OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");if(k.custom_undo_redo){u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(f){var d,e=0,h=[],c;function g(){return b.trim(f.getContent({format:"raw",no_events:1}))}return d={typing:false,onAdd:new a(d),onUndo:new a(d),onRedo:new a(d),beforeChange:function(){c=f.selection.getBookmark(2,true)},add:function(m){var j,k=f.settings,l;m=m||{};m.content=g();l=h[e];if(l&&l.content==m.content){return null}if(h[e]){h[e].beforeBookmark=c}if(k.custom_undo_redo_levels){if(h.length>k.custom_undo_redo_levels){for(j=0;j<h.length-1;j++){h[j]=h[j+1]}h.length--;e=h.length}}m.bookmark=f.selection.getBookmark(2,true);if(e<h.length-1){h.length=e+1}h.push(m);e=h.length-1;d.onAdd.dispatch(d,m);f.isNotDirty=0;return m},undo:function(){var k,j;if(d.typing){d.add();d.typing=false}if(e>0){k=h[--e];f.setContent(k.content,{format:"raw"});f.selection.moveToBookmark(k.beforeBookmark);d.onUndo.dispatch(d,k)}return k},redo:function(){var i;if(e<h.length-1){i=h[++e];f.setContent(i.content,{format:"raw"});f.selection.moveToBookmark(i.bookmark);d.onRedo.dispatch(d,i)}return i},clear:function(){h=[];e=0;d.typing=false},hasUndo:function(){return e>0||this.typing},hasRedo:function(){return e<h.length-1&&!this.typing}}}})(tinymce);(function(l){var j=l.dom.Event,c=l.isIE,a=l.isGecko,b=l.isOpera,i=l.each,h=l.extend,d=true,g=false;function k(o){var p,n,m;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(o.nodeName)){if(p){n=o.cloneNode(false);n.appendChild(p);p=n}else{p=m=o.cloneNode(false)}p.removeAttribute("id")}}while(o=o.parentNode);if(p){return{wrapper:p,inner:m}}}function f(n,o){var m=o.ownerDocument.createRange();m.setStart(n.endContainer,n.endOffset);m.setEndAfter(o);return m.cloneContents().textContent.length==0}function e(o,q,m){var n,p;if(q.isEmpty(m)){n=q.getParent(m,"ul,ol");if(!q.getParent(n.parentNode,"ul,ol")){q.split(n,m);p=q.create("p",0,'<br data-mce-bogus="1" />');q.replace(p,m);o.select(p,1)}return g}return d}l.create("tinymce.ForceBlocks",{ForceBlocks:function(m){var n=this,o=m.settings,p;n.editor=m;n.dom=m.dom;p=(o.forced_root_block||"p").toLowerCase();o.element=p.toUpperCase();m.onPreInit.add(n.setup,n)},setup:function(){var n=this,m=n.editor,p=m.settings,u=m.dom,o=m.selection,q=m.schema.getBlockElements();if(p.forced_root_block){function v(){var y=o.getStart(),t=m.getBody(),s,z,D,F,E,x,A,B=-16777215;if(!y||y.nodeType!==1){return}while(y!=t){if(q[y.nodeName]){return}y=y.parentNode}s=o.getRng();if(s.setStart){z=s.startContainer;D=s.startOffset;F=s.endContainer;E=s.endOffset}else{if(s.item){s=m.getDoc().body.createTextRange();s.moveToElementText(s.item(0))}tmpRng=s.duplicate();tmpRng.collapse(true);D=tmpRng.move("character",B)*-1;if(!tmpRng.collapsed){tmpRng=s.duplicate();tmpRng.collapse(false);E=(tmpRng.move("character",B)*-1)-D}}for(y=t.firstChild;y;y){if(y.nodeType===3||(y.nodeType==1&&!q[y.nodeName])){if(!x){x=u.create(p.forced_root_block);y.parentNode.insertBefore(x,y)}A=y;y=y.nextSibling;x.appendChild(A)}else{x=null;y=y.nextSibling}}if(s.setStart){s.setStart(z,D);s.setEnd(F,E);o.setRng(s)}else{try{s=m.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(true);s.moveStart("character",D);if(E>0){s.moveEnd("character",E)}s.select()}catch(C){}}m.nodeChanged()}m.onKeyUp.add(v);m.onClick.add(v)}if(p.force_br_newlines){if(c){m.onKeyPress.add(function(s,t){var x;if(t.keyCode==13&&o.getNode().nodeName!="LI"){o.setContent('<br id="__" /> ',{format:"raw"});x=u.get("__");x.removeAttribute("id");o.select(x);o.collapse();return j.cancel(t)}})}}if(p.force_p_newlines){if(!c){m.onKeyPress.add(function(s,t){if(t.keyCode==13&&!t.shiftKey&&!n.insertPara(t)){j.cancel(t)}})}else{l.addUnload(function(){n._previousFormats=0});m.onKeyPress.add(function(s,t){n._previousFormats=0;if(t.keyCode==13&&!t.shiftKey&&s.selection.isCollapsed()&&p.keep_styles){n._previousFormats=k(s.selection.getStart())}});m.onKeyUp.add(function(t,y){if(y.keyCode==13&&!y.shiftKey){var x=t.selection.getStart(),s=n._previousFormats;if(!x.hasChildNodes()&&s){x=u.getParent(x,u.isBlock);if(x&&x.nodeName!="LI"){x.innerHTML="";if(n._previousFormats){x.appendChild(s.wrapper);s.inner.innerHTML="\uFEFF"}else{x.innerHTML="\uFEFF"}o.select(x,1);o.collapse(true);t.getDoc().execCommand("Delete",false,null);n._previousFormats=0}}}})}if(a){m.onKeyDown.add(function(s,t){if((t.keyCode==8||t.keyCode==46)&&!t.shiftKey){n.backspaceDelete(t,t.keyCode==8)}})}}if(l.isWebKit){function r(t){var s=o.getRng(),x,A=u.create("div",null," "),z,y=u.getViewPort(t.getWin()).h;s.insertNode(x=u.create("br"));s.setStartAfter(x);s.setEndAfter(x);o.setRng(s);if(o.getSel().focusNode==x.previousSibling){o.select(u.insertAfter(u.doc.createTextNode("\u00a0"),x));o.collapse(d)}u.insertAfter(A,x);z=u.getPos(A).y;u.remove(A);if(z>y){t.getWin().scrollTo(0,z)}}m.onKeyPress.add(function(s,t){if(t.keyCode==13&&(t.shiftKey||(p.force_br_newlines&&!u.getParent(o.getNode(),"h1,h2,h3,h4,h5,h6,ol,ul")))){r(s);j.cancel(t)}})}if(c){if(p.element!="P"){m.onKeyPress.add(function(s,t){n.lastElm=o.getNode().nodeName});m.onKeyUp.add(function(t,x){var z,y=o.getNode(),s=t.getBody();if(s.childNodes.length===1&&y.nodeName=="P"){y=u.rename(y,p.element);o.select(y);o.collapse();t.nodeChanged()}else{if(x.keyCode==13&&!x.shiftKey&&n.lastElm!="P"){z=u.getParent(y,"p");if(z){u.rename(z,p.element);t.nodeChanged()}}}})}}},getParentBlock:function(o){var m=this.dom;return m.getParent(o,m.isBlock)},insertPara:function(Q){var E=this,v=E.editor,M=v.dom,R=v.getDoc(),V=v.settings,F=v.selection.getSel(),G=F.getRangeAt(0),U=R.body;var J,K,H,O,N,q,o,u,z,m,C,T,p,x,I,L=M.getViewPort(v.getWin()),B,D,A;v.undoManager.beforeChange();J=R.createRange();J.setStart(F.anchorNode,F.anchorOffset);J.collapse(d);K=R.createRange();K.setStart(F.focusNode,F.focusOffset);K.collapse(d);H=J.compareBoundaryPoints(J.START_TO_END,K)<0;O=H?F.anchorNode:F.focusNode;N=H?F.anchorOffset:F.focusOffset;q=H?F.focusNode:F.anchorNode;o=H?F.focusOffset:F.anchorOffset;if(O===q&&/^(TD|TH)$/.test(O.nodeName)){if(O.firstChild.nodeName=="BR"){M.remove(O.firstChild)}if(O.childNodes.length==0){v.dom.add(O,V.element,null,"<br />");T=v.dom.add(O,V.element,null,"<br />")}else{I=O.innerHTML;O.innerHTML="";v.dom.add(O,V.element,null,I);T=v.dom.add(O,V.element,null,"<br />")}G=R.createRange();G.selectNodeContents(T);G.collapse(1);v.selection.setRng(G);return g}if(O==U&&q==U&&U.firstChild&&v.dom.isBlock(U.firstChild)){O=q=O.firstChild;N=o=0;J=R.createRange();J.setStart(O,0);K=R.createRange();K.setStart(q,0)}if(!R.body.hasChildNodes()){R.body.appendChild(M.create("br"))}O=O.nodeName=="HTML"?R.body:O;O=O.nodeName=="BODY"?O.firstChild:O;q=q.nodeName=="HTML"?R.body:q;q=q.nodeName=="BODY"?q.firstChild:q;u=E.getParentBlock(O);z=E.getParentBlock(q);m=u?u.nodeName:V.element;if(I=E.dom.getParent(u,"li,pre")){if(I.nodeName=="LI"){return e(v.selection,E.dom,I)}return d}if(u&&(u.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;u=null}if(z&&(z.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;z=null}if(/(TD|TABLE|TH|CAPTION)/.test(m)||(u&&m=="DIV"&&/left|right/gi.test(M.getStyle(u,"float",1)))){m=V.element;u=z=null}C=(u&&u.nodeName==m)?u.cloneNode(0):v.dom.create(m);T=(z&&z.nodeName==m)?z.cloneNode(0):v.dom.create(m);T.removeAttribute("id");if(/^(H[1-6])$/.test(m)&&f(G,u)){T=v.dom.create(V.element)}I=p=O;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}p=I}while((I=I.previousSibling?I.previousSibling:I.parentNode));I=x=q;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}x=I}while((I=I.nextSibling?I.nextSibling:I.parentNode));if(p.nodeName==m){J.setStart(p,0)}else{J.setStartBefore(p)}J.setEnd(O,N);C.appendChild(J.cloneContents()||R.createTextNode(""));try{K.setEndAfter(x)}catch(P){}K.setStart(q,o);T.appendChild(K.cloneContents()||R.createTextNode(""));G=R.createRange();if(!p.previousSibling&&p.parentNode.nodeName==m){G.setStartBefore(p.parentNode)}else{if(J.startContainer.nodeName==m&&J.startOffset==0){G.setStartBefore(J.startContainer)}else{G.setStart(J.startContainer,J.startOffset)}}if(!x.nextSibling&&x.parentNode.nodeName==m){G.setEndAfter(x.parentNode)}else{G.setEnd(K.endContainer,K.endOffset)}G.deleteContents();if(b){v.getWin().scrollTo(0,L.y)}if(C.firstChild&&C.firstChild.nodeName==m){C.innerHTML=C.firstChild.innerHTML}if(T.firstChild&&T.firstChild.nodeName==m){T.innerHTML=T.firstChild.innerHTML}function S(y,s){var r=[],X,W,t;y.innerHTML="";if(V.keep_styles){W=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(W.nodeName)){X=W.cloneNode(g);M.setAttrib(X,"id","");r.push(X)}}while(W=W.parentNode)}if(r.length>0){for(t=r.length-1,X=y;t>=0;t--){X=X.appendChild(r[t])}r[0].innerHTML=b?"\u00a0":"<br />";return r[0]}else{y.innerHTML=b?"\u00a0":"<br />"}}if(M.isEmpty(C)){S(C,O)}if(M.isEmpty(T)){A=S(T,q)}if(b&&parseFloat(opera.version())<9.5){G.insertNode(C);G.insertNode(T)}else{G.insertNode(T);G.insertNode(C)}T.normalize();C.normalize();v.selection.select(T,true);v.selection.collapse(true);B=v.dom.getPos(T).y;if(B<L.y||B+25>L.y+L.h){v.getWin().scrollTo(0,B<L.y?B:B-L.h+25)}v.undoManager.add();return g},backspaceDelete:function(u,B){var C=this,s=C.editor,y=s.getBody(),q=s.dom,p,v=s.selection,o=v.getRng(),x=o.startContainer,p,z,A,m;if(!B&&o.collapsed&&x.nodeType==1&&o.startOffset==x.childNodes.length){m=new l.dom.TreeWalker(x.lastChild,x);for(p=x.lastChild;p;p=m.prev()){if(p.nodeType==3){o.setStart(p,p.nodeValue.length);o.collapse(true);v.setRng(o);return}}}if(x&&s.dom.isBlock(x)&&!/^(TD|TH)$/.test(x.nodeName)&&B){if(x.childNodes.length==0||(x.childNodes.length==1&&x.firstChild.nodeName=="BR")){p=x;while((p=p.previousSibling)&&!s.dom.isBlock(p)){}if(p){if(x!=y.firstChild){z=s.dom.doc.createTreeWalker(p,NodeFilter.SHOW_TEXT,null,g);while(A=z.nextNode()){p=A}o=s.getDoc().createRange();o.setStart(p,p.nodeValue?p.nodeValue.length:0);o.setEnd(p,p.nodeValue?p.nodeValue.length:0);v.setRng(o);s.dom.remove(x)}return j.cancel(u)}}}}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(V){var M={},P=a.each,c=V.dom,q=V.selection,t=a.dom.TreeWalker,K=new a.dom.RangeUtils(c),d=V.schema.isValidChild,F=c.isBlock,l=V.settings.forced_root_block,s=c.nodeIndex,E="\uFEFF",e=/^(src|href|style)$/,S=false,B=true,p;function z(W){return W instanceof Array}function m(X,W){return c.getParents(X,W,c.getRoot())}function b(W){return W.nodeType===1&&W.id==="_mce_caret"}function R(W){return W?M[W]:M}function k(W,X){if(W){if(typeof(W)!=="string"){P(W,function(Z,Y){k(Y,Z)})}else{X=X.length?X:[X];P(X,function(Y){if(Y.deep===p){Y.deep=!Y.selector}if(Y.split===p){Y.split=!Y.selector||Y.inline}if(Y.remove===p&&Y.selector&&!Y.inline){Y.remove="none"}if(Y.selector&&Y.inline){Y.mixed=true;Y.block_expand=true}if(typeof(Y.classes)==="string"){Y.classes=Y.classes.split(/\s+/)}});M[W]=X}}}var i=function(X){var W;V.dom.getParent(X,function(Y){W=V.dom.getStyle(Y,"text-decoration");return W&&W!=="none"});return W};var I=function(W){var X;if(W.nodeType===1&&W.parentNode&&W.parentNode.nodeType===1){X=i(W.parentNode);if(V.dom.getStyle(W,"color")&&X){V.dom.setStyle(W,"text-decoration",X)}else{if(V.dom.getStyle(W,"textdecoration")===X){V.dom.setStyle(W,"text-decoration",null)}}}};function T(Z,ag,ab){var ac=R(Z),ah=ac[0],af,X,ae,ad=q.isCollapsed();function W(al,ak){ak=ak||ah;if(al){if(ak.onformat){ak.onformat(al,ak,ag,ab)}P(ak.styles,function(an,am){c.setStyle(al,am,r(an,ag))});P(ak.attributes,function(an,am){c.setAttrib(al,am,r(an,ag))});P(ak.classes,function(am){am=r(am,ag);if(!c.hasClass(al,am)){c.addClass(al,am)}})}}function aa(){function am(at,aq){var ar=new t(aq);for(ab=ar.current();ab;ab=ar.prev()){if(ab.childNodes.length>1||ab==at){return ab}}}var al=V.selection.getRng();var ap=al.startContainer;var ak=al.endContainer;if(ap!=ak&&al.endOffset==0){var ao=am(ap,ak);var an=ao.nodeType==3?ao.length:ao.childNodes.length;al.setEnd(ao,an)}return al}function Y(an,at,aq,ap,al){var ak=[],am=-1,ar,av=-1,ao=-1,au;P(an.childNodes,function(ax,aw){if(ax.nodeName==="UL"||ax.nodeName==="OL"){am=aw;ar=ax;return false}});P(an.childNodes,function(ax,aw){if(ax.nodeName==="SPAN"&&c.getAttrib(ax,"data-mce-type")=="bookmark"){if(ax.id==at.id+"_start"){av=aw}else{if(ax.id==at.id+"_end"){ao=aw}}}});if(am<=0||(av<am&&ao>am)){P(a.grep(an.childNodes),al);return 0}else{au=aq.cloneNode(S);P(a.grep(an.childNodes),function(ax,aw){if((av<am&&aw<am)||(av>am&&aw>am)){ak.push(ax);ax.parentNode.removeChild(ax)}});if(av<am){an.insertBefore(au,ar)}else{if(av>am){an.insertBefore(au,ar.nextSibling)}}ap.push(au);P(ak,function(aw){au.appendChild(aw)});return au}}function ai(al,an,ap){var ak=[],ao,am;ao=ah.inline||ah.block;am=c.create(ao);W(am);K.walk(al,function(aq){var ar;function at(au){var ax=au.nodeName.toLowerCase(),aw=au.parentNode.nodeName.toLowerCase(),av;if(g(ax,"br")){ar=0;if(ah.block){c.remove(au)}return}if(ah.wrapper&&x(au,Z,ag)){ar=0;return}if(ah.block&&!ah.wrapper&&G(ax)){au=c.rename(au,ao);W(au);ak.push(au);ar=0;return}if(ah.selector){P(ac,function(ay){if("collapsed" in ay&&ay.collapsed!==ad){return}if(c.is(au,ay.selector)&&!b(au)){W(au,ay);av=true}});if(!ah.inline||av){ar=0;return}}if(d(ao,ax)&&d(aw,ao)&&!(!ap&&au.nodeType===3&&au.nodeValue.length===1&&au.nodeValue.charCodeAt(0)===65279)&&!b(au)){if(!ar){ar=am.cloneNode(S);au.parentNode.insertBefore(ar,au);ak.push(ar)}ar.appendChild(au)}else{if(ax=="li"&&an){ar=Y(au,an,am,ak,at)}else{ar=0;P(a.grep(au.childNodes),at);ar=0}}}P(aq,at)});if(ah.wrap_links===false){P(ak,function(aq){function ar(aw){var av,au,at;if(aw.nodeName==="A"){au=am.cloneNode(S);ak.push(au);at=a.grep(aw.childNodes);for(av=0;av<at.length;av++){au.appendChild(at[av])}aw.appendChild(au)}P(a.grep(aw.childNodes),ar)}ar(aq)})}P(ak,function(at){var aq;function au(aw){var av=0;P(aw.childNodes,function(ax){if(!f(ax)&&!H(ax)){av++}});return av}function ar(av){var ax,aw;P(av.childNodes,function(ay){if(ay.nodeType==1&&!H(ay)&&!b(ay)){ax=ay;return S}});if(ax&&h(ax,ah)){aw=ax.cloneNode(S);W(aw);c.replace(aw,av,B);c.remove(ax,1)}return aw||av}aq=au(at);if((ak.length>1||!F(at))&&aq===0){c.remove(at,1);return}if(ah.inline||ah.wrapper){if(!ah.exact&&aq===1){at=ar(at)}P(ac,function(av){P(c.select(av.inline,at),function(ax){var aw;if(av.wrap_links===false){aw=ax.parentNode;do{if(aw.nodeName==="A"){return}}while(aw=aw.parentNode)}U(av,ag,ax,av.exact?ax:null)})});if(x(at.parentNode,Z,ag)){c.remove(at,1);at=0;return B}if(ah.merge_with_parents){c.getParent(at.parentNode,function(av){if(x(av,Z,ag)){c.remove(at,1);at=0;return B}})}if(at&&ah.merge_siblings!==false){at=u(C(at),at);at=u(at,C(at,B))}}})}if(ah){if(ab){if(ab.nodeType){X=c.createRng();X.setStartBefore(ab);X.setEndAfter(ab);ai(o(X,ac),null,true)}else{ai(ab,null,true)}}else{if(!ad||!ah.inline||c.select("td.mceSelected,th.mceSelected").length){var aj=V.selection.getNode();V.selection.setRng(aa());af=q.getBookmark();ai(o(q.getRng(B),ac),af);if(ah.styles&&(ah.styles.color||ah.styles.textDecoration)){a.walk(aj,I,"childNodes");I(aj)}q.moveToBookmark(af);N(q.getRng(B));V.nodeChanged()}else{Q("apply",Z,ag)}}}}function A(Y,ag,aa){var ab=R(Y),ai=ab[0],af,ae,X;function Z(an){var am,al,ak;am=a.grep(an.childNodes);for(al=0,ak=ab.length;al<ak;al++){if(U(ab[al],ag,an,an)){break}}if(ai.deep){for(al=0,ak=am.length;al<ak;al++){Z(am[al])}}}function ac(ak){var al;P(m(ak.parentNode).reverse(),function(am){var an;if(!al&&am.id!="_start"&&am.id!="_end"){an=x(am,Y,ag);if(an&&an.split!==false){al=am}}});return al}function W(an,ak,ap,at){var au,ar,aq,am,ao,al;if(an){al=an.parentNode;for(au=ak.parentNode;au&&au!=al;au=au.parentNode){ar=au.cloneNode(S);for(ao=0;ao<ab.length;ao++){if(U(ab[ao],ag,ar,ar)){ar=0;break}}if(ar){if(aq){ar.appendChild(aq)}if(!am){am=ar}aq=ar}}if(at&&(!ai.mixed||!F(an))){ak=c.split(an,ak)}if(aq){ap.parentNode.insertBefore(aq,ap);am.appendChild(ap)}}return ak}function ah(ak){return W(ac(ak),ak,ak,true)}function ad(am){var al=c.get(am?"_start":"_end"),ak=al[am?"firstChild":"lastChild"];if(H(ak)){ak=ak[am?"firstChild":"lastChild"]}c.remove(al,true);return ak}function aj(ak){var al,am;ak=o(ak,ab,B);if(ai.split){al=J(ak,B);am=J(ak);if(al!=am){al=O(al,"span",{id:"_start","data-mce-type":"bookmark"});am=O(am,"span",{id:"_end","data-mce-type":"bookmark"});ah(al);ah(am);al=ad(B);am=ad()}else{al=am=ah(al)}ak.startContainer=al.parentNode;ak.startOffset=s(al);ak.endContainer=am.parentNode;ak.endOffset=s(am)+1}K.walk(ak,function(an){P(an,function(ao){Z(ao);if(ao.nodeType===1&&V.dom.getStyle(ao,"text-decoration")==="underline"&&ao.parentNode&&i(ao.parentNode)==="underline"){U({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,ao)}})})}if(aa){if(aa.nodeType){X=c.createRng();X.setStartBefore(aa);X.setEndAfter(aa);aj(X)}else{aj(aa)}return}if(!q.isCollapsed()||!ai.inline||c.select("td.mceSelected,th.mceSelected").length){af=q.getBookmark();aj(q.getRng(B));q.moveToBookmark(af);if(ai.inline&&j(Y,ag,q.getStart())){N(q.getRng(true))}V.nodeChanged()}else{Q("remove",Y,ag)}if(a.isWebKit){V.execCommand("mceCleanup")}}function D(X,Z,Y){var W=R(X);if(j(X,Z,Y)&&(!("toggle" in W[0])||W[0]["toggle"])){A(X,Z,Y)}else{T(X,Z,Y)}}function x(X,W,ac,aa){var Y=R(W),ad,ab,Z;function ae(ai,ak,al){var ah,aj,af=ak[al],ag;if(ak.onmatch){return ak.onmatch(ai,ak,al)}if(af){if(af.length===p){for(ah in af){if(af.hasOwnProperty(ah)){if(al==="attributes"){aj=c.getAttrib(ai,ah)}else{aj=L(ai,ah)}if(aa&&!aj&&!ak.exact){return}if((!aa||ak.exact)&&!g(aj,r(af[ah],ac))){return}}}}else{for(ag=0;ag<af.length;ag++){if(al==="attributes"?c.getAttrib(ai,af[ag]):L(ai,af[ag])){return ak}}}}return ak}if(Y&&X){for(ab=0;ab<Y.length;ab++){ad=Y[ab];if(h(X,ad)&&ae(X,ad,"attributes")&&ae(X,ad,"styles")){if(Z=ad.classes){for(ab=0;ab<Z.length;ab++){if(!c.hasClass(X,Z[ab])){return}}}return ad}}}}function j(Y,aa,Z){var X;function W(ab){ab=c.getParent(ab,function(ac){return !!x(ac,Y,aa,true)});return x(ab,Y,aa)}if(Z){return W(Z)}Z=q.getNode();if(W(Z)){return B}X=q.getStart();if(X!=Z){if(W(X)){return B}}return S}function v(ad,ac){var aa,ab=[],Z={},Y,X,W;aa=q.getStart();c.getParent(aa,function(ag){var af,ae;for(af=0;af<ad.length;af++){ae=ad[af];if(!Z[ae]&&x(ag,ae,ac)){Z[ae]=true;ab.push(ae)}}});return ab}function y(aa){var ac=R(aa),Z,Y,ab,X,W;if(ac){Z=q.getStart();Y=m(Z);for(X=ac.length-1;X>=0;X--){W=ac[X].selector;if(!W){return B}for(ab=Y.length-1;ab>=0;ab--){if(c.is(Y[ab],W)){return B}}}}return S}a.extend(this,{get:R,register:k,apply:T,remove:A,toggle:D,match:j,matchAll:v,matchNode:x,canApply:y});function h(W,X){if(g(W,X.inline)){return B}if(g(W,X.block)){return B}if(X.selector){return c.is(W,X.selector)}}function g(X,W){X=X||"";W=W||"";X=""+(X.nodeName||X);W=""+(W.nodeName||W);return X.toLowerCase()==W.toLowerCase()}function L(X,W){var Y=c.getStyle(X,W);if(W=="color"||W=="backgroundColor"){Y=c.toHex(Y)}if(W=="fontWeight"&&Y==700){Y="bold"}return""+Y}function r(W,X){if(typeof(W)!="string"){W=W(X)}else{if(X){W=W.replace(/%(\w+)/g,function(Z,Y){return X[Y]||Z})}}return W}function f(W){return W&&W.nodeType===3&&/^([\t \r\n]+|)$/.test(W.nodeValue)}function O(Y,X,W){var Z=c.create(X,W);Y.parentNode.insertBefore(Z,Y);Z.appendChild(Y);return Z}function o(W,ai,Z){var Y=W.startContainer,ad=W.startOffset,al=W.endContainer,af=W.endOffset,ak,ah,ac,ag;function aj(ar){var am,ap,aq,ao,an;am=ap=ar?Y:al;an=ar?"previousSibling":"nextSibling";root=c.getRoot();if(am.nodeType==3&&!f(am)){if(ar?ad>0:af<am.nodeValue.length){return am}}for(;;){if(!ai[0].block_expand&&F(ap)){return ap}for(ao=ap[an];ao;ao=ao[an]){if(!H(ao)&&!f(ao)){return ap}}if(ap.parentNode==root){am=ap;break}ap=ap.parentNode}return am}function ab(am,an){if(an===p){an=am.nodeType===3?am.length:am.childNodes.length}while(am&&am.hasChildNodes()){am=am.childNodes[an];if(am){an=am.nodeType===3?am.length:am.childNodes.length}}return{node:am,offset:an}}if(Y.nodeType==1&&Y.hasChildNodes()){ah=Y.childNodes.length-1;Y=Y.childNodes[ad>ah?ah:ad];if(Y.nodeType==3){ad=0}}if(al.nodeType==1&&al.hasChildNodes()){ah=al.childNodes.length-1;al=al.childNodes[af>ah?ah:af-1];if(al.nodeType==3){af=al.nodeValue.length}}if(H(Y.parentNode)||H(Y)){Y=H(Y)?Y:Y.parentNode;Y=Y.nextSibling||Y;if(Y.nodeType==3){ad=0}}if(H(al.parentNode)||H(al)){al=H(al)?al:al.parentNode;al=al.previousSibling||al;if(al.nodeType==3){af=al.length}}if(ai[0].inline){if(W.collapsed){function ae(an,ar,au){var aq,ao,at,am;function ap(aw,ay){var az,av,ax=aw.nodeValue;if(typeof(ay)=="undefined"){ay=au?ax.length:0}if(au){az=ax.lastIndexOf(" ",ay);av=ax.lastIndexOf("\u00a0",ay);az=az>av?az:av;if(az!==-1&&!Z){az++}}else{az=ax.indexOf(" ",ay);av=ax.indexOf("\u00a0",ay);az=az!==-1&&(av===-1||az<av)?az:av}return az}if(an.nodeType===3){at=ap(an,ar);if(at!==-1){return{container:an,offset:at}}am=an}aq=new t(an,c.getParent(an,F)||V.getBody());while(ao=aq[au?"prev":"next"]()){if(ao.nodeType===3){am=ao;at=ap(ao);if(at!==-1){return{container:ao,offset:at}}}else{if(F(ao)){break}}}if(am){if(au){ar=0}else{ar=am.length}return{container:am,offset:ar}}}ag=ae(Y,ad,true);if(ag){Y=ag.container;ad=ag.offset}ag=ae(al,af);if(ag){al=ag.container;af=ag.offset}}ac=ab(al,af);if(ac.node){while(ac.node&&ac.offset===0&&ac.node.previousSibling){ac=ab(ac.node.previousSibling)}if(ac.node&&ac.offset>0&&ac.node.nodeType===3&&ac.node.nodeValue.charAt(ac.offset-1)===" "){if(ac.offset>1){al=ac.node;al.splitText(ac.offset-1)}else{if(ac.node.previousSibling){}}}}}if(ai[0].inline||ai[0].block_expand){if(!ai[0].inline||(Y.nodeType!=3||ad===0)){Y=aj(true)}if(!ai[0].inline||(al.nodeType!=3||af===al.nodeValue.length)){al=aj()}}if(ai[0].selector&&ai[0].expand!==S&&!ai[0].inline){function aa(an,am){var ao,ap,ar,aq;if(an.nodeType==3&&an.nodeValue.length==0&&an[am]){an=an[am]}ao=m(an);for(ap=0;ap<ao.length;ap++){for(ar=0;ar<ai.length;ar++){aq=ai[ar];if("collapsed" in aq&&aq.collapsed!==W.collapsed){continue}if(c.is(ao[ap],aq.selector)){return ao[ap]}}}return an}Y=aa(Y,"previousSibling");al=aa(al,"nextSibling")}if(ai[0].block||ai[0].selector){function X(an,am,ap){var ao;if(!ai[0].wrapper){ao=c.getParent(an,ai[0].block)}if(!ao){ao=c.getParent(an.nodeType==3?an.parentNode:an,F)}if(ao&&ai[0].wrapper){ao=m(ao,"ul,ol").reverse()[0]||ao}if(!ao){ao=an;while(ao[am]&&!F(ao[am])){ao=ao[am];if(g(ao,"br")){break}}}return ao||an}Y=X(Y,"previousSibling");al=X(al,"nextSibling");if(ai[0].block){if(!F(Y)){Y=aj(true)}if(!F(al)){al=aj()}}}if(Y.nodeType==1){ad=s(Y);Y=Y.parentNode}if(al.nodeType==1){af=s(al)+1;al=al.parentNode}return{startContainer:Y,startOffset:ad,endContainer:al,endOffset:af}}function U(ac,ab,Z,W){var Y,X,aa;if(!h(Z,ac)){return S}if(ac.remove!="all"){P(ac.styles,function(ae,ad){ae=r(ae,ab);if(typeof(ad)==="number"){ad=ae;W=0}if(!W||g(L(W,ad),ae)){c.setStyle(Z,ad,"")}aa=1});if(aa&&c.getAttrib(Z,"style")==""){Z.removeAttribute("style");Z.removeAttribute("data-mce-style")}P(ac.attributes,function(af,ad){var ae;af=r(af,ab);if(typeof(ad)==="number"){ad=af;W=0}if(!W||g(c.getAttrib(W,ad),af)){if(ad=="class"){af=c.getAttrib(Z,ad);if(af){ae="";P(af.split(/\s+/),function(ag){if(/mce\w+/.test(ag)){ae+=(ae?" ":"")+ag}});if(ae){c.setAttrib(Z,ad,ae);return}}}if(ad=="class"){Z.removeAttribute("className")}if(e.test(ad)){Z.removeAttribute("data-mce-"+ad)}Z.removeAttribute(ad)}});P(ac.classes,function(ad){ad=r(ad,ab);if(!W||c.hasClass(W,ad)){c.removeClass(Z,ad)}});X=c.getAttribs(Z);for(Y=0;Y<X.length;Y++){if(X[Y].nodeName.indexOf("_")!==0){return S}}}if(ac.remove!="none"){n(Z,ac);return B}}function n(Y,Z){var W=Y.parentNode,X;if(Z.block){if(!l){function aa(ac,ab,ad){ac=C(ac,ab,ad);return !ac||(ac.nodeName=="BR"||F(ac))}if(F(Y)&&!F(W)){if(!aa(Y,S)&&!aa(Y.firstChild,B,1)){Y.insertBefore(c.create("br"),Y.firstChild)}if(!aa(Y,B)&&!aa(Y.lastChild,S,1)){Y.appendChild(c.create("br"))}}}else{if(W==c.getRoot()){if(!Z.list_block||!g(Y,Z.list_block)){P(a.grep(Y.childNodes),function(ab){if(d(l,ab.nodeName.toLowerCase())){if(!X){X=O(ab,l)}else{X.appendChild(ab)}}else{X=0}})}}}}if(Z.selector&&Z.inline&&!g(Z.inline,Y)){return}c.remove(Y,1)}function C(X,W,Y){if(X){W=W?"nextSibling":"previousSibling";for(X=Y?X:X[W];X;X=X[W]){if(X.nodeType==1||!f(X)){return X}}}}function H(W){return W&&W.nodeType==1&&W.getAttribute("data-mce-type")=="bookmark"}function u(aa,Z){var W,Y,X;function ac(af,ae){if(af.nodeName!=ae.nodeName){return S}function ad(ah){var ai={};P(c.getAttribs(ah),function(aj){var ak=aj.nodeName.toLowerCase();if(ak.indexOf("_")!==0&&ak!=="style"){ai[ak]=c.getAttrib(ah,ak)}});return ai}function ag(ak,aj){var ai,ah;for(ah in ak){if(ak.hasOwnProperty(ah)){ai=aj[ah];if(ai===p){return S}if(ak[ah]!=ai){return S}delete aj[ah]}}for(ah in aj){if(aj.hasOwnProperty(ah)){return S}}return B}if(!ag(ad(af),ad(ae))){return S}if(!ag(c.parseStyle(c.getAttrib(af,"style")),c.parseStyle(c.getAttrib(ae,"style")))){return S}return B}if(aa&&Z){function ab(ae,ad){for(Y=ae;Y;Y=Y[ad]){if(Y.nodeType==3&&Y.nodeValue.length!==0){return ae}if(Y.nodeType==1&&!H(Y)){return Y}}return ae}aa=ab(aa,"previousSibling");Z=ab(Z,"nextSibling");if(ac(aa,Z)){for(Y=aa.nextSibling;Y&&Y!=Z;){X=Y;Y=Y.nextSibling;aa.appendChild(X)}c.remove(Z);P(a.grep(Z.childNodes),function(ad){aa.appendChild(ad)});return aa}}return Z}function G(W){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(W)}function J(X,ab){var W,aa,Y,Z;W=X[ab?"startContainer":"endContainer"];aa=X[ab?"startOffset":"endOffset"];if(W.nodeType==1){Y=W.childNodes.length-1;if(!ab&&aa){aa--}W=W.childNodes[aa>Y?Y:aa]}if(W.nodeType===3&&ab&&aa>=W.nodeValue.length){W=new t(W,V.getBody()).next()||W}if(W.nodeType===3&&!ab&&aa==0){W=new t(W,V.getBody()).prev()||W}return W}function Q(af,W,ad){var ai,ag="_mce_caret",X=V.settings.caret_debug;ai=a.isGecko?"\u200B":E;function Y(ak){var aj=c.create("span",{id:ag,"data-mce-bogus":true,style:X?"color:red":""});if(ak){aj.appendChild(V.getDoc().createTextNode(ai))}return aj}function ae(ak,aj){while(ak){if((ak.nodeType===3&&ak.nodeValue!==ai)||ak.childNodes.length>1){return false}if(aj&&ak.nodeType===1){aj.push(ak)}ak=ak.firstChild}return true}function ab(aj){while(aj){if(aj.id===ag){return aj}aj=aj.parentNode}}function aa(aj){var ak;if(aj){ak=new t(aj,aj);for(aj=ak.current();aj;aj=ak.next()){if(aj.nodeType===3){return aj}}}}function Z(al,ak){var am,aj;if(!al){al=ab(q.getStart());if(!al){while(al=c.get(ag)){Z(al,false)}}}else{aj=q.getRng(true);if(ae(al)){if(ak!==false){aj.setStartBefore(al);aj.setEndBefore(al)}c.remove(al)}else{am=aa(al);if(am.nodeValue.charAt(0)===E){am=am.deleteData(0,1)}c.remove(al,1)}q.setRng(aj)}}function ac(){var al,aj,ap,ao,am,ak,an;al=q.getRng(true);ao=al.startOffset;ak=al.startContainer;an=ak.nodeValue;aj=ab(q.getStart());if(aj){ap=aa(aj)}if(an&&ao>0&&ao<an.length&&/\w/.test(an.charAt(ao))&&/\w/.test(an.charAt(ao-1))){am=q.getBookmark();al.collapse(true);al=o(al,R(W));al=K.split(al);T(W,ad,al);q.moveToBookmark(am)}else{if(!aj||ap.nodeValue!==ai){aj=Y(true);ap=aj.firstChild;al.insertNode(aj);ao=1;T(W,ad,aj)}else{T(W,ad,aj)}q.setCursorLocation(ap,ao)}}function ah(){var aj=q.getRng(true),ak,am,ap,ao,al,at,ar=[],an,aq;ak=aj.startContainer;am=aj.startOffset;al=ak;if(ak.nodeType==3){if(am!=ak.nodeValue.length||ak.nodeValue===ai){ao=true}al=al.parentNode}while(al){if(x(al,W,ad)){at=al;break}if(al.nextSibling){ao=true}ar.push(al);al=al.parentNode}if(!at){return}if(ao){ap=q.getBookmark();aj.collapse(true);aj=o(aj,R(W),true);aj=K.split(aj);A(W,ad,aj);q.moveToBookmark(ap)}else{aq=Y();al=aq;for(an=ar.length-1;an>=0;an--){al.appendChild(ar[an].cloneNode(false));al=al.firstChild}al.appendChild(c.doc.createTextNode(ai));al=al.firstChild;c.insertAfter(aq,at);q.setCursorLocation(al,1)}}if(!self._hasCaretEvents){V.onBeforeGetContent.addToTop(function(){var aj=[],ak;if(ae(ab(q.getStart()),aj)){ak=aj.length;while(ak--){c.setAttrib(aj[ak],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(aj){V[aj].addToTop(function(){Z()})});V.onKeyDown.addToTop(function(aj,al){var ak=al.keyCode;if(ak==8||ak==37||ak==39){Z(ab(q.getStart()))}});self._hasCaretEvents=true}if(af=="apply"){ac()}else{ah()}}function N(X){var W=X.startContainer,ac=X.startOffset,ab,aa,Y,Z;if(W.nodeType==3&&ac>=W.nodeValue.length-1){W=W.parentNode;ac=s(W)+1}if(W.nodeType==1){Y=W.childNodes;W=Y[Math.min(ac,Y.length-1)];ab=new t(W);if(ac>Y.length-1){ab.next()}for(aa=ab.current();aa;aa=ab.next()){if(aa.nodeType==3&&!f(aa)){Z=c.create("a",null,E);aa.parentNode.insertBefore(Z,aa);X.setStart(aa,0);q.setRng(X);c.remove(Z);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_legacy_values);function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}}); diff --git a/wp-includes/js/tinymce/wp-tinymce.js.gz b/wp-includes/js/tinymce/wp-tinymce.js.gz index cfc49ce5e0b17200d0dde33b82555dfafa77455f..457aed02951192e34a1ca5f159baaa5abac299fe 100644 GIT binary patch literal 101114 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 CDM#r5 literal 95812 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¨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%0D6g!fRDd^S3Wp&ZKB@Z+o`&&m)Due0Qd<-CGgq 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 diff --git a/wp-includes/js/wp-pointer.dev.js b/wp-includes/js/wp-pointer.dev.js index 0cb111bbb..23b0e43df 100644 --- a/wp-includes/js/wp-pointer.dev.js +++ b/wp-includes/js/wp-pointer.dev.js @@ -46,7 +46,6 @@ if ( family.filter(function(){ return 'fixed' === $(this).css('position'); }).length ) positioning = 'fixed'; - this.pointer = $('<div />') .append( this.content ) .append( this.arrow ) @@ -156,7 +155,8 @@ left: 0, zIndex: zindex++ // Increment the z-index so that it shows above other opened pointers. }).show().position($.extend({ - of: this.element + of: this.element, + collision: 'fit none' }, position )); // the object comes before this.options.position so the user can override position.of. this.repoint(); diff --git a/wp-includes/js/wp-pointer.js b/wp-includes/js/wp-pointer.js index 3b322a66e..65531c841 100644 --- a/wp-includes/js/wp-pointer.js +++ b/wp-includes/js/wp-pointer.js @@ -1 +1 @@ -(function(c){var a=0,b=9999;c.widget("wp.pointer",{options:{pointerClass:"wp-pointer",pointerWidth:320,content:function(f,e,d){return c(this).text()},buttons:function(f,e){var g=(wpPointerL10n)?wpPointerL10n.dismiss:"Dismiss",d=c('<a class="close" href="#">'+g+"</a>");return d.bind("click.pointer",function(h){h.preventDefault();e.element.pointer("close")})},position:"top",show:function(e,d){d.pointer.show();d.opened()},hide:function(e,d){d.pointer.hide();d.closed()},document:document},_create:function(){var e,d;this.content=c('<div class="wp-pointer-content"></div>');this.arrow=c('<div class="wp-pointer-arrow"><div class="wp-pointer-arrow-inner"></div></div>');d=this.element.parents().add(this.element);e="absolute";if(d.filter(function(){return"fixed"===c(this).css("position")}).length){e="fixed"}this.pointer=c("<div />").append(this.content).append(this.arrow).attr("id","wp-pointer-"+a++).addClass(this.options.pointerClass).css({position:e,width:this.options.pointerWidth+"px",display:"none"}).appendTo(this.options.document.body)},_setOption:function(d,f){var g=this.options,e=this.pointer;if(d==="document"&&f!==g.document){e.detach().appendTo(f.body)}else{if(d==="pointerClass"){e.removeClass(g.pointerClass).addClass(f)}}c.Widget.prototype._setOption.apply(this,arguments);if(d==="position"){this.reposition()}else{if(d==="content"&&this.active){this.update()}}},destroy:function(){this.pointer.remove();c.Widget.prototype.destroy.call(this)},widget:function(){return this.pointer},update:function(g){var e=this,h=this.options,d=c.Deferred(),f;if(h.disabled){return}d.done(function(i){e._update(g,i)});if(typeof h.content==="string"){f=h.content}else{f=h.content.call(this.element[0],d.resolve,g,this._handoff())}if(f){d.resolve(f)}return d.promise()},_update:function(f,e){var d,g=this.options;if(!e){return}this.pointer.stop();this.content.html(e);d=g.buttons.call(this.element[0],f,this._handoff());if(d){d.wrap('<div class="wp-pointer-buttons" />').parent().appendTo(this.content)}this.reposition()},reposition:function(){var d;if(this.options.disabled){return}d=this._processPosition(this.options.position);this.pointer.css({top:0,left:0,zIndex:b++}).show().position(c.extend({of:this.element},d));this.repoint()},repoint:function(){var e=this.options,d;if(e.disabled){return}d=(typeof e.position=="string")?e.position:e.position.edge;this.pointer[0].className=this.pointer[0].className.replace(/wp-pointer-[^\s'"]*/,"");this.pointer.addClass("wp-pointer-"+d)},_processPosition:function(e){var f={top:"bottom",bottom:"top",left:"right",right:"left"},d;if(typeof e=="string"){d={edge:e+""}}else{d=c.extend({},e)}if(!d.edge){return d}if(d.edge=="top"||d.edge=="bottom"){d.align=d.align||"left";d.at=d.at||d.align+" "+f[d.edge];d.my=d.my||d.align+" "+d.edge}else{d.align=d.align||"top";d.at=d.at||f[d.edge]+" "+d.align;d.my=d.my||d.edge+" "+d.align}return d},open:function(e){var d=this,f=this.options;if(this.active||f.disabled||this.element.is(":hidden")){return}this.update().done(function(){d._open(e)})},_open:function(e){var d=this,f=this.options;if(this.active||f.disabled||this.element.is(":hidden")){return}this.active=true;this._trigger("open",e,this._handoff());this._trigger("show",e,this._handoff({opened:function(){d._trigger("opened",e,d._handoff())}}))},close:function(e){if(!this.active||this.options.disabled){return}var d=this;this.active=false;this._trigger("close",e,this._handoff());this._trigger("hide",e,this._handoff({closed:function(){d._trigger("closed",e,d._handoff())}}))},sendToTop:function(d){if(this.active){this.pointer.css("z-index",b++)}},toggle:function(d){if(this.pointer.is(":hidden")){this.open(d)}else{this.close(d)}},_handoff:function(d){return c.extend({pointer:this.pointer,element:this.element},d)}})})(jQuery); \ No newline at end of file +(function(c){var a=0,b=9999;c.widget("wp.pointer",{options:{pointerClass:"wp-pointer",pointerWidth:320,content:function(f,e,d){return c(this).text()},buttons:function(f,e){var g=(wpPointerL10n)?wpPointerL10n.dismiss:"Dismiss",d=c('<a class="close" href="#">'+g+"</a>");return d.bind("click.pointer",function(h){h.preventDefault();e.element.pointer("close")})},position:"top",show:function(e,d){d.pointer.show();d.opened()},hide:function(e,d){d.pointer.hide();d.closed()},document:document},_create:function(){var e,d;this.content=c('<div class="wp-pointer-content"></div>');this.arrow=c('<div class="wp-pointer-arrow"><div class="wp-pointer-arrow-inner"></div></div>');d=this.element.parents().add(this.element);e="absolute";if(d.filter(function(){return"fixed"===c(this).css("position")}).length){e="fixed"}this.pointer=c("<div />").append(this.content).append(this.arrow).attr("id","wp-pointer-"+a++).addClass(this.options.pointerClass).css({position:e,width:this.options.pointerWidth+"px",display:"none"}).appendTo(this.options.document.body)},_setOption:function(d,f){var g=this.options,e=this.pointer;if(d==="document"&&f!==g.document){e.detach().appendTo(f.body)}else{if(d==="pointerClass"){e.removeClass(g.pointerClass).addClass(f)}}c.Widget.prototype._setOption.apply(this,arguments);if(d==="position"){this.reposition()}else{if(d==="content"&&this.active){this.update()}}},destroy:function(){this.pointer.remove();c.Widget.prototype.destroy.call(this)},widget:function(){return this.pointer},update:function(g){var e=this,h=this.options,d=c.Deferred(),f;if(h.disabled){return}d.done(function(i){e._update(g,i)});if(typeof h.content==="string"){f=h.content}else{f=h.content.call(this.element[0],d.resolve,g,this._handoff())}if(f){d.resolve(f)}return d.promise()},_update:function(f,e){var d,g=this.options;if(!e){return}this.pointer.stop();this.content.html(e);d=g.buttons.call(this.element[0],f,this._handoff());if(d){d.wrap('<div class="wp-pointer-buttons" />').parent().appendTo(this.content)}this.reposition()},reposition:function(){var d;if(this.options.disabled){return}d=this._processPosition(this.options.position);this.pointer.css({top:0,left:0,zIndex:b++}).show().position(c.extend({of:this.element,collision:"fit none"},d));this.repoint()},repoint:function(){var e=this.options,d;if(e.disabled){return}d=(typeof e.position=="string")?e.position:e.position.edge;this.pointer[0].className=this.pointer[0].className.replace(/wp-pointer-[^\s'"]*/,"");this.pointer.addClass("wp-pointer-"+d)},_processPosition:function(e){var f={top:"bottom",bottom:"top",left:"right",right:"left"},d;if(typeof e=="string"){d={edge:e+""}}else{d=c.extend({},e)}if(!d.edge){return d}if(d.edge=="top"||d.edge=="bottom"){d.align=d.align||"left";d.at=d.at||d.align+" "+f[d.edge];d.my=d.my||d.align+" "+d.edge}else{d.align=d.align||"top";d.at=d.at||f[d.edge]+" "+d.align;d.my=d.my||d.edge+" "+d.align}return d},open:function(e){var d=this,f=this.options;if(this.active||f.disabled||this.element.is(":hidden")){return}this.update().done(function(){d._open(e)})},_open:function(e){var d=this,f=this.options;if(this.active||f.disabled||this.element.is(":hidden")){return}this.active=true;this._trigger("open",e,this._handoff());this._trigger("show",e,this._handoff({opened:function(){d._trigger("opened",e,d._handoff())}}))},close:function(e){if(!this.active||this.options.disabled){return}var d=this;this.active=false;this._trigger("close",e,this._handoff());this._trigger("hide",e,this._handoff({closed:function(){d._trigger("closed",e,d._handoff())}}))},sendToTop:function(d){if(this.active){this.pointer.css("z-index",b++)}},toggle:function(d){if(this.pointer.is(":hidden")){this.open(d)}else{this.close(d)}},_handoff:function(d){return c.extend({pointer:this.pointer,element:this.element},d)}})})(jQuery); \ No newline at end of file diff --git a/wp-includes/js/wplink.dev.js b/wp-includes/js/wplink.dev.js index 24403d313..d0c4b9a0a 100644 --- a/wp-includes/js/wplink.dev.js +++ b/wp-includes/js/wplink.dev.js @@ -160,7 +160,7 @@ var wpLink; }, htmlUpdate : function() { - var attrs, html, start, end, cursor, + var attrs, html, begin, end, cursor, textarea = wpLink.textarea; if ( ! textarea ) @@ -183,35 +183,34 @@ var wpLink; html += '>'; // Insert HTML - // W3C - if ( typeof textarea.selectionStart !== 'undefined' ) { - start = textarea.selectionStart; + if ( document.selection && wpLink.range ) { + // IE + // Note: If no text is selected, IE will not place the cursor + // inside the closing tag. + textarea.focus(); + wpLink.range.text = html + wpLink.range.text + '</a>'; + wpLink.range.moveToBookmark( wpLink.range.getBookmark() ); + wpLink.range.select(); + + wpLink.range = null; + } else if ( typeof textarea.selectionStart !== 'undefined' ) { + // W3C + begin = textarea.selectionStart; end = textarea.selectionEnd; - selection = textarea.value.substring( start, end ); + selection = textarea.value.substring( begin, end ); html = html + selection + '</a>'; - cursor = start + html.length; + cursor = begin + html.length; // If no next is selected, place the cursor inside the closing tag. - if ( start == end ) + if ( begin == end ) cursor -= '</a>'.length; - textarea.value = textarea.value.substring( 0, start ) + textarea.value = textarea.value.substring( 0, begin ) + html + textarea.value.substring( end, textarea.value.length ); // Update cursor position textarea.selectionStart = textarea.selectionEnd = cursor; - - // IE - // Note: If no text is selected, IE will not place the cursor - // inside the closing tag. - } else if ( document.selection && wpLink.range ) { - textarea.focus(); - wpLink.range.text = html + wpLink.range.text + '</a>'; - wpLink.range.moveToBookmark( wpLink.range.getBookmark() ); - wpLink.range.select(); - - wpLink.range = null; } wpLink.close(); @@ -243,7 +242,7 @@ var wpLink; if (e == null) { ed.getDoc().execCommand("unlink", false, null); - tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); + tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); tinymce.each(ed.dom.select("a"), function(n) { if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { diff --git a/wp-includes/js/wplink.js b/wp-includes/js/wplink.js index ee929644c..4ce2f6ebe 100644 --- a/wp-includes/js/wplink.js +++ b/wp-includes/js/wplink.js @@ -1 +1 @@ -var wpLink;(function(f){var b={},e={},d,a,c;wpLink={timeToTriggerRiver:150,minRiverAJAXDuration:200,riverBottomThreshold:5,keySensitivity:100,lastSearch:"",textarea:"",init:function(){b.dialog=f("#wp-link");b.submit=f("#wp-link-submit");b.url=f("#url-field");b.nonce=f("#_ajax_linking_nonce");b.title=f("#link-title-field");b.openInNewTab=f("#link-target-checkbox");b.search=f("#search-field");e.search=new a(f("#search-results"));e.recent=new a(f("#most-recent-results"));e.elements=f(".query-results",b.dialog);b.dialog.keydown(wpLink.keydown);b.dialog.keyup(wpLink.keyup);b.submit.click(function(g){g.preventDefault();wpLink.update()});f("#wp-link-cancel").click(function(g){g.preventDefault();wpLink.close()});f("#internal-toggle").click(wpLink.toggleInternalLinking);e.elements.bind("river-select",wpLink.updateFields);b.search.keyup(wpLink.searchInternalLinks);b.dialog.bind("wpdialogrefresh",wpLink.refresh);b.dialog.bind("wpdialogbeforeopen",wpLink.beforeOpen);b.dialog.bind("wpdialogclose",wpLink.onClose)},beforeOpen:function(){wpLink.range=null;if(!wpLink.isMCE()&&document.selection){wpLink.textarea.focus();wpLink.range=document.selection.createRange()}},open:function(){if(!wpActiveEditor){return}this.textarea=f("#"+wpActiveEditor).get(0);if(!b.dialog.data("wpdialog")){b.dialog.wpdialog({title:wpLinkL10n.title,width:480,height:"auto",modal:true,dialogClass:"wp-dialog",zIndex:300000})}b.dialog.wpdialog("open")},isMCE:function(){return tinyMCEPopup&&(d=tinyMCEPopup.editor)&&!d.isHidden()},refresh:function(){e.search.refresh();e.recent.refresh();if(wpLink.isMCE()){wpLink.mceRefresh()}else{wpLink.setDefaultValues()}b.url.focus()[0].select();if(!e.recent.ul.children().length){e.recent.ajax()}},mceRefresh:function(){var g;d=tinyMCEPopup.editor;tinyMCEPopup.restoreSelection();if(g=d.dom.getParent(d.selection.getNode(),"A")){b.url.val(d.dom.getAttrib(g,"href"));b.title.val(d.dom.getAttrib(g,"title"));if("_blank"==d.dom.getAttrib(g,"target")){b.openInNewTab.prop("checked",true)}b.submit.val(wpLinkL10n.update)}else{wpLink.setDefaultValues()}tinyMCEPopup.storeSelection()},close:function(){if(wpLink.isMCE()){tinyMCEPopup.close()}else{b.dialog.wpdialog("close")}},onClose:function(){if(!wpLink.isMCE()){wpLink.textarea.focus();if(wpLink.range){wpLink.range.moveToBookmark(wpLink.range.getBookmark());wpLink.range.select()}}},getAttrs:function(){return{href:b.url.val(),title:b.title.val(),target:b.openInNewTab.prop("checked")?"_blank":""}},update:function(){if(wpLink.isMCE()){wpLink.mceUpdate()}else{wpLink.htmlUpdate()}},htmlUpdate:function(){var i,j,l,h,k,g=wpLink.textarea;if(!g){return}i=wpLink.getAttrs();if(!i.href||i.href=="http://"){return}j='<a href="'+i.href+'"';if(i.title){j+=' title="'+i.title+'"'}if(i.target){j+=' target="'+i.target+'"'}j+=">";if(typeof g.selectionStart!=="undefined"){l=g.selectionStart;h=g.selectionEnd;selection=g.value.substring(l,h);j=j+selection+"</a>";k=l+j.length;if(l==h){k-="</a>".length}g.value=g.value.substring(0,l)+j+g.value.substring(h,g.value.length);g.selectionStart=g.selectionEnd=k}else{if(document.selection&&wpLink.range){g.focus();wpLink.range.text=j+wpLink.range.text+"</a>";wpLink.range.moveToBookmark(wpLink.range.getBookmark());wpLink.range.select();wpLink.range=null}}wpLink.close();g.focus()},mceUpdate:function(){var h=tinyMCEPopup.editor,i=wpLink.getAttrs(),j,g;tinyMCEPopup.restoreSelection();j=h.dom.getParent(h.selection.getNode(),"A");if(!i.href||i.href=="http://"){if(j){tinyMCEPopup.execCommand("mceBeginUndoLevel");g=h.selection.getBookmark();h.dom.remove(j,1);h.selection.moveToBookmark(g);tinyMCEPopup.execCommand("mceEndUndoLevel");wpLink.close()}return}tinyMCEPopup.execCommand("mceBeginUndoLevel");if(j==null){h.getDoc().execCommand("unlink",false,null);tinyMCEPopup.execCommand("CreateLink",false,"#mce_temp_url#",{skip_undo:1});tinymce.each(h.dom.select("a"),function(k){if(h.dom.getAttrib(k,"href")=="#mce_temp_url#"){j=k;h.dom.setAttribs(j,i)}});if(f(j).text()=="#mce_temp_url#"){h.dom.remove(j);j=null}}else{h.dom.setAttribs(j,i)}if(j&&(j.childNodes.length!=1||j.firstChild.nodeName!="IMG")){h.focus();h.selection.select(j);h.selection.collapse(0);tinyMCEPopup.storeSelection()}tinyMCEPopup.execCommand("mceEndUndoLevel");wpLink.close()},updateFields:function(i,h,g){b.url.val(h.children(".item-permalink").val());b.title.val(h.hasClass("no-title")?"":h.children(".item-title").text());if(g&&g.type=="click"){b.url.focus()}},setDefaultValues:function(){b.url.val("http://");b.title.val("");b.submit.val(wpLinkL10n.save)},searchInternalLinks:function(){var h=f(this),i,g=h.val();if(g.length>2){e.recent.hide();e.search.show();if(wpLink.lastSearch==g){return}wpLink.lastSearch=g;i=h.siblings("img.waiting").show();e.search.change(g);e.search.ajax(function(){i.hide()})}else{e.search.hide();e.recent.show()}},next:function(){e.search.next();e.recent.next()},prev:function(){e.search.prev();e.recent.prev()},keydown:function(i){var h,g=f.ui.keyCode;switch(i.which){case g.UP:h="prev";case g.DOWN:h=h||"next";clearInterval(wpLink.keyInterval);wpLink[h]();wpLink.keyInterval=setInterval(wpLink[h],wpLink.keySensitivity);break;default:return}i.preventDefault()},keyup:function(h){var g=f.ui.keyCode;switch(h.which){case g.ESCAPE:h.stopImmediatePropagation();if(!f(document).triggerHandler("wp_CloseOnEscape",[{event:h,what:"wplink",cb:wpLink.close}])){wpLink.close()}return false;break;case g.UP:case g.DOWN:clearInterval(wpLink.keyInterval);break;default:return}h.preventDefault()},delayedCallback:function(i,g){var l,k,j,h;if(!g){return i}setTimeout(function(){if(k){return i.apply(h,j)}l=true},g);return function(){if(l){return i.apply(this,arguments)}j=arguments;h=this;k=true}},toggleInternalLinking:function(h){var g=f("#search-panel"),i=b.dialog.wpdialog("widget"),k=!g.is(":visible"),j=f(window);f(this).toggleClass("toggle-arrow-active",k);b.dialog.height("auto");g.slideToggle(300,function(){setUserSetting("wplink",k?"1":"0");b[k?"search":"url"].focus();var l=j.scrollTop(),o=i.offset().top,m=o+i.outerHeight(),n=m-j.height();if(n>l){i.animate({top:n<o?o-n:l},200)}});h.preventDefault()}};a=function(i,h){var g=this;this.element=i;this.ul=i.children("ul");this.waiting=i.find(".river-waiting");this.change(h);this.refresh();i.scroll(function(){g.maybeLoad()});i.delegate("li","click",function(j){g.select(f(this),j)})};f.extend(a.prototype,{refresh:function(){this.deselect();this.visible=this.element.is(":visible")},show:function(){if(!this.visible){this.deselect();this.element.show();this.visible=true}},hide:function(){this.element.hide();this.visible=false},select:function(h,k){var j,i,l,g;if(h.hasClass("unselectable")||h==this.selected){return}this.deselect();this.selected=h.addClass("selected");j=h.outerHeight();i=this.element.height();l=h.position().top;g=this.element.scrollTop();if(l<0){this.element.scrollTop(g+l)}else{if(l+j>i){this.element.scrollTop(g+l-i+j)}}this.element.trigger("river-select",[h,k,this])},deselect:function(){if(this.selected){this.selected.removeClass("selected")}this.selected=false},prev:function(){if(!this.visible){return}var g;if(this.selected){g=this.selected.prev("li");if(g.length){this.select(g)}}},next:function(){if(!this.visible){return}var g=this.selected?this.selected.next("li"):f("li:not(.unselectable):first",this.element);if(g.length){this.select(g)}},ajax:function(j){var h=this,i=this.query.page==1?0:wpLink.minRiverAJAXDuration,g=wpLink.delayedCallback(function(k,l){h.process(k,l);if(j){j(k,l)}},i);this.query.ajax(g)},change:function(g){if(this.query&&this._search==g){return}this._search=g;this.query=new c(g);this.element.scrollTop(0)},process:function(h,l){var i="",j=true,g="",k=l.page==1;if(!h){if(k){i+='<li class="unselectable"><span class="item-title"><em>'+wpLinkL10n.noMatchesFound+"</em></span></li>"}}else{f.each(h,function(){g=j?"alternate":"";g+=this["title"]?"":" no-title";i+=g?'<li class="'+g+'">':"<li>";i+='<input type="hidden" class="item-permalink" value="'+this["permalink"]+'" />';i+='<span class="item-title">';i+=this["title"]?this["title"]:wpLinkL10n.noTitle;i+='</span><span class="item-info">'+this["info"]+"</span></li>";j=!j})}this.ul[k?"html":"append"](i)},maybeLoad:function(){var h=this,i=this.element,g=i.scrollTop()+i.height();if(!this.query.ready()||g<this.ul.height()-wpLink.riverBottomThreshold){return}setTimeout(function(){var j=i.scrollTop(),k=j+i.height();if(!h.query.ready()||k<h.ul.height()-wpLink.riverBottomThreshold){return}h.waiting.show();i.scrollTop(j+h.waiting.outerHeight());h.ajax(function(){h.waiting.hide()})},wpLink.timeToTriggerRiver)}});c=function(g){this.page=1;this.allLoaded=false;this.querying=false;this.search=g};f.extend(c.prototype,{ready:function(){return !(this.querying||this.allLoaded)},ajax:function(i){var g=this,h={action:"wp-link-ajax",page:this.page,_ajax_linking_nonce:b.nonce.val()};if(this.search){h.search=this.search}this.querying=true;f.post(ajaxurl,h,function(j){g.page++;g.querying=false;g.allLoaded=!j;i(j,h)},"json")}});f(document).ready(wpLink.init)})(jQuery); \ No newline at end of file +var wpLink;(function(f){var b={},e={},d,a,c;wpLink={timeToTriggerRiver:150,minRiverAJAXDuration:200,riverBottomThreshold:5,keySensitivity:100,lastSearch:"",textarea:"",init:function(){b.dialog=f("#wp-link");b.submit=f("#wp-link-submit");b.url=f("#url-field");b.nonce=f("#_ajax_linking_nonce");b.title=f("#link-title-field");b.openInNewTab=f("#link-target-checkbox");b.search=f("#search-field");e.search=new a(f("#search-results"));e.recent=new a(f("#most-recent-results"));e.elements=f(".query-results",b.dialog);b.dialog.keydown(wpLink.keydown);b.dialog.keyup(wpLink.keyup);b.submit.click(function(g){g.preventDefault();wpLink.update()});f("#wp-link-cancel").click(function(g){g.preventDefault();wpLink.close()});f("#internal-toggle").click(wpLink.toggleInternalLinking);e.elements.bind("river-select",wpLink.updateFields);b.search.keyup(wpLink.searchInternalLinks);b.dialog.bind("wpdialogrefresh",wpLink.refresh);b.dialog.bind("wpdialogbeforeopen",wpLink.beforeOpen);b.dialog.bind("wpdialogclose",wpLink.onClose)},beforeOpen:function(){wpLink.range=null;if(!wpLink.isMCE()&&document.selection){wpLink.textarea.focus();wpLink.range=document.selection.createRange()}},open:function(){if(!wpActiveEditor){return}this.textarea=f("#"+wpActiveEditor).get(0);if(!b.dialog.data("wpdialog")){b.dialog.wpdialog({title:wpLinkL10n.title,width:480,height:"auto",modal:true,dialogClass:"wp-dialog",zIndex:300000})}b.dialog.wpdialog("open")},isMCE:function(){return tinyMCEPopup&&(d=tinyMCEPopup.editor)&&!d.isHidden()},refresh:function(){e.search.refresh();e.recent.refresh();if(wpLink.isMCE()){wpLink.mceRefresh()}else{wpLink.setDefaultValues()}b.url.focus()[0].select();if(!e.recent.ul.children().length){e.recent.ajax()}},mceRefresh:function(){var g;d=tinyMCEPopup.editor;tinyMCEPopup.restoreSelection();if(g=d.dom.getParent(d.selection.getNode(),"A")){b.url.val(d.dom.getAttrib(g,"href"));b.title.val(d.dom.getAttrib(g,"title"));if("_blank"==d.dom.getAttrib(g,"target")){b.openInNewTab.prop("checked",true)}b.submit.val(wpLinkL10n.update)}else{wpLink.setDefaultValues()}tinyMCEPopup.storeSelection()},close:function(){if(wpLink.isMCE()){tinyMCEPopup.close()}else{b.dialog.wpdialog("close")}},onClose:function(){if(!wpLink.isMCE()){wpLink.textarea.focus();if(wpLink.range){wpLink.range.moveToBookmark(wpLink.range.getBookmark());wpLink.range.select()}}},getAttrs:function(){return{href:b.url.val(),title:b.title.val(),target:b.openInNewTab.prop("checked")?"_blank":""}},update:function(){if(wpLink.isMCE()){wpLink.mceUpdate()}else{wpLink.htmlUpdate()}},htmlUpdate:function(){var i,j,k,h,l,g=wpLink.textarea;if(!g){return}i=wpLink.getAttrs();if(!i.href||i.href=="http://"){return}j='<a href="'+i.href+'"';if(i.title){j+=' title="'+i.title+'"'}if(i.target){j+=' target="'+i.target+'"'}j+=">";if(document.selection&&wpLink.range){g.focus();wpLink.range.text=j+wpLink.range.text+"</a>";wpLink.range.moveToBookmark(wpLink.range.getBookmark());wpLink.range.select();wpLink.range=null}else{if(typeof g.selectionStart!=="undefined"){k=g.selectionStart;h=g.selectionEnd;selection=g.value.substring(k,h);j=j+selection+"</a>";l=k+j.length;if(k==h){l-="</a>".length}g.value=g.value.substring(0,k)+j+g.value.substring(h,g.value.length);g.selectionStart=g.selectionEnd=l}}wpLink.close();g.focus()},mceUpdate:function(){var h=tinyMCEPopup.editor,i=wpLink.getAttrs(),j,g;tinyMCEPopup.restoreSelection();j=h.dom.getParent(h.selection.getNode(),"A");if(!i.href||i.href=="http://"){if(j){tinyMCEPopup.execCommand("mceBeginUndoLevel");g=h.selection.getBookmark();h.dom.remove(j,1);h.selection.moveToBookmark(g);tinyMCEPopup.execCommand("mceEndUndoLevel");wpLink.close()}return}tinyMCEPopup.execCommand("mceBeginUndoLevel");if(j==null){h.getDoc().execCommand("unlink",false,null);tinyMCEPopup.execCommand("mceInsertLink",false,"#mce_temp_url#",{skip_undo:1});tinymce.each(h.dom.select("a"),function(k){if(h.dom.getAttrib(k,"href")=="#mce_temp_url#"){j=k;h.dom.setAttribs(j,i)}});if(f(j).text()=="#mce_temp_url#"){h.dom.remove(j);j=null}}else{h.dom.setAttribs(j,i)}if(j&&(j.childNodes.length!=1||j.firstChild.nodeName!="IMG")){h.focus();h.selection.select(j);h.selection.collapse(0);tinyMCEPopup.storeSelection()}tinyMCEPopup.execCommand("mceEndUndoLevel");wpLink.close()},updateFields:function(i,h,g){b.url.val(h.children(".item-permalink").val());b.title.val(h.hasClass("no-title")?"":h.children(".item-title").text());if(g&&g.type=="click"){b.url.focus()}},setDefaultValues:function(){b.url.val("http://");b.title.val("");b.submit.val(wpLinkL10n.save)},searchInternalLinks:function(){var h=f(this),i,g=h.val();if(g.length>2){e.recent.hide();e.search.show();if(wpLink.lastSearch==g){return}wpLink.lastSearch=g;i=h.siblings("img.waiting").show();e.search.change(g);e.search.ajax(function(){i.hide()})}else{e.search.hide();e.recent.show()}},next:function(){e.search.next();e.recent.next()},prev:function(){e.search.prev();e.recent.prev()},keydown:function(i){var h,g=f.ui.keyCode;switch(i.which){case g.UP:h="prev";case g.DOWN:h=h||"next";clearInterval(wpLink.keyInterval);wpLink[h]();wpLink.keyInterval=setInterval(wpLink[h],wpLink.keySensitivity);break;default:return}i.preventDefault()},keyup:function(h){var g=f.ui.keyCode;switch(h.which){case g.ESCAPE:h.stopImmediatePropagation();if(!f(document).triggerHandler("wp_CloseOnEscape",[{event:h,what:"wplink",cb:wpLink.close}])){wpLink.close()}return false;break;case g.UP:case g.DOWN:clearInterval(wpLink.keyInterval);break;default:return}h.preventDefault()},delayedCallback:function(i,g){var l,k,j,h;if(!g){return i}setTimeout(function(){if(k){return i.apply(h,j)}l=true},g);return function(){if(l){return i.apply(this,arguments)}j=arguments;h=this;k=true}},toggleInternalLinking:function(h){var g=f("#search-panel"),i=b.dialog.wpdialog("widget"),k=!g.is(":visible"),j=f(window);f(this).toggleClass("toggle-arrow-active",k);b.dialog.height("auto");g.slideToggle(300,function(){setUserSetting("wplink",k?"1":"0");b[k?"search":"url"].focus();var l=j.scrollTop(),o=i.offset().top,m=o+i.outerHeight(),n=m-j.height();if(n>l){i.animate({top:n<o?o-n:l},200)}});h.preventDefault()}};a=function(i,h){var g=this;this.element=i;this.ul=i.children("ul");this.waiting=i.find(".river-waiting");this.change(h);this.refresh();i.scroll(function(){g.maybeLoad()});i.delegate("li","click",function(j){g.select(f(this),j)})};f.extend(a.prototype,{refresh:function(){this.deselect();this.visible=this.element.is(":visible")},show:function(){if(!this.visible){this.deselect();this.element.show();this.visible=true}},hide:function(){this.element.hide();this.visible=false},select:function(h,k){var j,i,l,g;if(h.hasClass("unselectable")||h==this.selected){return}this.deselect();this.selected=h.addClass("selected");j=h.outerHeight();i=this.element.height();l=h.position().top;g=this.element.scrollTop();if(l<0){this.element.scrollTop(g+l)}else{if(l+j>i){this.element.scrollTop(g+l-i+j)}}this.element.trigger("river-select",[h,k,this])},deselect:function(){if(this.selected){this.selected.removeClass("selected")}this.selected=false},prev:function(){if(!this.visible){return}var g;if(this.selected){g=this.selected.prev("li");if(g.length){this.select(g)}}},next:function(){if(!this.visible){return}var g=this.selected?this.selected.next("li"):f("li:not(.unselectable):first",this.element);if(g.length){this.select(g)}},ajax:function(j){var h=this,i=this.query.page==1?0:wpLink.minRiverAJAXDuration,g=wpLink.delayedCallback(function(k,l){h.process(k,l);if(j){j(k,l)}},i);this.query.ajax(g)},change:function(g){if(this.query&&this._search==g){return}this._search=g;this.query=new c(g);this.element.scrollTop(0)},process:function(h,l){var i="",j=true,g="",k=l.page==1;if(!h){if(k){i+='<li class="unselectable"><span class="item-title"><em>'+wpLinkL10n.noMatchesFound+"</em></span></li>"}}else{f.each(h,function(){g=j?"alternate":"";g+=this["title"]?"":" no-title";i+=g?'<li class="'+g+'">':"<li>";i+='<input type="hidden" class="item-permalink" value="'+this["permalink"]+'" />';i+='<span class="item-title">';i+=this["title"]?this["title"]:wpLinkL10n.noTitle;i+='</span><span class="item-info">'+this["info"]+"</span></li>";j=!j})}this.ul[k?"html":"append"](i)},maybeLoad:function(){var h=this,i=this.element,g=i.scrollTop()+i.height();if(!this.query.ready()||g<this.ul.height()-wpLink.riverBottomThreshold){return}setTimeout(function(){var j=i.scrollTop(),k=j+i.height();if(!h.query.ready()||k<h.ul.height()-wpLink.riverBottomThreshold){return}h.waiting.show();i.scrollTop(j+h.waiting.outerHeight());h.ajax(function(){h.waiting.hide()})},wpLink.timeToTriggerRiver)}});c=function(g){this.page=1;this.allLoaded=false;this.querying=false;this.search=g};f.extend(c.prototype,{ready:function(){return !(this.querying||this.allLoaded)},ajax:function(i){var g=this,h={action:"wp-link-ajax",page:this.page,_ajax_linking_nonce:b.nonce.val()};if(this.search){h.search=this.search}this.querying=true;f.post(ajaxurl,h,function(j){g.page++;g.querying=false;g.allLoaded=!j;i(j,h)},"json")}});f(document).ready(wpLink.init)})(jQuery); \ No newline at end of file diff --git a/wp-includes/kses.php b/wp-includes/kses.php index c54029ca0..b9f13face 100644 --- a/wp-includes/kses.php +++ b/wp-includes/kses.php @@ -10,7 +10,7 @@ * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along @@ -51,348 +51,390 @@ if ( ! CUSTOM_TAGS ) { $allowedposttags = array( 'address' => array(), 'a' => array( - 'class' => array (), - 'href' => array (), - 'id' => array (), - 'title' => array (), - 'rel' => array (), - 'rev' => array (), - 'name' => array (), - 'target' => array()), + 'class' => true, + 'href' => true, + 'id' => true, + 'title' => true, + 'rel' => true, + 'rev' => true, + 'name' => true, + 'target' => true, + ), 'abbr' => array( - 'class' => array (), - 'title' => array ()), + 'class' => true, + 'title' => true, + ), 'acronym' => array( - 'title' => array ()), + 'title' => true, + ), 'article' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'aside' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'b' => array(), 'big' => array(), 'blockquote' => array( - 'id' => array (), - 'cite' => array (), - 'class' => array(), - 'lang' => array(), - 'xml:lang' => array()), + 'id' => true, + 'cite' => true, + 'class' => true, + 'lang' => true, + 'xml:lang' => true, + ), 'br' => array ( - 'class' => array ()), + 'class' => true, + ), 'button' => array( - 'disabled' => array (), - 'name' => array (), - 'type' => array (), - 'value' => array ()), + 'disabled' => true, + 'name' => true, + 'type' => true, + 'value' => true, + ), 'caption' => array( - 'align' => array (), - 'class' => array ()), + 'align' => true, + 'class' => true, + ), 'cite' => array ( - 'class' => array(), - 'dir' => array(), - 'lang' => array(), - 'title' => array ()), + 'class' => true, + 'dir' => true, + 'lang' => true, + 'title' => true, + ), 'code' => array ( - 'style' => array()), + 'style' => true, + ), 'col' => array( - 'align' => array (), - 'char' => array (), - 'charoff' => array (), - 'span' => array (), - 'dir' => array(), - 'style' => array (), - 'valign' => array (), - 'width' => array ()), + 'align' => true, + 'char' => true, + 'charoff' => true, + 'span' => true, + 'dir' => true, + 'style' => true, + 'valign' => true, + 'width' => true, + ), 'del' => array( - 'datetime' => array ()), + 'datetime' => true, + ), 'dd' => array(), 'details' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'open' => array (), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'open' => true, + 'style' => true, + 'xml:lang' => true, ), 'div' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array()), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, + ), 'dl' => array(), 'dt' => array(), 'em' => array(), 'fieldset' => array(), 'figure' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'figcaption' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'font' => array( - 'color' => array (), - 'face' => array (), - 'size' => array ()), + 'color' => true, + 'face' => true, + 'size' => true, + ), 'footer' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'form' => array( - 'action' => array (), - 'accept' => array (), - 'accept-charset' => array (), - 'enctype' => array (), - 'method' => array (), - 'name' => array (), - 'target' => array ()), + 'action' => true, + 'accept' => true, + 'accept-charset' => true, + 'enctype' => true, + 'method' => true, + 'name' => true, + 'target' => true, + ), 'h1' => array( - 'align' => array (), - 'class' => array (), - 'id' => array (), - 'style' => array ()), + 'align' => true, + 'class' => true, + 'id' => true, + 'style' => true, + ), 'h2' => array ( - 'align' => array (), - 'class' => array (), - 'id' => array (), - 'style' => array ()), + 'align' => true, + 'class' => true, + 'id' => true, + 'style' => true, + ), 'h3' => array ( - 'align' => array (), - 'class' => array (), - 'id' => array (), - 'style' => array ()), + 'align' => true, + 'class' => true, + 'id' => true, + 'style' => true, + ), 'h4' => array ( - 'align' => array (), - 'class' => array (), - 'id' => array (), - 'style' => array ()), + 'align' => true, + 'class' => true, + 'id' => true, + 'style' => true, + ), 'h5' => array ( - 'align' => array (), - 'class' => array (), - 'id' => array (), - 'style' => array ()), + 'align' => true, + 'class' => true, + 'id' => true, + 'style' => true, + ), 'h6' => array ( - 'align' => array (), - 'class' => array (), - 'id' => array (), - 'style' => array ()), + 'align' => true, + 'class' => true, + 'id' => true, + 'style' => true, + ), 'header' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'hgroup' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'hr' => array ( - 'align' => array (), - 'class' => array (), - 'noshade' => array (), - 'size' => array (), - 'width' => array ()), + 'align' => true, + 'class' => true, + 'noshade' => true, + 'size' => true, + 'width' => true, + ), 'i' => array(), 'img' => array( - 'alt' => array (), - 'align' => array (), - 'border' => array (), - 'class' => array (), - 'height' => array (), - 'hspace' => array (), - 'longdesc' => array (), - 'vspace' => array (), - 'src' => array (), - 'style' => array (), - 'width' => array ()), + 'alt' => true, + 'align' => true, + 'border' => true, + 'class' => true, + 'height' => true, + 'hspace' => true, + 'longdesc' => true, + 'vspace' => true, + 'src' => true, + 'style' => true, + 'width' => true, + ), 'ins' => array( - 'datetime' => array (), - 'cite' => array ()), + 'datetime' => true, + 'cite' => true, + ), 'kbd' => array(), 'label' => array( - 'for' => array ()), + 'for' => true, + ), 'legend' => array( - 'align' => array ()), + 'align' => true, + ), 'li' => array ( - 'align' => array (), - 'class' => array ()), + 'align' => true, + 'class' => true, + ), 'menu' => array ( - 'class' => array (), - 'style' => array (), - 'type' => array ()), + 'class' => true, + 'style' => true, + 'type' => true, + ), 'nav' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'p' => array( - 'class' => array (), - 'align' => array (), - 'dir' => array(), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array()), + 'class' => true, + 'align' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, + ), 'pre' => array( - 'style' => array(), - 'width' => array ()), + 'style' => true, + 'width' => true, + ), 'q' => array( - 'cite' => array ()), + 'cite' => true, + ), 's' => array(), 'span' => array ( - 'class' => array (), - 'dir' => array (), - 'align' => array (), - 'lang' => array (), - 'style' => array (), - 'title' => array (), - 'xml:lang' => array()), + 'class' => true, + 'dir' => true, + 'align' => true, + 'lang' => true, + 'style' => true, + 'title' => true, + 'xml:lang' => true, + ), 'section' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'strike' => array(), 'strong' => array(), 'sub' => array(), 'summary' => array( - 'align' => array (), - 'class' => array (), - 'dir' => array (), - 'lang' => array(), - 'style' => array (), - 'xml:lang' => array(), + 'align' => true, + 'class' => true, + 'dir' => true, + 'lang' => true, + 'style' => true, + 'xml:lang' => true, ), 'sup' => array(), 'table' => array( - 'align' => array (), - 'bgcolor' => array (), - 'border' => array (), - 'cellpadding' => array (), - 'cellspacing' => array (), - 'class' => array (), - 'dir' => array(), - 'id' => array(), - 'rules' => array (), - 'style' => array (), - 'summary' => array (), - 'width' => array ()), + 'align' => true, + 'bgcolor' => true, + 'border' => true, + 'cellpadding' => true, + 'cellspacing' => true, + 'class' => true, + 'dir' => true, + 'id' => true, + 'rules' => true, + 'style' => true, + 'summary' => true, + 'width' => true, + ), 'tbody' => array( - 'align' => array (), - 'char' => array (), - 'charoff' => array (), - 'valign' => array ()), + 'align' => true, + 'char' => true, + 'charoff' => true, + 'valign' => true, + ), 'td' => array( - 'abbr' => array (), - 'align' => array (), - 'axis' => array (), - 'bgcolor' => array (), - 'char' => array (), - 'charoff' => array (), - 'class' => array (), - 'colspan' => array (), - 'dir' => array(), - 'headers' => array (), - 'height' => array (), - 'nowrap' => array (), - 'rowspan' => array (), - 'scope' => array (), - 'style' => array (), - 'valign' => array (), - 'width' => array ()), + 'abbr' => true, + 'align' => true, + 'axis' => true, + 'bgcolor' => true, + 'char' => true, + 'charoff' => true, + 'class' => true, + 'colspan' => true, + 'dir' => true, + 'headers' => true, + 'height' => true, + 'nowrap' => true, + 'rowspan' => true, + 'scope' => true, + 'style' => true, + 'valign' => true, + 'width' => true, + ), 'textarea' => array( - 'cols' => array (), - 'rows' => array (), - 'disabled' => array (), - 'name' => array (), - 'readonly' => array ()), + 'cols' => true, + 'rows' => true, + 'disabled' => true, + 'name' => true, + 'readonly' => true, + ), 'tfoot' => array( - 'align' => array (), - 'char' => array (), - 'class' => array (), - 'charoff' => array (), - 'valign' => array ()), + 'align' => true, + 'char' => true, + 'class' => true, + 'charoff' => true, + 'valign' => true, + ), 'th' => array( - 'abbr' => array (), - 'align' => array (), - 'axis' => array (), - 'bgcolor' => array (), - 'char' => array (), - 'charoff' => array (), - 'class' => array (), - 'colspan' => array (), - 'headers' => array (), - 'height' => array (), - 'nowrap' => array (), - 'rowspan' => array (), - 'scope' => array (), - 'valign' => array (), - 'width' => array ()), + 'abbr' => true, + 'align' => true, + 'axis' => true, + 'bgcolor' => true, + 'char' => true, + 'charoff' => true, + 'class' => true, + 'colspan' => true, + 'headers' => true, + 'height' => true, + 'nowrap' => true, + 'rowspan' => true, + 'scope' => true, + 'valign' => true, + 'width' => true, + ), 'thead' => array( - 'align' => array (), - 'char' => array (), - 'charoff' => array (), - 'class' => array (), - 'valign' => array ()), + 'align' => true, + 'char' => true, + 'charoff' => true, + 'class' => true, + 'valign' => true, + ), 'title' => array(), 'tr' => array( - 'align' => array (), - 'bgcolor' => array (), - 'char' => array (), - 'charoff' => array (), - 'class' => array (), - 'style' => array (), - 'valign' => array ()), + 'align' => true, + 'bgcolor' => true, + 'char' => true, + 'charoff' => true, + 'class' => true, + 'style' => true, + 'valign' => true, + ), 'tt' => array(), 'u' => array(), 'ul' => array ( - 'class' => array (), - 'style' => array (), - 'type' => array ()), + 'class' => true, + 'style' => true, + 'type' => true, + ), 'ol' => array ( - 'class' => array (), - 'start' => array (), - 'style' => array (), - 'type' => array ()), - 'var' => array ()); + 'class' => true, + 'start' => true, + 'style' => true, + 'type' => true, + ), + 'var' => array(), + ); /** * Kses allowed HTML elements. @@ -402,20 +444,25 @@ if ( ! CUSTOM_TAGS ) { */ $allowedtags = array( 'a' => array( - 'href' => array (), - 'title' => array ()), + 'href' => true, + 'title' => true, + ), 'abbr' => array( - 'title' => array ()), + 'title' => true, + ), 'acronym' => array( - 'title' => array ()), + 'title' => true, + ), 'b' => array(), 'blockquote' => array( - 'cite' => array ()), + 'cite' => true, + ), // 'br' => array(), - 'cite' => array (), + 'cite' => array(), 'code' => array(), 'del' => array( - 'datetime' => array ()), + 'datetime' => true, + ), // 'dd' => array(), // 'dl' => array(), // 'dt' => array(), @@ -425,7 +472,8 @@ if ( ! CUSTOM_TAGS ) { // 'ol' => array(), // 'p' => array(), 'q' => array( - 'cite' => array ()), + 'cite' => true, + ), 'strike' => array(), 'strong' => array(), // 'sub' => array(), @@ -674,6 +722,17 @@ function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) { if ( $current == '' ) continue; # the attribute is not allowed + if ( strtolower( $arreach['name'] ) == 'style' ) { + $orig_value = $arreach['value']; + $value = safecss_filter_attr( $orig_value ); + + if ( empty( $value ) ) + continue; + + $arreach['value'] = $value; + $arreach['whole'] = str_replace( $orig_value, $value, $arreach['whole'] ); + } + if ( ! is_array($current) ) { $attr2 .= ' '.$arreach['whole']; # there are no checks @@ -688,18 +747,7 @@ function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) { } } - if ( strtolower($arreach['name']) == 'style' ) { - $orig_value = $arreach['value']; - $value = safecss_filter_attr($orig_value); - - if ( empty($value) ) - continue; - - $arreach['value'] = $value; - $arreach['whole'] = str_replace($orig_value, $value, $arreach['whole']); - } - - if ($ok) + if ( $ok ) $attr2 .= ' '.$arreach['whole']; # it passed them } # if !is_array($current) } # foreach @@ -718,7 +766,7 @@ function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) { * input. It will add quotes around attribute values that don't have any quotes * or apostrophes around them, to make it easier to produce HTML code that will * conform to W3C's HTML specification. It will also remove bad URL protocols - * from attribute values. It also reduces duplicate attributes by using the + * from attribute values. It also reduces duplicate attributes by using the * attribute defined first (foo='bar' foo='baz' will result in foo='bar'). * * @since 1.0.0 @@ -763,7 +811,7 @@ function wp_kses_hair($attr, $allowed_protocols) { { $working = 1; $mode = 0; - if(FALSE === array_key_exists($attrname, $attrarr)) { + if(false === array_key_exists($attrname, $attrarr)) { $attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); } $attr = preg_replace('/^\s+/', '', $attr); @@ -780,7 +828,7 @@ function wp_kses_hair($attr, $allowed_protocols) { if ( in_array(strtolower($attrname), $uris) ) $thisval = wp_kses_bad_protocol($thisval, $allowed_protocols); - if(FALSE === array_key_exists($attrname, $attrarr)) { + if(false === array_key_exists($attrname, $attrarr)) { $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); } $working = 1; @@ -796,7 +844,7 @@ function wp_kses_hair($attr, $allowed_protocols) { if ( in_array(strtolower($attrname), $uris) ) $thisval = wp_kses_bad_protocol($thisval, $allowed_protocols); - if(FALSE === array_key_exists($attrname, $attrarr)) { + if(false === array_key_exists($attrname, $attrarr)) { $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname='$thisval'", 'vless' => 'n'); } $working = 1; @@ -812,7 +860,7 @@ function wp_kses_hair($attr, $allowed_protocols) { if ( in_array(strtolower($attrname), $uris) ) $thisval = wp_kses_bad_protocol($thisval, $allowed_protocols); - if(FALSE === array_key_exists($attrname, $attrarr)) { + if(false === array_key_exists($attrname, $attrarr)) { $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); } # We add quotes to conform to W3C's HTML spec. @@ -831,7 +879,7 @@ function wp_kses_hair($attr, $allowed_protocols) { } } # while - if ($mode == 1 && FALSE === array_key_exists($attrname, $attrarr)) + if ($mode == 1 && false === array_key_exists($attrname, $attrarr)) # special case, for when the attribute list ends with a valueless # attribute like "selected" $attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); @@ -941,7 +989,7 @@ function wp_kses_bad_protocol($string, $allowed_protocols) { } /** - * Removes any NULL characters in $string. + * Removes any null characters in $string. * * @since 1.0.0 * @@ -1315,10 +1363,15 @@ function wp_filter_nohtml_kses($data) { * @uses add_filter() See description for what functions are added to what hooks. */ function kses_init_filters() { - // Normal filtering. - add_filter('pre_comment_content', 'wp_filter_kses'); + // Normal filtering add_filter('title_save_pre', 'wp_filter_kses'); + // Comment filtering + if ( current_user_can( 'unfiltered_html' ) ) + add_filter( 'pre_comment_content', 'wp_filter_post_kses' ); + else + add_filter( 'pre_comment_content', 'wp_filter_kses' ); + // Post filtering add_filter('content_save_pre', 'wp_filter_post_kses'); add_filter('excerpt_save_pre', 'wp_filter_post_kses'); @@ -1338,10 +1391,13 @@ function kses_init_filters() { * @since 2.0.6 */ function kses_remove_filters() { - // Normal filtering. - remove_filter('pre_comment_content', 'wp_filter_kses'); + // Normal filtering remove_filter('title_save_pre', 'wp_filter_kses'); + // Comment filtering + remove_filter( 'pre_comment_content', 'wp_filter_post_kses' ); + remove_filter( 'pre_comment_content', 'wp_filter_kses' ); + // Post filtering remove_filter('content_save_pre', 'wp_filter_post_kses'); remove_filter('excerpt_save_pre', 'wp_filter_post_kses'); @@ -1414,7 +1470,7 @@ function safecss_filter_attr( $css, $deprecated = '' ) { if ( strpos( $css_item, ':' ) === false ) { $found = true; } else { - $parts = split( ':', $css_item ); + $parts = explode( ':', $css_item ); if ( in_array( trim( $parts[0] ), $allowed_attr ) ) $found = true; } diff --git a/wp-includes/l10n.php b/wp-includes/l10n.php index 733f3a447..851b3730f 100644 --- a/wp-includes/l10n.php +++ b/wp-includes/l10n.php @@ -272,10 +272,11 @@ function _nx($single, $plural, $number, $context, $domain = 'default') { * @since 2.5 * @param string $singular Single form to be i18ned * @param string $plural Plural form to be i18ned + * @param string $domain Optional. The domain identifier the text will be retrieved in * @return array array($singular, $plural) */ -function _n_noop( $singular, $plural ) { - return array( 0 => $singular, 1 => $plural, 'singular' => $singular, 'plural' => $plural, 'context' => null ); +function _n_noop( $singular, $plural, $domain = null ) { + return array( 0 => $singular, 1 => $plural, 'singular' => $singular, 'plural' => $plural, 'context' => null, 'domain' => $domain ); } /** @@ -283,8 +284,8 @@ function _n_noop( $singular, $plural ) { * * @see _n_noop() */ -function _nx_noop( $singular, $plural, $context ) { - return array( 0 => $singular, 1 => $plural, 2 => $context, 'singular' => $singular, 'plural' => $plural, 'context' => $context ); +function _nx_noop( $singular, $plural, $context, $domain = null ) { + return array( 0 => $singular, 1 => $plural, 2 => $context, 'singular' => $singular, 'plural' => $plural, 'context' => $context, 'domain' => $domain ); } /** @@ -293,9 +294,13 @@ function _nx_noop( $singular, $plural, $context ) { * @since 3.1 * @param array $nooped_plural Array with singular, plural and context keys, usually the result of _n_noop() or _nx_noop() * @param int $count Number of objects - * @param string $domain Optional. The domain identifier the text should be retrieved in + * @param string $domain Optional. The domain identifier the text should be retrieved in. If $nooped_plural contains + * a domain passed to _n_noop() or _nx_noop(), it will override this value. */ function translate_nooped_plural( $nooped_plural, $count, $domain = 'default' ) { + if ( $nooped_plural['domain'] ) + $domain = $nooped_plural['domain']; + if ( $nooped_plural['context'] ) return _nx( $nooped_plural['singular'], $nooped_plural['plural'], $count, $nooped_plural['context'], $domain ); else @@ -382,9 +387,17 @@ function load_default_textdomain() { load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" ); - if ( is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) ) { + if ( ( is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) ) && ! file_exists( WP_LANG_DIR . "/admin-$locale.mo" ) ) { load_textdomain( 'default', WP_LANG_DIR . "/ms-$locale.mo" ); + return; } + + if ( is_admin() ) + load_textdomain( 'default', WP_LANG_DIR . "/admin-$locale.mo" ); + + if ( is_network_admin() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) ) + load_textdomain( 'default', WP_LANG_DIR . "/admin-network-$locale.mo" ); + } /** @@ -527,7 +540,8 @@ function get_available_languages( $dir = null ) { foreach( (array)glob( ( is_null( $dir) ? WP_LANG_DIR : $dir ) . '/*.mo' ) as $lang_file ) { $lang_file = basename($lang_file, '.mo'); - if ( 0 !== strpos( $lang_file, 'continents-cities' ) && 0 !== strpos( $lang_file, 'ms-' ) ) + if ( 0 !== strpos( $lang_file, 'continents-cities' ) && 0 !== strpos( $lang_file, 'ms-' ) && + 0 !== strpos( $lang_file, 'admin-' )) $languages[] = $lang_file; } diff --git a/wp-includes/link-template.php b/wp-includes/link-template.php index 7c5f51195..ae8a9f136 100644 --- a/wp-includes/link-template.php +++ b/wp-includes/link-template.php @@ -507,7 +507,7 @@ function get_post_comments_feed_link($post_id = 0, $feed = '') { * @since 2.5.0 * * @param string $link_text Descriptive text. - * @param int $post_id Optional post ID. Default to current post. + * @param int $post_id Optional post ID. Default to current post. * @param string $feed Optional. Feed format. * @return string Link to the comment feed for the current post. */ @@ -589,8 +589,6 @@ function get_category_feed_link($cat_id, $feed = '') { * @return string Link to the feed for the term specified by $term_id and $taxonomy. */ function get_term_feed_link( $term_id, $taxonomy = 'category', $feed = '' ) { - global $wp_rewrite; - $term_id = ( int ) $term_id; $term = get_term( $term_id, $taxonomy ); @@ -630,7 +628,6 @@ function get_term_feed_link( $term_id, $taxonomy = 'category', $feed = '' ) { else $link = apply_filters( 'taxonomy_feed_link', $link, $feed, $taxonomy ); - return $link; } @@ -1375,9 +1372,11 @@ function adjacent_post_link($format, $link, $in_same_cat = false, $excluded_cate * @since 1.5.0 * * @param int $pagenum Optional. Page ID. + * @param bool $escape Optional. Whether to escape the URL for display, with esc_url(). Defaults to true. +* Otherwise, prepares the URL with esc_url_raw(). * @return string */ -function get_pagenum_link($pagenum = 1) { +function get_pagenum_link($pagenum = 1, $escape = true ) { global $wp_rewrite; $pagenum = (int) $pagenum; @@ -1428,7 +1427,10 @@ function get_pagenum_link($pagenum = 1) { $result = apply_filters('get_pagenum_link', $result); - return $result; + if ( $escape ) + return esc_url( $result ); + else + return esc_url_raw( $result ); } /** @@ -1566,7 +1568,7 @@ function get_previous_posts_link( $label = null ) { if ( !is_single() && $paged > 1 ) { $attr = apply_filters( 'previous_posts_link_attributes', '' ); - return '<a href="' . previous_posts( false ) . "\" $attr>". preg_replace( '/&([^#])(?![a-z]{1,8};)/', '&$1', $label ) .'</a>'; + return '<a href="' . previous_posts( false ) . "\" $attr>". preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&$1', $label ) .'</a>'; } } @@ -1793,7 +1795,7 @@ function paginate_comments_links($args = array()) { } /** - * Retrieve shortcut link. + * Retrieve the Press This bookmarklet link. * * Use this in 'a' element 'href' attribute. * @@ -1802,6 +1804,7 @@ function paginate_comments_links($args = array()) { * @return string */ function get_shortcut_link() { + // In case of breaking changes, version this. #WP20071 $link = "javascript: var d=document, w=window, @@ -1835,7 +1838,7 @@ function get_shortcut_link() { * @uses get_home_url() * * @param string $path (optional) Path relative to the home url. - * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https'. + * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'. * @return string Home url link with optional path appended. */ function home_url( $path = '', $scheme = null ) { @@ -1854,13 +1857,13 @@ function home_url( $path = '', $scheme = null ) { * * @param int $blog_id (optional) Blog ID. Defaults to current blog. * @param string $path (optional) Path relative to the home url. - * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https'. + * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'. * @return string Home url link with optional path appended. */ function get_home_url( $blog_id = null, $path = '', $scheme = null ) { $orig_scheme = $scheme; - if ( !in_array( $scheme, array( 'http', 'https' ) ) ) + if ( !in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) $scheme = is_ssl() && !is_admin() ? 'https' : 'http'; if ( empty( $blog_id ) || !is_multisite() ) @@ -1868,7 +1871,9 @@ function get_home_url( $blog_id = null, $path = '', $scheme = null ) { else $url = get_blog_option( $blog_id, 'home' ); - if ( 'http' != $scheme ) + if ( 'relative' == $scheme ) + $url = preg_replace( '#^.+://[^/]*#', '', $url ); + elseif ( 'http' != $scheme ) $url = str_replace( 'http://', "$scheme://", $url ); if ( !empty( $path ) && is_string( $path ) && strpos( $path, '..' ) === false ) @@ -1890,7 +1895,7 @@ function get_home_url( $blog_id = null, $path = '', $scheme = null ) { * @uses get_site_url() * * @param string $path Optional. Path relative to the site url. - * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', or 'admin'. + * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'. * @return string Site url link with optional path appended. */ function site_url( $path = '', $scheme = null ) { @@ -1909,13 +1914,13 @@ function site_url( $path = '', $scheme = null ) { * * @param int $blog_id (optional) Blog ID. Defaults to current blog. * @param string $path Optional. Path relative to the site url. - * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', or 'admin'. + * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'. * @return string Site url link with optional path appended. */ function get_site_url( $blog_id = null, $path = '', $scheme = null ) { // should the list of allowed schemes be maintained elsewhere? $orig_scheme = $scheme; - if ( !in_array( $scheme, array( 'http', 'https' ) ) ) { + if ( !in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) { if ( ( 'login_post' == $scheme || 'rpc' == $scheme ) && ( force_ssl_login() || force_ssl_admin() ) ) $scheme = 'https'; elseif ( ( 'login' == $scheme ) && force_ssl_admin() ) @@ -1931,7 +1936,9 @@ function get_site_url( $blog_id = null, $path = '', $scheme = null ) { else $url = get_blog_option( $blog_id, 'siteurl' ); - if ( 'http' != $scheme ) + if ( 'relative' == $scheme ) + $url = preg_replace( '#^.+://[^/]*#', '', $url ); + elseif ( 'http' != $scheme ) $url = str_replace( 'http://', "{$scheme}://", $url ); if ( !empty( $path ) && is_string( $path ) && strpos( $path, '..' ) === false ) @@ -2062,7 +2069,7 @@ function plugins_url($path = '', $plugin = '') { * @since 3.0.0 * * @param string $path Optional. Path relative to the site url. - * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', or 'admin'. + * @param string $scheme Optional. Scheme to give the site url context. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'. * @return string Site url link with optional path appended. */ function network_site_url( $path = '', $scheme = null ) { @@ -2072,7 +2079,7 @@ function network_site_url( $path = '', $scheme = null ) { return site_url($path, $scheme); $orig_scheme = $scheme; - if ( !in_array($scheme, array('http', 'https')) ) { + if ( !in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) { if ( ( 'login_post' == $scheme || 'rpc' == $scheme ) && ( force_ssl_login() || force_ssl_admin() ) ) $scheme = 'https'; elseif ( ('login' == $scheme) && ( force_ssl_admin() ) ) @@ -2083,7 +2090,10 @@ function network_site_url( $path = '', $scheme = null ) { $scheme = ( is_ssl() ? 'https' : 'http' ); } - $url = $scheme . '://' . $current_site->domain . $current_site->path; + if ( 'relative' == $scheme ) + $url = $current_site->path; + else + $url = $scheme . '://' . $current_site->domain . $current_site->path; if ( !empty($path) && is_string($path) && strpos($path, '..') === false ) $url .= ltrim($path, '/'); @@ -2102,7 +2112,7 @@ function network_site_url( $path = '', $scheme = null ) { * @since 3.0.0 * * @param string $path (optional) Path relative to the home url. - * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https'. + * @param string $scheme (optional) Scheme to give the home url context. Currently 'http', 'https', or 'relative'. * @return string Home url link with optional path appended. */ function network_home_url( $path = '', $scheme = null ) { @@ -2113,10 +2123,13 @@ function network_home_url( $path = '', $scheme = null ) { $orig_scheme = $scheme; - if ( !in_array($scheme, array('http', 'https')) ) + if ( !in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) $scheme = is_ssl() && !is_admin() ? 'https' : 'http'; - $url = $scheme . '://' . $current_site->domain . $current_site->path; + if ( 'relative' == $scheme ) + $url = $current_site->path; + else + $url = $scheme . '://' . $current_site->domain . $current_site->path; if ( !empty( $path ) && is_string( $path ) && strpos( $path, '..' ) === false ) $url .= ltrim( $path, '/' ); @@ -2184,10 +2197,40 @@ function self_admin_url($path = '', $scheme = 'admin') { return admin_url($path, $scheme); } +/** + * Set the scheme for a URL + * + * @since 3.4.0 + * + * @param string $url Absolute url that includes a scheme + * @param string $scheme Optional. Scheme to give $url. Currently 'http', 'https', 'login', 'login_post', 'admin', or 'relative'. + * @return string $url URL with chosen scheme. + */ +function set_url_scheme( $url, $scheme = null ) { + $orig_scheme = $scheme; + if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) { + if ( ( 'login_post' == $scheme || 'rpc' == $scheme ) && ( force_ssl_login() || force_ssl_admin() ) ) + $scheme = 'https'; + elseif ( ( 'login' == $scheme ) && force_ssl_admin() ) + $scheme = 'https'; + elseif ( ( 'admin' == $scheme ) && force_ssl_admin() ) + $scheme = 'https'; + else + $scheme = ( is_ssl() ? 'https' : 'http' ); + } + + if ( 'relative' == $scheme ) + $url = preg_replace( '#^.+://[^/]*#', '', $url ); + else + $url = preg_replace( '#^.+://#', $scheme . '://', $url ); + + return apply_filters( 'set_url_scheme', $url, $scheme, $orig_scheme ); +} + /** * Get the URL to the user's dashboard. * - * If a user does not belong to any site, the global user dashboard is used. If the user belongs to the current site, + * If a user does not belong to any site, the global user dashboard is used. If the user belongs to the current site, * the dashboard for the current site is returned. If the user cannot edit the current site, the dashboard to the user's * primary blog is returned. * @@ -2364,7 +2407,7 @@ function the_shortlink( $text = '', $title = '', $before = '', $after = '' ) { $text = __('This is the short link.'); if ( empty( $title ) ) - $title = the_title_attribute( array( 'echo' => FALSE ) ); + $title = the_title_attribute( array( 'echo' => false ) ); $shortlink = wp_get_shortlink( $post->ID ); @@ -2374,5 +2417,3 @@ function the_shortlink( $text = '', $title = '', $before = '', $after = '' ) { echo $before, $link, $after; } } - -?> diff --git a/wp-includes/load.php b/wp-includes/load.php index c70eeeb9e..94e6339d2 100644 --- a/wp-includes/load.php +++ b/wp-includes/load.php @@ -19,7 +19,7 @@ function wp_unregister_GLOBALS() { return; if ( isset( $_REQUEST['GLOBALS'] ) ) - die( /*WP_I18N_GLOBALS_OVERWRITE*/'GLOBALS overwrite attempt detected'/*/WP_I18N_GLOBALS_OVERWRITE*/ ); + die( 'GLOBALS overwrite attempt detected' ); // Variables that shouldn't be unset $no_unset = array( 'GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', 'table_prefix' ); @@ -97,22 +97,21 @@ function wp_fix_server_vars() { * * Dies if requirements are not met. * - * This function must be able to work without a complete environment set up. In wp-load.php, for - * example, WP_CONTENT_DIR is defined and version.php is included before this function is called. - * * @access private * @since 3.0.0 */ function wp_check_php_mysql_versions() { - // we can probably extend this function to check if wp_die() exists then use translated strings, and then use it in install.php etc. - global $required_php_version, $wp_version; $php_version = phpversion(); - if ( version_compare( $required_php_version, $php_version, '>' ) ) - die( sprintf( /*WP_I18N_OLD_PHP*/'Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s.'/*/WP_I18N_OLD_PHP*/, $php_version, $wp_version, $required_php_version ) ); + if ( version_compare( $required_php_version, $php_version, '>' ) ) { + wp_load_translations_early(); + wp_die( sprintf( __( 'Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s.' ), $php_version, $wp_version, $required_php_version ) ); + } - if ( !extension_loaded( 'mysql' ) && !file_exists( WP_CONTENT_DIR . '/db.php' ) ) - die( /*WP_I18N_OLD_MYSQL*/'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.'/*/WP_I18N_OLD_MYSQL*/ ); + if ( ! extension_loaded( 'mysql' ) && ! file_exists( WP_CONTENT_DIR . '/db.php' ) ) { + wp_load_translations_early(); + wp_die( __( 'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.' ) ); + } } /** @@ -159,6 +158,8 @@ function wp_maintenance() { die(); } + wp_load_translations_early(); + $protocol = $_SERVER["SERVER_PROTOCOL"]; if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol ) $protocol = 'HTTP/1.0'; @@ -167,14 +168,14 @@ function wp_maintenance() { header( 'Retry-After: 600' ); ?> <!DOCTYPE html> - <html xmlns="http://www.w3.org/1999/xhtml"> + <html xmlns="http://www.w3.org/1999/xhtml"<?php if ( is_rtl() ) echo ' dir="rtl"'; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title><?php echo /*WP_I18N_MAINTENANCE*/'Maintenance'/*/WP_I18N_MAINTENANCE*/; ?></title> + <title><?php _e( 'Maintenance' ); ?></title> </head> <body> - <h1><?php echo /*WP_I18N_MAINT_MSG*/'Briefly unavailable for scheduled maintenance. Check back in a minute.'/*/WP_I18N_MAINT_MSG*/; ?></h1> + <h1><?php _e( 'Briefly unavailable for scheduled maintenance. Check back in a minute.' ); ?></h1> </body> </html> <?php @@ -182,17 +183,16 @@ function wp_maintenance() { } /** - * PHP 4 standard microtime start capture. + * PHP 5 standard microtime start capture. * * @access private * @since 0.71 - * @global int $timestart Seconds and microseconds added together from when function is called. + * @global float $timestart Seconds from when function is called. * @return bool Always returns true. */ function timer_start() { global $timestart; - $mtime = explode( ' ', microtime() ); - $timestart = $mtime[1] + $mtime[0]; + $timestart = microtime( true ); return true; } @@ -213,8 +213,8 @@ function timer_start() { * in most cases, you only need to echo it. * * @since 0.71 - * @global int $timestart Seconds and microseconds added together from when timer_start() is called - * @global int $timeend Seconds and microseconds added together from when function is called + * @global float $timestart Seconds from when timer_start() is called + * @global float $timeend Seconds from when function is called * * @param int $display Use '0' or null to not echo anything and 1 to echo the total time * @param int $precision The amount of digits from the right of the decimal to display. Default is 3. @@ -222,9 +222,7 @@ function timer_start() { */ function timer_stop( $display = 0, $precision = 3 ) { // if called like timer_stop(1), will echo $timetotal global $timestart, $timeend; - $mtime = microtime(); - $mtime = explode( ' ', $mtime ); - $timeend = $mtime[1] + $mtime[0]; + $timeend = microtime( true ); $timetotal = $timeend - $timestart; $r = ( function_exists( 'number_format_i18n' ) ) ? number_format_i18n( $timetotal, $precision ) : number_format( $timetotal, $precision ); if ( $display ) @@ -367,8 +365,10 @@ function wp_set_wpdb_vars() { $prefix = $wpdb->set_prefix( $table_prefix ); - if ( is_wp_error( $prefix ) ) - wp_die( /*WP_I18N_BAD_PREFIX*/'<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.'/*/WP_I18N_BAD_PREFIX*/ ); + if ( is_wp_error( $prefix ) ) { + wp_load_translations_early(); + wp_die( __( '<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.' ) ); + } } /** @@ -568,7 +568,7 @@ function shutdown_action_hook() { */ function wp_clone( $object ) { - // Use parens for clone to accommodate PHP 4. See #17880 + // Use parens for clone to accommodate PHP 4. See #17880 return clone( $object ); } @@ -653,4 +653,86 @@ function is_multisite() { return false; } -?> +/** + * Attempts an early load of translations. + * + * Used for errors encountered during the initial loading process, before the locale has been + * properly detected and loaded. + * + * Designed for unusual load sequences (like setup-config.php) or for when the script will then + * terminate with an error, otherwise there is a risk that a file can be double-included. + * + * @since 3.4.0 + * @access private + */ +function wp_load_translations_early() { + global $text_direction, $wp_locale; + + static $loaded = false; + if ( $loaded ) + return; + $loaded = true; + + if ( function_exists( 'did_action' ) && did_action( 'init' ) ) + return; + + // We need $wp_local_package + require ABSPATH . WPINC . '/version.php'; + + // Translation and localization + require_once ABSPATH . WPINC . '/pomo/mo.php'; + require_once ABSPATH . WPINC . '/l10n.php'; + require_once ABSPATH . WPINC . '/locale.php'; + + // General libraries + require_once ABSPATH . WPINC . '/functions.php'; + require_once ABSPATH . WPINC . '/plugin.php'; + + $locales = $locations = array(); + + while ( true ) { + if ( defined( 'WPLANG' ) ) { + if ( '' == WPLANG ) + break; + $locales[] = WPLANG; + } + + if ( isset( $wp_local_package ) ) + $locales[] = $wp_local_package; + + if ( ! $locales ) + break; + + if ( defined( 'WP_LANG_DIR' ) && @is_dir( WP_LANG_DIR ) ) + $locations[] = WP_LANG_DIR; + + if ( defined( 'WP_CONTENT_DIR' ) && @is_dir( WP_CONTENT_DIR . '/languages' ) ) + $locations[] = WP_CONTENT_DIR . '/languages'; + + if ( @is_dir( ABSPATH . 'wp-content/languages' ) ) + $locations[] = ABSPATH . 'wp-content/languages'; + + if ( @is_dir( ABSPATH . WPINC . '/languages' ) ) + $locations[] = ABSPATH . WPINC . '/languages'; + + if ( ! $locations ) + break; + + $locations = array_unique( $locations ); + + foreach ( $locales as $locale ) { + foreach ( $locations as $location ) { + if ( file_exists( $location . '/' . $locale . '.mo' ) ) { + load_textdomain( 'default', $location . '/' . $locale . '.mo' ); + if ( defined( 'WP_SETUP_CONFIG' ) && file_exists( $location . '/admin-' . $locale . '.mo' ) ) + load_textdomain( 'default', $location . '/admin-' . $locale . '.mo' ); + break 2; + } + } + } + + break; + } + + $wp_locale = new WP_Locale(); +} diff --git a/wp-includes/locale.php b/wp-includes/locale.php index 1b529bae2..bc5037c72 100644 --- a/wp-includes/locale.php +++ b/wp-includes/locale.php @@ -84,15 +84,6 @@ class WP_Locale { */ var $text_direction = 'ltr'; - /** - * Imports the global version to the class property. - * - * @since 2.1.0 - * @var array - * @access private - */ - var $locale_vars = array('text_direction'); - /** * Sets up the translated strings and object properties. * @@ -113,7 +104,7 @@ class WP_Locale { $this->weekday[5] = /* translators: weekday */ __('Friday'); $this->weekday[6] = /* translators: weekday */ __('Saturday'); - // The first letter of each day. The _%day%_initial suffix is a hack to make + // The first letter of each day. The _%day%_initial suffix is a hack to make // sure the day initials are unique. $this->weekday_initial[__('Sunday')] = /* translators: one-letter abbreviation of the weekday */ __('S_Sunday_initial'); $this->weekday_initial[__('Monday')] = /* translators: one-letter abbreviation of the weekday */ __('M_Monday_initial'); @@ -186,12 +177,12 @@ class WP_Locale { $trans = __('number_format_decimal_point'); $this->number_format['decimal_point'] = ('number_format_decimal_point' == $trans) ? '.' : $trans; - // Import global locale vars set during inclusion of $locale.php. - foreach ( (array) $this->locale_vars as $var ) { - if ( isset($GLOBALS[$var]) ) - $this->$var = $GLOBALS[$var]; - } - + // Set text direction. + if ( isset( $GLOBALS['text_direction'] ) ) + $this->text_direction = $GLOBALS['text_direction']; + /* translators: 'rtl' or 'ltr'. This sets the text direction for WordPress. */ + elseif ( 'rtl' == _x( 'ltr', 'text direction' ) ) + $this->text_direction = 'rtl'; } /** @@ -326,15 +317,16 @@ class WP_Locale { $this->init(); $this->register_globals(); } + /** * Checks if current locale is RTL. * * @since 3.0.0 * @return bool Whether locale is RTL. */ - function is_rtl() { - return 'rtl' == $this->text_direction; - } + function is_rtl() { + return 'rtl' == $this->text_direction; + } } /** @@ -347,5 +339,3 @@ function is_rtl() { global $wp_locale; return $wp_locale->is_rtl(); } - -?> diff --git a/wp-includes/media.php b/wp-includes/media.php index 5ec0338fc..1a933edf5 100644 --- a/wp-includes/media.php +++ b/wp-includes/media.php @@ -53,9 +53,9 @@ function image_constrain_size_for_editor($width, $height, $size = 'medium') { // if no width is set, default to the theme content width if available } elseif ( $size == 'large' ) { - // we're inserting a large size image into the editor. if it's a really + // We're inserting a large size image into the editor. If it's a really // big image we'll scale it down to fit reasonably within the editor - // itself, and within the theme's content width if it's known. the user + // itself, and within the theme's content width if it's known. The user // can resize it in the editor if they wish. $max_width = intval(get_option('large_size_w')); $max_height = intval(get_option('large_size_h')); @@ -327,6 +327,8 @@ function wp_constrain_dimensions( $current_width, $current_height, $max_width=0, * portion of the image will be cropped out and resized to the required size. * * @since 2.5.0 + * @uses apply_filters() Calls 'image_resize_dimensions' on $orig_w, $orig_h, $dest_w, $dest_h and + * $crop to provide custom resize dimensions. * * @param int $orig_w Original width. * @param int $orig_h Original height. @@ -343,6 +345,11 @@ function image_resize_dimensions($orig_w, $orig_h, $dest_w, $dest_h, $crop = fal if ($dest_w <= 0 && $dest_h <= 0) return false; + // plugins can use this to provide custom resize dimensions + $output = apply_filters( 'image_resize_dimensions', null, $orig_w, $orig_h, $dest_w, $dest_h, $crop ); + if ( null !== $output ) + return $output; + if ( $crop ) { // crop the largest possible portion of the original image that we can size to $dest_w x $dest_h $aspect_ratio = $orig_w / $orig_h; @@ -455,7 +462,8 @@ function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $de return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); } else { // all other formats are converted to jpg - $destfilename = "{$dir}/{$name}-{$suffix}.jpg"; + if ( 'jpg' != $ext && 'jpeg' != $ext ) + $destfilename = "{$dir}/{$name}-{$suffix}.jpg"; if ( !imagejpeg( $newimage, $destfilename, apply_filters( 'jpeg_quality', $jpeg_quality, 'image_resize' ) ) ) return new WP_Error('resize_path_invalid', __( 'Resize path invalid' )); } @@ -724,6 +732,13 @@ add_shortcode('caption', 'img_caption_shortcode'); * @return string */ function img_caption_shortcode($attr, $content = null) { + // New-style shortcode with the caption inside the shortcode with the link and image tags. + if ( ! isset( $attr['caption'] ) ) { + if ( preg_match( '#((?:<a [^>]+>\s*)?<img [^>]+>(?:\s*</a>)?)(.*)#is', $content, $matches ) ) { + $content = $matches[1]; + $attr['caption'] = trim( $matches[2] ); + } + } // Allow plugins/themes to override the default caption template. $output = apply_filters('img_caption_shortcode', '', $attr, $content); @@ -1096,7 +1111,7 @@ class WP_Embed { <script type="text/javascript"> /* <![CDATA[ */ jQuery(document).ready(function($){ - $.get("<?php echo admin_url( 'admin-ajax.php?action=oembed-cache&post=' . $post_ID ); ?>"); + $.get("<?php echo admin_url( 'admin-ajax.php?action=oembed-cache&post=' . $post_ID, 'relative' ); ?>"); }); /* ]]> */ </script> @@ -1378,7 +1393,7 @@ function wp_expand_dimensions( $example_width, $example_height, $max_width, $max * * @param string $url The URL that should be embedded. * @param array $args Additional arguments and parameters. - * @return string The original URL on failure or the embed HTML on success. + * @return bool|string False on failure or the embed HTML on success. */ function wp_oembed_get( $url, $args = '' ) { require_once( ABSPATH . WPINC . '/class-oembed.php' ); @@ -1442,4 +1457,53 @@ function wp_embed_handler_googlevideo( $matches, $attr, $url, $rawattr ) { return apply_filters( 'embed_googlevideo', '<embed type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docid=' . esc_attr($matches[2]) . '&hl=en&fs=true" style="width:' . esc_attr($width) . 'px;height:' . esc_attr($height) . 'px" allowFullScreen="true" allowScriptAccess="always" />', $matches, $attr, $url, $rawattr ); } -?> \ No newline at end of file +/** + * Prints default plupload arguments. + * + * @since 3.4.0 + */ +function wp_plupload_default_settings() { + global $wp_scripts; + + $max_upload_size = wp_max_upload_size(); + + $defaults = array( + 'runtimes' => 'html5,silverlight,flash,html4', + 'file_data_name' => 'async-upload', // key passed to $_FILE. + 'multiple_queues' => true, + 'max_file_size' => $max_upload_size . 'b', + 'url' => admin_url( 'admin-ajax.php', 'relative' ), + 'flash_swf_url' => includes_url( 'js/plupload/plupload.flash.swf' ), + 'silverlight_xap_url' => includes_url( 'js/plupload/plupload.silverlight.xap' ), + 'filters' => array( array( 'title' => __( 'Allowed Files' ), 'extensions' => '*') ), + 'multipart' => true, + 'urlstream_upload' => true, + ); + + $defaults = apply_filters( 'plupload_default_settings', $defaults ); + + $params = array( + 'action' => 'upload-attachment', + ); + + $params = apply_filters( 'plupload_default_params', $params ); + $params['_wpnonce'] = wp_create_nonce( 'media-form' ); + $defaults['multipart_params'] = $params; + + $settings = array( + 'defaults' => $defaults, + 'browser' => array( + 'mobile' => wp_is_mobile(), + 'supported' => _device_can_upload(), + ), + ); + + $script = 'var _wpPluploadSettings = ' . json_encode( $settings ) . ';'; + + $data = $wp_scripts->get_data( 'wp-plupload', 'data' ); + if ( $data ) + $script = "$data\n$script"; + + $wp_scripts->add_data( 'wp-plupload', 'data', $script ); +} +add_action( 'customize_controls_enqueue_scripts', 'wp_plupload_default_settings' ); diff --git a/wp-includes/meta.php b/wp-includes/meta.php index a318bbe21..d6984f620 100644 --- a/wp-includes/meta.php +++ b/wp-includes/meta.php @@ -2,8 +2,8 @@ /** * Metadata API * - * Functions for retrieving and manipulating metadata of various WordPress object types. Metadata - * for an object is a represented by a simple key-value pair. Objects may contain multiple + * Functions for retrieving and manipulating metadata of various WordPress object types. Metadata + * for an object is a represented by a simple key-value pair. Objects may contain multiple * metadata entries that share the same key and differ only in their value. * * @package WordPress @@ -23,8 +23,8 @@ * @param int $object_id ID of the object metadata is for * @param string $meta_key Metadata key * @param string $meta_value Metadata value - * @param bool $unique Optional, default is false. Whether the specified metadata key should be - * unique for the object. If true, and the object already has a value for the specified + * @param bool $unique Optional, default is false. Whether the specified metadata key should be + * unique for the object. If true, and the object already has a value for the specified * metadata key, no change will be made * @return bool The meta ID on successful update, false on failure. */ @@ -80,7 +80,7 @@ function add_metadata($meta_type, $object_id, $meta_key, $meta_value, $unique = } /** - * Update metadata for the specified object. If no value already exists for the specified object + * Update metadata for the specified object. If no value already exists for the specified object * ID and metadata key, the metadata will be added. * * @since 2.9.0 @@ -94,8 +94,8 @@ function add_metadata($meta_type, $object_id, $meta_key, $meta_value, $unique = * @param int $object_id ID of the object metadata is for * @param string $meta_key Metadata key * @param string $meta_value Metadata value - * @param string $prev_value Optional. If specified, only update existing metadata entries with - * the specified value. Otherwise, update all entries. + * @param string $prev_value Optional. If specified, only update existing metadata entries with + * the specified value. Otherwise, update all entries. * @return bool True on successful update, false on failure. */ function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_value = '') { @@ -174,10 +174,10 @@ function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user) * @param int $object_id ID of the object metadata is for * @param string $meta_key Metadata key - * @param string $meta_value Optional. Metadata value. If specified, only delete metadata entries - * with this value. Otherwise, delete all entries with the specified meta_key. - * @param bool $delete_all Optional, default is false. If true, delete matching metadata entries - * for all objects, ignoring the specified object_id. Otherwise, only delete matching + * @param string $meta_value Optional. Metadata value. If specified, only delete metadata entries + * with this value. Otherwise, delete all entries with the specified meta_key. + * @param bool $delete_all Optional, default is false. If true, delete matching metadata entries + * for all objects, ignoring the specified object_id. Otherwise, only delete matching * metadata entries for the specified object_id. * @return bool True on successful delete, false on failure. */ @@ -223,6 +223,7 @@ function delete_metadata($meta_type, $object_id, $meta_key, $meta_value = '', $d do_action( "delete_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value ); + // Old-style action. if ( 'post' == $meta_type ) do_action( 'delete_postmeta', $meta_ids ); @@ -243,6 +244,7 @@ function delete_metadata($meta_type, $object_id, $meta_key, $meta_value = '', $d do_action( "deleted_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value ); + // Old-style action. if ( 'post' == $meta_type ) do_action( 'deleted_postmeta', $meta_ids ); @@ -256,10 +258,10 @@ function delete_metadata($meta_type, $object_id, $meta_key, $meta_value = '', $d * * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user) * @param int $object_id ID of the object metadata is for - * @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for + * @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for * the specified object. - * @param bool $single Optional, default is false. If true, return only the first value of the - * specified meta_key. This parameter has no effect if meta_key is not specified. + * @param bool $single Optional, default is false. If true, return only the first value of the + * specified meta_key. This parameter has no effect if meta_key is not specified. * @return string|array Single metadata value, or array of values */ function get_metadata($meta_type, $object_id, $meta_key = '', $single = false) { @@ -485,19 +487,21 @@ function delete_metadata_by_mid( $meta_type, $meta_id ) { do_action( "delete_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value ); - if ( 'post' == $meta_type ) - do_action( 'delete_postmeta', $meta_id ); + // Old-style action. + if ( 'post' == $meta_type || 'comment' == $meta_type ) + do_action( "delete_{$meta_type}meta", $meta_id ); // Run the query, will return true if deleted, false otherwise - $result = (bool) $wpdb->query( $wpdb->prepare( "DELETE FROM $table WHERE $id_column = %d LIMIT 1;", $meta_id ) ); + $result = (bool) $wpdb->delete( $table, array( $id_column => $meta_id ) ); // Clear the caches. wp_cache_delete($object_id, $meta_type . '_meta'); do_action( "deleted_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value ); - if ( 'post' == $meta_type ) - do_action( 'deleted_postmeta', $meta_id ); + // Old-style action. + if ( 'post' == $meta_type || 'comment' == $meta_type ) + do_action( "deleted_{$meta_type}meta", $meta_id ); return $result; @@ -861,5 +865,3 @@ function register_meta( $meta_type, $meta_key, $sanitize_callback, $auth_callbac if ( is_callable( $auth_callback ) ) add_filter( "auth_{$meta_type}_meta_{$meta_key}", $auth_callback, 10, 6 ); } - -?> diff --git a/wp-includes/ms-blogs.php b/wp-includes/ms-blogs.php index 0bd6a92b8..8f66aaddc 100644 --- a/wp-includes/ms-blogs.php +++ b/wp-includes/ms-blogs.php @@ -252,6 +252,8 @@ function refresh_blog_details( $blog_id ) { wp_cache_delete( md5( $details->domain . $details->path ) , 'blog-lookup' ); wp_cache_delete( 'current_blog_' . $details->domain, 'site-options' ); wp_cache_delete( 'current_blog_' . $details->domain . $details->path, 'site-options' ); + + do_action( 'refresh_blog_details', $blog_id ); } /** @@ -709,4 +711,23 @@ function _update_blog_date_on_post_publish( $new_status, $old_status, $post ) { wpmu_update_blogs_date(); } -?> +/** + * Handler for updating the blog date when a published post is deleted. + * + * @since 3.4.0 + * + * @param int $post_id Post ID + */ +function _update_blog_date_on_post_delete( $post_id ) { + $post = get_post( $post_id ); + + $post_type_obj = get_post_type_object( $post->post_type ); + if ( ! $post_type_obj->public ) + return; + + if ( 'publish' != $post->post_status ) + return; + + wpmu_update_blogs_date(); +} + diff --git a/wp-includes/ms-default-constants.php b/wp-includes/ms-default-constants.php index 12dc661a3..cc341b140 100644 --- a/wp-includes/ms-default-constants.php +++ b/wp-includes/ms-default-constants.php @@ -136,5 +136,3 @@ function ms_subdomain_constants() { } } add_action( 'init', 'ms_subdomain_constants' ); - -?> diff --git a/wp-includes/ms-default-filters.php b/wp-includes/ms-default-filters.php index 9e42f62d2..44d8294ac 100644 --- a/wp-includes/ms-default-filters.php +++ b/wp-includes/ms-default-filters.php @@ -35,7 +35,7 @@ add_filter( 'allowed_redirect_hosts', 'redirect_this_site' ); // Administration add_filter( 'term_id_filter', 'global_terms', 10, 2 ); add_action( 'publish_post', 'update_posts_count' ); -add_action( 'delete_post', 'wpmu_update_blogs_date' ); +add_action( 'delete_post', '_update_blog_date_on_post_delete' ); add_action( 'transition_post_status', '_update_blog_date_on_post_publish', 10, 3 ); add_action( 'admin_init', 'wp_schedule_update_network_counts'); add_action( 'update_network_counts', 'wp_update_network_counts'); @@ -60,5 +60,3 @@ add_filter( 'force_filtered_html_on_import', '__return_true' ); // WP_HOME and WP_SITEURL should not have any effect in MS remove_filter( 'option_siteurl', '_config_wp_siteurl' ); remove_filter( 'option_home', '_config_wp_home' ); - -?> diff --git a/wp-includes/ms-deprecated.php b/wp-includes/ms-deprecated.php index 9b910b72e..9b9c43f9d 100644 --- a/wp-includes/ms-deprecated.php +++ b/wp-includes/ms-deprecated.php @@ -49,7 +49,7 @@ function is_site_admin( $user_login = '' ) { return false; } else { $user = get_user_by( 'login', $user_login ); - if ( empty( $user->ID ) ) + if ( ! $user->exists() ) return false; $user_id = $user->ID; } @@ -270,5 +270,3 @@ function wpmu_admin_redirect_add_updated_param( $url = '' ) { } return $url; } - -?> \ No newline at end of file diff --git a/wp-includes/ms-files.php b/wp-includes/ms-files.php index e7ab0a4cc..100ba2c6d 100644 --- a/wp-includes/ms-files.php +++ b/wp-includes/ms-files.php @@ -80,4 +80,3 @@ if ( ( $client_last_modified && $client_etag ) // If we made it this far, just serve the file readfile( $file ); -?> diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php index c9cd15fd7..f4fe306b7 100644 --- a/wp-includes/ms-functions.php +++ b/wp-includes/ms-functions.php @@ -185,7 +185,7 @@ function add_user_to_blog( $blog_id, $user_id, $role ) { $user = new WP_User($user_id); - if ( empty( $user->ID ) ) { + if ( ! $user->exists() ) { restore_current_blog(); return new WP_Error('user_does_not_exist', __('That user does not exist.')); } @@ -247,7 +247,7 @@ function remove_user_from_blog($user_id, $blog_id = '', $reassign = '') { // wp_revoke_user($user_id); $user = new WP_User($user_id); - if ( empty( $user->ID ) ) { + if ( ! $user->exists() ) { restore_current_blog(); return new WP_Error('user_does_not_exist', __('That user does not exist.')); } @@ -279,8 +279,8 @@ function remove_user_from_blog($user_id, $blog_id = '', $reassign = '') { * * @param string $domain The new blog's domain. * @param string $path The new blog's path. - * @param string $string The new blog's title. - * @param int $site Optional. Defaults to 1. + * @param string $weblog_title The new blog's title. + * @param int $site_id Optional. Defaults to 1. * @return int The ID of the newly created blog */ function create_empty_blog( $domain, $path, $weblog_title, $site_id = 1 ) { @@ -436,10 +436,8 @@ function wpmu_validate_user_signup($user_name, $user_email) { $orig_username = $user_name; $user_name = preg_replace( '/\s+/', '', sanitize_user( $user_name, true ) ); - $maybe = array(); - preg_match( '/[a-z0-9]+/', $user_name, $maybe ); - if ( $user_name != $orig_username || $user_name != $maybe[0] ) { + if ( $user_name != $orig_username || preg_match( '/[^a-z0-9]/', $user_name ) ) { $errors->add( 'user_name', __( 'Only lowercase letters (a-z) and numbers are allowed.' ) ); $user_name = $orig_username; } @@ -447,7 +445,7 @@ function wpmu_validate_user_signup($user_name, $user_email) { $user_email = sanitize_email( $user_email ); if ( empty( $user_name ) ) - $errors->add('user_name', __('Please enter a username')); + $errors->add('user_name', __( 'Please enter a username.' ) ); $illegal_names = get_site_option( 'illegal_names' ); if ( is_array( $illegal_names ) == false ) { @@ -455,13 +453,13 @@ function wpmu_validate_user_signup($user_name, $user_email) { add_site_option( 'illegal_names', $illegal_names ); } if ( in_array( $user_name, $illegal_names ) == true ) - $errors->add('user_name', __('That username is not allowed')); + $errors->add('user_name', __( 'That username is not allowed.' ) ); if ( is_email_address_unsafe( $user_email ) ) $errors->add('user_email', __('You cannot use that email address to signup. We are having problems with them blocking some of our email. Please use another email provider.')); if ( strlen( $user_name ) < 4 ) - $errors->add('user_name', __('Username must be at least 4 characters')); + $errors->add('user_name', __( 'Username must be at least 4 characters.' ) ); if ( strpos( ' ' . $user_name, '_' ) != false ) $errors->add( 'user_name', __( 'Sorry, usernames may not contain the character “_”!' ) ); @@ -473,7 +471,7 @@ function wpmu_validate_user_signup($user_name, $user_email) { $errors->add('user_name', __('Sorry, usernames must have letters too!')); if ( !is_email( $user_email ) ) - $errors->add('user_email', __('Please enter a correct email address')); + $errors->add('user_email', __( 'Please enter a correct email address.' ) ); $limited_email_domains = get_site_option( 'limited_email_domains' ); if ( is_array( $limited_email_domains ) && empty( $limited_email_domains ) == false ) { @@ -498,7 +496,7 @@ function wpmu_validate_user_signup($user_name, $user_email) { $diff = $now - $registered_at; // If registered more than two days ago, cancel registration and let this signup go through. if ( $diff > 172800 ) - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->signups WHERE user_login = %s", $user_name) ); + $wpdb->delete( $wpdb->signups, array( 'user_login' => $user_name ) ); else $errors->add('user_name', __('That username is currently reserved but may be available in a couple of days.')); @@ -511,7 +509,7 @@ function wpmu_validate_user_signup($user_name, $user_email) { $diff = current_time( 'timestamp', true ) - mysql2date('U', $signup->registered); // If registered more than two days ago, cancel registration and let this signup go through. if ( $diff > 172800 ) - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->signups WHERE user_email = %s", $user_email) ); + $wpdb->delete( $wpdb->signups, array( 'user_email' => $user_email ) ); else $errors->add('user_email', __('That email address has already been used. Please check your inbox for an activation email. It will become available in a couple of days if you do nothing.')); } @@ -561,16 +559,16 @@ function wpmu_validate_blog_signup($blogname, $blog_title, $user = '') { $illegal_names = array_merge($illegal_names, apply_filters( 'subdirectory_reserved_names', array( 'page', 'comments', 'blog', 'files', 'feed' ) ) ); if ( empty( $blogname ) ) - $errors->add('blogname', __('Please enter a site name')); + $errors->add('blogname', __( 'Please enter a site name.' ) ); if ( preg_match( '/[^a-z0-9]+/', $blogname ) ) - $errors->add('blogname', __('Only lowercase letters and numbers allowed')); + $errors->add('blogname', __( 'Only lowercase letters and numbers allowed.' ) ); if ( in_array( $blogname, $illegal_names ) == true ) - $errors->add('blogname', __('That name is not allowed')); + $errors->add('blogname', __( 'That name is not allowed.' ) ); if ( strlen( $blogname ) < 4 && !is_super_admin() ) - $errors->add('blogname', __('Site name must be at least 4 characters')); + $errors->add('blogname', __( 'Site name must be at least 4 characters.' ) ); if ( strpos( ' ' . $blogname, '_' ) != false ) $errors->add( 'blogname', __( 'Sorry, site names may not contain the character “_”!' ) ); @@ -590,7 +588,7 @@ function wpmu_validate_blog_signup($blogname, $blog_title, $user = '') { $blog_title = stripslashes( $blog_title ); if ( empty( $blog_title ) ) - $errors->add('blog_title', __('Please enter a site title')); + $errors->add('blog_title', __( 'Please enter a site title.' ) ); // Check if the domain/path has been used already. if ( is_subdomain_install() ) { @@ -614,7 +612,7 @@ function wpmu_validate_blog_signup($blogname, $blog_title, $user = '') { $diff = current_time( 'timestamp', true ) - mysql2date('U', $signup->registered); // If registered more than two days ago, cancel registration and let this signup go through. if ( $diff > 172800 ) - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->signups WHERE domain = %s AND path = %s", $mydomain, $path) ); + $wpdb->delete( $wpdb->signups, array( 'domain' => $mydomain , 'path' => $path ) ); else $errors->add('blogname', __('That site is currently reserved but may be available in a couple days.')); } @@ -845,7 +843,7 @@ function wpmu_activate_signup($key) { return new WP_Error( 'already_active', __( 'The site is already active.' ), $signup ); } - $meta = unserialize($signup->meta); + $meta = maybe_unserialize($signup->meta); $user_login = $wpdb->escape($signup->user_login); $user_email = $wpdb->escape($signup->user_email); $password = wp_generate_password( 12, false ); @@ -880,7 +878,7 @@ function wpmu_activate_signup($key) { // TODO: What to do if we create a user but cannot create a blog? if ( is_wp_error($blog_id) ) { // If blog is taken, that means a previous attempt to activate this blog failed in between creating the blog and - // setting the activation flag. Let's just set the active flag and instruct the user to reset their password. + // setting the activation flag. Let's just set the active flag and instruct the user to reset their password. if ( 'blog_taken' == $blog_id->get_error_code() ) { $blog_id->add_data( $signup ); $wpdb->update( $wpdb->signups, array( 'active' => 1, 'activated' => $now ), array( 'activation_key' => $key ) ); @@ -1044,6 +1042,7 @@ Disable these notifications: %4s' ), $blogname, $siteurl, $_SERVER['REMOTE_ADDR' * the notification email. * * @since MU + * @uses apply_filters() Filter newuser_notify_siteadmin to change the content of the email message * * @param int $user_id The new user's ID. * @return bool @@ -1065,7 +1064,7 @@ Remote IP: %2s Disable these notifications: %3s'), $user->user_login, $_SERVER['REMOTE_ADDR'], $options_site_url); - $msg = apply_filters( 'newuser_notify_siteadmin', $msg ); + $msg = apply_filters( 'newuser_notify_siteadmin', $msg, $user ); wp_mail( $email, sprintf(__('New User Registration: %s'), $user->user_login), $msg ); return true; } @@ -1161,8 +1160,9 @@ function install_blog($blog_id, $blog_title = '') { $wpdb->update( $wpdb->options, array('option_value' => ''), array('option_name' => 'admin_email') ); // remove all perms - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE meta_key = %s", $table_prefix.'user_level') ); - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE meta_key = %s", $table_prefix.'capabilities') ); + $wpdb->delete( $wpdb->usermeta, array( 'meta_key' => $table_prefix.'user_level' ) ); + + $wpdb->delete( $wpdb->usermeta, array( 'meta_key' => $table_prefix.'capabilities' ) ); $wpdb->suppress_errors( false ); } @@ -1368,7 +1368,8 @@ function get_most_recent_post_of_user( $user_id ) { // Walk through each blog and get the most recent post // published by $user_id foreach ( (array) $user_blogs as $blog ) { - $recent_post = $wpdb->get_row( $wpdb->prepare("SELECT ID, post_date_gmt FROM {$wpdb->base_prefix}{$blog->userblog_id}_posts WHERE post_author = %d AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1", $user_id ), ARRAY_A); + $prefix = $wpdb->get_blog_prefix( $blog->userblog_id ); + $recent_post = $wpdb->get_row( $wpdb->prepare("SELECT ID, post_date_gmt FROM {$prefix}posts WHERE post_author = %d AND post_type = 'post' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT 1", $user_id ), ARRAY_A); // Make sure we found a post if ( isset($recent_post['ID']) ) { @@ -1459,9 +1460,6 @@ function recurse_dirsize( $directory ) { /** * Check whether a blog has used its allotted upload space. * - * Used by get_dirsize() to get a directory's size when it contains - * other directories. - * * @since MU * @uses get_dirsize() * @@ -1734,9 +1732,9 @@ function maybe_add_existing_user_to_blog() { delete_option( 'new_user_' . $key ); if ( empty( $details ) || is_wp_error( add_existing_user_to_blog( $details ) ) ) - wp_die( sprintf(__('An error occurred adding you to this site. Back to the <a href="%s">homepage</a>.'), site_url() ) ); + wp_die( sprintf(__('An error occurred adding you to this site. Back to the <a href="%s">homepage</a>.'), home_url() ) ); - wp_die( sprintf(__('You have been added to this site. Please visit the <a href="%s">homepage</a> or <a href="%s">log in</a> using your username and password.'), site_url(), admin_url() ), __('Success') ); + wp_die( sprintf(__('You have been added to this site. Please visit the <a href="%s">homepage</a> or <a href="%s">log in</a> using your username and password.'), home_url(), admin_url() ), __('Success') ); } /** @@ -1862,7 +1860,7 @@ function is_user_option_local( $key, $user_id = 0, $blog_id = 0 ) { if ( $blog_id == 0 ) $blog_id = $wpdb->blogid; - $local_key = $wpdb->base_prefix . $blog_id . '_' . $key; + $local_key = $wpdb->get_blog_prefix( $blog_id ) . $key; if ( isset( $current_user->$local_key ) ) return true; @@ -1948,7 +1946,7 @@ function filter_SSL( $url ) { $arrURL = parse_url( $url ); if ( force_ssl_content() && is_ssl() ) { - if ( 'http' === $arrURL['scheme'] && 'https' !== $arrURL['scheme'] ) + if ( 'http' === $arrURL['scheme'] ) $url = str_replace( $arrURL['scheme'], 'https', $url ); } @@ -1982,5 +1980,3 @@ function wp_update_network_counts() { $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(ID) as c FROM $wpdb->users WHERE spam = '0' AND deleted = '0'") ); update_site_option( 'user_count', $count ); } - -?> \ No newline at end of file diff --git a/wp-includes/ms-load.php b/wp-includes/ms-load.php index 5ff0526fd..58826e780 100644 --- a/wp-includes/ms-load.php +++ b/wp-includes/ms-load.php @@ -211,10 +211,12 @@ function wpmu_current_site() { } // Still no dice. + wp_load_translations_early(); + if ( 1 == count( $sites ) ) - wp_die( sprintf( /*WP_I18N_BLOG_DOESNT_EXIST*/'That site does not exist. Please try <a href="%s">%s</a>.'/*/WP_I18N_BLOG_DOESNT_EXIST*/, $sites[0]->domain . $sites[0]->path ) ); + wp_die( sprintf( __( 'That site does not exist. Please try <a href="%s">%s</a>.' ), 'http://' . $sites[0]->domain . $sites[0]->path ) ); else - wp_die( /*WP_I18N_NO_SITE_DEFINED*/'No site defined on this host. If you are the owner of this site, please check <a href="http://codex.wordpress.org/Debugging_a_WordPress_Network">Debugging a WordPress Network</a> for help.'/*/WP_I18N_NO_SITE_DEFINED*/ ); + wp_die( __( 'No site defined on this host. If you are the owner of this site, please check <a href="http://codex.wordpress.org/Debugging_a_WordPress_Network">Debugging a WordPress Network</a> for help.' ) ); } /** @@ -228,19 +230,21 @@ function wpmu_current_site() { function ms_not_installed() { global $wpdb, $domain, $path; - $title = /*WP_I18N_FATAL_ERROR*/'Error establishing database connection'/*/WP_I18N_FATAL_ERROR*/; + wp_load_translations_early(); + + $title = __( 'Error establishing database connection' ); $msg = '<h1>' . $title . '</h1>'; if ( ! is_admin() ) die( $msg ); - $msg .= '<p>' . /*WP_I18N_CONTACT_OWNER*/'If your site does not display, please contact the owner of this network.'/*/WP_I18N_CONTACT_OWNER*/ . ''; - $msg .= ' ' . /*WP_I18N_CHECK_MYSQL*/'If you are the owner of this network please check that MySQL is running properly and all tables are error free.'/*/WP_I18N_CHECK_MYSQL*/ . '</p>'; + $msg .= '<p>' . __( 'If your site does not display, please contact the owner of this network.' ) . ''; + $msg .= ' ' . __( 'If you are the owner of this network please check that MySQL is running properly and all tables are error free.' ) . '</p>'; if ( false && !$wpdb->get_var( "SHOW TABLES LIKE '$wpdb->site'" ) ) - $msg .= '<p>' . sprintf( /*WP_I18N_TABLES_MISSING_LONG*/'<strong>Database tables are missing.</strong> This means that MySQL is not running, WordPress was not installed properly, or someone deleted <code>%s</code>. You really should look at your database now.'/*/WP_I18N_TABLES_MISSING_LONG*/, $wpdb->site ) . '</p>'; + $msg .= '<p>' . sprintf( __( '<strong>Database tables are missing.</strong> This means that MySQL is not running, WordPress was not installed properly, or someone deleted <code>%s</code>. You really should look at your database now.' ), $wpdb->site ) . '</p>'; else - $msg .= '<p>' . sprintf( /*WP_I18N_NO_SITE_FOUND*/'<strong>Could not find site <code>%1$s</code>.</strong> Searched for table <code>%2$s</code> in database <code>%3$s</code>. Is that right?'/*/WP_I18N_NO_SITE_FOUND*/, rtrim( $domain . $path, '/' ), $wpdb->blogs, DB_NAME ) . '</p>'; - $msg .= '<p><strong>' . /*WP_I18N_WHAT_DO_I_DO*/'What do I do now?'/*/WP_I18N_WHAT_DO_I_DO*/ . '</strong> '; - $msg .= /*WP_I18N_RTFM*/'Read the <a target="_blank" href="http://codex.wordpress.org/Debugging_a_WordPress_Network">bug report</a> page. Some of the guidelines there may help you figure out what went wrong.'/*/WP_I18N_RTFM*/; - $msg .= ' ' . /*WP_I18N_STUCK*/'If you’re still stuck with this message, then check that your database contains the following tables:'/*/WP_I18N_STUCK*/ . '</p><ul>'; + $msg .= '<p>' . sprintf( __( '<strong>Could not find site <code>%1$s</code>.</strong> Searched for table <code>%2$s</code> in database <code>%3$s</code>. Is that right?' ), rtrim( $domain . $path, '/' ), $wpdb->blogs, DB_NAME ) . '</p>'; + $msg .= '<p><strong>' . __( 'What do I do now?' ) . '</strong> '; + $msg .= __( 'Read the <a target="_blank" href="http://codex.wordpress.org/Debugging_a_WordPress_Network">bug report</a> page. Some of the guidelines there may help you figure out what went wrong.' ); + $msg .= ' ' . __( 'If you’re still stuck with this message, then check that your database contains the following tables:' ) . '</p><ul>'; foreach ( $wpdb->tables('global') as $t => $table ) { if ( 'sitecategories' == $t ) continue; @@ -250,5 +254,3 @@ function ms_not_installed() { wp_die( $msg, $title ); } - -?> \ No newline at end of file diff --git a/wp-includes/ms-settings.php b/wp-includes/ms-settings.php index 42df103d4..5dd460e30 100644 --- a/wp-includes/ms-settings.php +++ b/wp-includes/ms-settings.php @@ -31,7 +31,8 @@ if ( !isset( $current_site ) || !isset( $current_blog ) ) { $domain = substr( $domain, 0, -4 ); $_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -4 ); } else { - wp_die( /*WP_I18N_NO_PORT_NUMBER*/'Multisite only works without the port number in the URL.'/*/WP_I18N_NO_PORT_NUMBER*/ ); + wp_load_translations_early(); + wp_die( __( 'Multisite only works without the port number in the URL.' ) ); } } @@ -116,8 +117,9 @@ if ( !isset( $current_site ) || !isset( $current_blog ) ) { if ( defined( 'WP_INSTALLING' ) ) { $current_blog->blog_id = $blog_id = 1; } else { - $msg = ! $wpdb->get_var( "SHOW TABLES LIKE '$wpdb->site'" ) ? ' ' . /*WP_I18N_TABLES_MISSING*/'Database tables are missing.'/*/WP_I18N_TABLES_MISSING*/ : ''; - wp_die( /*WP_I18N_NO_BLOG*/'No site by that name on this system.'/*/WP_I18N_NO_BLOG*/ . $msg ); + wp_load_translations_early(); + $msg = ! $wpdb->get_var( "SHOW TABLES LIKE '$wpdb->site'" ) ? ' ' . __( 'Database tables are missing.' ) : ''; + wp_die( __( 'No site by that name on this system.' ) . $msg ); } } } diff --git a/wp-includes/nav-menu-template.php b/wp-includes/nav-menu-template.php index f412c8db4..4b9293b1d 100644 --- a/wp-includes/nav-menu-template.php +++ b/wp-includes/nav-menu-template.php @@ -37,7 +37,7 @@ class Walker_Nav_Menu extends Walker { * @param string $output Passed by reference. Used to append additional content. * @param int $depth Depth of page. Used for padding. */ - function start_lvl(&$output, $depth) { + function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"sub-menu\">\n"; } @@ -49,7 +49,7 @@ class Walker_Nav_Menu extends Walker { * @param string $output Passed by reference. Used to append additional content. * @param int $depth Depth of page. Used for padding. */ - function end_lvl(&$output, $depth) { + function end_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "$indent</ul>\n"; } @@ -64,7 +64,7 @@ class Walker_Nav_Menu extends Walker { * @param int $current_page Menu item ID. * @param object $args */ - function start_el(&$output, $item, $depth, $args) { + function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; @@ -74,10 +74,10 @@ class Walker_Nav_Menu extends Walker { $classes[] = 'menu-item-' . $item->ID; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ); - $class_names = ' class="' . esc_attr( $class_names ) . '"'; + $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : ''; $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args ); - $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : ''; + $id = $id ? ' id="' . esc_attr( $id ) . '"' : ''; $output .= $indent . '<li' . $id . $value . $class_names .'>'; @@ -103,7 +103,7 @@ class Walker_Nav_Menu extends Walker { * @param object $item Page data object. Not used. * @param int $depth Depth of page. Not Used. */ - function end_el(&$output, $item, $depth) { + function end_el( &$output, $item, $depth = 0, $args = array() ) { $output .= "</li>\n"; } } @@ -113,7 +113,7 @@ class Walker_Nav_Menu extends Walker { * * Optional $args contents: * - * menu - The menu that is desired. Accepts (matching in order) id, slug, name. Defaults to blank. + * menu - The menu that is desired. Accepts (matching in order) id, slug, name. Defaults to blank. * menu_class - CSS class to use for the ul element which forms the menu. Defaults to 'menu'. * menu_id - The ID that is applied to the ul element which forms the menu. Defaults to the menu slug, incremented. * container - Whether to wrap the ul, and what to wrap it with. Defaults to 'div'. @@ -125,9 +125,9 @@ class Walker_Nav_Menu extends Walker { * link_before - Text before the link. * link_after - Text after the link. * echo - Whether to echo the menu or return it. Defaults to echo. - * depth - how many levels of the hierarchy are to be included. 0 means all. Defaults to 0. + * depth - how many levels of the hierarchy are to be included. 0 means all. Defaults to 0. * walker - allows a custom walker to be specified. - * theme_location - the location in the theme to be used. Must be registered with register_nav_menu() in order to be selectable by the user. + * theme_location - the location in the theme to be used. Must be registered with register_nav_menu() in order to be selectable by the user. * items_wrap - How the list items should be wrapped. Defaults to a ul with an id and class. Uses printf() format with numbered placeholders. * * @since 3.0.0 diff --git a/wp-includes/nav-menu.php b/wp-includes/nav-menu.php index 6a622b27a..361a8de60 100644 --- a/wp-includes/nav-menu.php +++ b/wp-includes/nav-menu.php @@ -554,7 +554,7 @@ function wp_get_nav_menu_items( $menu, $args = array() ) { * - object: The type of object originally represented, such as "category," "post", or "attachment." * - type_label: The singular label used to describe this type of menu item. * - post_parent: The DB ID of the original object's parent object, if any (0 otherwise). - * - menu_item_parent: The DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise. + * - menu_item_parent: The DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise. * - url: The URL to which this menu item points. * - title: The title of this menu item. * - target: The target attribute of the link element for this menu item. @@ -782,5 +782,3 @@ function _wp_auto_add_pages_to_menu( $new_status, $old_status, $post ) { wp_update_nav_menu_item( $menu_id, 0, $args ); } } - -?> diff --git a/wp-includes/option.php b/wp-includes/option.php new file mode 100644 index 000000000..33897b609 --- /dev/null +++ b/wp-includes/option.php @@ -0,0 +1,1046 @@ +<?php +/** + * Option API + * + * @package WordPress + */ + +/** + * Retrieve option value based on name of option. + * + * If the option does not exist or does not have a value, then the return value + * will be false. This is useful to check whether you need to install an option + * and is commonly used during installation of plugin options and to test + * whether upgrading is required. + * + * If the option was serialized then it will be unserialized when it is returned. + * + * @since 1.5.0 + * @package WordPress + * @subpackage Option + * @uses apply_filters() Calls 'pre_option_$option' before checking the option. + * Any value other than false will "short-circuit" the retrieval of the option + * and return the returned value. You should not try to override special options, + * but you will not be prevented from doing so. + * @uses apply_filters() Calls 'option_$option', after checking the option, with + * the option value. + * + * @param string $option Name of option to retrieve. Expected to not be SQL-escaped. + * @param mixed $default Optional. Default value to return if the option does not exist. + * @return mixed Value set for the option. + */ +function get_option( $option, $default = false ) { + global $wpdb; + + // Allow plugins to short-circuit options. + $pre = apply_filters( 'pre_option_' . $option, false ); + if ( false !== $pre ) + return $pre; + + $option = trim($option); + if ( empty($option) ) + return false; + + if ( defined( 'WP_SETUP_CONFIG' ) ) + return false; + + if ( ! defined( 'WP_INSTALLING' ) ) { + // prevent non-existent options from triggering multiple queries + $notoptions = wp_cache_get( 'notoptions', 'options' ); + if ( isset( $notoptions[$option] ) ) + return apply_filters( 'default_option_' . $option, $default ); + + $alloptions = wp_load_alloptions(); + + if ( isset( $alloptions[$option] ) ) { + $value = $alloptions[$option]; + } else { + $value = wp_cache_get( $option, 'options' ); + + if ( false === $value ) { + $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) ); + + // Has to be get_row instead of get_var because of funkiness with 0, false, null values + if ( is_object( $row ) ) { + $value = $row->option_value; + wp_cache_add( $option, $value, 'options' ); + } else { // option does not exist, so we must cache its non-existence + $notoptions[$option] = true; + wp_cache_set( 'notoptions', $notoptions, 'options' ); + return apply_filters( 'default_option_' . $option, $default ); + } + } + } + } else { + $suppress = $wpdb->suppress_errors(); + $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) ); + $wpdb->suppress_errors( $suppress ); + if ( is_object( $row ) ) + $value = $row->option_value; + else + return apply_filters( 'default_option_' . $option, $default ); + } + + // If home is not set use siteurl. + if ( 'home' == $option && '' == $value ) + return get_option( 'siteurl' ); + + if ( in_array( $option, array('siteurl', 'home', 'category_base', 'tag_base') ) ) + $value = untrailingslashit( $value ); + + return apply_filters( 'option_' . $option, maybe_unserialize( $value ) ); +} + +/** + * Protect WordPress special option from being modified. + * + * Will die if $option is in protected list. Protected options are 'alloptions' + * and 'notoptions' options. + * + * @since 2.2.0 + * @package WordPress + * @subpackage Option + * + * @param string $option Option name. + */ +function wp_protect_special_option( $option ) { + $protected = array( 'alloptions', 'notoptions' ); + if ( in_array( $option, $protected ) ) + wp_die( sprintf( __( '%s is a protected WP option and may not be modified' ), esc_html( $option ) ) ); +} + +/** + * Print option value after sanitizing for forms. + * + * @uses attr Sanitizes value. + * @since 1.5.0 + * @package WordPress + * @subpackage Option + * + * @param string $option Option name. + */ +function form_option( $option ) { + echo esc_attr( get_option( $option ) ); +} + +/** + * Loads and caches all autoloaded options, if available or all options. + * + * @since 2.2.0 + * @package WordPress + * @subpackage Option + * + * @return array List of all options. + */ +function wp_load_alloptions() { + global $wpdb; + + if ( !defined( 'WP_INSTALLING' ) || !is_multisite() ) + $alloptions = wp_cache_get( 'alloptions', 'options' ); + else + $alloptions = false; + + if ( !$alloptions ) { + $suppress = $wpdb->suppress_errors(); + if ( !$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'" ) ) + $alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" ); + $wpdb->suppress_errors($suppress); + $alloptions = array(); + foreach ( (array) $alloptions_db as $o ) { + $alloptions[$o->option_name] = $o->option_value; + } + if ( !defined( 'WP_INSTALLING' ) || !is_multisite() ) + wp_cache_add( 'alloptions', $alloptions, 'options' ); + } + + return $alloptions; +} + +/** + * Loads and caches certain often requested site options if is_multisite() and a persistent cache is not being used. + * + * @since 3.0.0 + * @package WordPress + * @subpackage Option + * + * @param int $site_id Optional site ID for which to query the options. Defaults to the current site. + */ +function wp_load_core_site_options( $site_id = null ) { + global $wpdb, $_wp_using_ext_object_cache; + + if ( !is_multisite() || $_wp_using_ext_object_cache || defined( 'WP_INSTALLING' ) ) + return; + + if ( empty($site_id) ) + $site_id = $wpdb->siteid; + + $core_options = array('site_name', 'siteurl', 'active_sitewide_plugins', '_site_transient_timeout_theme_roots', '_site_transient_theme_roots', 'site_admins', 'can_compress_scripts', 'global_terms_enabled' ); + + $core_options_in = "'" . implode("', '", $core_options) . "'"; + $options = $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value FROM $wpdb->sitemeta WHERE meta_key IN ($core_options_in) AND site_id = %d", $site_id) ); + + foreach ( $options as $option ) { + $key = $option->meta_key; + $cache_key = "{$site_id}:$key"; + $option->meta_value = maybe_unserialize( $option->meta_value ); + + wp_cache_set( $cache_key, $option->meta_value, 'site-options' ); + } +} + +/** + * Update the value of an option that was already added. + * + * You do not need to serialize values. If the value needs to be serialized, then + * it will be serialized before it is inserted into the database. Remember, + * resources can not be serialized or added as an option. + * + * If the option does not exist, then the option will be added with the option + * value, but you will not be able to set whether it is autoloaded. If you want + * to set whether an option is autoloaded, then you need to use the add_option(). + * + * @since 1.0.0 + * @package WordPress + * @subpackage Option + * + * @uses apply_filters() Calls 'pre_update_option_$option' hook to allow overwriting the + * option value to be stored. + * @uses do_action() Calls 'update_option' hook before updating the option. + * @uses do_action() Calls 'update_option_$option' and 'updated_option' hooks on success. + * + * @param string $option Option name. Expected to not be SQL-escaped. + * @param mixed $newvalue Option value. Expected to not be SQL-escaped. + * @return bool False if value was not updated and true if value was updated. + */ +function update_option( $option, $newvalue ) { + global $wpdb; + + $option = trim($option); + if ( empty($option) ) + return false; + + wp_protect_special_option( $option ); + + if ( is_object($newvalue) ) + $newvalue = clone $newvalue; + + $newvalue = sanitize_option( $option, $newvalue ); + $oldvalue = get_option( $option ); + $newvalue = apply_filters( 'pre_update_option_' . $option, $newvalue, $oldvalue ); + + // If the new and old values are the same, no need to update. + if ( $newvalue === $oldvalue ) + return false; + + if ( false === $oldvalue ) + return add_option( $option, $newvalue ); + + $notoptions = wp_cache_get( 'notoptions', 'options' ); + if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) { + unset( $notoptions[$option] ); + wp_cache_set( 'notoptions', $notoptions, 'options' ); + } + + $_newvalue = $newvalue; + $newvalue = maybe_serialize( $newvalue ); + + do_action( 'update_option', $option, $oldvalue, $_newvalue ); + if ( ! defined( 'WP_INSTALLING' ) ) { + $alloptions = wp_load_alloptions(); + if ( isset( $alloptions[$option] ) ) { + $alloptions[$option] = $_newvalue; + wp_cache_set( 'alloptions', $alloptions, 'options' ); + } else { + wp_cache_set( $option, $_newvalue, 'options' ); + } + } + + $result = $wpdb->update( $wpdb->options, array( 'option_value' => $newvalue ), array( 'option_name' => $option ) ); + + if ( $result ) { + do_action( "update_option_{$option}", $oldvalue, $_newvalue ); + do_action( 'updated_option', $option, $oldvalue, $_newvalue ); + return true; + } + return false; +} + +/** + * Add a new option. + * + * You do not need to serialize values. If the value needs to be serialized, then + * it will be serialized before it is inserted into the database. Remember, + * resources can not be serialized or added as an option. + * + * You can create options without values and then update the values later. + * Existing options will not be updated and checks are performed to ensure that you + * aren't adding a protected WordPress option. Care should be taken to not name + * options the same as the ones which are protected. + * + * @package WordPress + * @subpackage Option + * @since 1.0.0 + * + * @uses do_action() Calls 'add_option' hook before adding the option. + * @uses do_action() Calls 'add_option_$option' and 'added_option' hooks on success. + * + * @param string $option Name of option to add. Expected to not be SQL-escaped. + * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped. + * @param mixed $deprecated Optional. Description. Not used anymore. + * @param bool $autoload Optional. Default is enabled. Whether to load the option when WordPress starts up. + * @return bool False if option was not added and true if option was added. + */ +function add_option( $option, $value = '', $deprecated = '', $autoload = 'yes' ) { + global $wpdb; + + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.3' ); + + $option = trim($option); + if ( empty($option) ) + return false; + + wp_protect_special_option( $option ); + + if ( is_object($value) ) + $value = clone $value; + + $value = sanitize_option( $option, $value ); + + // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query + $notoptions = wp_cache_get( 'notoptions', 'options' ); + if ( !is_array( $notoptions ) || !isset( $notoptions[$option] ) ) + if ( false !== get_option( $option ) ) + return false; + + $_value = $value; + $value = maybe_serialize( $value ); + $autoload = ( 'no' === $autoload ) ? 'no' : 'yes'; + do_action( 'add_option', $option, $_value ); + if ( ! defined( 'WP_INSTALLING' ) ) { + if ( 'yes' == $autoload ) { + $alloptions = wp_load_alloptions(); + $alloptions[$option] = $value; + wp_cache_set( 'alloptions', $alloptions, 'options' ); + } else { + wp_cache_set( $option, $value, 'options' ); + } + } + + // This option exists now + $notoptions = wp_cache_get( 'notoptions', 'options' ); // yes, again... we need it to be fresh + if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) { + unset( $notoptions[$option] ); + wp_cache_set( 'notoptions', $notoptions, 'options' ); + } + + $result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $value, $autoload ) ); + + if ( $result ) { + do_action( "add_option_{$option}", $option, $_value ); + do_action( 'added_option', $option, $_value ); + return true; + } + return false; +} + +/** + * Removes option by name. Prevents removal of protected WordPress options. + * + * @package WordPress + * @subpackage Option + * @since 1.2.0 + * + * @uses do_action() Calls 'delete_option' hook before option is deleted. + * @uses do_action() Calls 'deleted_option' and 'delete_option_$option' hooks on success. + * + * @param string $option Name of option to remove. Expected to not be SQL-escaped. + * @return bool True, if option is successfully deleted. False on failure. + */ +function delete_option( $option ) { + global $wpdb; + + wp_protect_special_option( $option ); + + // Get the ID, if no ID then return + $row = $wpdb->get_row( $wpdb->prepare( "SELECT autoload FROM $wpdb->options WHERE option_name = %s", $option ) ); + if ( is_null( $row ) ) + return false; + do_action( 'delete_option', $option ); + $result = $wpdb->delete( $wpdb->options, array( 'option_name' => $option ) ); + if ( ! defined( 'WP_INSTALLING' ) ) { + if ( 'yes' == $row->autoload ) { + $alloptions = wp_load_alloptions(); + if ( is_array( $alloptions ) && isset( $alloptions[$option] ) ) { + unset( $alloptions[$option] ); + wp_cache_set( 'alloptions', $alloptions, 'options' ); + } + } else { + wp_cache_delete( $option, 'options' ); + } + } + if ( $result ) { + do_action( "delete_option_$option", $option ); + do_action( 'deleted_option', $option ); + return true; + } + return false; +} + +/** + * Delete a transient. + * + * @since 2.8.0 + * @package WordPress + * @subpackage Transient + * + * @uses do_action() Calls 'delete_transient_$transient' hook before transient is deleted. + * @uses do_action() Calls 'deleted_transient' hook on success. + * + * @param string $transient Transient name. Expected to not be SQL-escaped. + * @return bool true if successful, false otherwise + */ +function delete_transient( $transient ) { + global $_wp_using_ext_object_cache; + + do_action( 'delete_transient_' . $transient, $transient ); + + if ( $_wp_using_ext_object_cache ) { + $result = wp_cache_delete( $transient, 'transient' ); + } else { + $option_timeout = '_transient_timeout_' . $transient; + $option = '_transient_' . $transient; + $result = delete_option( $option ); + if ( $result ) + delete_option( $option_timeout ); + } + + if ( $result ) + do_action( 'deleted_transient', $transient ); + return $result; +} + +/** + * Get the value of a transient. + * + * If the transient does not exist or does not have a value, then the return value + * will be false. + * + * @uses apply_filters() Calls 'pre_transient_$transient' hook before checking the transient. + * Any value other than false will "short-circuit" the retrieval of the transient + * and return the returned value. + * @uses apply_filters() Calls 'transient_$option' hook, after checking the transient, with + * the transient value. + * + * @since 2.8.0 + * @package WordPress + * @subpackage Transient + * + * @param string $transient Transient name. Expected to not be SQL-escaped + * @return mixed Value of transient + */ +function get_transient( $transient ) { + global $_wp_using_ext_object_cache; + + $pre = apply_filters( 'pre_transient_' . $transient, false ); + if ( false !== $pre ) + return $pre; + + if ( $_wp_using_ext_object_cache ) { + $value = wp_cache_get( $transient, 'transient' ); + } else { + $transient_option = '_transient_' . $transient; + if ( ! defined( 'WP_INSTALLING' ) ) { + // If option is not in alloptions, it is not autoloaded and thus has a timeout + $alloptions = wp_load_alloptions(); + if ( !isset( $alloptions[$transient_option] ) ) { + $transient_timeout = '_transient_timeout_' . $transient; + if ( get_option( $transient_timeout ) < time() ) { + delete_option( $transient_option ); + delete_option( $transient_timeout ); + return false; + } + } + } + + $value = get_option( $transient_option ); + } + + return apply_filters( 'transient_' . $transient, $value ); +} + +/** + * Set/update the value of a transient. + * + * You do not need to serialize values. If the value needs to be serialized, then + * it will be serialized before it is set. + * + * @since 2.8.0 + * @package WordPress + * @subpackage Transient + * + * @uses apply_filters() Calls 'pre_set_transient_$transient' hook to allow overwriting the + * transient value to be stored. + * @uses do_action() Calls 'set_transient_$transient' and 'setted_transient' hooks on success. + * + * @param string $transient Transient name. Expected to not be SQL-escaped. + * @param mixed $value Transient value. Expected to not be SQL-escaped. + * @param int $expiration Time until expiration in seconds, default 0 + * @return bool False if value was not set and true if value was set. + */ +function set_transient( $transient, $value, $expiration = 0 ) { + global $_wp_using_ext_object_cache; + + $value = apply_filters( 'pre_set_transient_' . $transient, $value ); + + if ( $_wp_using_ext_object_cache ) { + $result = wp_cache_set( $transient, $value, 'transient', $expiration ); + } else { + $transient_timeout = '_transient_timeout_' . $transient; + $transient = '_transient_' . $transient; + if ( false === get_option( $transient ) ) { + $autoload = 'yes'; + if ( $expiration ) { + $autoload = 'no'; + add_option( $transient_timeout, time() + $expiration, '', 'no' ); + } + $result = add_option( $transient, $value, '', $autoload ); + } else { + if ( $expiration ) + update_option( $transient_timeout, time() + $expiration ); + $result = update_option( $transient, $value ); + } + } + if ( $result ) { + do_action( 'set_transient_' . $transient ); + do_action( 'setted_transient', $transient ); + } + return $result; +} + +/** + * Saves and restores user interface settings stored in a cookie. + * + * Checks if the current user-settings cookie is updated and stores it. When no + * cookie exists (different browser used), adds the last saved cookie restoring + * the settings. + * + * @package WordPress + * @subpackage Option + * @since 2.7.0 + */ +function wp_user_settings() { + + if ( ! is_admin() ) + return; + + if ( defined('DOING_AJAX') ) + return; + + if ( ! $user = wp_get_current_user() ) + return; + + $settings = get_user_option( 'user-settings', $user->ID ); + + if ( isset( $_COOKIE['wp-settings-' . $user->ID] ) ) { + $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] ); + + if ( ! empty( $cookie ) && strpos( $cookie, '=' ) ) { + if ( $cookie == $settings ) + return; + + $last_time = (int) get_user_option( 'user-settings-time', $user->ID ); + $saved = isset( $_COOKIE['wp-settings-time-' . $user->ID]) ? preg_replace( '/[^0-9]/', '', $_COOKIE['wp-settings-time-' . $user->ID] ) : 0; + + if ( $saved > $last_time ) { + update_user_option( $user->ID, 'user-settings', $cookie, false ); + update_user_option( $user->ID, 'user-settings-time', time() - 5, false ); + return; + } + } + } + + setcookie( 'wp-settings-' . $user->ID, $settings, time() + 31536000, SITECOOKIEPATH ); + setcookie( 'wp-settings-time-' . $user->ID, time(), time() + 31536000, SITECOOKIEPATH ); + $_COOKIE['wp-settings-' . $user->ID] = $settings; +} + +/** + * Retrieve user interface setting value based on setting name. + * + * @package WordPress + * @subpackage Option + * @since 2.7.0 + * + * @param string $name The name of the setting. + * @param string $default Optional default value to return when $name is not set. + * @return mixed the last saved user setting or the default value/false if it doesn't exist. + */ +function get_user_setting( $name, $default = false ) { + + $all = get_all_user_settings(); + + return isset($all[$name]) ? $all[$name] : $default; +} + +/** + * Add or update user interface setting. + * + * Both $name and $value can contain only ASCII letters, numbers and underscores. + * This function has to be used before any output has started as it calls setcookie(). + * + * @package WordPress + * @subpackage Option + * @since 2.8.0 + * + * @param string $name The name of the setting. + * @param string $value The value for the setting. + * @return bool true if set successfully/false if not. + */ +function set_user_setting( $name, $value ) { + + if ( headers_sent() ) + return false; + + $all = get_all_user_settings(); + $name = preg_replace( '/[^A-Za-z0-9_]+/', '', $name ); + + if ( empty($name) ) + return false; + + $all[$name] = $value; + + return wp_set_all_user_settings($all); +} + +/** + * Delete user interface settings. + * + * Deleting settings would reset them to the defaults. + * This function has to be used before any output has started as it calls setcookie(). + * + * @package WordPress + * @subpackage Option + * @since 2.7.0 + * + * @param mixed $names The name or array of names of the setting to be deleted. + * @return bool true if deleted successfully/false if not. + */ +function delete_user_setting( $names ) { + + if ( headers_sent() ) + return false; + + $all = get_all_user_settings(); + $names = (array) $names; + + foreach ( $names as $name ) { + if ( isset($all[$name]) ) { + unset($all[$name]); + $deleted = true; + } + } + + if ( isset($deleted) ) + return wp_set_all_user_settings($all); + + return false; +} + +/** + * Retrieve all user interface settings. + * + * @package WordPress + * @subpackage Option + * @since 2.7.0 + * + * @return array the last saved user settings or empty array. + */ +function get_all_user_settings() { + global $_updated_user_settings; + + if ( ! $user = wp_get_current_user() ) + return array(); + + if ( isset($_updated_user_settings) && is_array($_updated_user_settings) ) + return $_updated_user_settings; + + $all = array(); + if ( isset($_COOKIE['wp-settings-' . $user->ID]) ) { + $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] ); + + if ( $cookie && strpos($cookie, '=') ) // the '=' cannot be 1st char + parse_str($cookie, $all); + + } else { + $option = get_user_option('user-settings', $user->ID); + if ( $option && is_string($option) ) + parse_str( $option, $all ); + } + + return $all; +} + +/** + * Private. Set all user interface settings. + * + * @package WordPress + * @subpackage Option + * @since 2.8.0 + * + * @param unknown $all + * @return bool + */ +function wp_set_all_user_settings($all) { + global $_updated_user_settings; + + if ( ! $user = wp_get_current_user() ) + return false; + + $_updated_user_settings = $all; + $settings = ''; + foreach ( $all as $k => $v ) { + $v = preg_replace( '/[^A-Za-z0-9_]+/', '', $v ); + $settings .= $k . '=' . $v . '&'; + } + + $settings = rtrim($settings, '&'); + + update_user_option( $user->ID, 'user-settings', $settings, false ); + update_user_option( $user->ID, 'user-settings-time', time(), false ); + + return true; +} + +/** + * Delete the user settings of the current user. + * + * @package WordPress + * @subpackage Option + * @since 2.7.0 + */ +function delete_all_user_settings() { + if ( ! $user = wp_get_current_user() ) + return; + + update_user_option( $user->ID, 'user-settings', '', false ); + setcookie('wp-settings-' . $user->ID, ' ', time() - 31536000, SITECOOKIEPATH); +} + +/** + * Retrieve site option value based on name of option. + * + * @see get_option() + * @package WordPress + * @subpackage Option + * @since 2.8.0 + * + * @uses apply_filters() Calls 'pre_site_option_$option' before checking the option. + * Any value other than false will "short-circuit" the retrieval of the option + * and return the returned value. + * @uses apply_filters() Calls 'site_option_$option', after checking the option, with + * the option value. + * + * @param string $option Name of option to retrieve. Expected to not be SQL-escaped. + * @param mixed $default Optional value to return if option doesn't exist. Default false. + * @param bool $use_cache Whether to use cache. Multisite only. Default true. + * @return mixed Value set for the option. + */ +function get_site_option( $option, $default = false, $use_cache = true ) { + global $wpdb; + + // Allow plugins to short-circuit site options. + $pre = apply_filters( 'pre_site_option_' . $option, false ); + if ( false !== $pre ) + return $pre; + + if ( ! is_multisite() ) { + $default = apply_filters( 'default_site_option_' . $option, $default ); + $value = get_option($option, $default); + } else { + $cache_key = "{$wpdb->siteid}:$option"; + if ( $use_cache ) + $value = wp_cache_get($cache_key, 'site-options'); + + if ( !isset($value) || (false === $value) ) { + $row = $wpdb->get_row( $wpdb->prepare("SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) ); + + // Has to be get_row instead of get_var because of funkiness with 0, false, null values + if ( is_object( $row ) ) { + $value = $row->meta_value; + $value = maybe_unserialize( $value ); + wp_cache_set( $cache_key, $value, 'site-options' ); + } else { + $value = apply_filters( 'default_site_option_' . $option, $default ); + } + } + } + + return apply_filters( 'site_option_' . $option, $value ); +} + +/** + * Add a new site option. + * + * Existing options will not be updated. Note that prior to 3.3 this wasn't the case. + * + * @see add_option() + * @package WordPress + * @subpackage Option + * @since 2.8.0 + * + * @uses apply_filters() Calls 'pre_add_site_option_$option' hook to allow overwriting the + * option value to be stored. + * @uses do_action() Calls 'add_site_option_$option' and 'add_site_option' hooks on success. + * + * @param string $option Name of option to add. Expected to not be SQL-escaped. + * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped. + * @return bool False if option was not added and true if option was added. + */ +function add_site_option( $option, $value ) { + global $wpdb; + + $value = apply_filters( 'pre_add_site_option_' . $option, $value ); + + if ( !is_multisite() ) { + $result = add_option( $option, $value ); + } else { + $cache_key = "{$wpdb->siteid}:$option"; + + if ( false !== get_site_option( $option ) ) + return false; + + $value = sanitize_option( $option, $value ); + wp_cache_set( $cache_key, $value, 'site-options' ); + + $_value = $value; + $value = maybe_serialize( $value ); + $result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) ); + $value = $_value; + } + + if ( $result ) { + do_action( "add_site_option_{$option}", $option, $value ); + do_action( "add_site_option", $option, $value ); + return true; + } + return false; +} + +/** + * Removes site option by name. + * + * @see delete_option() + * @package WordPress + * @subpackage Option + * @since 2.8.0 + * + * @uses do_action() Calls 'pre_delete_site_option_$option' hook before option is deleted. + * @uses do_action() Calls 'delete_site_option' and 'delete_site_option_$option' + * hooks on success. + * + * @param string $option Name of option to remove. Expected to not be SQL-escaped. + * @return bool True, if succeed. False, if failure. + */ +function delete_site_option( $option ) { + global $wpdb; + + // ms_protect_special_option( $option ); @todo + + do_action( 'pre_delete_site_option_' . $option ); + + if ( !is_multisite() ) { + $result = delete_option( $option ); + } else { + $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) ); + if ( is_null( $row ) || !$row->meta_id ) + return false; + $cache_key = "{$wpdb->siteid}:$option"; + wp_cache_delete( $cache_key, 'site-options' ); + + $result = $wpdb->delete( $wpdb->sitemeta, array( 'meta_key' => $option, 'site_id' => $wpdb->siteid ) ); + } + + if ( $result ) { + do_action( "delete_site_option_{$option}", $option ); + do_action( "delete_site_option", $option ); + return true; + } + return false; +} + +/** + * Update the value of a site option that was already added. + * + * @see update_option() + * @since 2.8.0 + * @package WordPress + * @subpackage Option + * + * @uses apply_filters() Calls 'pre_update_site_option_$option' hook to allow overwriting the + * option value to be stored. + * @uses do_action() Calls 'update_site_option_$option' and 'update_site_option' hooks on success. + * + * @param string $option Name of option. Expected to not be SQL-escaped. + * @param mixed $value Option value. Expected to not be SQL-escaped. + * @return bool False if value was not updated and true if value was updated. + */ +function update_site_option( $option, $value ) { + global $wpdb; + + $oldvalue = get_site_option( $option ); + $value = apply_filters( 'pre_update_site_option_' . $option, $value, $oldvalue ); + + if ( $value === $oldvalue ) + return false; + + if ( false === $oldvalue ) + return add_site_option( $option, $value ); + + if ( !is_multisite() ) { + $result = update_option( $option, $value ); + } else { + $value = sanitize_option( $option, $value ); + $cache_key = "{$wpdb->siteid}:$option"; + wp_cache_set( $cache_key, $value, 'site-options' ); + + $_value = $value; + $value = maybe_serialize( $value ); + $result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $value ), array( 'site_id' => $wpdb->siteid, 'meta_key' => $option ) ); + $value = $_value; + } + + if ( $result ) { + do_action( "update_site_option_{$option}", $option, $value, $oldvalue ); + do_action( "update_site_option", $option, $value, $oldvalue ); + return true; + } + return false; +} + +/** + * Delete a site transient. + * + * @since 2.9.0 + * @package WordPress + * @subpackage Transient + * + * @uses do_action() Calls 'delete_site_transient_$transient' hook before transient is deleted. + * @uses do_action() Calls 'deleted_site_transient' hook on success. + * + * @param string $transient Transient name. Expected to not be SQL-escaped. + * @return bool True if successful, false otherwise + */ +function delete_site_transient( $transient ) { + global $_wp_using_ext_object_cache; + + do_action( 'delete_site_transient_' . $transient, $transient ); + if ( $_wp_using_ext_object_cache ) { + $result = wp_cache_delete( $transient, 'site-transient' ); + } else { + $option_timeout = '_site_transient_timeout_' . $transient; + $option = '_site_transient_' . $transient; + $result = delete_site_option( $option ); + if ( $result ) + delete_site_option( $option_timeout ); + } + if ( $result ) + do_action( 'deleted_site_transient', $transient ); + return $result; +} + +/** + * Get the value of a site transient. + * + * If the transient does not exist or does not have a value, then the return value + * will be false. + * + * @see get_transient() + * @since 2.9.0 + * @package WordPress + * @subpackage Transient + * + * @uses apply_filters() Calls 'pre_site_transient_$transient' hook before checking the transient. + * Any value other than false will "short-circuit" the retrieval of the transient + * and return the returned value. + * @uses apply_filters() Calls 'site_transient_$option' hook, after checking the transient, with + * the transient value. + * + * @param string $transient Transient name. Expected to not be SQL-escaped. + * @return mixed Value of transient + */ +function get_site_transient( $transient ) { + global $_wp_using_ext_object_cache; + + $pre = apply_filters( 'pre_site_transient_' . $transient, false ); + if ( false !== $pre ) + return $pre; + + if ( $_wp_using_ext_object_cache ) { + $value = wp_cache_get( $transient, 'site-transient' ); + } else { + // Core transients that do not have a timeout. Listed here so querying timeouts can be avoided. + $no_timeout = array('update_core', 'update_plugins', 'update_themes'); + $transient_option = '_site_transient_' . $transient; + if ( ! in_array( $transient, $no_timeout ) ) { + $transient_timeout = '_site_transient_timeout_' . $transient; + $timeout = get_site_option( $transient_timeout ); + if ( false !== $timeout && $timeout < time() ) { + delete_site_option( $transient_option ); + delete_site_option( $transient_timeout ); + return false; + } + } + + $value = get_site_option( $transient_option ); + } + + return apply_filters( 'site_transient_' . $transient, $value ); +} + +/** + * Set/update the value of a site transient. + * + * You do not need to serialize values, if the value needs to be serialize, then + * it will be serialized before it is set. + * + * @see set_transient() + * @since 2.9.0 + * @package WordPress + * @subpackage Transient + * + * @uses apply_filters() Calls 'pre_set_site_transient_$transient' hook to allow overwriting the + * transient value to be stored. + * @uses do_action() Calls 'set_site_transient_$transient' and 'setted_site_transient' hooks on success. + * + * @param string $transient Transient name. Expected to not be SQL-escaped. + * @param mixed $value Transient value. Expected to not be SQL-escaped. + * @param int $expiration Time until expiration in seconds, default 0 + * @return bool False if value was not set and true if value was set. + */ +function set_site_transient( $transient, $value, $expiration = 0 ) { + global $_wp_using_ext_object_cache; + + $value = apply_filters( 'pre_set_site_transient_' . $transient, $value ); + + if ( $_wp_using_ext_object_cache ) { + $result = wp_cache_set( $transient, $value, 'site-transient', $expiration ); + } else { + $transient_timeout = '_site_transient_timeout_' . $transient; + $transient = '_site_transient_' . $transient; + if ( false === get_site_option( $transient ) ) { + if ( $expiration ) + add_site_option( $transient_timeout, time() + $expiration ); + $result = add_site_option( $transient, $value ); + } else { + if ( $expiration ) + update_site_option( $transient_timeout, time() + $expiration ); + $result = update_site_option( $transient, $value ); + } + } + if ( $result ) { + do_action( 'set_site_transient_' . $transient ); + do_action( 'setted_site_transient', $transient ); + } + return $result; +} diff --git a/wp-includes/pluggable.php b/wp-includes/pluggable.php index df20cf634..ac308a996 100644 --- a/wp-includes/pluggable.php +++ b/wp-includes/pluggable.php @@ -27,12 +27,12 @@ if ( !function_exists('wp_set_current_user') ) : function wp_set_current_user($id, $name = '') { global $current_user; - if ( isset($current_user) && ($id == $current_user->ID) ) + if ( isset( $current_user ) && ( $current_user instanceof WP_User ) && ( $id == $current_user->ID ) ) return $current_user; - $current_user = new WP_User($id, $name); + $current_user = new WP_User( $id, $name ); - setup_userdata($current_user->ID); + setup_userdata( $current_user->ID ); do_action('set_current_user'); @@ -74,20 +74,37 @@ if ( !function_exists('get_currentuserinfo') ) : function get_currentuserinfo() { global $current_user; - if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) + if ( ! empty( $current_user ) ) { + if ( $current_user instanceof WP_User ) + return; + + // Upgrade stdClass to WP_User + if ( is_object( $current_user ) && isset( $current_user->ID ) ) { + $cur_id = $current_user->ID; + $current_user = null; + wp_set_current_user( $cur_id ); + return; + } + + // $current_user has a junk value. Force to WP_User with ID 0. + $current_user = null; + wp_set_current_user( 0 ); return false; + } - if ( ! empty($current_user) ) - return; + if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) { + wp_set_current_user( 0 ); + return false; + } if ( ! $user = wp_validate_auth_cookie() ) { - if ( is_blog_admin() || is_network_admin() || empty($_COOKIE[LOGGED_IN_COOKIE]) || !$user = wp_validate_auth_cookie($_COOKIE[LOGGED_IN_COOKIE], 'logged_in') ) { - wp_set_current_user(0); + if ( is_blog_admin() || is_network_admin() || empty( $_COOKIE[LOGGED_IN_COOKIE] ) || !$user = wp_validate_auth_cookie( $_COOKIE[LOGGED_IN_COOKIE], 'logged_in' ) ) { + wp_set_current_user( 0 ); return false; } } - wp_set_current_user($user); + wp_set_current_user( $user ); } endif; @@ -111,8 +128,8 @@ if ( !function_exists('get_user_by') ) : * * @since 2.8.0 * - * @param string $field The field to retrieve the user with. id | slug | email | login - * @param int|string $value A value for $field. A user ID, slug, email address, or login name. + * @param string $field The field to retrieve the user with. id | slug | email | login + * @param int|string $value A value for $field. A user ID, slug, email address, or login name. * @return bool|object False on failure, WP_User object on success */ function get_user_by( $field, $value ) { @@ -139,13 +156,7 @@ if ( !function_exists('cache_users') ) : function cache_users( $user_ids ) { global $wpdb; - $clean = array(); - foreach ( $user_ids as $id ) { - $id = (int) $id; - if ( !wp_cache_get( $id, 'users' ) ) { - $clean[] = $id; - } - } + $clean = _get_non_cached_ids( $user_ids, 'users' ); if ( empty( $clean ) ) return; @@ -715,7 +726,7 @@ if ( !function_exists('is_user_logged_in') ) : function is_user_logged_in() { $user = wp_get_current_user(); - if ( empty( $user->ID ) ) + if ( ! $user->exists() ) return false; return true; @@ -829,8 +840,12 @@ function check_ajax_referer( $action = -1, $query_arg = false, $die = true ) { $result = wp_verify_nonce( $nonce, $action ); - if ( $die && false == $result ) - die('-1'); + if ( $die && false == $result ) { + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + wp_die( -1 ); + else + die( '-1' ); + } do_action('check_ajax_referer', $action, $result); @@ -929,7 +944,7 @@ if ( !function_exists('wp_validate_redirect') ) : * WordPress host string and $location host string. * * @param string $location The redirect to validate - * @param string $default The value to return is $location is not allowed + * @param string $default The value to return if $location is not allowed * @return string redirect-sanitized URL **/ function wp_validate_redirect($location, $default = '') { @@ -1276,108 +1291,89 @@ endif; if ( !function_exists('wp_salt') ) : /** - * Get salt to add to hashes to help prevent attacks. + * Get salt to add to hashes. * - * The secret key is located in two places: the database in case the secret key - * isn't defined in the second place, which is in the wp-config.php file. If you - * are going to set the secret key, then you must do so in the wp-config.php - * file. + * Salts are created using secret keys. Secret keys are located in two places: + * in the database and in the wp-config.php file. The secret key in the database + * is randomly generated and will be appended to the secret keys in wp-config.php. * - * The secret key in the database is randomly generated and will be appended to - * the secret key that is in wp-config.php file in some instances. It is - * important to have the secret key defined or changed in wp-config.php. - * - * If you have installed WordPress 2.5 or later, then you will have the - * SECRET_KEY defined in the wp-config.php already. You will want to change the - * value in it because hackers will know what it is. If you have upgraded to - * WordPress 2.5 or later version from a version before WordPress 2.5, then you - * should add the constant to your wp-config.php file. - * - * Below is an example of how the SECRET_KEY constant is defined with a value. - * You must not copy the below example and paste into your wp-config.php. If you - * need an example, then you can have a - * {@link https://api.wordpress.org/secret-key/1.1/ secret key created} for you. + * The secret keys in wp-config.php should be updated to strong, random keys to maximize + * security. Below is an example of how the secret key constants are defined. + * Do not paste this example directly into wp-config.php. Instead, have a + * {@link https://api.wordpress.org/secret-key/1.1/salt/ secret key created} just + * for you. * * <code> - * define('SECRET_KEY', 'mAry1HadA15|\/|b17w55w1t3asSn09w'); + * define('AUTH_KEY', ' Xakm<o xQy rw4EMsLKM-?!T+,PFF})H4lzcW57AF0U@N@< >M%G4Yt>f`z]MON'); + * define('SECURE_AUTH_KEY', 'LzJ}op]mr|6+![P}Ak:uNdJCJZd>(Hx.-Mh#Tz)pCIU#uGEnfFz|f ;;eU%/U^O~'); + * define('LOGGED_IN_KEY', '|i|Ux`9<p-h$aFf(qnT:sDO:D1P^wZ$$/Ra@miTJi9G;ddp_<q}6H1)o|a +&JCM'); + * define('NONCE_KEY', '%:R{[P|,s.KuMltH5}cI;/k<Gx~j!f0I)m_sIyu+&NJZ)-iO>z7X>QYR0Z_XnZ@|'); + * define('AUTH_SALT', 'eZyT)-Naw]F8CwA*VaW#q*|.)g@o}||wf~@C-YSt}(dh_r6EbI#A,y|nU2{B#JBW'); + * define('SECURE_AUTH_SALT', '!=oLUTXh,QW=H `}`L|9/^4-3 STz},T(w}W<I`.JjPi)<Bmf1v,HpGe}T1:Xt7n'); + * define('LOGGED_IN_SALT', '+XSqHc;@Q*K_b|Z?NC[3H!!EONbh.n<+=uKR:>*c(u`g~EJBf#8u#R{mUEZrozmm'); + * define('NONCE_SALT', 'h`GXHhD>SLWVfg1(1(N{;.V!MoE(SfbA_ksP@&`+AycHcAV$+?@3q+rxV{%^VyKT'); * </code> * * Salting passwords helps against tools which has stored hashed values of - * common dictionary strings. The added values makes it harder to crack if given - * salt string is not weak. + * common dictionary strings. The added values makes it harder to crack. * * @since 2.5 - * @link https://api.wordpress.org/secret-key/1.1/ Create a Secret Key for wp-config.php * - * @param string $scheme Authentication scheme + * @link https://api.wordpress.org/secret-key/1.1/salt/ Create secrets for wp-config.php + * + * @param string $scheme Authentication scheme (auth, secure_auth, logged_in, nonce) * @return string Salt value */ -function wp_salt($scheme = 'auth') { - global $wp_default_secret_key; - $secret_key = ''; - if ( defined('SECRET_KEY') && ('' != SECRET_KEY) && ( $wp_default_secret_key != SECRET_KEY) ) - $secret_key = SECRET_KEY; - - if ( 'auth' == $scheme ) { - if ( defined('AUTH_KEY') && ('' != AUTH_KEY) && ( $wp_default_secret_key != AUTH_KEY) ) - $secret_key = AUTH_KEY; - - if ( defined('AUTH_SALT') && ('' != AUTH_SALT) && ( $wp_default_secret_key != AUTH_SALT) ) { - $salt = AUTH_SALT; - } elseif ( defined('SECRET_SALT') && ('' != SECRET_SALT) && ( $wp_default_secret_key != SECRET_SALT) ) { - $salt = SECRET_SALT; - } else { - $salt = get_site_option('auth_salt'); - if ( empty($salt) ) { - $salt = wp_generate_password( 64, true, true ); - update_site_option('auth_salt', $salt); - } - } - } elseif ( 'secure_auth' == $scheme ) { - if ( defined('SECURE_AUTH_KEY') && ('' != SECURE_AUTH_KEY) && ( $wp_default_secret_key != SECURE_AUTH_KEY) ) - $secret_key = SECURE_AUTH_KEY; - - if ( defined('SECURE_AUTH_SALT') && ('' != SECURE_AUTH_SALT) && ( $wp_default_secret_key != SECURE_AUTH_SALT) ) { - $salt = SECURE_AUTH_SALT; - } else { - $salt = get_site_option('secure_auth_salt'); - if ( empty($salt) ) { - $salt = wp_generate_password( 64, true, true ); - update_site_option('secure_auth_salt', $salt); +function wp_salt( $scheme = 'auth' ) { + static $cached_salts = array(); + if ( isset( $cached_salts[ $scheme ] ) ) + return apply_filters( 'salt', $cached_salts[ $scheme ], $scheme ); + + static $duplicated_keys; + if ( null === $duplicated_keys ) { + $duplicated_keys = array( 'put your unique phrase here' => true ); + foreach ( array( 'AUTH', 'SECURE_AUTH', 'LOGGED_IN', 'NONCE', 'SECRET' ) as $first ) { + foreach ( array( 'KEY', 'SALT' ) as $second ) { + if ( ! defined( "{$first}_{$second}" ) ) + continue; + $value = constant( "{$first}_{$second}" ); + $duplicated_keys[ $value ] = isset( $duplicated_keys[ $value ] ); } } - } elseif ( 'logged_in' == $scheme ) { - if ( defined('LOGGED_IN_KEY') && ('' != LOGGED_IN_KEY) && ( $wp_default_secret_key != LOGGED_IN_KEY) ) - $secret_key = LOGGED_IN_KEY; + } - if ( defined('LOGGED_IN_SALT') && ('' != LOGGED_IN_SALT) && ( $wp_default_secret_key != LOGGED_IN_SALT) ) { - $salt = LOGGED_IN_SALT; - } else { - $salt = get_site_option('logged_in_salt'); - if ( empty($salt) ) { - $salt = wp_generate_password( 64, true, true ); - update_site_option('logged_in_salt', $salt); + $key = $salt = ''; + if ( defined( 'SECRET_KEY' ) && SECRET_KEY && empty( $duplicated_keys[ SECRET_KEY ] ) ) + $key = SECRET_KEY; + if ( 'auth' == $scheme && defined( 'SECRET_SALT' ) && SECRET_SALT && empty( $duplicated_keys[ SECRET_SALT ] ) ) + $salt = SECRET_SALT; + + if ( in_array( $scheme, array( 'auth', 'secure_auth', 'logged_in', 'nonce' ) ) ) { + foreach ( array( 'key', 'salt' ) as $type ) { + $const = strtoupper( "{$scheme}_{$type}" ); + if ( defined( $const ) && constant( $const ) && empty( $duplicated_keys[ constant( $const ) ] ) ) { + $$type = constant( $const ); + } elseif ( ! $$type ) { + $$type = get_site_option( "{$scheme}_{$type}" ); + if ( ! $$type ) { + $$type = wp_generate_password( 64, true, true ); + update_site_option( "{$scheme}_{$type}", $$type ); + } } } - } elseif ( 'nonce' == $scheme ) { - if ( defined('NONCE_KEY') && ('' != NONCE_KEY) && ( $wp_default_secret_key != NONCE_KEY) ) - $secret_key = NONCE_KEY; - - if ( defined('NONCE_SALT') && ('' != NONCE_SALT) && ( $wp_default_secret_key != NONCE_SALT) ) { - $salt = NONCE_SALT; - } else { - $salt = get_site_option('nonce_salt'); - if ( empty($salt) ) { - $salt = wp_generate_password( 64, true, true ); - update_site_option('nonce_salt', $salt); + } else { + if ( ! $key ) { + $key = get_site_option( 'secret_key' ); + if ( ! $key ) { + $key = wp_generate_password( 64, true, true ); + update_site_option( 'secret_key', $key ); } } - } else { - // ensure each auth scheme has its own unique salt - $salt = hash_hmac('md5', $scheme, $secret_key); + $salt = hash_hmac( 'md5', $scheme, $key ); } - return apply_filters('salt', $secret_key . $salt, $scheme); + $cached_salts[ $scheme ] = $key . $salt; + return apply_filters( 'salt', $cached_salts[ $scheme ], $scheme ); } endif; @@ -1418,7 +1414,7 @@ function wp_hash_password($password) { if ( empty($wp_hasher) ) { require_once( ABSPATH . 'wp-includes/class-phpass.php'); // By default, use the portable hash from phpass - $wp_hasher = new PasswordHash(8, TRUE); + $wp_hasher = new PasswordHash(8, true); } return $wp_hasher->HashPassword($password); @@ -1466,7 +1462,7 @@ function wp_check_password($password, $hash, $user_id = '') { if ( empty($wp_hasher) ) { require_once( ABSPATH . 'wp-includes/class-phpass.php'); // By default, use the portable hash from phpass - $wp_hasher = new PasswordHash(8, TRUE); + $wp_hasher = new PasswordHash(8, true); } $check = $wp_hasher->CheckPassword($password, $hash); @@ -1629,7 +1625,7 @@ function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) { } if ( !empty($email) ) - $email_hash = md5( strtolower( $email ) ); + $email_hash = md5( strtolower( trim( $email ) ) ); if ( is_ssl() ) { $host = 'https://secure.gravatar.com'; @@ -1647,7 +1643,7 @@ function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) { elseif ( !empty($email) && 'gravatar_default' == $default ) $default = ''; elseif ( 'gravatar_default' == $default ) - $default = "$host/avatar/s={$size}"; + $default = "$host/avatar/?s={$size}"; elseif ( empty($email) ) $default = "$host/avatar/?d=$default&s={$size}"; elseif ( strpos($default, 'http://') === 0 ) @@ -1709,8 +1705,8 @@ function wp_text_diff( $left_string, $right_string, $args = null ) { $left_string = normalize_whitespace($left_string); $right_string = normalize_whitespace($right_string); - $left_lines = split("\n", $left_string); - $right_lines = split("\n", $right_string); + $left_lines = explode("\n", $left_string); + $right_lines = explode("\n", $right_string); $text_diff = new Text_Diff($left_lines, $right_lines); $renderer = new WP_Text_Diff_Renderer_Table(); diff --git a/wp-includes/plugin.php b/wp-includes/plugin.php index bb71d3d3b..914d70654 100644 --- a/wp-includes/plugin.php +++ b/wp-includes/plugin.php @@ -80,7 +80,7 @@ function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) * @global array $wp_filter Stores all of the filters * * @param string $tag The name of the filter hook. - * @param callback $function_to_check optional. If specified, return the priority of that function on this hook or false if not attached. + * @param callback $function_to_check optional. If specified, return the priority of that function on this hook or false if not attached. * @return int|boolean Optionally returns the priority on that hook for the specified function. */ function has_filter($tag, $function_to_check = false) { @@ -308,7 +308,6 @@ function current_filter() { return end( $wp_current_filter ); } - /** * Hooks a function on to a specific action. * @@ -332,7 +331,6 @@ function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) return add_filter($tag, $function_to_add, $priority, $accepted_args); } - /** * Execute functions hooked on a specific action hook. * @@ -499,7 +497,7 @@ function do_action_ref_array($tag, $args) { * @see has_filter() has_action() is an alias of has_filter(). * * @param string $tag The name of the action hook. - * @param callback $function_to_check optional. If specified, return the priority of that function on this hook or false if not attached. + * @param callback $function_to_check optional. If specified, return the priority of that function on this hook or false if not attached. * @return int|boolean Optionally returns the priority on that hook for the specified function. */ function has_action($tag, $function_to_check = false) { @@ -744,7 +742,7 @@ function _wp_call_all_hook($args) { * @global array $wp_filter Storage for all of the filters and actions * @param string $tag Used in counting how many hooks were applied * @param callback $function Used for creating unique id - * @param int|bool $priority Used in counting how many hooks were applied. If === false and $function is an object reference, we return the unique id only if it already has one, false otherwise. + * @param int|bool $priority Used in counting how many hooks were applied. If === false and $function is an object reference, we return the unique id only if it already has one, false otherwise. * @return string|bool Unique ID for usage as array key or false if $priority === false and $function is an object reference, and it does not already have a unique id. */ function _wp_filter_build_unique_id($tag, $function, $priority) { @@ -784,5 +782,3 @@ function _wp_filter_build_unique_id($tag, $function, $priority) { return $function[0].$function[1]; } } - -?> diff --git a/wp-includes/post-template.php b/wp-includes/post-template.php index eac548b0b..5a414eaf5 100644 --- a/wp-includes/post-template.php +++ b/wp-includes/post-template.php @@ -79,7 +79,6 @@ function the_title_attribute( $args = '' ) { $r = wp_parse_args($args, $defaults); extract( $r, EXTR_SKIP ); - $title = $before . $title . $after; $title = esc_attr(strip_tags($title)); @@ -188,10 +187,8 @@ function get_the_content($more_link_text = null, $stripteaser = false) { $hasTeaser = false; // If post password required and it doesn't match the cookie. - if ( post_password_required($post) ) { - $output = get_the_password_form(); - return $output; - } + if ( post_password_required($post) ) + return get_the_password_form(); if ( $page > count($pages) ) // if the requested page doesn't exist $page = count($pages); // give them the highest numbered page that DOES exist @@ -414,8 +411,10 @@ function get_body_class( $class = '' ) { $classes[] = 'archive'; if ( is_date() ) $classes[] = 'date'; - if ( is_search() ) + if ( is_search() ) { $classes[] = 'search'; + $classes[] = $wp_query->posts ? 'search-results' : 'search-no-results'; + } if ( is_paged() ) $classes[] = 'paged'; if ( is_attachment() ) @@ -490,15 +489,10 @@ function get_body_class( $class = '' ) { } if ( is_page_template() ) { $classes[] = 'page-template'; - $classes[] = 'page-template-' . sanitize_html_class( str_replace( '.', '-', get_post_meta( $page_id, '_wp_page_template', true ) ), '' ); + $classes[] = 'page-template-' . sanitize_html_class( str_replace( '.', '-', get_page_template_slug( $page_id ) ) ); } else { $classes[] = 'page-template-default'; } - } elseif ( is_search() ) { - if ( !empty( $wp_query->posts ) ) - $classes[] = 'search-results'; - else - $classes[] = 'search-no-results'; } if ( is_user_logged_in() ) @@ -507,7 +501,7 @@ function get_body_class( $class = '' ) { if ( is_admin_bar_showing() ) $classes[] = 'admin-bar'; - if ( get_background_image() || get_background_color() ) + if ( get_theme_mod( 'background_color' ) || get_background_image() ) $classes[] = 'custom-background'; $page = $wp_query->get( 'page' ); @@ -555,22 +549,29 @@ function get_body_class( $class = '' ) { * * @since 2.7.0 * - * @param int|object $post An optional post. Global $post used if not provided. + * @param int|object $post An optional post. Global $post used if not provided. * @return bool false if a password is not required or the correct password cookie is present, true otherwise. */ function post_password_required( $post = null ) { + global $wp_hasher; + $post = get_post($post); - if ( empty($post->post_password) ) + if ( empty( $post->post_password ) ) return false; - if ( !isset($_COOKIE['wp-postpass_' . COOKIEHASH]) ) + if ( ! isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) ) return true; - if ( stripslashes( $_COOKIE['wp-postpass_' . COOKIEHASH] ) != $post->post_password ) - return true; + if ( empty( $wp_hasher ) ) { + require_once( ABSPATH . 'wp-includes/class-phpass.php'); + // By default, use the portable hash from phpass + $wp_hasher = new PasswordHash(8, true); + } - return false; + $hash = stripslashes( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ); + + return ! $wp_hasher->CheckPassword( $post->post_password, $hash ); } /** @@ -994,7 +995,7 @@ class Walker_Page extends Walker { * @param string $output Passed by reference. Used to append additional content. * @param int $depth Depth of page. Used for padding. */ - function start_lvl(&$output, $depth) { + function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class='children'>\n"; } @@ -1006,7 +1007,7 @@ class Walker_Page extends Walker { * @param string $output Passed by reference. Used to append additional content. * @param int $depth Depth of page. Used for padding. */ - function end_lvl(&$output, $depth) { + function end_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "$indent</ul>\n"; } @@ -1021,7 +1022,7 @@ class Walker_Page extends Walker { * @param int $current_page Page ID. * @param array $args */ - function start_el(&$output, $page, $depth, $args, $current_page) { + function start_el( &$output, $page, $depth, $args, $current_page = 0 ) { if ( $depth ) $indent = str_repeat("\t", $depth); else @@ -1064,7 +1065,7 @@ class Walker_Page extends Walker { * @param object $page Page data object. Not used. * @param int $depth Depth of page. Not Used. */ - function end_el(&$output, $page, $depth) { + function end_el( &$output, $page, $depth = 0, $args = array() ) { $output .= "</li>\n"; } @@ -1102,7 +1103,7 @@ class Walker_PageDropdown extends Walker { * @param int $depth Depth of page in reference to parent pages. Used for padding. * @param array $args Uses 'selected' argument for selected page to set selected HTML attribute for option element. */ - function start_el(&$output, $page, $depth, $args) { + function start_el(&$output, $page, $depth, $args, $id = 0) { $pad = str_repeat(' ', $depth * 3); $output .= "\t<option class=\"level-$depth\" value=\"$page->ID\""; @@ -1165,7 +1166,7 @@ function wp_get_attachment_link( $id = 0, $size = 'thumbnail', $permalink = fals $post_title = esc_attr( $_post->post_title ); if ( $text ) - $link_text = esc_attr( $text ); + $link_text = $text; elseif ( $size && 'none' != $size ) $link_text = wp_get_attachment_image( $id, $size, $icon ); else @@ -1215,8 +1216,8 @@ function prepend_attachment($content) { */ function get_the_password_form() { global $post; - $label = 'pwbox-'.(empty($post->ID) ? rand() : $post->ID); - $output = '<form action="' . get_option('siteurl') . '/wp-pass.php" method="post"> + $label = 'pwbox-' . ( empty($post->ID) ? rand() : $post->ID ); + $output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post"> <p>' . __("This post is password protected. To view it please enter your password below:") . '</p> <p><label for="' . $label . '">' . __("Password:") . ' <input name="post_password" id="' . $label . '" type="password" size="20" /></label> <input type="submit" name="Submit" value="' . esc_attr__("Submit") . '" /></p> </form> @@ -1237,29 +1238,43 @@ function get_the_password_form() { * @param string $template The specific template name if specific matching is required. * @return bool False on failure, true if success. */ -function is_page_template($template = '') { - if (!is_page()) { +function is_page_template( $template = '' ) { + if ( ! is_page() ) return false; - } - global $wp_query; + $page_template = get_page_template_slug( get_queried_object_id() ); - $page = $wp_query->get_queried_object(); - $custom_fields = get_post_custom_values('_wp_page_template',$page->ID); - $page_template = $custom_fields[0]; + if ( empty( $template ) ) + return (bool) $page_template; - // We have no argument passed so just see if a page_template has been specified - if ( empty( $template ) ) { - if ( !empty( $page_template ) and ( 'default' != $page_template ) ) { - return true; - } - } elseif ( $template == $page_template) { + if ( $template == $page_template ) + return true; + + if ( 'default' == $template && ! $page_template ) return true; - } return false; } +/** + * Get the specific template name for a page. + * + * @since 3.4.0 + * + * @param int $id The page ID to check. Defaults to the current post, when used in the loop. + * @return string|bool Page template filename. Returns an empty string when the default page template + * is in use. Returns false if the post is not a page. + */ +function get_page_template_slug( $post_id = null ) { + $post = get_post( $post_id ); + if ( 'page' != $post->post_type ) + return false; + $template = get_post_meta( $post->ID, '_wp_page_template', true ); + if ( ! $template || 'default' == $template ) + return ''; + return $template; +} + /** * Retrieve formatted date timestamp of a revision (linked to that revisions's page). * @@ -1307,7 +1322,7 @@ function wp_post_revision_title( $revision, $link = true ) { * * Second argument controls parameters: * (bool) parent : include the parent (the "Current Revision") in the list. - * (string) format : 'list' or 'form-table'. 'list' outputs UL, 'form-table' + * (string) format : 'list' or 'form-table'. 'list' outputs UL, 'form-table' * outputs TABLE with UI. * (int) right : what revision is currently being viewed - used in * form-table format. diff --git a/wp-includes/post-thumbnail-template.php b/wp-includes/post-thumbnail-template.php index 65a517266..16952d03c 100644 --- a/wp-includes/post-thumbnail-template.php +++ b/wp-includes/post-thumbnail-template.php @@ -39,7 +39,7 @@ function get_post_thumbnail_id( $post_id = null ) { * * @since 2.9.0 * - * @param int $size Optional. Image size. Defaults to 'post-thumbnail', which theme sets using set_post_thumbnail_size( $width, $height, $crop_flag );. + * @param int $size Optional. Image size. Defaults to 'post-thumbnail', which theme sets using set_post_thumbnail_size( $width, $height, $crop_flag );. * @param string|array $attr Optional. Query string or array of attributes. */ function the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) { @@ -50,9 +50,12 @@ function the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) { * Update cache for thumbnails in the current loop * * @since 3.2 + * + * @param object $wp_query Optional. A WP_Query instance. Defaults to the $wp_query global. */ -function update_post_thumbnail_cache() { - global $wp_query; +function update_post_thumbnail_cache( $wp_query = null ) { + if ( ! $wp_query ) + $wp_query = $GLOBALS['wp_query']; if ( $wp_query->thumbnails_cached ) return; @@ -64,13 +67,7 @@ function update_post_thumbnail_cache() { } if ( ! empty ( $thumb_ids ) ) { - get_posts( array( - 'update_post_term_cache' => false, - 'include' => $thumb_ids, - 'post_type' => 'attachment', - 'post_status' => 'inherit', - 'nopaging' => true - ) ); + _prime_post_caches( $thumb_ids, false, true ); } $wp_query->thumbnails_cached = true; @@ -82,7 +79,7 @@ function update_post_thumbnail_cache() { * @since 2.9.0 * * @param int $post_id Optional. Post ID. - * @param string $size Optional. Image size. Defaults to 'thumbnail'. + * @param string $size Optional. Image size. Defaults to 'post-thumbnail'. * @param string|array $attr Optional. Query string or array of attributes. */ function get_the_post_thumbnail( $post_id = null, $size = 'post-thumbnail', $attr = '' ) { @@ -100,5 +97,3 @@ function get_the_post_thumbnail( $post_id = null, $size = 'post-thumbnail', $att } return apply_filters( 'post_thumbnail_html', $html, $post_id, $post_thumbnail_id, $size, $attr ); } - -?> diff --git a/wp-includes/post.php b/wp-includes/post.php index f875f2f81..dee484e0b 100644 --- a/wp-includes/post.php +++ b/wp-includes/post.php @@ -29,6 +29,7 @@ function create_initial_post_types() { 'hierarchical' => false, 'rewrite' => false, 'query_var' => false, + 'delete_with_user' => true, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ), ) ); @@ -45,6 +46,7 @@ function create_initial_post_types() { 'hierarchical' => true, 'rewrite' => false, 'query_var' => false, + 'delete_with_user' => true, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'page-attributes', 'custom-fields', 'comments', 'revisions' ), ) ); @@ -63,7 +65,8 @@ function create_initial_post_types() { 'rewrite' => false, 'query_var' => false, 'show_in_nav_menus' => false, - 'supports' => array( 'comments' ), + 'delete_with_user' => true, + 'supports' => array( 'comments', 'author' ), ) ); register_post_type( 'revision', array( @@ -80,6 +83,8 @@ function create_initial_post_types() { 'rewrite' => false, 'query_var' => false, 'can_export' => false, + 'delete_with_user' => true, + 'supports' => array( 'author' ), ) ); register_post_type( 'nav_menu_item', array( @@ -91,6 +96,7 @@ function create_initial_post_types() { '_builtin' => true, /* internal use only. don't use this when registering your own post type. */ 'hierarchical' => false, 'rewrite' => false, + 'delete_with_user' => false, 'query_var' => false, ) ); @@ -168,12 +174,12 @@ add_action( 'init', 'create_initial_post_types', 0 ); // highest priority * * @param int $attachment_id Attachment ID. * @param bool $unfiltered Whether to apply filters. - * @return string The file path to the attached file. + * @return string|bool The file path to the attached file, or false if the attachment does not exist. */ function get_attached_file( $attachment_id, $unfiltered = false ) { $file = get_post_meta( $attachment_id, '_wp_attached_file', true ); // If the file is relative, prepend upload dir - if ( 0 !== strpos($file, '/') && !preg_match('|^.:\\\|', $file) && ( ($uploads = wp_upload_dir()) && false === $uploads['error'] ) ) + if ( $file && 0 !== strpos($file, '/') && !preg_match('|^.:\\\|', $file) && ( ($uploads = wp_upload_dir()) && false === $uploads['error'] ) ) $file = $uploads['basedir'] . "/$file"; if ( $unfiltered ) return $file; @@ -328,29 +334,32 @@ function get_children($args = '', $output = OBJECT) { * 'more'. There can be text or space(s) after the word 'more', but won't be * referenced. * - * The returned array has 'main' and 'extended' keys. Main has the text before + * The returned array has 'main', 'extended', and 'more_text' keys. Main has the text before * the <code><!--more--></code>. The 'extended' key has the content after the - * <code><!--more--></code> comment. + * <code><!--more--></code> comment. The 'more_text' key has the custom "Read More" text. * * @since 1.0.0 * * @param string $post Post content. - * @return array Post before ('main') and after ('extended'). + * @return array Post before ('main'), after ('extended'), and custom readmore ('more_text'). */ function get_extended($post) { //Match the new style more links if ( preg_match('/<!--more(.*?)?-->/', $post, $matches) ) { list($main, $extended) = explode($matches[0], $post, 2); + $more_text = $matches[1]; } else { $main = $post; $extended = ''; + $more_text = ''; } // Strip leading and trailing whitespace $main = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $main); $extended = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $extended); + $more_text = preg_replace('/^[\s]*(.*)[\s]*$/', '\\1', $more_text); - return array('main' => $main, 'extended' => $extended); + return array( 'main' => $main, 'extended' => $extended, 'more_text' => $more_text ); } /** @@ -427,7 +436,10 @@ function &get_post(&$post, $output = OBJECT, $filter = 'raw') { function get_post_ancestors($post) { $post = get_post($post); - if ( !empty($post->ancestors) ) + if ( ! isset( $post->ancestors ) ) + _get_post_ancestors( $post ); + + if ( ! empty( $post->ancestors ) ) return $post->ancestors; return array(); @@ -493,7 +505,7 @@ function get_post_mime_type($ID = '') { * * @param int|object $post A post * - * @return mixed The format if successful. False if no format is set. WP_Error if errors. + * @return mixed The format if successful. False if no format is set. WP_Error if errors. */ function get_post_format( $post = null ) { $post = get_post($post); @@ -531,7 +543,7 @@ function has_post_format( $format, $post = null ) { * @since 3.1.0 * * @param int|object $post The post for which to assign a format - * @param string $format A format to assign. Use an empty string or array to remove all formats from the post. + * @param string $format A format to assign. Use an empty string or array to remove all formats from the post. * @return mixed WP_Error on error. Array of affected term IDs on success. */ function set_post_format( $post, $format ) { @@ -626,7 +638,7 @@ function get_page_statuses( ) { } /** - * Register a post type. Do not use before init. + * Register a post status. Do not use before init. * * A simple function for creating or modifying a post status based on the * parameters given. The function will accept an array (second optional @@ -743,7 +755,7 @@ function get_post_status_object( $post_status ) { * @param string $output The type of output to return, either post status 'names' or 'objects'. 'names' is the default. * @param string $operator The logical operation to perform. 'or' means only one element * from the array needs to match; 'and' means all elements must match. The default is 'and'. - * @return array A list of post type names or objects + * @return array A list of post status names or objects */ function get_post_stati( $args = array(), $output = 'names', $operator = 'and' ) { global $wp_post_statuses; @@ -864,53 +876,84 @@ function get_post_types( $args = array(), $output = 'names', $operator = 'and' ) * Optional $args contents: * * - label - Name of the post type shown in the menu. Usually plural. If not set, labels['name'] will be used. + * - labels - An array of labels for this post type. + * * If not set, post labels are inherited for non-hierarchical types and page labels for hierarchical ones. + * * You can see accepted values in {@link get_post_type_labels()}. * - description - A short descriptive summary of what the post type is. Defaults to blank. - * - public - Whether posts of this type should be shown in the admin UI. Defaults to false. - * - exclude_from_search - Whether to exclude posts with this post type from search results. - * Defaults to true if the type is not public, false if the type is public. - * - publicly_queryable - Whether post_type queries can be performed from the front page. - * Defaults to whatever public is set as. - * - show_ui - Whether to generate a default UI for managing this post type. Defaults to true - * if the type is public, false if the type is not public. - * - show_in_menu - Where to show the post type in the admin menu. True for a top level menu, - * false for no menu, or can be a top level page like 'tools.php' or 'edit.php?post_type=page'. - * show_ui must be true. - * - menu_position - The position in the menu order the post type should appear. Defaults to the bottom. + * - public - Whether a post type is intended for use publicly either via the admin interface or by front-end users. + * * Defaults to false. + * * While the default settings of exclude_from_search, publicly_queryable, show_ui, and show_in_nav_menus are + * inherited from public, each does not rely on this relationship and controls a very specific intention. + * - exclude_from_search - Whether to exclude posts with this post type from front end search results. + * * If not set, the the opposite of public's current value is used. + * - publicly_queryable - Whether queries can be performed on the front end for the post type as part of parse_request(). + * * ?post_type={post_type_key} + * * ?{post_type_key}={single_post_slug} + * * ?{post_type_query_var}={single_post_slug} + * * If not set, the default is inherited from public. + * - show_ui - Whether to generate a default UI for managing this post type in the admin. + * * If not set, the default is inherited from public. + * - show_in_nav_menus - Makes this post type available for selection in navigation menus. + * * If not set, the default is inherited from public. + * - show_in_menu - Where to show the post type in the admin menu. + * * If true, the post type is shown in its own top level menu. + * * If false, no menu is shown + * * If a string of an existing top level menu (eg. 'tools.php' or 'edit.php?post_type=page'), the post type will + * be placed as a sub menu of that. + * * show_ui must be true. + * * If not set, the default is inherited from show_ui + * - show_in_admin_bar - Makes this post type available via the admin bar. + * * If not set, the default is inherited from show_in_menu + * - menu_position - The position in the menu order the post type should appear. + * * show_in_menu must be true + * * Defaults to null, which places it at the bottom of its area. * - menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon. * - capability_type - The string to use to build the read, edit, and delete capabilities. Defaults to 'post'. - * May be passed as an array to allow for alternative plurals when using this argument as a base to construct the - * capabilities, e.g. array('story', 'stories'). - * - capabilities - Array of capabilities for this post type. By default the capability_type is used - * as a base to construct capabilities. You can see accepted values in {@link get_post_type_capabilities()}. + * * May be passed as an array to allow for alternative plurals when using this argument as a base to construct the + * capabilities, e.g. array('story', 'stories'). + * - capabilities - Array of capabilities for this post type. + * * By default the capability_type is used as a base to construct capabilities. + * * You can see accepted values in {@link get_post_type_capabilities()}. * - map_meta_cap - Whether to use the internal default meta capability handling. Defaults to false. - * - hierarchical - Whether the post type is hierarchical. Defaults to false. - * - supports - An alias for calling add_post_type_support() directly. See {@link add_post_type_support()} - * for documentation. Defaults to none. + * - hierarchical - Whether the post type is hierarchical (e.g. page). Defaults to false. + * - supports - An alias for calling add_post_type_support() directly. Defaults to title and editor. + * * See {@link add_post_type_support()} for documentation. * - register_meta_box_cb - Provide a callback function that will be called when setting up the - * meta boxes for the edit form. Do remove_meta_box() and add_meta_box() calls in the callback. + * meta boxes for the edit form. Do remove_meta_box() and add_meta_box() calls in the callback. * - taxonomies - An array of taxonomy identifiers that will be registered for the post type. - * Default is no taxonomies. Taxonomies can be registered later with register_taxonomy() or - * register_taxonomy_for_object_type(). - * - labels - An array of labels for this post type. By default post labels are used for non-hierarchical - * types and page labels for hierarchical ones. You can see accepted values in {@link get_post_type_labels()}. - * - permalink_epmask - The default rewrite endpoint bitmasks. - * - has_archive - True to enable post type archives. Will generate the proper rewrite rules if rewrite is enabled. - * - rewrite - false to prevent rewrite. Defaults to true. Use array('slug'=>$slug) to customize permastruct; - * default will use $post_type as slug. Other options include 'with_front', 'feeds', and 'pages'. - * - query_var - false to prevent queries, or string to value of the query var to use for this post type - * - can_export - true allows this post type to be exported. - * - show_in_nav_menus - true makes this post type available for selection in navigation menus. + * * Default is no taxonomies. + * * Taxonomies can be registered later with register_taxonomy() or register_taxonomy_for_object_type(). + * - has_archive - True to enable post type archives. Default is false. + * * Will generate the proper rewrite rules if rewrite is enabled. + * - rewrite - Triggers the handling of rewrites for this post type. Defaults to true, using $post_type as slug. + * * To prevent rewrite, set to false. + * * To specify rewrite rules, an array can be passed with any of these keys + * * 'slug' => string Customize the permastruct slug. Defaults to $post_type key + * * 'with_front' => bool Should the permastruct be prepended with WP_Rewrite::$front. Defaults to true. + * * 'feeds' => bool Should a feed permastruct be built for this post type. Inherits default from has_archive. + * * 'pages' => bool Should the permastruct provide for pagination. Defaults to true. + * * 'ep_mask' => const Assign an endpoint mask. + * * If not specified and permalink_epmask is set, inherits from permalink_epmask. + * * If not specified and permalink_epmask is not set, defaults to EP_PERMALINK + * - query_var - Sets the query_var key for this post type. Defaults to $post_type key + * * If false, a post type cannot be loaded at ?{query_var}={post_slug} + * * If specified as a string, the query ?{query_var_string}={post_slug} will be valid. + * - can_export - Allows this post type to be exported. Defaults to true. + * - delete_with_user - Whether to delete posts of this type when deleting a user. + * * If true, posts of this type belonging to the user will be moved to trash when then user is deleted. + * * If false, posts of this type belonging to the user will *not* be trashed or deleted. + * * If not set (the default), posts are trashed if post_type_supports('author'). Otherwise posts are not trashed or deleted. * - _builtin - true if this post type is a native or "built-in" post_type. THIS IS FOR INTERNAL USE ONLY! * - _edit_link - URL segement to use for edit link of this post type. THIS IS FOR INTERNAL USE ONLY! * * @since 2.9.0 * @uses $wp_post_types Inserts new post type object into the list * - * @param string $post_type Name of the post type. - * @param array|string $args See above description. + * @param string $post_type Post type key, must not exceed 20 characters + * @param array|string $args See optional args description above. * @return object|WP_Error the registered post type object, or an error object */ -function register_post_type($post_type, $args = array()) { +function register_post_type( $post_type, $args = array() ) { global $wp_post_types, $wp_rewrite, $wp; if ( !is_array($wp_post_types) ) @@ -924,8 +967,9 @@ function register_post_type($post_type, $args = array()) { 'public' => false, 'rewrite' => true, 'has_archive' => false, 'query_var' => true, 'supports' => array(), 'register_meta_box_cb' => null, 'taxonomies' => array(), 'show_ui' => null, 'menu_position' => null, 'menu_icon' => null, - 'permalink_epmask' => EP_PERMALINK, 'can_export' => true, + 'can_export' => true, 'show_in_nav_menus' => null, 'show_in_menu' => null, 'show_in_admin_bar' => null, + 'delete_with_user' => null, ); $args = wp_parse_args($args, $defaults); $args = (object) $args; @@ -952,7 +996,7 @@ function register_post_type($post_type, $args = array()) { if ( null === $args->show_in_admin_bar ) $args->show_in_admin_bar = true === $args->show_in_menu; - // Whether to show this type in nav-menus.php. Defaults to the setting for public. + // Whether to show this type in nav-menus.php. Defaults to the setting for public. if ( null === $args->show_in_nav_menus ) $args->show_in_nav_menus = $args->public; @@ -999,11 +1043,17 @@ function register_post_type($post_type, $args = array()) { $args->rewrite['pages'] = true; if ( ! isset( $args->rewrite['feeds'] ) || ! $args->has_archive ) $args->rewrite['feeds'] = (bool) $args->has_archive; + if ( ! isset( $args->rewrite['ep_mask'] ) ) { + if ( isset( $args->permalink_epmask ) ) + $args->rewrite['ep_mask'] = $args->permalink_epmask; + else + $args->rewrite['ep_mask'] = EP_PERMALINK; + } if ( $args->hierarchical ) - $wp_rewrite->add_rewrite_tag("%$post_type%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name="); + add_rewrite_tag("%$post_type%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name="); else - $wp_rewrite->add_rewrite_tag("%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name="); + add_rewrite_tag("%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name="); if ( $args->has_archive ) { $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive; @@ -1012,17 +1062,17 @@ function register_post_type($post_type, $args = array()) { else $archive_slug = $wp_rewrite->root . $archive_slug; - $wp_rewrite->add_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' ); + add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' ); if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) { $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')'; - $wp_rewrite->add_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); - $wp_rewrite->add_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); + add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); + add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); } if ( $args->rewrite['pages'] ) - $wp_rewrite->add_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' ); + add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' ); } - $wp_rewrite->add_permastruct($post_type, "{$args->rewrite['slug']}/%$post_type%", $args->rewrite['with_front'], $args->permalink_epmask); + add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $args->rewrite ); } if ( $args->register_meta_box_cb ) @@ -1070,7 +1120,7 @@ function register_post_type($post_type, $args = array()) { * behave like edit_posts. * - publish_posts - Controls publishing objects of this post type. * - read_private_posts - Controls whether private objects can be read. - + * * These four primitive capabilities are checked in core in various locations. * There are also seven other primitive capabilities which are not referenced * directly in core, except in map_meta_cap(), which takes the three aforementioned @@ -1288,6 +1338,23 @@ function remove_post_type_support( $post_type, $feature ) { unset($_wp_post_type_features[$post_type][$feature]); } +/** + * Get all the post type features + * + * @since 3.4.0 + * @param string $post_type The post type + * @return array + */ + +function get_all_post_type_supports( $post_type ) { + global $_wp_post_type_features; + + if ( isset( $_wp_post_type_features[$post_type] ) ) + return $_wp_post_type_features[$post_type]; + + return array(); +} + /** * Checks a post type's support for a given feature * @@ -1331,12 +1398,9 @@ function set_post_type( $post_id = 0, $post_type = 'post' ) { global $wpdb; $post_type = sanitize_post_field('post_type', $post_type, $post_id, 'db'); - $return = $wpdb->update($wpdb->posts, array('post_type' => $post_type), array('ID' => $post_id) ); + $return = $wpdb->update( $wpdb->posts, array('post_type' => $post_type), array('ID' => $post_id) ); - if ( 'page' == $post_type ) - clean_page_cache($post_id); - else - clean_post_cache($post_id); + clean_post_cache( $post_id ); return $return; } @@ -1457,12 +1521,12 @@ function delete_post_meta($post_id, $meta_key, $meta_value = '') { * @link http://codex.wordpress.org/Function_Reference/get_post_meta * * @param int $post_id Post ID. - * @param string $key The meta key to retrieve. + * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys. * @param bool $single Whether to return a single value. * @return mixed Will be an array if $single is false. Will be value of meta data field if $single * is true. */ -function get_post_meta($post_id, $key, $single = false) { +function get_post_meta($post_id, $key = '', $single = false) { return get_metadata('post', $post_id, $key, $single); } @@ -1508,28 +1572,21 @@ function delete_post_meta_by_key($post_meta_key) { /** * Retrieve post meta fields, based on post ID. * - * The post meta fields are retrieved from the cache, so the function is - * optimized to be called more than once. It also applies to the functions, that - * use this function. + * The post meta fields are retrieved from the cache where possible, + * so the function is optimized to be called more than once. * * @since 1.2.0 * @link http://codex.wordpress.org/Function_Reference/get_post_custom * - * @uses $id Current Loop Post ID - * - * @param int $post_id post ID + * @param int $post_id Post ID. * @return array */ function get_post_custom( $post_id = 0 ) { $post_id = absint( $post_id ); - if ( ! $post_id ) $post_id = get_the_ID(); - if ( ! wp_cache_get( $post_id, 'post_meta' ) ) - update_postmeta_cache( $post_id ); - - return wp_cache_get( $post_id, 'post_meta' ); + return get_post_meta( $post_id ); } /** @@ -1831,7 +1888,6 @@ function wp_count_posts( $type = 'post', $perm = '' ) { return $stats; } - /** * Count number of attachments for the mime type(s). * @@ -1964,7 +2020,7 @@ function wp_post_mime_type_where($post_mime_types, $table_alias = '') { * @return mixed False on failure */ function wp_delete_post( $postid = 0, $force_delete = false ) { - global $wpdb, $wp_rewrite; + global $wpdb; if ( !$post = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = %d", $postid)) ) return $post; @@ -1985,6 +2041,14 @@ function wp_delete_post( $postid = 0, $force_delete = false ) { $parent_data = array( 'post_parent' => $post->post_parent ); $parent_where = array( 'post_parent' => $postid ); + if ( is_post_type_hierarchical( $post->post_type ) ) { + // Point children of this page to its parent, also clean the cache of affected children + $children_query = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_parent = %d AND post_type = %s", $postid, $post->post_type ); + $children = $wpdb->get_results( $children_query ); + + $wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => $post->post_type ) ); + } + if ( 'page' == $post->post_type) { // if the page is defined in option page_on_front or post_for_posts, // adjust the corresponding options @@ -1995,19 +2059,13 @@ function wp_delete_post( $postid = 0, $force_delete = false ) { if ( get_option('page_for_posts') == $postid ) { delete_option('page_for_posts'); } - - // Point children of this page to its parent, also clean the cache of affected children - $children_query = $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE post_parent = %d AND post_type='page'", $postid); - $children = $wpdb->get_results($children_query); - - $wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => 'page' ) ); } else { unstick_post($postid); } - // Do raw query. wp_get_post_revisions() is filtered + // Do raw query. wp_get_post_revisions() is filtered $revision_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'revision'", $postid ) ); - // Use wp_delete_post (via wp_delete_post_revision) again. Ensures any meta/misplaced data gets cleaned up. + // Use wp_delete_post (via wp_delete_post_revision) again. Ensures any meta/misplaced data gets cleaned up. foreach ( $revision_ids as $revision_id ) wp_delete_post_revision( $revision_id ); @@ -2015,34 +2073,22 @@ function wp_delete_post( $postid = 0, $force_delete = false ) { $wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => 'attachment' ) ); $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d", $postid )); - if ( ! empty($comment_ids) ) { - do_action( 'delete_comment', $comment_ids ); - foreach ( $comment_ids as $comment_id ) - wp_delete_comment( $comment_id, true ); - do_action( 'deleted_comment', $comment_ids ); - } + foreach ( $comment_ids as $comment_id ) + wp_delete_comment( $comment_id, true ); $post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $postid )); - if ( !empty($post_meta_ids) ) { - do_action( 'delete_postmeta', $post_meta_ids ); - $in_post_meta_ids = "'" . implode("', '", $post_meta_ids) . "'"; - $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_id IN($in_post_meta_ids)" ); - do_action( 'deleted_postmeta', $post_meta_ids ); - } + foreach ( $post_meta_ids as $mid ) + delete_metadata_by_mid( 'post', $mid ); do_action( 'delete_post', $postid ); - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->posts WHERE ID = %d", $postid )); + $wpdb->delete( $wpdb->posts, array( 'ID' => $postid ) ); do_action( 'deleted_post', $postid ); - if ( 'page' == $post->post_type ) { - clean_page_cache($postid); + clean_post_cache( $post ); + if ( is_post_type_hierarchical( $post->post_type ) ) { foreach ( (array) $children as $child ) - clean_page_cache($child->ID); - - $wp_rewrite->flush_rules(false); - } else { - clean_post_cache($postid); + clean_post_cache( $child ); } wp_clear_scheduled_hook('publish_future_post', array( $postid ) ); @@ -2400,7 +2446,6 @@ function wp_get_single_post($postid = 0, $mode = OBJECT) { * * @since 1.0.0 * @uses $wpdb - * @uses $wp_rewrite * @uses $user_ID * @uses do_action() Calls 'pre_post_update' on post ID if this is an update. * @uses do_action() Calls 'edit_post' action on post ID and post data if this is an update. @@ -2413,7 +2458,7 @@ function wp_get_single_post($postid = 0, $mode = OBJECT) { * @return int|WP_Error The value 0 or WP_Error on failure. The post ID on success. */ function wp_insert_post($postarr, $wp_error = false) { - global $wpdb, $wp_rewrite, $user_ID; + global $wpdb, $user_ID; $defaults = array('post_status' => 'draft', 'post_type' => 'post', 'post_author' => $user_ID, 'ping_status' => get_option('default_ping_status'), 'post_parent' => 0, @@ -2482,7 +2527,7 @@ function wp_insert_post($postarr, $wp_error = false) { if ( 'pending' == $post_status && !current_user_can( 'publish_posts' ) ) $post_name = ''; - // Create a valid post name. Drafts and pending posts are allowed to have an empty + // Create a valid post name. Drafts and pending posts are allowed to have an empty // post name. if ( empty($post_name) ) { if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) @@ -2537,7 +2582,7 @@ function wp_insert_post($postarr, $wp_error = false) { $ping_status = get_option('default_ping_status'); if ( isset($to_ping) ) - $to_ping = preg_replace('|\s+|', "\n", $to_ping); + $to_ping = sanitize_trackback_urls( $to_ping ); else $to_ping = ''; @@ -2622,10 +2667,7 @@ function wp_insert_post($postarr, $wp_error = false) { $current_guid = get_post_field( 'guid', $post_ID ); - if ( 'page' == $data['post_type'] ) - clean_page_cache($post_ID); - else - clean_post_cache($post_ID); + clean_post_cache( $post_ID ); // Set GUID if ( !$update && '' == $current_guid ) @@ -2775,7 +2817,6 @@ function check_and_publish_future_post($post_id) { return wp_publish_post($post_id); } - /** * Computes a unique slug for the post, when given the desired slug and some post details. * @@ -2866,7 +2907,6 @@ function wp_add_post_tags($post_id = 0, $tags = '') { return wp_set_post_tags($post_id, $tags, true); } - /** * Set the tags for a post. * @@ -2890,6 +2930,7 @@ function wp_set_post_tags( $post_id = 0, $tags = '', $append = false ) { * * @param int $post_id Post ID. * @param string $tags The tags to set for the post, separated by commas. + * @param string $taxonomy Taxonomy name. Defaults to 'post_tag'. * @param bool $append If true, don't delete existing tags, just add on. If false, replace the tags with the new tags. * @return mixed Array of affected term IDs. WP_Error or false on failure. */ @@ -2902,7 +2943,12 @@ function wp_set_post_terms( $post_id = 0, $tags = '', $taxonomy = 'post_tag', $a if ( empty($tags) ) $tags = array(); - $tags = is_array($tags) ? $tags : explode( ',', trim($tags, " \n\t\r\0\x0B,") ); + if ( ! is_array( $tags ) ) { + $comma = _x( ',', 'tag delimiter' ); + if ( ',' !== $comma ) + $tags = str_replace( $comma, ',', $tags ); + $tags = explode( ',', trim( $tags, " \n\t\r\0\x0B," ) ); + } // Hierarchical taxonomies must always pass IDs rather than names so that children with the same // names but different parents aren't confused. @@ -3026,7 +3072,7 @@ function get_enclosed($post_id) { if ( 'enclosure' != $key || !is_array( $val ) ) continue; foreach( $val as $enc ) { - $enclosure = split( "\n", $enc ); + $enclosure = explode( "\n", $enc ); $pung[] = trim( $enclosure[ 0 ] ); } } @@ -3064,7 +3110,7 @@ function get_pung($post_id) { function get_to_ping($post_id) { global $wpdb; $to_ping = $wpdb->get_var( $wpdb->prepare( "SELECT to_ping FROM $wpdb->posts WHERE ID = %d", $post_id )); - $to_ping = trim($to_ping); + $to_ping = sanitize_trackback_urls( $to_ping ); $to_ping = preg_split('/\s/', $to_ping, -1, PREG_SPLIT_NO_EMPTY); $to_ping = apply_filters('get_to_ping', $to_ping); return $to_ping; @@ -3116,7 +3162,8 @@ function trackback_url_list($tb_list, $post_id) { function get_all_page_ids() { global $wpdb; - if ( ! $page_ids = wp_cache_get('all_page_ids', 'posts') ) { + $page_ids = wp_cache_get('all_page_ids', 'posts'); + if ( ! is_array( $page_ids ) ) { $page_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_type = 'page'"); wp_cache_add('all_page_ids', $page_ids, 'posts'); } @@ -3509,7 +3556,7 @@ function &get_pages($args = '') { } // Update cache. - update_page_cache($pages); + update_post_cache( $pages ); if ( $child_of || $hierarchical ) $pages = & get_page_children($child_of, $pages); @@ -3725,7 +3772,7 @@ function wp_insert_attachment($object, $file = false, $parent = 0) { if ( $file ) update_attached_file( $post_ID, $file ); - clean_post_cache($post_ID); + clean_post_cache( $post_ID ); if ( ! empty( $context ) ) add_post_meta( $post_ID, '_wp_attachment_context', $context, true ); @@ -3776,6 +3823,12 @@ function wp_delete_attachment( $post_id, $force_delete = false ) { $backup_sizes = get_post_meta( $post->ID, '_wp_attachment_backup_sizes', true ); $file = get_attached_file( $post_id ); + $intermediate_sizes = array(); + foreach ( get_intermediate_image_sizes() as $size ) { + if ( $intermediate = image_get_intermediate_size( $post_id, $size ) ) + $intermediate_sizes[] = $intermediate; + } + if ( is_multisite() ) delete_transient( 'dirsize_cache' ); @@ -3784,26 +3837,18 @@ function wp_delete_attachment( $post_id, $force_delete = false ) { wp_delete_object_term_relationships($post_id, array('category', 'post_tag')); wp_delete_object_term_relationships($post_id, get_object_taxonomies($post->post_type)); - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND meta_value = %d", $post_id )); + delete_metadata( 'post', null, '_thumbnail_id', $post_id, true ); // delete all for any posts. $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d", $post_id )); - if ( ! empty( $comment_ids ) ) { - do_action( 'delete_comment', $comment_ids ); - foreach ( $comment_ids as $comment_id ) - wp_delete_comment( $comment_id, true ); - do_action( 'deleted_comment', $comment_ids ); - } + foreach ( $comment_ids as $comment_id ) + wp_delete_comment( $comment_id, true ); $post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $post_id )); - if ( !empty($post_meta_ids) ) { - do_action( 'delete_postmeta', $post_meta_ids ); - $in_post_meta_ids = "'" . implode("', '", $post_meta_ids) . "'"; - $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_id IN($in_post_meta_ids)" ); - do_action( 'deleted_postmeta', $post_meta_ids ); - } + foreach ( $post_meta_ids as $mid ) + delete_metadata_by_mid( 'post', $mid ); do_action( 'delete_post', $post_id ); - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->posts WHERE ID = %d", $post_id )); + $wpdb->delete( $wpdb->posts, array( 'ID' => $post_id ) ); do_action( 'deleted_post', $post_id ); $uploadpath = wp_upload_dir(); @@ -3818,11 +3863,9 @@ function wp_delete_attachment( $post_id, $force_delete = false ) { } // remove intermediate and backup images if there are any - foreach ( get_intermediate_image_sizes() as $size ) { - if ( $intermediate = image_get_intermediate_size($post_id, $size) ) { - $intermediate_file = apply_filters('wp_delete_file', $intermediate['path']); - @ unlink( path_join($uploadpath['basedir'], $intermediate_file) ); - } + foreach ( $intermediate_sizes as $intermediate ) { + $intermediate_file = apply_filters( 'wp_delete_file', $intermediate['path'] ); + @ unlink( path_join($uploadpath['basedir'], $intermediate_file) ); } if ( is_array($backup_sizes) ) { @@ -3838,7 +3881,7 @@ function wp_delete_attachment( $post_id, $force_delete = false ) { if ( ! empty($file) ) @ unlink($file); - clean_post_cache($post_id); + clean_post_cache( $post ); return $post; } @@ -4002,7 +4045,7 @@ function wp_attachment_is_image( $post_id = 0 ) { * * @since 2.1.0 * - * @param string $mime MIME type + * @param string|int $mime MIME type or attachment ID. * @return string|bool */ function wp_mime_type_icon( $mime = 0 ) { @@ -4150,8 +4193,8 @@ function get_private_posts_cap_sql( $post_type ) { * * @since 3.0.0 * @param string $post_type Post type. - * @param bool $full Optional. Returns a full WHERE statement instead of just an 'andalso' term. - * @param int $post_author Optional. Query posts having a single author ID. + * @param bool $full Optional. Returns a full WHERE statement instead of just an 'andalso' term. + * @param int $post_author Optional. Query posts having a single author ID. * @return string SQL WHERE code that can be added to a query. */ function get_posts_by_author_sql( $post_type, $full = true, $post_author = null ) { @@ -4288,20 +4331,18 @@ function _get_last_post_time( $timezone, $field ) { /** * Updates posts in cache. * - * @usedby update_page_cache() Aliased by this function. - * * @package WordPress * @subpackage Cache * @since 1.5.1 * * @param array $posts Array of post objects */ -function update_post_cache(&$posts) { - if ( !$posts ) +function update_post_cache( &$posts ) { + if ( ! $posts ) return; foreach ( $posts as $post ) - wp_cache_add($post->ID, $post, 'posts'); + wp_cache_add( $post->ID, $post, 'posts' ); } /** @@ -4321,77 +4362,44 @@ function update_post_cache(&$posts) { * * @uses do_action() Calls 'clean_post_cache' on $id before adding children (if any). * - * @param int $id The Post ID in the cache to clean + * @param object|int $post The post object or ID to remove from the cache */ -function clean_post_cache($id) { +function clean_post_cache( $post ) { global $_wp_suspend_cache_invalidation, $wpdb; - if ( !empty($_wp_suspend_cache_invalidation) ) + if ( ! empty( $_wp_suspend_cache_invalidation ) ) return; - $id = (int) $id; - - if ( 0 === $id ) + $post = get_post( $post ); + if ( empty( $post ) ) return; - wp_cache_delete($id, 'posts'); - wp_cache_delete($id, 'post_meta'); + wp_cache_delete( $post->ID, 'posts' ); + wp_cache_delete( $post->ID, 'post_meta' ); - clean_object_term_cache($id, 'post'); + clean_object_term_cache( $post->ID, $post->post_type ); wp_cache_delete( 'wp_get_archives', 'general' ); - do_action('clean_post_cache', $id); + do_action( 'clean_post_cache', $post->ID, $post ); + + if ( 'page' == $post->post_type ) { + wp_cache_delete( 'all_page_ids', 'posts' ); + wp_cache_delete( 'get_pages', 'posts' ); + do_action( 'clean_page_cache', $post->ID ); + } - if ( $children = $wpdb->get_col( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_parent = %d", $id) ) ) { - foreach ( $children as $cid ) { + if ( $children = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_type FROM $wpdb->posts WHERE post_parent = %d", $post->ID) ) ) { + foreach ( $children as $child ) { // Loop detection - if ( $cid == $id ) + if ( $child->ID == $post->ID ) continue; - clean_post_cache( $cid ); + clean_post_cache( $child ); } } if ( is_multisite() ) - wp_cache_delete( $wpdb->blogid . '-' . $id, 'global-posts' ); -} - -/** - * Alias of update_post_cache(). - * - * @see update_post_cache() Posts and pages are the same, alias is intentional - * - * @package WordPress - * @subpackage Cache - * @since 1.5.1 - * - * @param array $pages list of page objects - */ -function update_page_cache(&$pages) { - update_post_cache($pages); -} - -/** - * Will clean the page in the cache. - * - * Clean (read: delete) page from cache that matches $id. Will also clean cache - * associated with 'all_page_ids' and 'get_pages'. - * - * @package WordPress - * @subpackage Cache - * @since 2.0.0 - * - * @uses do_action() Will call the 'clean_page_cache' hook action. - * - * @param int $id Page ID to clean - */ -function clean_page_cache($id) { - clean_post_cache($id); - - wp_cache_delete( 'all_page_ids', 'posts' ); - wp_cache_delete( 'get_pages', 'posts' ); - - do_action('clean_page_cache', $id); + wp_cache_delete( $wpdb->blogid . '-' . $post->ID, 'global-posts' ); } /** @@ -4580,47 +4588,24 @@ function _publish_post_hook($post_id) { if ( defined('WP_IMPORTING') ) return; - $data = array( 'post_id' => $post_id, 'meta_value' => '1' ); - if ( get_option('default_pingback_flag') ) { - $wpdb->insert( $wpdb->postmeta, $data + array( 'meta_key' => '_pingme' ) ); - do_action( 'added_postmeta', $wpdb->insert_id, $post_id, '_pingme', 1 ); - } - $wpdb->insert( $wpdb->postmeta, $data + array( 'meta_key' => '_encloseme' ) ); - do_action( 'added_postmeta', $wpdb->insert_id, $post_id, '_encloseme', 1 ); + if ( get_option('default_pingback_flag') ) + add_post_meta( $post_id, '_pingme', '1' ); + add_post_meta( $post_id, '_encloseme', '1' ); wp_schedule_single_event(time(), 'do_pings'); } /** - * Hook used to prevent page/post cache and rewrite rules from staying dirty. - * - * Does two things. If the post is a page and has a template then it will - * update/add that template to the meta. For both pages and posts, it will clean - * the post cache to make sure that the cache updates to the changes done - * recently. For pages, the rewrite rules of WordPress are flushed to allow for - * any changes. - * - * The $post parameter, only uses 'post_type' property and 'page_template' - * property. + * Hook used to prevent page/post cache from staying dirty when a post is saved. * * @since 2.3.0 * @access private - * @uses $wp_rewrite Flushes Rewrite Rules. * * @param int $post_id The ID in the database table for the $post * @param object $post Object type containing the post information */ -function _save_post_hook($post_id, $post) { - if ( $post->post_type == 'page' ) { - clean_page_cache($post_id); - // Avoid flushing rules for every post during import. - if ( !defined('WP_IMPORTING') ) { - global $wp_rewrite; - $wp_rewrite->flush_rules(false); - } - } else { - clean_post_cache($post_id); - } +function _save_post_hook( $post_id, $post ) { + clean_post_cache( $post ); } /** @@ -4653,12 +4638,12 @@ function _get_post_ancestors(&$_post) { if ( empty($_post->post_parent) || $_post->ID == $_post->post_parent ) return; - $id = $_post->ancestors[] = $_post->post_parent; + $id = $_post->ancestors[] = (int) $_post->post_parent; while ( $ancestor = $wpdb->get_var( $wpdb->prepare("SELECT `post_parent` FROM $wpdb->posts WHERE ID = %d LIMIT 1", $id) ) ) { // Loop detection: If the ancestor has been seen before, break. if ( ( $ancestor == $_post->ID ) || in_array($ancestor, $_post->ancestors) ) break; - $id = $_post->ancestors[] = $ancestor; + $id = $_post->ancestors[] = (int) $ancestor; } } @@ -4902,7 +4887,7 @@ function _wp_put_post_revision( $post = null, $autosave = false ) { * * @param int|object $post Post ID or post object * @param string $output Optional. OBJECT, ARRAY_A, or ARRAY_N. - * @param string $filter Optional sanitation filter. @see sanitize_post() + * @param string $filter Optional sanitation filter. @see sanitize_post() * @return mixed Null if error or post object if success */ function &wp_get_post_revision(&$post, $output = OBJECT, $filter = 'raw') { @@ -5084,7 +5069,7 @@ function wp_get_post_parent_id( $post_ID ) { * @uses wp_find_hierarchy_loop() * * @param int $post_parent ID of the parent for the post we're checking. - * @parem int $post_ID ID of the post we're checking. + * @param int $post_ID ID of the post we're checking. * * @return int The new post_parent for the post. */ @@ -5110,7 +5095,7 @@ function wp_check_post_hierarchy_for_loops( $post_parent, $post_ID ) { if ( isset( $loop[$post_ID] ) ) return 0; - // There's a loop, but it doesn't contain $post_ID. Break the loop. + // There's a loop, but it doesn't contain $post_ID. Break the loop. foreach ( array_keys( $loop ) as $loop_member ) wp_update_post( array( 'ID' => $loop_member, 'post_parent' => 0 ) ); @@ -5183,8 +5168,7 @@ function set_post_thumbnail( $post, $thumbnail_id ) { if ( $post && $thumbnail_id && get_post( $thumbnail_id ) ) { $thumbnail_html = wp_get_attachment_image( $thumbnail_id, 'thumbnail' ); if ( ! empty( $thumbnail_html ) ) { - update_post_meta( $post->ID, '_thumbnail_id', $thumbnail_id ); - return true; + return update_post_meta( $post->ID, '_thumbnail_id', $thumbnail_id ); } } return false; @@ -5220,6 +5204,20 @@ function get_post_format_link( $format ) { return get_term_link( $term ); } +/** + * Deletes auto-drafts for new posts that are > 7 days old + * + * @since 3.4.0 + */ +function wp_delete_auto_drafts() { + global $wpdb; + + // Cleanup old auto-drafts more than 7 days old + $old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" ); + foreach ( (array) $old_posts as $delete ) + wp_delete_post( $delete, true ); // Force delete +} + /** * Filters the request to allow for the format prefix. * @@ -5328,4 +5326,25 @@ function _update_term_count_on_transition_post_status( $new_status, $old_status, wp_update_term_count( $tt_ids, $taxonomy ); } } -?> + +/** + * Adds any posts from the given ids to the cache that do not already exist in cache + * + * @since 3.4.0 + * + * @access private + * + * @param array $post_ids ID list + * @param bool $update_term_cache Whether to update the term cache. Default is true. + * @param bool $update_meta_cache Whether to update the meta cache. Default is true. + */ +function _prime_post_caches( $ids, $update_term_cache = true, $update_meta_cache = true ) { + global $wpdb; + + $non_cached_ids = _get_non_cached_ids( $ids, 'posts' ); + if ( !empty( $non_cached_ids ) ) { + $fresh_posts = $wpdb->get_results( sprintf( "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE ID IN (%s)", join( ",", $non_cached_ids ) ) ); + + update_post_caches( $fresh_posts, 'any', $update_term_cache, $update_meta_cache ); + } +} diff --git a/wp-includes/query.php b/wp-includes/query.php index 0fcbf94cb..5f6ccddfb 100644 --- a/wp-includes/query.php +++ b/wp-includes/query.php @@ -27,9 +27,8 @@ function get_query_var($var) { return $wp_query->get($var); } - /** - * Retrieve the currently-queried object. Wrapper for $wp_query->get_queried_object() + * Retrieve the currently-queried object. Wrapper for $wp_query->get_queried_object() * * @uses WP_Query::get_queried_object * @@ -728,7 +727,7 @@ function is_main_query() { } /* - * The Loop. Post loop control. + * The Loop. Post loop control. */ /** @@ -1261,7 +1260,7 @@ class WP_Query { var $query_vars_hash = false; /** - * Whether query vars have changed since the initial parse_query() call. Used to catch modifications to query vars made + * Whether query vars have changed since the initial parse_query() call. Used to catch modifications to query vars made * via pre_get_posts hooks. * * @since 3.1.1 @@ -1454,7 +1453,7 @@ class WP_Query { if ( '' !== $qv['minute'] ) $qv['minute'] = absint($qv['minute']); if ( '' !== $qv['second'] ) $qv['second'] = absint($qv['second']); - // Compat. Map subpost to attachment. + // Compat. Map subpost to attachment. if ( '' != $qv['subpost'] ) $qv['attachment'] = $qv['subpost']; if ( '' != $qv['subpost_id'] ) @@ -1477,7 +1476,7 @@ class WP_Query { $this->is_page = true; $this->is_single = false; } else { - // Look for archive queries. Dates, categories, authors, search, post type archives. + // Look for archive queries. Dates, categories, authors, search, post type archives. if ( !empty($qv['s']) ) { $this->is_search = true; @@ -1625,7 +1624,7 @@ class WP_Query { } if ( '' != $qv['pagename'] ) { - $this->queried_object =& get_page_by_path($qv['pagename']); + $this->queried_object = get_page_by_path($qv['pagename']); if ( !empty($this->queried_object) ) $this->queried_object_id = (int) $this->queried_object->ID; else @@ -2181,7 +2180,7 @@ class WP_Query { if ( !empty($q['sentence']) ) { $q['search_terms'] = array($q['s']); } else { - preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $q['s'], $matches); + preg_match_all('/".*?("|$)|((?<=[\r\n\t ",+])|^)[^\r\n\t ",+]+/', $q['s'], $matches); $q['search_terms'] = array_map('_search_terms_tidy', $matches[0]); } $n = !empty($q['exact']) ? '' : '%'; @@ -2312,10 +2311,8 @@ class WP_Query { // MIME-Type stuff for attachment browsing - if ( isset($q['post_mime_type']) && '' != $q['post_mime_type'] ) { - $table_alias = $post_status_join ? $wpdb->posts : ''; - $whichmimetype = wp_post_mime_type_where($q['post_mime_type'], $table_alias); - } + if ( isset( $q['post_mime_type'] ) && '' != $q['post_mime_type'] ) + $whichmimetype = wp_post_mime_type_where( $q['post_mime_type'], $wpdb->posts ); $where .= $search . $whichauthor . $whichmimetype; @@ -2346,6 +2343,7 @@ class WP_Query { switch ( $orderby ) { case 'menu_order': + $orderby = "$wpdb->posts.menu_order"; break; case 'ID': $orderby = "$wpdb->posts.ID"; @@ -2449,13 +2447,13 @@ class WP_Query { } if ( !empty($r_status) ) { if ( !empty($q['perm'] ) && 'editable' == $q['perm'] && !current_user_can($edit_others_cap) ) - $statuswheres[] = "($wpdb->posts.post_author = $user_ID " . "AND (" . join( ' OR ', $r_status ) . "))"; + $statuswheres[] = "($wpdb->posts.post_author = $user_ID " . "AND (" . join( ' OR ', $r_status ) . "))"; else $statuswheres[] = "(" . join( ' OR ', $r_status ) . ")"; } if ( !empty($p_status) ) { if ( !empty($q['perm'] ) && 'readable' == $q['perm'] && !current_user_can($read_private_cap) ) - $statuswheres[] = "($wpdb->posts.post_author = $user_ID " . "AND (" . join( ' OR ', $p_status ) . "))"; + $statuswheres[] = "($wpdb->posts.post_author = $user_ID " . "AND (" . join( ' OR ', $p_status ) . "))"; else $statuswheres[] = "(" . join( ' OR ', $p_status ) . ")"; } @@ -2477,7 +2475,7 @@ class WP_Query { $where .= " OR $wpdb->posts.post_status = '$state'"; } - if ( is_admin() ) { + if ( $this->is_admin ) { // Add protected states that should show in the admin all list. $admin_all_states = get_post_stati( array('protected' => true, 'show_in_admin_all_list' => true) ); foreach ( (array) $admin_all_states as $state ) @@ -2510,18 +2508,16 @@ class WP_Query { // Paging if ( empty($q['nopaging']) && !$this->is_singular ) { $page = absint($q['paged']); - if ( empty($page) ) + if ( !$page ) $page = 1; if ( empty($q['offset']) ) { - $pgstrt = ''; $pgstrt = ($page - 1) * $q['posts_per_page'] . ', '; - $limits = 'LIMIT ' . $pgstrt . $q['posts_per_page']; } else { // we're ignoring $page and using 'offset' $q['offset'] = absint($q['offset']); $pgstrt = $q['offset'] . ', '; - $limits = 'LIMIT ' . $pgstrt . $q['posts_per_page']; } + $limits = 'LIMIT ' . $pgstrt . $q['posts_per_page']; } // Comments feeds @@ -2564,7 +2560,7 @@ class WP_Query { $pieces = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' ); - // Apply post-paging filters on where and join. Only plugins that + // Apply post-paging filters on where and join. Only plugins that // manipulate paging queries should use these hooks. if ( !$q['suppress_filters'] ) { $where = apply_filters_ref_array( 'posts_where_paged', array( $where, &$this ) ); @@ -2581,10 +2577,10 @@ class WP_Query { $$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : ''; } - // Announce current selection parameters. For use by caching plugins. + // Announce current selection parameters. For use by caching plugins. do_action( 'posts_selection', $where . $groupby . $orderby . $limits . $join ); - // Filter again for the benefit of caching plugins. Regular plugins should use the hooks above. + // Filter again for the benefit of caching plugins. Regular plugins should use the hooks above. if ( !$q['suppress_filters'] ) { $where = apply_filters_ref_array( 'posts_where_request', array( $where, &$this ) ); $groupby = apply_filters_ref_array( 'posts_groupby_request', array( $groupby, &$this ) ); @@ -2609,9 +2605,11 @@ class WP_Query { if ( !$q['no_found_rows'] && !empty($limits) ) $found_rows = 'SQL_CALC_FOUND_ROWS'; - $this->request = " SELECT $found_rows $distinct $fields FROM $wpdb->posts $join WHERE 1=1 $where $groupby $orderby $limits"; - if ( !$q['suppress_filters'] ) - $this->request = apply_filters_ref_array('posts_request', array( $this->request, &$this ) ); + $this->request = $old_request = "SELECT $found_rows $distinct $fields FROM $wpdb->posts $join WHERE 1=1 $where $groupby $orderby $limits"; + + if ( !$q['suppress_filters'] ) { + $this->request = apply_filters_ref_array( 'posts_request', array( $this->request, &$this ) ); + } if ( 'ids' == $q['fields'] ) { $this->posts = $wpdb->get_col($this->request); @@ -2629,9 +2627,34 @@ class WP_Query { return $r; } - $this->posts = $wpdb->get_results($this->request); + $split_the_query = ( $old_request == $this->request && "$wpdb->posts.*" == $fields && !empty( $limits ) && $q['posts_per_page'] < 500 ); + $split_the_query = apply_filters( 'split_the_query', $split_the_query, $this ); + + if ( $split_the_query ) { + // First get the IDs and then fill in the objects - // Raw results filter. Prior to status checks. + $this->request = "SELECT $found_rows $distinct $wpdb->posts.ID FROM $wpdb->posts $join WHERE 1=1 $where $groupby $orderby $limits"; + + $this->request = apply_filters( 'posts_request_ids', $this->request, $this ); + + $ids = $wpdb->get_col( $this->request ); + + if ( $ids ) { + $this->set_found_posts( $q, $limits ); + + _prime_post_caches( $ids, $q['update_post_term_cache'], $q['update_post_meta_cache'] ); + + $this->posts = array_map( 'get_post', $ids ); + } else { + $this->found_posts = $this->max_num_pages = 0; + $this->posts = array(); + } + } else { + $this->posts = $wpdb->get_results( $this->request ); + $this->set_found_posts( $q, $limits ); + } + + // Raw results filter. Prior to status checks. if ( !$q['suppress_filters'] ) $this->posts = apply_filters_ref_array('posts_results', array( $this->posts, &$this ) ); @@ -2648,13 +2671,6 @@ class WP_Query { $this->comment_count = count($this->comments); } - if ( !$q['no_found_rows'] && !empty($limits) ) { - $found_posts_query = apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) ); - $this->found_posts = $wpdb->get_var( $found_posts_query ); - $this->found_posts = apply_filters_ref_array( 'found_posts', array( $this->found_posts, &$this ) ); - $this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']); - } - // Check post status to determine if post should be displayed. if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) { $status = get_post_status($this->posts[0]); @@ -2683,7 +2699,7 @@ class WP_Query { } } - if ( $this->is_preview && current_user_can( $edit_cap, $this->posts[0]->ID ) ) + if ( $this->is_preview && $this->posts && current_user_can( $edit_cap, $this->posts[0]->ID ) ) $this->posts[0] = apply_filters_ref_array('the_preview', array( $this->posts[0], &$this )); } @@ -2700,7 +2716,7 @@ class WP_Query { array_splice($this->posts, $i, 1); // Move to front, after other stickies array_splice($this->posts, $sticky_offset, 0, array($sticky_post)); - // Increment the sticky offset. The next sticky will be placed at this offset. + // Increment the sticky offset. The next sticky will be placed at this offset. $sticky_offset++; // Remove post from sticky posts array $offset = array_search($sticky_post->ID, $sticky_posts); @@ -2757,6 +2773,18 @@ class WP_Query { return $this->posts; } + function set_found_posts( $q, $limits ) { + global $wpdb; + + if ( $q['no_found_rows'] || empty( $limits ) ) + return; + + $this->found_posts = $wpdb->get_var( apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) ) ); + $this->found_posts = apply_filters_ref_array( 'found_posts', array( $this->found_posts, &$this ) ); + + $this->max_num_pages = ceil( $this->found_posts / $q['posts_per_page'] ); + } + /** * Set up the next post and iterate current post index. * @@ -2929,7 +2957,7 @@ class WP_Query { if ( isset($this->queried_object) ) return $this->queried_object; - $this->queried_object = NULL; + $this->queried_object = null; $this->queried_object_id = 0; if ( $this->is_category || $this->is_tag || $this->is_tax ) { @@ -2953,7 +2981,7 @@ class WP_Query { $this->queried_object = get_post_type_object( $this->get('post_type') ); } elseif ( $this->is_posts_page ) { $page_for_posts = get_option('page_for_posts'); - $this->queried_object = & get_page( $page_for_posts ); + $this->queried_object = get_page( $page_for_posts ); $this->queried_object_id = (int) $this->queried_object->ID; } elseif ( $this->is_singular && !is_null($this->post) ) { $this->queried_object = $this->post; @@ -3195,7 +3223,6 @@ class WP_Query { return (bool) $this->is_date; } - /** * Is the query for a day archive? * @@ -3593,4 +3620,3 @@ function setup_postdata($post) { return true; } -?> diff --git a/wp-includes/registration-functions.php b/wp-includes/registration-functions.php index 889919de0..9fee68601 100644 --- a/wp-includes/registration-functions.php +++ b/wp-includes/registration-functions.php @@ -5,4 +5,3 @@ * @package WordPress */ _deprecated_file( basename(__FILE__), '2.1', null, __( 'This file no longer needs to be included.' ) ); -?> \ No newline at end of file diff --git a/wp-includes/registration.php b/wp-includes/registration.php index 07d919c6d..a0ffabf9f 100644 --- a/wp-includes/registration.php +++ b/wp-includes/registration.php @@ -5,4 +5,3 @@ * @package WordPress */ _deprecated_file( basename(__FILE__), '3.1', null, __( 'This file no longer needs to be included.' ) ); -?> \ No newline at end of file diff --git a/wp-includes/rewrite.php b/wp-includes/rewrite.php index d376df40d..13808d14e 100644 --- a/wp-includes/rewrite.php +++ b/wp-includes/rewrite.php @@ -22,26 +22,33 @@ function add_rewrite_rule($regex, $redirect, $after = 'bottom') { } /** - * Add a new tag (like %postname%). + * Add a new rewrite tag (like %postname%). * - * Warning: you must call this on init or earlier, otherwise the query var - * addition stuff won't work. + * The $query parameter is optional. If it is omitted you must ensure that + * you call this on, or before, the 'init' hook. This is because $query defaults + * to "$tag=", and for this to work a new query var has to be added. * + * @see WP_Rewrite::add_rewrite_tag() * @since 2.1.0 * - * @param string $tagname - * @param string $regex + * @param string $tag Name of the new rewrite tag. + * @param string $regex Regular expression to substitute the tag for in rewrite rules. + * @param string $query String to append to the rewritten query. Must end in '='. Optional. */ -function add_rewrite_tag($tagname, $regex) { - //validation - if ( strlen($tagname) < 3 || $tagname[0] != '%' || $tagname[strlen($tagname)-1] != '%' ) +function add_rewrite_tag( $tag, $regex, $query = '' ) { + // validate the tag's name + if ( strlen( $tag ) < 3 || $tag[0] != '%' || $tag[ strlen($tag) - 1 ] != '%' ) return; - $qv = trim($tagname, '%'); - global $wp_rewrite, $wp; - $wp->add_query_var($qv); - $wp_rewrite->add_rewrite_tag($tagname, $regex, $qv . '='); + + if ( empty( $query ) ) { + $qv = trim( $tag, '%' ); + $wp->add_query_var( $qv ); + $query = $qv . '='; + } + + $wp_rewrite->add_rewrite_tag( $tag, $regex, $query ); } /** @@ -52,11 +59,19 @@ function add_rewrite_tag($tagname, $regex) { * * @param string $name Name for permalink structure. * @param string $struct Permalink structure. - * @param bool $with_front Prepend front base to permalink structure. + * @param array $args Optional configuration for building the rules from the permalink structure, + * see {@link WP_Rewrite::add_permastruct()} for full details. */ -function add_permastruct( $name, $struct, $with_front = true, $ep_mask = EP_NONE ) { +function add_permastruct( $name, $struct, $args = array() ) { global $wp_rewrite; - return $wp_rewrite->add_permastruct( $name, $struct, $with_front, $ep_mask ); + + // backwards compatibility for the old parameters: $with_front and $ep_mask + if ( ! is_array( $args ) ) + $args = array( 'with_front' => $args ); + if ( func_num_args() == 4 ) + $args['ep_mask'] = func_get_arg( 3 ); + + return $wp_rewrite->add_permastruct( $name, $struct, $args ); } /** @@ -93,7 +108,6 @@ function flush_rewrite_rules( $hard = true ) { $wp_rewrite->flush_rules( $hard ); } -//pseudo-places /** * Endpoint Mask for default, which is nothing. * @@ -202,22 +216,37 @@ define('EP_ALL', 8191); /** * Add an endpoint, like /trackback/. * - * The endpoints are added to the end of the request. So a request matching - * "/2008/10/14/my_post/myep/", the endpoint will be "/myep/". + * Adding an endpoint creates extra rewrite rules for each of the matching + * places specified by the provided bitmask. For example: + * + * <code> + * add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES ); + * </code> * - * Be sure to flush the rewrite rules (wp_rewrite->flush_rules()) when your plugin gets - * activated (register_activation_hook()) and deactivated (register_deactivation_hook()) + * will add a new rewrite rule ending with "json(/(.*))?/?$" for every permastruct + * that describes a permalink (post) or page. This is rewritten to "json=$match" + * where $match is the part of the URL matched by the endpoint regex (e.g. "foo" in + * "<permalink>/json/foo/"). + * + * A new query var with the same name as the endpoint will also be created. + * + * When specifying $places ensure that you are using the EP_* constants (or a + * combination of them using the bitwise OR operator) as their values are not + * guaranteed to remain static (especially EP_ALL). + * + * Be sure to flush the rewrite rules - flush_rewrite_rules() - when your plugin gets + * activated and deactivated. * * @since 2.1.0 - * @see WP_Rewrite::add_endpoint() Parameters and more description. - * @uses $wp_rewrite + * @see WP_Rewrite::add_endpoint() + * @global object $wp_rewrite * - * @param unknown_type $name - * @param unknown_type $places + * @param string $name Name of the endpoint. + * @param int $places Endpoint mask describing the places the endpoint should be added. */ -function add_rewrite_endpoint($name, $places) { +function add_rewrite_endpoint( $name, $places ) { global $wp_rewrite; - $wp_rewrite->add_endpoint($name, $places); + $wp_rewrite->add_endpoint( $name, $places ); } /** @@ -364,7 +393,7 @@ function url_to_postid($url) { */ class WP_Rewrite { /** - * Default permalink structure for WordPress. + * Permalink structure for posts. * * @since 1.5.0 * @access private @@ -382,7 +411,7 @@ class WP_Rewrite { var $use_trailing_slashes; /** - * Permalink author request base ( example.com/author/authorname ). + * Base for the author permalink structure (example.com/$author_base/authorname). * * @since 1.5.0 * @access private @@ -391,7 +420,7 @@ class WP_Rewrite { var $author_base = 'author'; /** - * Permalink request structure for author pages. + * Permalink structure for author archives. * * @since 1.5.0 * @access private @@ -400,7 +429,7 @@ class WP_Rewrite { var $author_structure; /** - * Permalink request structure for dates. + * Permalink structure for date archives. * * @since 1.5.0 * @access private @@ -409,7 +438,7 @@ class WP_Rewrite { var $date_structure; /** - * Permalink request structure for pages. + * Permalink structure for pages. * * @since 1.5.0 * @access private @@ -418,7 +447,7 @@ class WP_Rewrite { var $page_structure; /** - * Search permalink base ( example.com/search/query ). + * Base of the search permalink structure (example.com/$search_base/query). * * @since 1.5.0 * @access private @@ -427,7 +456,7 @@ class WP_Rewrite { var $search_base = 'search'; /** - * Permalink request structure for searches. + * Permalink structure for searches. * * @since 1.5.0 * @access private @@ -463,7 +492,7 @@ class WP_Rewrite { var $feed_base = 'feed'; /** - * Comments feed request structure permalink. + * Comments feed permalink structure. * * @since 1.5.0 * @access private @@ -472,7 +501,7 @@ class WP_Rewrite { var $comments_feed_structure; /** - * Feed request structure permalink. + * Feed request permalink structure. * * @since 1.5.0 * @access private @@ -481,13 +510,13 @@ class WP_Rewrite { var $feed_structure; /** - * Front URL path. + * The static portion of the post permalink structure. * - * The difference between the root property is that WordPress might be - * located at example/WordPress/index.php, if permalinks are turned off. The - * WordPress/index.php will be the front portion. If permalinks are turned - * on, this will most likely be empty or not set. + * If the permalink structure is "/archive/%post_id%" then the front + * is "/archive/". If the permalink structure is "/%year%/%postname%/" + * then the front is "/". * + * @see WP_Rewrite::init() * @since 1.5.0 * @access private * @var string @@ -495,11 +524,14 @@ class WP_Rewrite { var $front; /** - * Root URL path to WordPress (without domain). + * The prefix for all permalink structures. * - * The difference between front property is that WordPress might be located - * at example.com/WordPress/. The root is the 'WordPress/' portion. + * If PATHINFO/index permalinks are in use then the root is the value of + * {@link WP_Rewrite::$index} with a trailing slash appended. Otherwise + * the root will be empty. * + * @see WP_Rewrite::init() + * @see WP_Rewrite::using_index_permalinks() * @since 1.5.0 * @access private * @var string @@ -507,7 +539,7 @@ class WP_Rewrite { var $root = ''; /** - * Permalink to the home page. + * The name of the index file which is the entry point to all requests. * * @since 1.5.0 * @access public @@ -516,7 +548,7 @@ class WP_Rewrite { var $index = 'index.php'; /** - * Request match string. + * Variable name to use for regex matches in the rewritten query. * * @since 1.5.0 * @access private @@ -542,7 +574,7 @@ class WP_Rewrite { * @access private * @var array */ - var $extra_rules = array(); // + var $extra_rules = array(); /** * Additional rules that belong at the beginning to match first. @@ -553,21 +585,22 @@ class WP_Rewrite { * @access private * @var array */ - var $extra_rules_top = array(); // + var $extra_rules_top = array(); /** - * Rules that don't redirect to WP's index.php. + * Rules that don't redirect to WordPress' index.php. * - * These rules are written to the mod_rewrite portion of the .htaccess. + * These rules are written to the mod_rewrite portion of the .htaccess, + * and are added by {@link add_external_rule()}. * * @since 2.1.0 * @access private * @var array */ - var $non_wp_rules = array(); // + var $non_wp_rules = array(); /** - * Extra permalink structures. + * Extra permalink structures, e.g. categories, added by {@link add_permastruct()}. * * @since 2.1.0 * @access private @@ -576,7 +609,7 @@ class WP_Rewrite { var $extra_permastructs = array(); /** - * Endpoints permalinks + * Endpoints (like /trackback/) added by {@link add_rewrite_endpoint()}. * * @since 2.1.0 * @access private @@ -585,11 +618,12 @@ class WP_Rewrite { var $endpoints; /** - * Whether to write every mod_rewrite rule for WordPress. + * Whether to write every mod_rewrite rule for WordPress into the .htaccess file. * * This is off by default, turning it on might print a lot of rewrite rules * to the .htaccess file. * + * @see WP_Rewrite::mod_rewrite_rules() * @since 2.0.0 * @access public * @var bool @@ -597,8 +631,17 @@ class WP_Rewrite { var $use_verbose_rules = false; /** - * Whether to write every mod_rewrite rule for WordPress pages. + * Could post permalinks be confused with those of pages? + * + * If the first rewrite tag in the post permalink structure is one that could + * also match a page name (e.g. %postname% or %author%) then this flag is + * set to true. Prior to WordPress 3.3 this flag indicated that every page + * would have a set of rules added to the top of the rewrite rules array. + * Now it tells {@link WP::parse_request()} to check if a URL matching the + * page permastruct is actually a page before accepting it. * + * @link http://core.trac.wordpress.org/ticket/16687 + * @see WP_Rewrite::init() * @since 2.5.0 * @access public * @var bool @@ -606,70 +649,74 @@ class WP_Rewrite { var $use_verbose_page_rules = true; /** - * Permalink structure search for preg_replace. + * Rewrite tags that can be used in permalink structures. + * + * These are translated into the regular expressions stored in + * {@link WP_Rewrite::$rewritereplace} and are rewritten to the + * query variables listed in {@link WP_Rewrite::$queryreplace}. + * + * Additional tags can be added with {@link add_rewrite_tag()}. * * @since 1.5.0 * @access private * @var array */ - var $rewritecode = - array( - '%year%', - '%monthnum%', - '%day%', - '%hour%', - '%minute%', - '%second%', - '%postname%', - '%post_id%', - '%author%', - '%pagename%', - '%search%' - ); + var $rewritecode = array( + '%year%', + '%monthnum%', + '%day%', + '%hour%', + '%minute%', + '%second%', + '%postname%', + '%post_id%', + '%author%', + '%pagename%', + '%search%' + ); /** - * Preg_replace values for the search, see {@link WP_Rewrite::$rewritecode}. + * Regular expressions to be substituted into rewrite rules in place + * of rewrite tags, see {@link WP_Rewrite::$rewritecode}. * * @since 1.5.0 * @access private * @var array */ - var $rewritereplace = - array( - '([0-9]{4})', - '([0-9]{1,2})', - '([0-9]{1,2})', - '([0-9]{1,2})', - '([0-9]{1,2})', - '([0-9]{1,2})', - '([^/]+)', - '([0-9]+)', - '([^/]+)', - '([^/]+?)', - '(.+)' - ); + var $rewritereplace = array( + '([0-9]{4})', + '([0-9]{1,2})', + '([0-9]{1,2})', + '([0-9]{1,2})', + '([0-9]{1,2})', + '([0-9]{1,2})', + '([^/]+)', + '([0-9]+)', + '([^/]+)', + '([^/]+?)', + '(.+)' + ); /** - * Search for the query to look for replacing. + * Query variables that rewrite tags map to, see {@link WP_Rewrite::$rewritecode}. * * @since 1.5.0 * @access private * @var array */ - var $queryreplace = - array ( - 'year=', - 'monthnum=', - 'day=', - 'hour=', - 'minute=', - 'second=', - 'name=', - 'p=', - 'author_name=', - 'pagename=', - 's=' - ); + var $queryreplace = array( + 'year=', + 'monthnum=', + 'day=', + 'hour=', + 'minute=', + 'second=', + 'name=', + 'p=', + 'author_name=', + 'pagename=', + 's=' + ); /** * Supported default feeds. @@ -678,7 +725,7 @@ class WP_Rewrite { * @access private * @var array */ - var $feeds = array ( 'feed', 'rdf', 'rss', 'rss2', 'atom' ); + var $feeds = array( 'feed', 'rdf', 'rss', 'rss2', 'atom' ); /** * Whether permalinks are being used. @@ -807,24 +854,16 @@ class WP_Rewrite { /** * Retrieve all of the rewrite rules for pages. * - * If the 'use_verbose_page_rules' property is false, then there will only - * be a single rewrite rule for pages for those matching '%pagename%'. With - * the property set to true, the attachments and the pages will be added for - * each individual attachment URI and page URI, respectively. - * * @since 1.5.0 * @access public * * @return array */ function page_rewrite_rules() { - $rewrite_rules = array(); - $page_structure = $this->get_page_permastruct(); - // the extra .? at the beginning prevents clashes with other regular expressions in the rules array - $this->add_rewrite_tag('%pagename%', "(.?.+?)", 'pagename='); - $rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure, EP_PAGES)); - return $rewrite_rules; + $this->add_rewrite_tag( '%pagename%', '(.?.+?)', 'pagename=' ); + + return $this->generate_rewrite_rules( $this->get_page_permastruct(), EP_PAGES, true, true, false, false ); } /** @@ -902,7 +941,7 @@ class WP_Rewrite { * @return bool|string False on failure. Year structure on success. */ function get_year_permastruct() { - $structure = $this->get_date_permastruct($this->permalink_structure); + $structure = $this->get_date_permastruct(); if ( empty($structure) ) return false; @@ -927,7 +966,7 @@ class WP_Rewrite { * @return bool|string False on failure. Year/Month structure on success. */ function get_month_permastruct() { - $structure = $this->get_date_permastruct($this->permalink_structure); + $structure = $this->get_date_permastruct(); if ( empty($structure) ) return false; @@ -950,7 +989,7 @@ class WP_Rewrite { * @return bool|string False on failure. Year/Month/Day structure on success. */ function get_day_permastruct() { - return $this->get_date_permastruct($this->permalink_structure); + return $this->get_date_permastruct(); } /** @@ -1001,7 +1040,7 @@ class WP_Rewrite { return false; if ( isset($this->extra_permastructs[$name]) ) - return $this->extra_permastructs[$name][0]; + return $this->extra_permastructs[$name]['struct']; return false; } @@ -1137,36 +1176,35 @@ class WP_Rewrite { } /** - * Append or update tag, pattern, and query for replacement. + * Add or update existing rewrite tags (e.g. %postname%). * * If the tag already exists, replace the existing pattern and query for - * that tag, otherwise add the new tag, pattern, and query to the end of the - * arrays. - * - * @internal What is the purpose of this function again? Need to finish long - * description. + * that tag, otherwise add the new tag. * + * @see WP_Rewrite::$rewritecode + * @see WP_Rewrite::$rewritereplace + * @see WP_Rewrite::$queryreplace * @since 1.5.0 * @access public * - * @param string $tag Append tag to rewritecode property array. - * @param string $pattern Append pattern to rewritereplace property array. - * @param string $query Append query to queryreplace property array. + * @param string $tag Name of the rewrite tag to add or update. + * @param string $regex Regular expression to substitute the tag for in rewrite rules. + * @param string $query String to append to the rewritten query. Must end in '='. */ - function add_rewrite_tag($tag, $pattern, $query) { - $position = array_search($tag, $this->rewritecode); + function add_rewrite_tag( $tag, $regex, $query ) { + $position = array_search( $tag, $this->rewritecode ); if ( false !== $position && null !== $position ) { - $this->rewritereplace[$position] = $pattern; - $this->queryreplace[$position] = $query; + $this->rewritereplace[ $position ] = $regex; + $this->queryreplace[ $position ] = $query; } else { $this->rewritecode[] = $tag; - $this->rewritereplace[] = $pattern; + $this->rewritereplace[] = $regex; $this->queryreplace[] = $query; } } /** - * Generate the rules from permalink structure. + * Generate rewrite rules from a permalink structure. * * The main WP_Rewrite function for building the rewrite rule list. The * contents of the function is a mix of black magic and regular expressions, @@ -1176,12 +1214,13 @@ class WP_Rewrite { * @access public * * @param string $permalink_structure The permalink structure. - * @param int $ep_mask Optional, default is EP_NONE. Endpoint constant, see EP_* constants. - * @param bool $paged Optional, default is true. Whether permalink request is paged. - * @param bool $feed Optional, default is true. Whether for feed. - * @param bool $forcomments Optional, default is false. Whether for comments. - * @param bool $walk_dirs Optional, default is true. Whether to create list of directories to walk over. - * @param bool $endpoints Optional, default is true. Whether endpoints are enabled. + * @param int $ep_mask Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE. + * @param bool $paged Should archive pagination rules be added for the structure? Default is true. + * @param bool $feed Should feed rewrite rules be added for the structure? Default is true. + * @param bool $forcomments Should the feed rules be a query for a comments feed? Default is false. + * @param bool $walk_dirs Should the 'directories' making up the structure be walked over and rewrite rules + * built for each in turn? Default is true. + * @param bool $endpoints Should endpoints be applied to the generated rewrite rules? Default is true. * @return array Rewrite rule list. */ function generate_rewrite_rules($permalink_structure, $ep_mask = EP_NONE, $paged = true, $feed = true, $forcomments = false, $walk_dirs = true, $endpoints = true) { @@ -1189,11 +1228,11 @@ class WP_Rewrite { $feedregex2 = ''; foreach ( (array) $this->feeds as $feed_name) $feedregex2 .= $feed_name . '|'; - $feedregex2 = '(' . trim($feedregex2, '|') . ')/?$'; + $feedregex2 = '(' . trim($feedregex2, '|') . ')/?$'; //$feedregex is identical but with /feed/ added on as well, so URLs like <permalink>/feed/atom //and <permalink>/atom are both possible - $feedregex = $this->feed_base . '/' . $feedregex2; + $feedregex = $this->feed_base . '/' . $feedregex2; //build a regex to match the trackback and page/xx parts of URLs $trackbackregex = 'trackback/?$'; @@ -1240,8 +1279,8 @@ class WP_Rewrite { $structure = str_replace($front, '', $structure); //create a list of dirs to walk over, making rewrite rules for each level - //so for example, a $structure of /%year%/%month%/%postname% would create - //rewrite rules for /%year%/, /%year%/%month%/ and /%year%/%month%/%postname% + //so for example, a $structure of /%year%/%monthnum%/%postname% would create + //rewrite rules for /%year%/, /%year%/%monthnum%/ and /%year%/%monthnum%/%postname% $structure = trim($structure, '/'); $dirs = $walk_dirs ? explode('/', $structure) : array( $structure ); $num_dirs = count($dirs); @@ -1377,8 +1416,6 @@ class WP_Rewrite { $sub1feed = $sub1 . $feedregex; //and <permalink>/feed/(atom|...) $sub1feed2 = $sub1 . $feedregex2; //and <permalink>/(feed|atom...) $sub1comment = $sub1 . $commentregex; //and <permalink>/comment-page-xx - //add an ? as we don't have to match that last slash, and finally a $ so we - //match to the end of the URL //add another rule to match attachments in the explicit form: //<permalink>/attachment/some-text @@ -1405,10 +1442,12 @@ class WP_Rewrite { } //now we've finished with endpoints, finish off the $sub1 and $sub2 matches + //add a ? as we don't have to match that last slash, and finally a $ so we + //match to the end of the URL $sub1 .= '?$'; $sub2 .= '?$'; - //allow URLs like <permalink>/2 for <permalink>/page/2 + //post pagination, e.g. <permalink>/2/ $match = $match . '(/[0-9]+)?/?$'; $query = $index . '?' . $query . '&page=' . $this->preg_index($num_toks + 1); } else { //not matching a permalink so this is a lot simpler @@ -1495,9 +1534,10 @@ class WP_Rewrite { $registration_pages['.*wp-signup.php$'] = $this->index . '?signup=true'; $registration_pages['.*wp-activate.php$'] = $this->index . '?activate=true'; } + $registration_pages['.*wp-register.php$'] = $this->index . '?register=true'; // Deprecated // Post - $post_rewrite = $this->generate_rewrite_rules($this->permalink_structure, EP_PERMALINK); + $post_rewrite = $this->generate_rewrite_rules( $this->permalink_structure, EP_PERMALINK, false, true, false, false ); $post_rewrite = apply_filters('post_rewrite_rules', $post_rewrite); // Date @@ -1526,11 +1566,15 @@ class WP_Rewrite { $page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite); // Extra permastructs - foreach ( $this->extra_permastructs as $permastructname => $permastruct ) { - if ( is_array($permastruct) ) - $rules = $this->generate_rewrite_rules($permastruct[0], $permastruct[1]); - else - $rules = $this->generate_rewrite_rules($permastruct, EP_NONE); + foreach ( $this->extra_permastructs as $permastructname => $struct ) { + if ( is_array( $struct ) ) { + if ( count( $struct ) == 2 ) + $rules = $this->generate_rewrite_rules( $struct[0], $struct[1] ); + else + $rules = $this->generate_rewrite_rules( $struct['struct'], $struct['ep_mask'], $struct['paged'], $struct['feed'], $struct['forcomments'], $struct['walk_dirs'], $struct['endpoints'] ); + } else { + $rules = $this->generate_rewrite_rules( $struct ); + } $rules = apply_filters($permastructname . '_rewrite_rules', $rules); if ( 'post_tag' == $permastructname ) @@ -1582,7 +1626,7 @@ class WP_Rewrite { * Does not actually write to the .htaccess file, but creates the rules for * the process that will. * - * Will add the non_wp_rules property rules to the .htaccess file before + * Will add the non_wp_rules property rules to the .htaccess file before * the WordPress rewrite rules one. * * @since 1.5.0 @@ -1810,13 +1854,15 @@ class WP_Rewrite { /** * Add an endpoint, like /trackback/. * - * To be inserted after certain URL types (specified in $places). + * See {@link add_rewrite_endpoint()} for full documentation. * + * @see add_rewrite_endpoint() * @since 2.1.0 * @access public + * @uses WP::add_query_var() * - * @param string $name Name of endpoint. - * @param array $places URL types that endpoint can be used. + * @param string $name Name of the endpoint. + * @param int $places Endpoint mask describing the places the endpoint should be added. */ function add_endpoint($name, $places) { global $wp; @@ -1825,24 +1871,59 @@ class WP_Rewrite { } /** - * Add permalink structure. + * Add a new permalink structure. + * + * A permalink structure (permastruct) is an abstract definition of a set of rewrite rules; it + * is an easy way of expressing a set of regular expressions that rewrite to a set of query strings. + * The new permastruct is added to the {@link WP_Rewrite::$extra_permastructs} array. When the + * rewrite rules are built by {@link WP_Rewrite::rewrite_rules()} all of these extra permastructs + * are passed to {@link WP_Rewrite::generate_rewrite_rules()} which transforms them into the + * regular expressions that many love to hate. * - * These are added along with the extra rewrite rules that are merged to the - * top. + * The $args parameter gives you control over how {@link WP_Rewrite::generate_rewrite_rules()} + * works on the new permastruct. * * @since 2.5.0 * @access public * * @param string $name Name for permalink structure. - * @param string $struct Permalink structure. - * @param bool $with_front Prepend front base to permalink structure. - */ - function add_permastruct($name, $struct, $with_front = true, $ep_mask = EP_NONE) { - if ( $with_front ) + * @param string $struct Permalink structure (e.g. category/%category%) + * @param array $args Optional configuration for building the rules from the permalink structure: + * - with_front (bool) - Should the structure be prepended with WP_Rewrite::$front? Default is true. + * - ep_mask (int) - Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE. + * - paged (bool) - Should archive pagination rules be added for the structure? Default is true. + * - feed (bool) - Should feed rewrite rules be added for the structure? Default is true. + * - forcomments (bool) - Should the feed rules be a query for a comments feed? Default is false. + * - walk_dirs (bool) - Should the 'directories' making up the structure be walked over and rewrite + * rules built for each in turn? Default is true. + * - endpoints (bool) - Should endpoints be applied to the generated rewrite rules? Default is true. + */ + function add_permastruct( $name, $struct, $args = array() ) { + // backwards compatibility for the old parameters: $with_front and $ep_mask + if ( ! is_array( $args ) ) + $args = array( 'with_front' => $args ); + if ( func_num_args() == 4 ) + $args['ep_mask'] = func_get_arg( 3 ); + + $defaults = array( + 'with_front' => true, + 'ep_mask' => EP_NONE, + 'paged' => true, + 'feed' => true, + 'forcomments' => false, + 'walk_dirs' => true, + 'endpoints' => true, + ); + $args = array_intersect_key( $args, $defaults ); + $args = wp_parse_args( $args, $defaults ); + + if ( $args['with_front'] ) $struct = $this->front . $struct; else $struct = $this->root . $struct; - $this->extra_permastructs[$name] = array($struct, $ep_mask); + $args['struct'] = $struct; + + $this->extra_permastructs[ $name ] = $args; } /** @@ -1970,5 +2051,3 @@ class WP_Rewrite { $this->init(); } } - -?> diff --git a/wp-includes/rss-functions.php b/wp-includes/rss-functions.php index ea3269289..86458479d 100644 --- a/wp-includes/rss-functions.php +++ b/wp-includes/rss-functions.php @@ -1,10 +1,9 @@ <?php /** - * Deprecated. Use rss.php instead. + * Deprecated. Use rss.php instead. * * @package WordPress */ _deprecated_file( basename(__FILE__), '2.1', WPINC . '/rss.php' ); require_once (ABSPATH . WPINC . '/rss.php'); -?> diff --git a/wp-includes/rss.php b/wp-includes/rss.php index 88bfa62dc..0d9493768 100644 --- a/wp-includes/rss.php +++ b/wp-includes/rss.php @@ -63,7 +63,6 @@ class MagpieRSS { if ( !is_resource($parser) ) trigger_error( "Failed to create an instance of PHP's XML parser. http://www.php.net/manual/en/ref.xml.php"); - $this->parser = $parser; # pass in parser, and a reference to this object @@ -167,7 +166,6 @@ class MagpieRSS { $this->incontent = $el; - } // if inside an Atom content construct (e.g. content or summary) field treat tags as text @@ -206,8 +204,6 @@ class MagpieRSS { } } - - function feed_cdata ($p, $text) { if ($this->feed_type == ATOM and $this->incontent) @@ -436,7 +432,6 @@ function fetch_rss ($url) { debug($cache->ERROR, E_USER_WARNING); } - $cache_status = 0; // response of check_cache $request_headers = array(); // HTTP headers to send with fetch $rss = 0; // parsed RSS object @@ -935,5 +930,3 @@ function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS } } endif; - -?> diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php index 2ae6f5107..dab58683e 100644 --- a/wp-includes/script-loader.php +++ b/wp-includes/script-loader.php @@ -59,16 +59,16 @@ function wp_default_scripts( &$scripts ) { $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : ''; - $scripts->add( 'utils', "/wp-admin/js/utils$suffix.js", false, '20101110' ); + $scripts->add( 'utils', "/wp-admin/js/utils$suffix.js" ); - $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20120102', 1 ); + $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), false, 1 ); $scripts->localize( 'common', 'commonL10n', array( 'warnDelete' => __("You are about to permanently delete the selected items.\n 'Cancel' to stop, 'OK' to delete.") ) ); - $scripts->add( 'sack', "/wp-includes/js/tw-sack$suffix.js", false, '1.6.1', 1 ); + $scripts->add( 'sack', "/wp-includes/js/tw-sack$suffix.js", array(), '1.6.1', 1 ); - $scripts->add( 'quicktags', "/wp-includes/js/quicktags$suffix.js", false, '20111114', 1 ); + $scripts->add( 'quicktags', "/wp-includes/js/quicktags$suffix.js", array(), false, 1 ); $scripts->localize( 'quicktags', 'quicktagsL10n', array( 'wordLookup' => __('Enter a word to look up:'), 'dictionaryLookup' => esc_attr(__('Dictionary lookup')), @@ -79,18 +79,20 @@ function wp_default_scripts( &$scripts ) { 'enterImageURL' => __('Enter the URL of the image'), 'enterImageDescription' => __('Enter a description of the image'), 'fullscreen' => __('fullscreen'), - 'toggleFullscreen' => esc_attr( __('Toggle fullscreen mode') ) + 'toggleFullscreen' => esc_attr( __('Toggle fullscreen mode') ), + 'textdirection' => esc_attr( __('text direction') ), + 'toggleTextdirection' => esc_attr( __('Toggle Editor Text Direction') ) ) ); $scripts->add( 'colorpicker', "/wp-includes/js/colorpicker$suffix.js", array('prototype'), '3517m' ); - $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('utils','jquery'), '20111117', 1 ); + $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('utils','jquery'), false, 1 ); - $scripts->add( 'wp-fullscreen', "/wp-admin/js/wp-fullscreen$suffix.js", array('jquery'), '20111116', 1 ); + $scripts->add( 'wp-fullscreen', "/wp-admin/js/wp-fullscreen$suffix.js", array('jquery'), false, 1 ); - $scripts->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6.1'); + $scripts->add( 'prototype', '/wp-includes/js/prototype.js', array(), '1.6.1'); - $scripts->add( 'wp-ajax-response', "/wp-includes/js/wp-ajax-response$suffix.js", array('jquery'), '20091119', 1 ); + $scripts->add( 'wp-ajax-response', "/wp-includes/js/wp-ajax-response$suffix.js", array('jquery'), false, 1 ); $scripts->localize( 'wp-ajax-response', 'wpAjax', array( 'noPerm' => __('You do not have permission to do that.'), 'broken' => __('An unidentified error has occurred.') @@ -101,9 +103,9 @@ function wp_default_scripts( &$scripts ) { 'dismiss' => __('Dismiss'), ) ); - $scripts->add( 'autosave', "/wp-includes/js/autosave$suffix.js", array('schedule', 'wp-ajax-response'), '20111129', 1 ); + $scripts->add( 'autosave', "/wp-includes/js/autosave$suffix.js", array('schedule', 'wp-ajax-response'), false, 1 ); - $scripts->add( 'wp-lists', "/wp-includes/js/wp-lists$suffix.js", array('wp-ajax-response'), '20110521', 1 ); + $scripts->add( 'wp-lists', "/wp-includes/js/wp-lists$suffix.js", array('wp-ajax-response'), false, 1 ); $scripts->add( 'scriptaculous-root', '/wp-includes/js/scriptaculous/wp-scriptaculous.js', array('prototype'), '1.8.3'); $scripts->add( 'scriptaculous-builder', '/wp-includes/js/scriptaculous/builder.js', array('scriptaculous-root'), '1.8.3'); @@ -115,55 +117,57 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'scriptaculous', '', array('scriptaculous-dragdrop', 'scriptaculous-slider', 'scriptaculous-controls'), '1.8.3'); // not used in core, replaced by Jcrop.js - $scripts->add( 'cropper', '/wp-includes/js/crop/cropper.js', array('scriptaculous-dragdrop'), '20070118'); + $scripts->add( 'cropper', '/wp-includes/js/crop/cropper.js', array('scriptaculous-dragdrop') ); - $scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.7.1' ); + $scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', array(), '1.7.2' ); // full jQuery UI - $scripts->add( 'jquery-ui-core', '/wp-includes/js/jquery/ui/jquery.ui.core.min.js', array('jquery'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-core', '/wp-includes/js/jquery/ui/jquery.effects.core.min.js', array('jquery'), '1.8.16', 1 ); - - $scripts->add( 'jquery-effects-blind', '/wp-includes/js/jquery/ui/jquery.effects.blind.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-bounce', '/wp-includes/js/jquery/ui/jquery.effects.bounce.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-clip', '/wp-includes/js/jquery/ui/jquery.effects.clip.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-drop', '/wp-includes/js/jquery/ui/jquery.effects.drop.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-explode', '/wp-includes/js/jquery/ui/jquery.effects.explode.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-fade', '/wp-includes/js/jquery/ui/jquery.effects.fade.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-fold', '/wp-includes/js/jquery/ui/jquery.effects.fold.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-highlight', '/wp-includes/js/jquery/ui/jquery.effects.highlight.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-pulsate', '/wp-includes/js/jquery/ui/jquery.effects.pulsate.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-scale', '/wp-includes/js/jquery/ui/jquery.effects.scale.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-shake', '/wp-includes/js/jquery/ui/jquery.effects.shake.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-slide', '/wp-includes/js/jquery/ui/jquery.effects.slide.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-effects-transfer', '/wp-includes/js/jquery/ui/jquery.effects.transfer.min.js', array('jquery-effects-core'), '1.8.16', 1 ); - - $scripts->add( 'jquery-ui-accordion', '/wp-includes/js/jquery/ui/jquery.ui.accordion.min.js', array('jquery-ui-core', 'jquery-ui-widget'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-autocomplete', '/wp-includes/js/jquery/ui/jquery.ui.autocomplete.min.js', array('jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-button', '/wp-includes/js/jquery/ui/jquery.ui.button.min.js', array('jquery-ui-core', 'jquery-ui-widget'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-datepicker', '/wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js', array('jquery-ui-core'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-dialog', '/wp-includes/js/jquery/ui/jquery.ui.dialog.min.js', array('jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-draggable', '/wp-includes/js/jquery/ui/jquery.ui.draggable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-droppable', '/wp-includes/js/jquery/ui/jquery.ui.droppable.min.js', array('jquery-ui-draggable'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-mouse', '/wp-includes/js/jquery/ui/jquery.ui.mouse.min.js', array('jquery-ui-widget'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-position', '/wp-includes/js/jquery/ui/jquery.ui.position.min.js', array('jquery'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-progressbar', '/wp-includes/js/jquery/ui/jquery.ui.progressbar.min.js', array('jquery-ui-widget'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-resizable', '/wp-includes/js/jquery/ui/jquery.ui.resizable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-selectable', '/wp-includes/js/jquery/ui/jquery.ui.selectable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-slider', '/wp-includes/js/jquery/ui/jquery.ui.slider.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-sortable', '/wp-includes/js/jquery/ui/jquery.ui.sortable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-tabs', '/wp-includes/js/jquery/ui/jquery.ui.tabs.min.js', array('jquery-ui-core', 'jquery-ui-widget'), '1.8.16', 1 ); - $scripts->add( 'jquery-ui-widget', '/wp-includes/js/jquery/ui/jquery.ui.widget.min.js', array('jquery'), '1.8.16', 1 ); + $scripts->add( 'jquery-ui-core', '/wp-includes/js/jquery/ui/jquery.ui.core.min.js', array('jquery'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-core', '/wp-includes/js/jquery/ui/jquery.effects.core.min.js', array('jquery'), '1.8.20', 1 ); + + $scripts->add( 'jquery-effects-blind', '/wp-includes/js/jquery/ui/jquery.effects.blind.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-bounce', '/wp-includes/js/jquery/ui/jquery.effects.bounce.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-clip', '/wp-includes/js/jquery/ui/jquery.effects.clip.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-drop', '/wp-includes/js/jquery/ui/jquery.effects.drop.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-explode', '/wp-includes/js/jquery/ui/jquery.effects.explode.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-fade', '/wp-includes/js/jquery/ui/jquery.effects.fade.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-fold', '/wp-includes/js/jquery/ui/jquery.effects.fold.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-highlight', '/wp-includes/js/jquery/ui/jquery.effects.highlight.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-pulsate', '/wp-includes/js/jquery/ui/jquery.effects.pulsate.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-scale', '/wp-includes/js/jquery/ui/jquery.effects.scale.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-shake', '/wp-includes/js/jquery/ui/jquery.effects.shake.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-slide', '/wp-includes/js/jquery/ui/jquery.effects.slide.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-effects-transfer', '/wp-includes/js/jquery/ui/jquery.effects.transfer.min.js', array('jquery-effects-core'), '1.8.20', 1 ); + + $scripts->add( 'jquery-ui-accordion', '/wp-includes/js/jquery/ui/jquery.ui.accordion.min.js', array('jquery-ui-core', 'jquery-ui-widget'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-autocomplete', '/wp-includes/js/jquery/ui/jquery.ui.autocomplete.min.js', array('jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-position'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-button', '/wp-includes/js/jquery/ui/jquery.ui.button.min.js', array('jquery-ui-core', 'jquery-ui-widget'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-datepicker', '/wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js', array('jquery-ui-core'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-dialog', '/wp-includes/js/jquery/ui/jquery.ui.dialog.min.js', array('jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-draggable', '/wp-includes/js/jquery/ui/jquery.ui.draggable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-droppable', '/wp-includes/js/jquery/ui/jquery.ui.droppable.min.js', array('jquery-ui-draggable'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-mouse', '/wp-includes/js/jquery/ui/jquery.ui.mouse.min.js', array('jquery-ui-widget'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-position', '/wp-includes/js/jquery/ui/jquery.ui.position.min.js', array('jquery'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-progressbar', '/wp-includes/js/jquery/ui/jquery.ui.progressbar.min.js', array('jquery-ui-widget'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-resizable', '/wp-includes/js/jquery/ui/jquery.ui.resizable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-selectable', '/wp-includes/js/jquery/ui/jquery.ui.selectable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-slider', '/wp-includes/js/jquery/ui/jquery.ui.slider.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-sortable', '/wp-includes/js/jquery/ui/jquery.ui.sortable.min.js', array('jquery-ui-core', 'jquery-ui-mouse'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-tabs', '/wp-includes/js/jquery/ui/jquery.ui.tabs.min.js', array('jquery-ui-core', 'jquery-ui-widget'), '1.8.20', 1 ); + $scripts->add( 'jquery-ui-widget', '/wp-includes/js/jquery/ui/jquery.ui.widget.min.js', array('jquery'), '1.8.20', 1 ); // deprecated, not used in core, most functionality is included in jQuery 1.3 $scripts->add( 'jquery-form', "/wp-includes/js/jquery/jquery.form$suffix.js", array('jquery'), '2.73', 1 ); + // jQuery plugins $scripts->add( 'jquery-color', "/wp-includes/js/jquery/jquery.color$suffix.js", array('jquery'), '2.0-4561m', 1 ); $scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1-20110113', 1 ); $scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array('jquery'), '20m', 1 ); $scripts->add( 'jquery-query', "/wp-includes/js/jquery/jquery.query.js", array('jquery'), '2.1.7', 1 ); $scripts->add( 'jquery-serialize-object', "/wp-includes/js/jquery/jquery.serialize-object.js", array('jquery'), '0.2', 1 ); $scripts->add( 'jquery-hotkeys', "/wp-includes/js/jquery/jquery.hotkeys$suffix.js", array('jquery'), '0.0.2m', 1 ); - $scripts->add( 'jquery-table-hotkeys', "/wp-includes/js/jquery/jquery.table-hotkeys$suffix.js", array('jquery', 'jquery-hotkeys'), '20090102', 1 ); + $scripts->add( 'jquery-table-hotkeys', "/wp-includes/js/jquery/jquery.table-hotkeys$suffix.js", array('jquery', 'jquery-hotkeys'), false, 1 ); + $scripts->add( 'jquery-touch-punch', "/wp-includes/js/jquery/jquery.ui.touch-punch.js", array('jquery-ui-widget', 'jquery-ui-mouse'), '0.2.2', 1 ); $scripts->add( 'thickbox', "/wp-includes/js/thickbox/thickbox.js", array('jquery'), '3.1-20111117', 1 ); $scripts->localize( 'thickbox', 'thickboxL10n', array( @@ -179,7 +183,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'jcrop', "/wp-includes/js/jcrop/jquery.Jcrop$suffix.js", array('jquery'), '0.9.8-20110113'); - $scripts->add( 'swfobject', "/wp-includes/js/swfobject.js", false, '2.2-20120417'); + $scripts->add( 'swfobject', "/wp-includes/js/swfobject.js", array(), '2.2-20120417'); // common bits for both uploaders $max_upload_size = ( (int) ( $max_up = @ini_get('upload_max_filesize') ) < (int) ( $max_post = @ini_get('post_max_size') ) ) ? $max_up : $max_post; @@ -213,20 +217,23 @@ function wp_default_scripts( &$scripts ) { 'error_uploading' => __('“%s” has failed to upload.') ); - $scripts->add( 'plupload', '/wp-includes/js/plupload/plupload.js', false, '1511-20111112'); - $scripts->add( 'plupload-html5', '/wp-includes/js/plupload/plupload.html5.js', array('plupload'), '1511-20111112'); - $scripts->add( 'plupload-flash', '/wp-includes/js/plupload/plupload.flash.js', array('plupload'), '1511-20111112'); - $scripts->add( 'plupload-silverlight', '/wp-includes/js/plupload/plupload.silverlight.js', array('plupload'), '1511-20111112'); - $scripts->add( 'plupload-html4', '/wp-includes/js/plupload/plupload.html4.js', array('plupload'), '1511-20111112'); + $scripts->add( 'plupload', '/wp-includes/js/plupload/plupload.js', '1.5.4' ); + $scripts->add( 'plupload-html5', '/wp-includes/js/plupload/plupload.html5.js', array('plupload'), '1.5.4' ); + $scripts->add( 'plupload-flash', '/wp-includes/js/plupload/plupload.flash.js', array('plupload'), '1.5.4' ); + $scripts->add( 'plupload-silverlight', '/wp-includes/js/plupload/plupload.silverlight.js', array('plupload'), '1.5.4' ); + $scripts->add( 'plupload-html4', '/wp-includes/js/plupload/plupload.html4.js', array('plupload'), '1.5.4' ); // cannot use the plupload.full.js, as it loads browserplus init JS from Yahoo - $scripts->add( 'plupload-all', false, array('plupload', 'plupload-html5', 'plupload-flash', 'plupload-silverlight', 'plupload-html4'), '1511-20111112'); + $scripts->add( 'plupload-all', false, array('plupload', 'plupload-html5', 'plupload-flash', 'plupload-silverlight', 'plupload-html4'), '1.5.4' ); - $scripts->add( 'plupload-handlers', "/wp-includes/js/plupload/handlers$suffix.js", array('plupload-all', 'jquery'), '20111120'); + $scripts->add( 'plupload-handlers', "/wp-includes/js/plupload/handlers$suffix.js", array('plupload-all', 'jquery') ); $scripts->localize( 'plupload-handlers', 'pluploadL10n', $uploader_l10n ); + $scripts->add( 'wp-plupload', "/wp-includes/js/plupload/wp-plupload$suffix.js", array('plupload-all', 'jquery', 'json2') ); + $scripts->localize( 'wp-plupload', 'pluploadL10n', $uploader_l10n ); + // keep 'swfupload' for back-compat. - $scripts->add( 'swfupload', '/wp-includes/js/swfupload/swfupload.js', false, '2201-20110113'); + $scripts->add( 'swfupload', '/wp-includes/js/swfupload/swfupload.js', array(), '2201-20110113'); $scripts->add( 'swfupload-swfobject', '/wp-includes/js/swfupload/plugins/swfupload.swfobject.js', array('swfupload', 'swfobject'), '2201a'); $scripts->add( 'swfupload-queue', '/wp-includes/js/swfupload/plugins/swfupload.queue.js', array('swfupload'), '2201'); $scripts->add( 'swfupload-speed', '/wp-includes/js/swfupload/plugins/swfupload.speed.js', array('swfupload'), '2201'); @@ -241,13 +248,13 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'swfupload-handlers', "/wp-includes/js/swfupload/handlers$suffix.js", array('swfupload-all', 'jquery'), '2201-20110524'); $scripts->localize( 'swfupload-handlers', 'swfuploadL10n', $uploader_l10n ); - $scripts->add( 'comment-reply', "/wp-includes/js/comment-reply$suffix.js", false, '20090102'); + $scripts->add( 'comment-reply', "/wp-includes/js/comment-reply$suffix.js" ); - $scripts->add( 'json2', "/wp-includes/js/json2$suffix.js", false, '2011-02-23'); + $scripts->add( 'json2', "/wp-includes/js/json2$suffix.js", array(), '2011-02-23'); - $scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), '0.9.6-20110515', 1 ); + $scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), '0.9.8', 1 ); - $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), '20101027', 1 ); + $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), false, 1 ); $scripts->localize( 'password-strength-meter', 'pwsL10n', array( 'empty' => __('Strength indicator'), 'short' => __('Very weak'), @@ -258,11 +265,13 @@ function wp_default_scripts( &$scripts ) { 'mismatch' => __('Mismatch') ) ); - $scripts->add( 'user-profile', "/wp-admin/js/user-profile$suffix.js", array( 'jquery', 'password-strength-meter' ), '20110628', 1 ); + $scripts->add( 'user-profile', "/wp-admin/js/user-profile$suffix.js", array( 'jquery', 'password-strength-meter' ), false, 1 ); + + $scripts->add( 'user-suggest', "/wp-admin/js/user-suggest$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 ); - $scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", false, '20111130', 1 ); + $scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", array(), false, 1 ); - $scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), '20111128', 1 ); + $scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), false, 1 ); $scripts->localize( 'wplink', 'wpLinkL10n', array( 'title' => __('Insert/edit link'), 'update' => __('Update'), @@ -271,35 +280,53 @@ function wp_default_scripts( &$scripts ) { 'noMatchesFound' => __('No matches found.') ) ); - $scripts->add( 'wpdialogs', "/wp-includes/js/tinymce/plugins/wpdialogs/js/wpdialog$suffix.js", array( 'jquery-ui-dialog' ), '20110528', 1 ); + $scripts->add( 'wpdialogs', "/wp-includes/js/tinymce/plugins/wpdialogs/js/wpdialog$suffix.js", array( 'jquery-ui-dialog' ), false, 1 ); - $scripts->add( 'wpdialogs-popup', "/wp-includes/js/tinymce/plugins/wpdialogs/js/popup$suffix.js", array( 'wpdialogs' ), '20110421', 1 ); + $scripts->add( 'wpdialogs-popup', "/wp-includes/js/tinymce/plugins/wpdialogs/js/popup$suffix.js", array( 'wpdialogs' ), false, 1 ); - $scripts->add( 'word-count', "/wp-admin/js/word-count$suffix.js", array( 'jquery' ), '20110515', 1 ); - - $scripts->add( 'media-upload', "/wp-admin/js/media-upload$suffix.js", array( 'thickbox' ), '20110930', 1 ); + $scripts->add( 'word-count', "/wp-admin/js/word-count$suffix.js", array( 'jquery' ), false, 1 ); + $scripts->localize( 'word-count', 'wordCountL10n', array( + /* translators: If your word count is based on single characters (East Asian characters), + enter 'characters'. Otherwise, enter 'words'. Do not translate into your own language. */ + 'type' => 'characters' == _x( 'words', 'word count: words or characters?' ) ? 'c' : 'w', + ) ); - $scripts->add( 'hoverIntent', "/wp-includes/js/hoverIntent$suffix.js", array('jquery'), '20090102', 1 ); + $scripts->add( 'media-upload', "/wp-admin/js/media-upload$suffix.js", array( 'thickbox' ), false, 1 ); + + $scripts->add( 'hoverIntent', "/wp-includes/js/hoverIntent$suffix.js", array('jquery'), 'r6', 1 ); + + $scripts->add( 'customize-base', "/wp-includes/js/customize-base$suffix.js", array( 'jquery', 'json2' ), false, 1 ); + $scripts->add( 'customize-loader', "/wp-includes/js/customize-loader$suffix.js", array( 'customize-base' ), false, 1 ); + $scripts->add( 'customize-preview', "/wp-includes/js/customize-preview$suffix.js", array( 'customize-base' ), false, 1 ); + $scripts->add( 'customize-controls', "/wp-admin/js/customize-controls$suffix.js", array( 'customize-base' ), false, 1 ); + $scripts->localize( 'customize-controls', '_wpCustomizeControlsL10n', array( + 'activate' => __( 'Save & Activate' ), + 'save' => __( 'Save & Publish' ), + 'saved' => __( 'Saved' ), + 'cancel' => __( 'Cancel' ), + 'close' => __( 'Close' ), + 'cheatin' => __( 'Cheatin’ uh?' ), + ) ); if ( is_admin() ) { - $scripts->add( 'ajaxcat', "/wp-admin/js/cat$suffix.js", array( 'wp-lists' ), '20090102' ); + $scripts->add( 'ajaxcat', "/wp-admin/js/cat$suffix.js", array( 'wp-lists' ) ); $scripts->add_data( 'ajaxcat', 'group', 1 ); $scripts->localize( 'ajaxcat', 'catL10n', array( 'add' => esc_attr(__('Add')), 'how' => __('Separate multiple categories with commas.') ) ); - $scripts->add( 'admin-categories', "/wp-admin/js/categories$suffix.js", array('wp-lists'), '20091201', 1 ); + $scripts->add( 'admin-categories', "/wp-admin/js/categories$suffix.js", array('wp-lists'), false, 1 ); - $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array('jquery', 'wp-ajax-response'), '20110429', 1 ); + $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array('jquery', 'wp-ajax-response'), false, 1 ); $scripts->localize( 'admin-tags', 'tagsl10n', array( 'noPerm' => __('You do not have permission to do that.'), 'broken' => __('An unidentified error has occurred.') )); - $scripts->add( 'admin-custom-fields', "/wp-admin/js/custom-fields$suffix.js", array('wp-lists'), '20110429', 1 ); + $scripts->add( 'admin-custom-fields', "/wp-admin/js/custom-fields$suffix.js", array('wp-lists'), false, 1 ); - $scripts->add( 'admin-comments', "/wp-admin/js/edit-comments$suffix.js", array('wp-lists', 'quicktags', 'jquery-query'), '20111115', 1 ); + $scripts->add( 'admin-comments', "/wp-admin/js/edit-comments$suffix.js", array('wp-lists', 'quicktags', 'jquery-query'), false, 1 ); $scripts->localize( 'admin-comments', 'adminCommentsL10n', array( 'hotkeys_highlight_first' => isset($_GET['hotkeys_highlight_first']), 'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last']), @@ -307,11 +334,11 @@ function wp_default_scripts( &$scripts ) { 'reply' => __( 'Reply' ) ) ); - $scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", array('jquery'), '20110524', 1 ); + $scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", array('jquery'), false, 1 ); - $scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), '20111009a', 1 ); + $scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), false, 1 ); - $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array('suggest', 'wp-lists', 'postbox'), '20111124', 1 ); + $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array('suggest', 'wp-lists', 'postbox'), false, 1 ); $scripts->localize( 'post', 'postL10n', array( 'ok' => __('OK'), 'cancel' => __('Cancel'), @@ -330,38 +357,41 @@ function wp_default_scripts( &$scripts ) { 'publicSticky' => __('Public, Sticky'), 'password' => __('Password Protected'), 'privatelyPublished' => __('Privately Published'), - 'published' => __('Published') + 'published' => __('Published'), + 'comma' => _x( ',', 'tag delimiter' ), ) ); - $scripts->add( 'link', "/wp-admin/js/link$suffix.js", array('wp-lists', 'postbox'), '20110524', 1 ); + $scripts->add( 'link', "/wp-admin/js/link$suffix.js", array('wp-lists', 'postbox'), false, 1 ); - $scripts->add( 'comment', "/wp-admin/js/comment$suffix.js", array('jquery'), '20110429' ); + $scripts->add( 'comment', "/wp-admin/js/comment$suffix.js", array('jquery') ); $scripts->add_data( 'comment', 'group', 1 ); $scripts->localize( 'comment', 'commentL10n', array( 'submittedOn' => __('Submitted on:') ) ); - $scripts->add( 'admin-gallery', "/wp-admin/js/gallery$suffix.js", array( 'jquery-ui-sortable' ), '20110930' ); + $scripts->add( 'admin-gallery', "/wp-admin/js/gallery$suffix.js", array( 'jquery-ui-sortable' ) ); - $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), '20110925', 1 ); + $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'jquery-ui-sortable', 'jquery-ui-draggable', 'jquery-ui-droppable' ), false, 1 ); - $scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'thickbox' ), '20110118', 1 ); + $scripts->add( 'theme', "/wp-admin/js/theme$suffix.js", array( 'jquery' ), false, 1 ); - $scripts->add( 'theme-preview', "/wp-admin/js/theme-preview$suffix.js", array( 'thickbox', 'jquery' ), '20100407', 1 ); + // @todo: Core no longer uses theme-preview.js. Remove? + $scripts->add( 'theme-preview', "/wp-admin/js/theme-preview$suffix.js", array( 'thickbox', 'jquery' ), false, 1 ); - $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest' ), '20111129', 1 ); + $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'suggest' ), false, 1 ); $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array( 'error' => __('Error while saving the changes.'), 'ntdeltitle' => __('Remove From Bulk Edit'), - 'notitle' => __('(no title)') + 'notitle' => __('(no title)'), + 'comma' => _x( ',', 'tag delimiter' ), ) ); - $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery' ), '20110609', 1 ); + $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery' ), false, 1 ); $scripts->localize( 'inline-edit-tax', 'inlineEditL10n', array( 'error' => __('Error while saving the changes.') ) ); - $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'thickbox' ), '20110113', 1 ); + $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'jquery', 'thickbox' ), false, 1 ); $scripts->localize( 'plugin-install', 'plugininstallL10n', array( 'plugin_information' => __('Plugin Information:'), 'ays' => __('Are you sure you want to install this plugin?') @@ -369,18 +399,18 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'farbtastic', '/wp-admin/js/farbtastic.js', array('jquery'), '1.2' ); - $scripts->add( 'dashboard', "/wp-admin/js/dashboard$suffix.js", array( 'jquery', 'admin-comments', 'postbox' ), '20111123', 1 ); + $scripts->add( 'dashboard', "/wp-admin/js/dashboard$suffix.js", array( 'jquery', 'admin-comments', 'postbox' ), false, 1 ); - $scripts->add( 'list-revisions', "/wp-includes/js/wp-list-revisions$suffix.js", null, '20091223' ); + $scripts->add( 'list-revisions', "/wp-includes/js/wp-list-revisions$suffix.js" ); - $scripts->add( 'media', "/wp-admin/js/media$suffix.js", array( 'jquery-ui-draggable' ), '20101022', 1 ); + $scripts->add( 'media', "/wp-admin/js/media$suffix.js", array( 'jquery-ui-draggable' ), false, 1 ); - $scripts->add( 'image-edit', "/wp-admin/js/image-edit$suffix.js", array('jquery', 'json2', 'imgareaselect'), '20110927', 1 ); + $scripts->add( 'image-edit', "/wp-admin/js/image-edit$suffix.js", array('jquery', 'json2', 'imgareaselect'), false, 1 ); $scripts->localize( 'image-edit', 'imageEditL10n', array( 'error' => __( 'Could not load the preview image. Please reload the page and try again.' ) )); - $scripts->add( 'set-post-thumbnail', "/wp-admin/js/set-post-thumbnail$suffix.js", array( 'jquery' ), '20100518', 1 ); + $scripts->add( 'set-post-thumbnail', "/wp-admin/js/set-post-thumbnail$suffix.js", array( 'jquery' ), false, 1 ); $scripts->localize( 'set-post-thumbnail', 'setPostThumbnailL10n', array( 'setThumbnail' => __( 'Use as featured image' ), 'saving' => __( 'Saving...' ), @@ -389,14 +419,15 @@ function wp_default_scripts( &$scripts ) { ) ); // Navigation Menus - $scripts->add( 'nav-menu', "/wp-admin/js/nav-menu$suffix.js", array('jquery-ui-sortable'), '20111115' ); + $scripts->add( 'nav-menu', "/wp-admin/js/nav-menu$suffix.js", array('jquery-ui-sortable') ); $scripts->localize( 'nav-menu', 'navMenuL10n', array( 'noResultsFound' => _x('No results found.', 'search results'), 'warnDeleteMenu' => __( "You are about to permanently delete this menu. \n 'Cancel' to stop, 'OK' to delete." ), 'saveAlert' => __('The changes you made will be lost if you navigate away from this page.') ) ); - $scripts->add( 'custom-background', "/wp-admin/js/custom-background$suffix.js", array('farbtastic'), '20110511', 1 ); + $scripts->add( 'custom-background', "/wp-admin/js/custom-background$suffix.js", array('farbtastic'), false, 1 ); + $scripts->add( 'media-gallery', "/wp-admin/js/media-gallery$suffix.js", array('jquery'), false, 1 ); } } @@ -416,8 +447,7 @@ function wp_default_scripts( &$scripts ) { * @param object $styles */ function wp_default_styles( &$styles ) { - // This checks to see if site_url() returns something and if it does not - // then it assigns $guess_url to wp_guess_url(). Strange format, but it works. + if ( ! $guessurl = site_url() ) $guessurl = wp_guess_url(); @@ -429,35 +459,33 @@ function wp_default_styles( &$styles ) { $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : ''; - $rtl_styles = array( 'wp-admin', 'ie', 'media', 'admin-bar', 'wplink' ); + $rtl_styles = array( 'wp-admin', 'ie', 'media', 'admin-bar', 'wplink', 'customize-controls' ); // Any rtl stylesheets that don't have a .dev version for ltr $no_suffix = array( 'farbtastic' ); - $styles->add( 'wp-admin', "/wp-admin/css/wp-admin$suffix.css", array(), '20111208' ); + $styles->add( 'wp-admin', "/wp-admin/css/wp-admin$suffix.css" ); - $styles->add( 'ie', "/wp-admin/css/ie$suffix.css", array(), '20111130' ); + $styles->add( 'ie', "/wp-admin/css/ie$suffix.css" ); $styles->add_data( 'ie', 'conditional', 'lte IE 7' ); - // all colors stylesheets need to have the same query strings (cache manifest compat) - $colors_version = '20111206'; - // Register "meta" stylesheet for admin colors. All colors-* style sheets should have the same version string. - $styles->add( 'colors', true, array('wp-admin'), $colors_version ); + $styles->add( 'colors', true, array('wp-admin') ); // do not refer to these directly, the right one is queued by the above "meta" colors handle - $styles->add( 'colors-fresh', "/wp-admin/css/colors-fresh$suffix.css", array('wp-admin'), $colors_version ); - $styles->add( 'colors-classic', "/wp-admin/css/colors-classic$suffix.css", array('wp-admin'), $colors_version ); + $styles->add( 'colors-fresh', "/wp-admin/css/colors-fresh$suffix.css", array('wp-admin') ); + $styles->add( 'colors-classic', "/wp-admin/css/colors-classic$suffix.css", array('wp-admin') ); - $styles->add( 'media', "/wp-admin/css/media$suffix.css", array(), '20111119' ); - $styles->add( 'install', "/wp-admin/css/install$suffix.css", array(), '20111117' ); // Readme as well - $styles->add( 'thickbox', '/wp-includes/js/thickbox/thickbox.css', array(), '20111117' ); + $styles->add( 'media', "/wp-admin/css/media$suffix.css" ); + $styles->add( 'install', "/wp-admin/css/install$suffix.css" ); + $styles->add( 'thickbox', '/wp-includes/js/thickbox/thickbox.css' ); $styles->add( 'farbtastic', '/wp-admin/css/farbtastic.css', array(), '1.3u1' ); $styles->add( 'jcrop', '/wp-includes/js/jcrop/jquery.Jcrop.css', array(), '0.9.8' ); - $styles->add( 'imgareaselect', '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.1' ); - $styles->add( 'admin-bar', "/wp-includes/css/admin-bar$suffix.css", array(), '20111209' ); - $styles->add( 'wp-jquery-ui-dialog', "/wp-includes/css/jquery-ui-dialog$suffix.css", array(), '20111107' ); - $styles->add( 'editor-buttons', "/wp-includes/css/editor-buttons$suffix.css", array(), '20111114' ); - $styles->add( 'wp-pointer', "/wp-includes/css/wp-pointer$suffix.css", array(), '20111205' ); + $styles->add( 'imgareaselect', '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.8' ); + $styles->add( 'admin-bar', "/wp-includes/css/admin-bar$suffix.css" ); + $styles->add( 'wp-jquery-ui-dialog', "/wp-includes/css/jquery-ui-dialog$suffix.css" ); + $styles->add( 'editor-buttons', "/wp-includes/css/editor$suffix.css" ); + $styles->add( 'wp-pointer', "/wp-includes/css/wp-pointer$suffix.css" ); + $styles->add( 'customize-controls', "/wp-admin/css/customize-controls$suffix.css", array( 'wp-admin', 'colors', 'ie' ) ); foreach ( $rtl_styles as $rtl_style ) { $styles->add_data( $rtl_style, 'rtl', true ); @@ -628,8 +656,7 @@ function _print_scripts() { echo "</script>\n"; } - $ver = md5("$wp_scripts->concat_version"); - $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&load=" . trim($wp_scripts->concat, ', ') . "&ver=$ver"; + $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&load=" . trim($wp_scripts->concat, ', ') . '&ver=' . $wp_scripts->default_version; echo "<script type='text/javascript' src='" . esc_attr($src) . "'></script>\n"; } @@ -660,7 +687,7 @@ function wp_print_head_scripts() { /** * Private, for use in *_footer_scripts hooks * - * @since 3.3 + * @since 3.3.0 */ function _wp_footer_scripts() { print_late_styles(); @@ -717,7 +744,7 @@ function print_admin_styles() { /** * Prints the styles that were queued too late for the HTML head. * - * @since 3.3 + * @since 3.3.0 */ function print_late_styles() { global $wp_styles, $concatenate_scripts; @@ -747,8 +774,8 @@ function _print_styles() { if ( !empty($wp_styles->concat) ) { $dir = $wp_styles->text_direction; - $ver = md5("$wp_styles->concat_version{$dir}"); - $href = $wp_styles->base_url . "/wp-admin/load-styles.php?c={$zip}&dir={$dir}&load=" . trim($wp_styles->concat, ', ') . "&ver=$ver"; + $ver = $wp_styles->default_version; + $href = $wp_styles->base_url . "/wp-admin/load-styles.php?c={$zip}&dir={$dir}&load=" . trim($wp_styles->concat, ', ') . '&ver=' . $ver; echo "<link rel='stylesheet' href='" . esc_attr($href) . "' type='text/css' media='all' />\n"; if ( !empty($wp_styles->print_code) ) { diff --git a/wp-includes/shortcodes.php b/wp-includes/shortcodes.php index 1cb361377..1b860d276 100644 --- a/wp-includes/shortcodes.php +++ b/wp-includes/shortcodes.php @@ -235,7 +235,7 @@ function do_shortcode_tag( $m ) { return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, $m[5], $tag ) . $m[6]; } else { // self-closing tag - return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, NULL, $tag ) . $m[6]; + return $m[1] . call_user_func( $shortcode_tags[$tag], $attr, null, $tag ) . $m[6]; } } @@ -332,5 +332,3 @@ function strip_shortcode_tag( $m ) { } add_filter('the_content', 'do_shortcode', 11); // AFTER wpautop() - -?> diff --git a/wp-includes/taxonomy.php b/wp-includes/taxonomy.php index 4d525d69c..8ea976ffa 100644 --- a/wp-includes/taxonomy.php +++ b/wp-includes/taxonomy.php @@ -12,18 +12,39 @@ // /** - * Creates the initial taxonomies when 'init' action is fired. + * Creates the initial taxonomies. + * + * This function fires twice: in wp-settings.php before plugins are loaded (for + * backwards compatibility reasons), and again on the 'init' action. We must avoid + * registering rewrite rules before the 'init' action. */ function create_initial_taxonomies() { global $wp_rewrite; + if ( ! did_action( 'init' ) ) { + $rewrite = array( 'category' => false, 'post_tag' => false, 'post_format' => false ); + } else { + $post_format_base = apply_filters( 'post_format_rewrite_base', 'type' ); + $rewrite = array( + 'category' => array( + 'hierarchical' => true, + 'slug' => get_option('category_base') ? get_option('category_base') : 'category', + 'with_front' => ! get_option('category_base') || $wp_rewrite->using_index_permalinks(), + 'ep_mask' => EP_CATEGORIES, + ), + 'post_tag' => array( + 'slug' => get_option('tag_base') ? get_option('tag_base') : 'tag', + 'with_front' => ! get_option('tag_base') || $wp_rewrite->using_index_permalinks(), + 'ep_mask' => EP_TAGS, + ), + 'post_format' => $post_format_base ? array( 'slug' => $post_format_base ) : false, + ); + } + register_taxonomy( 'category', 'post', array( 'hierarchical' => true, 'query_var' => 'category_name', - 'rewrite' => did_action( 'init' ) ? array( - 'hierarchical' => true, - 'slug' => get_option('category_base') ? get_option('category_base') : 'category', - 'with_front' => ( get_option('category_base') && ! $wp_rewrite->using_index_permalinks() ) ? false : true ) : false, + 'rewrite' => $rewrite['category'], 'public' => true, 'show_ui' => true, '_builtin' => true, @@ -32,9 +53,7 @@ function create_initial_taxonomies() { register_taxonomy( 'post_tag', 'post', array( 'hierarchical' => false, 'query_var' => 'tag', - 'rewrite' => did_action( 'init' ) ? array( - 'slug' => get_option('tag_base') ? get_option('tag_base') : 'tag', - 'with_front' => ( get_option('tag_base') && ! $wp_rewrite->using_index_permalinks() ) ? false : true ) : false, + 'rewrite' => $rewrite['post_tag'], 'public' => true, 'show_ui' => true, '_builtin' => true, @@ -77,12 +96,6 @@ function create_initial_taxonomies() { '_builtin' => true, ) ); - $rewrite = false; - if ( did_action( 'init' ) ) { - $rewrite = apply_filters( 'post_format_rewrite_base', 'type' ); - $rewrite = $rewrite ? array( 'slug' => $rewrite ) : false; - } - register_taxonomy( 'post_format', 'post', array( 'public' => true, 'hierarchical' => false, @@ -91,10 +104,10 @@ function create_initial_taxonomies() { 'singular_name' => _x( 'Format', 'post format' ), ), 'query_var' => true, - 'rewrite' => $rewrite, + 'rewrite' => $rewrite['post_format'], 'show_ui' => false, '_builtin' => true, - 'show_in_nav_menus' => false, + 'show_in_nav_menus' => current_theme_supports( 'post-formats' ), ) ); } add_action( 'init', 'create_initial_taxonomies', 0 ); // highest priority @@ -122,7 +135,6 @@ function get_taxonomies( $args = array(), $output = 'names', $operator = 'and' ) return wp_filter_object_list($wp_taxonomies, $args, $operator, $field); } - /** * Return all of the taxonomy names that are of $object_type. * @@ -284,7 +296,6 @@ function is_taxonomy_hierarchical($taxonomy) { * @subpackage Taxonomy * @since 2.3.0 * @uses $wp_taxonomies Inserts new taxonomy object into the list - * @uses $wp_rewrite Adds rewrite tags and permastructs * @uses $wp Adds query vars * * @param string $taxonomy Name of taxonomy object @@ -292,7 +303,7 @@ function is_taxonomy_hierarchical($taxonomy) { * @param array|string $args See above description for the two keys values. */ function register_taxonomy( $taxonomy, $object_type, $args = array() ) { - global $wp_taxonomies, $wp_rewrite, $wp; + global $wp_taxonomies, $wp; if ( ! is_array($wp_taxonomies) ) $wp_taxonomies = array(); @@ -318,11 +329,12 @@ function register_taxonomy( $taxonomy, $object_type, $args = array() ) { $wp->add_query_var($args['query_var']); } - if ( false !== $args['rewrite'] && '' != get_option('permalink_structure') ) { + if ( false !== $args['rewrite'] && ( is_admin() || '' != get_option('permalink_structure') ) ) { $args['rewrite'] = wp_parse_args($args['rewrite'], array( 'slug' => sanitize_title_with_dashes($taxonomy), 'with_front' => true, - 'hierarchical' => false + 'hierarchical' => false, + 'ep_mask' => EP_NONE, )); if ( $args['hierarchical'] && $args['rewrite']['hierarchical'] ) @@ -330,8 +342,8 @@ function register_taxonomy( $taxonomy, $object_type, $args = array() ) { else $tag = '([^/]+)'; - $wp_rewrite->add_rewrite_tag("%$taxonomy%", $tag, $args['query_var'] ? "{$args['query_var']}=" : "taxonomy=$taxonomy&term="); - $wp_rewrite->add_permastruct($taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%", $args['rewrite']['with_front']); + add_rewrite_tag( "%$taxonomy%", $tag, $args['query_var'] ? "{$args['query_var']}=" : "taxonomy=$taxonomy&term=" ); + add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%", $args['rewrite'] ); } if ( is_null($args['show_ui']) ) @@ -379,14 +391,15 @@ function register_taxonomy( $taxonomy, $object_type, $args = array() ) { * - parent_item - This string isn't used on non-hierarchical taxonomies. In hierarchical ones the default is Parent Category * - parent_item_colon - The same as <code>parent_item</code>, but with colon <code>:</code> in the end * - edit_item - Default is Edit Tag/Edit Category + * - view_item - Default is View Tag/View Category * - update_item - Default is Update Tag/Update Category * - add_new_item - Default is Add New Tag/Add New Category * - new_item_name - Default is New Tag Name/New Category Name - * - separate_items_with_commas - This string isn't used on hierarchical taxonomies. Default is "Separate tags with commas," used in the meta box. - * - add_or_remove_items - This string isn't used on hierarchical taxonomies. Default is "Add or remove tags," used in the meta box when JavaScript is disabled. - * - choose_from_most_used - This string isn't used on hierarchical taxonomies. Default is "Choose from the most used tags," used in the meta box. + * - separate_items_with_commas - This string isn't used on hierarchical taxonomies. Default is "Separate tags with commas", used in the meta box. + * - add_or_remove_items - This string isn't used on hierarchical taxonomies. Default is "Add or remove tags", used in the meta box when JavaScript is disabled. + * - choose_from_most_used - This string isn't used on hierarchical taxonomies. Default is "Choose from the most used tags", used in the meta box. * - * Above, the first default value is for non-hierarchical taxonomies (like tags) and the second one is for hierarchical taxonomies (like categories.) + * Above, the first default value is for non-hierarchical taxonomies (like tags) and the second one is for hierarchical taxonomies (like categories). * * @since 3.0.0 * @param object $tax Taxonomy object @@ -428,7 +441,7 @@ function get_taxonomy_labels( $tax ) { * @uses $wp_taxonomies Modifies taxonomy object * * @param string $taxonomy Name of taxonomy object - * @param array|string $object_type Name of the object type + * @param string $object_type Name of the object type * @return bool True if successful, false if not */ function register_taxonomy_for_object_type( $taxonomy, $object_type) { @@ -489,7 +502,7 @@ function get_objects_in_term( $term_ids, $taxonomies, $args = array() ) { foreach ( (array) $taxonomies as $taxonomy ) { if ( ! taxonomy_exists( $taxonomy ) ) - return new WP_Error( 'invalid_taxonomy', __( 'Invalid Taxonomy' ) ); + return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy' ) ); } $defaults = array( 'order' => 'ASC' ); @@ -842,7 +855,7 @@ function &get_term($term, $taxonomy, $output = OBJECT, $filter = 'raw') { } if ( ! taxonomy_exists($taxonomy) ) { - $error = new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); + $error = new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); return $error; } @@ -971,7 +984,7 @@ function get_term_by($field, $value, $taxonomy, $output = OBJECT, $filter = 'raw */ function get_term_children( $term_id, $taxonomy ) { if ( ! taxonomy_exists($taxonomy) ) - return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); + return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); $term_id = intval( $term_id ); @@ -1083,19 +1096,19 @@ function get_term_to_edit( $id, $taxonomy ) { * hide_empty - Default is true. Will not return empty terms, which means * terms whose count is 0 according to the given taxonomy. * - * exclude - Default is an empty array. An array, comma- or space-delimited string - * of term ids to exclude from the return array. If 'include' is non-empty, + * exclude - Default is an empty array. An array, comma- or space-delimited string + * of term ids to exclude from the return array. If 'include' is non-empty, * 'exclude' is ignored. * - * exclude_tree - Default is an empty array. An array, comma- or space-delimited + * exclude_tree - Default is an empty array. An array, comma- or space-delimited * string of term ids to exclude from the return array, along with all of their - * descendant terms according to the primary taxonomy. If 'include' is non-empty, + * descendant terms according to the primary taxonomy. If 'include' is non-empty, * 'exclude_tree' is ignored. * - * include - Default is an empty array. An array, comma- or space-delimited string + * include - Default is an empty array. An array, comma- or space-delimited string * of term ids to include in the return array. * - * number - The maximum number of terms to return. Default is to return them all. + * number - The maximum number of terms to return. Default is to return them all. * * offset - The number by which to offset the terms query. * @@ -1109,7 +1122,7 @@ function get_term_to_edit( $id, $taxonomy ) { * (even if 'hide_empty' is set to true). * * search - Returned terms' names will contain the value of 'search', - * case-insensitive. Default is an empty string. + * case-insensitive. Default is an empty string. * * name__like - Returned terms' names will begin with the value of 'name__like', * case-insensitive. Default is empty string. @@ -1120,13 +1133,13 @@ function get_term_to_edit( $id, $taxonomy ) { * The 'get' argument, if set to 'all' instead of its default empty string, * returns terms regardless of ancestry or whether the terms are empty. * - * The 'child_of' argument, when used, should be set to the integer of a term ID. Its default - * is 0. If set to a non-zero value, all returned terms will be descendants - * of that term according to the given taxonomy. Hence 'child_of' is set to 0 + * The 'child_of' argument, when used, should be set to the integer of a term ID. Its default + * is 0. If set to a non-zero value, all returned terms will be descendants + * of that term according to the given taxonomy. Hence 'child_of' is set to 0 * if more than one taxonomy is passed in $taxonomies, because multiple taxonomies * make term ancestry ambiguous. * - * The 'parent' argument, when used, should be set to the integer of a term ID. Its default is + * The 'parent' argument, when used, should be set to the integer of a term ID. Its default is * the empty string '', which has a different meaning from the integer 0. * If set to an integer value, all returned terms will have as an immediate * ancestor the term whose ID is specified by that integer according to the given taxonomy. @@ -1161,7 +1174,7 @@ function &get_terms($taxonomies, $args = '') { foreach ( $taxonomies as $taxonomy ) { if ( ! taxonomy_exists($taxonomy) ) { - $error = new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); + $error = new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); return $error; } } @@ -1431,8 +1444,6 @@ function &get_terms($taxonomies, $args = '') { /** * Check if Term exists. * - * Returns the index of a defined term, or 0 (false) if the term doesn't exist. - * * Formerly is_term(), introduced in 2.3.0. * * @package WordPress @@ -1444,7 +1455,8 @@ function &get_terms($taxonomies, $args = '') { * @param int|string $term The term to check * @param string $taxonomy The taxonomy name to use * @param int $parent ID of parent term under which to confine the exists search. - * @return mixed Get the term id or Term Object, if exists. + * @return mixed Returns 0 if the term does not exist. Returns the term ID if no taxonomy is specified + * and the term ID exists. Returns an array of the term ID and the taxonomy if the pairing exists. */ function term_exists($term, $taxonomy = '', $parent = 0) { global $wpdb; @@ -1495,6 +1507,32 @@ function term_exists($term, $taxonomy = '', $parent = 0) { return $wpdb->get_var( $wpdb->prepare("SELECT term_id FROM $wpdb->terms as t WHERE $else_where", $else_where_fields) ); } +/** + * Check if a term is an ancestor of another term. + * + * You can use either an id or the term object for both parameters. + * + * @since 3.4.0 + * + * @param int|object $term1 ID or object to check if this is the parent term. + * @param int|object $term2 The child term. + * @param string $taxonomy Taxonomy name that $term1 and $term2 belong to. + * @return bool Whether $term2 is child of $term1 + */ +function term_is_ancestor_of( $term1, $term2, $taxonomy ) { + if ( ! isset( $term1->term_id ) ) + $term1 = get_term( $term1, $taxonomy ); + if ( ! isset( $term2->parent ) ) + $term2 = get_term( $term2, $taxonomy ); + + if ( empty( $term1->term_id ) || empty( $term2->parent ) ) + return false; + if ( $term2->parent == $term1->term_id ) + return true; + + return term_is_ancestor_of( $term1, get_term( $term2->parent, $taxonomy ), $taxonomy ); +} + /** * Sanitize Term all fields. * @@ -1765,12 +1803,12 @@ function wp_delete_term( $term, $taxonomy, $args = array() ) { clean_object_term_cache( $objects, $object_type ); do_action( 'delete_term_taxonomy', $tt_id ); - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = %d", $tt_id ) ); + $wpdb->delete( $wpdb->term_taxonomy, array( 'term_taxonomy_id' => $tt_id ) ); do_action( 'deleted_term_taxonomy', $tt_id ); // Delete the term if no taxonomies use it. if ( !$wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE term_id = %d", $term) ) ) - $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->terms WHERE term_id = %d", $term) ); + $wpdb->delete( $wpdb->terms, array( 'term_id' => $term ) ); clean_term_cache($term, $taxonomy); @@ -1824,17 +1862,20 @@ function wp_delete_category( $cat_ID ) { * @param int|array $object_ids The ID(s) of the object(s) to retrieve. * @param string|array $taxonomies The taxonomies to retrieve terms from. * @param array|string $args Change what is returned - * @return array|WP_Error The requested term data or empty array if no terms found. WP_Error if $taxonomy does not exist. + * @return array|WP_Error The requested term data or empty array if no terms found. WP_Error if any of the $taxonomies don't exist. */ function wp_get_object_terms($object_ids, $taxonomies, $args = array()) { global $wpdb; + if ( empty( $object_ids ) || empty( $taxonomies ) ) + return array(); + if ( !is_array($taxonomies) ) $taxonomies = array($taxonomies); foreach ( (array) $taxonomies as $taxonomy ) { if ( ! taxonomy_exists($taxonomy) ) - return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); + return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); } if ( !is_array($object_ids) ) @@ -2105,7 +2146,7 @@ function wp_set_object_terms($object_id, $terms, $taxonomy, $append = false) { $object_id = (int) $object_id; if ( ! taxonomy_exists($taxonomy) ) - return new WP_Error('invalid_taxonomy', __('Invalid Taxonomy')); + return new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); if ( !is_array($terms) ) $terms = array($terms); @@ -2473,7 +2514,6 @@ function wp_update_term_count_now( $terms, $taxonomy ) { // Cache // - /** * Removes the taxonomy relationship to terms from the cache. * @@ -2503,7 +2543,6 @@ function clean_object_term_cache($object_ids, $object_type) { do_action('clean_object_term_cache', $object_ids, $object_type); } - /** * Will remove all of the term ids from the cache. * @@ -2564,7 +2603,6 @@ function clean_term_cache($ids, $taxonomy = '', $clean_taxonomy = true) { wp_cache_set('last_changed', time(), 'terms'); } - /** * Retrieves the taxonomy relationship to the term object id. * @@ -2583,7 +2621,6 @@ function &get_object_term_cache($id, $taxonomy) { return $cache; } - /** * Updates the cache for Term ID(s). * @@ -2637,7 +2674,7 @@ function update_object_term_cache($object_ids, $object_type) { $object_terms[$term->object_id][$term->taxonomy][$term->term_id] = $term; foreach ( $ids as $id ) { - foreach ( $taxonomies as $taxonomy ) { + foreach ( $taxonomies as $taxonomy ) { if ( ! isset($object_terms[$id][$taxonomy]) ) { if ( !isset($object_terms[$id]) ) $object_terms[$id] = array(); @@ -2648,12 +2685,11 @@ function update_object_term_cache($object_ids, $object_type) { foreach ( $object_terms as $id => $value ) { foreach ( $value as $taxonomy => $terms ) { - wp_cache_set($id, $terms, "{$taxonomy}_relationships"); + wp_cache_add( $id, $terms, "{$taxonomy}_relationships" ); } } } - /** * Updates Terms to Taxonomy in cache. * @@ -2678,7 +2714,6 @@ function update_term_cache($terms, $taxonomy = '') { // Private // - /** * Retrieves children of taxonomy as Term IDs. * @@ -2711,7 +2746,6 @@ function _get_term_hierarchy($taxonomy) { return $children; } - /** * Get the subset of $terms that are descendants of $term_id. * @@ -2768,7 +2802,6 @@ function &_get_term_children($term_id, $terms, $taxonomy) { return $term_list; } - /** * Add count of children to parent count. * @@ -2878,7 +2911,6 @@ function _update_post_term_count( $terms, $taxonomy ) { if ( $object_types ) $count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = 'publish' AND post_type IN ('" . implode("', '", $object_types ) . "') AND term_taxonomy_id = %d", $term ) ); - do_action( 'edit_term_taxonomy', $term, $taxonomy ); $wpdb->update( $wpdb->term_taxonomy, compact( 'count' ), array( 'term_taxonomy_id' => $term ) ); do_action( 'edited_term_taxonomy', $term, $taxonomy ); @@ -3094,7 +3126,7 @@ function get_post_taxonomies($post = 0) { * * @param int $object_id ID of the object (post ID, link ID, ...) * @param string $taxonomy Single taxonomy name - * @param int|string|array $terms Optional. Term term_id, name, slug or array of said + * @param int|string|array $terms Optional. Term term_id, name, slug or array of said * @return bool|WP_Error. WP_Error on input error. */ function is_object_in_term( $object_id, $taxonomy, $terms = null ) { @@ -3240,7 +3272,7 @@ function wp_check_term_hierarchy_for_loops( $parent, $term_id, $taxonomy ) { if ( isset( $loop[$term_id] ) ) return 0; - // There's a loop, but it doesn't contain $term_id. Break the loop. + // There's a loop, but it doesn't contain $term_id. Break the loop. foreach ( array_keys( $loop ) as $loop_member ) wp_update_term( $loop_member, $taxonomy, array( 'parent' => 0 ) ); diff --git a/wp-includes/template-loader.php b/wp-includes/template-loader.php index 7c72a05e1..fdf75f15e 100644 --- a/wp-includes/template-loader.php +++ b/wp-includes/template-loader.php @@ -43,5 +43,3 @@ if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) : include( $template ); return; endif; - -?> diff --git a/wp-includes/template.php b/wp-includes/template.php new file mode 100644 index 000000000..531b308d2 --- /dev/null +++ b/wp-includes/template.php @@ -0,0 +1,394 @@ +<?php +/** + * Template loading functions. + * + * @package WordPress + * @subpackage Template + */ + +/** + * Retrieve path to a template + * + * Used to quickly retrieve the path of a template without including the file + * extension. It will also check the parent theme, if the file exists, with + * the use of {@link locate_template()}. Allows for more generic template location + * without the use of the other get_*_template() functions. + * + * @since 1.5.0 + * + * @param string $type Filename without extension. + * @param array $templates An optional list of template candidates + * @return string Full path to file. + */ +function get_query_template( $type, $templates = array() ) { + $type = preg_replace( '|[^a-z0-9-]+|', '', $type ); + + if ( empty( $templates ) ) + $templates = array("{$type}.php"); + + return apply_filters( "{$type}_template", locate_template( $templates ) ); +} + +/** + * Retrieve path of index template in current or parent template. + * + * @since 3.0.0 + * + * @return string + */ +function get_index_template() { + return get_query_template('index'); +} + +/** + * Retrieve path of 404 template in current or parent template. + * + * @since 1.5.0 + * + * @return string + */ +function get_404_template() { + return get_query_template('404'); +} + +/** + * Retrieve path of archive template in current or parent template. + * + * @since 1.5.0 + * + * @return string + */ +function get_archive_template() { + $post_type = get_query_var( 'post_type' ); + + $templates = array(); + + if ( $post_type ) + $templates[] = "archive-{$post_type}.php"; + $templates[] = 'archive.php'; + + return get_query_template( 'archive', $templates ); +} + +/** + * Retrieve path of author template in current or parent template. + * + * @since 1.5.0 + * + * @return string + */ +function get_author_template() { + $author = get_queried_object(); + + $templates = array(); + + $templates[] = "author-{$author->user_nicename}.php"; + $templates[] = "author-{$author->ID}.php"; + $templates[] = 'author.php'; + + return get_query_template( 'author', $templates ); +} + +/** + * Retrieve path of category template in current or parent template. + * + * Works by first retrieving the current slug for example 'category-default.php' and then + * trying category ID, for example 'category-1.php' and will finally fallback to category.php + * template, if those files don't exist. + * + * @since 1.5.0 + * @uses apply_filters() Calls 'category_template' on file path of category template. + * + * @return string + */ +function get_category_template() { + $category = get_queried_object(); + + $templates = array(); + + $templates[] = "category-{$category->slug}.php"; + $templates[] = "category-{$category->term_id}.php"; + $templates[] = 'category.php'; + + return get_query_template( 'category', $templates ); +} + +/** + * Retrieve path of tag template in current or parent template. + * + * Works by first retrieving the current tag name, for example 'tag-wordpress.php' and then + * trying tag ID, for example 'tag-1.php' and will finally fallback to tag.php + * template, if those files don't exist. + * + * @since 2.3.0 + * @uses apply_filters() Calls 'tag_template' on file path of tag template. + * + * @return string + */ +function get_tag_template() { + $tag = get_queried_object(); + + $templates = array(); + + $templates[] = "tag-{$tag->slug}.php"; + $templates[] = "tag-{$tag->term_id}.php"; + $templates[] = 'tag.php'; + + return get_query_template( 'tag', $templates ); +} + +/** + * Retrieve path of taxonomy template in current or parent template. + * + * Retrieves the taxonomy and term, if term is available. The template is + * prepended with 'taxonomy-' and followed by both the taxonomy string and + * the taxonomy string followed by a dash and then followed by the term. + * + * The taxonomy and term template is checked and used first, if it exists. + * Second, just the taxonomy template is checked, and then finally, taxonomy.php + * template is used. If none of the files exist, then it will fall back on to + * index.php. + * + * @since 2.5.0 + * @uses apply_filters() Calls 'taxonomy_template' filter on found path. + * + * @return string + */ +function get_taxonomy_template() { + $term = get_queried_object(); + $taxonomy = $term->taxonomy; + + $templates = array(); + + $templates[] = "taxonomy-$taxonomy-{$term->slug}.php"; + $templates[] = "taxonomy-$taxonomy.php"; + $templates[] = 'taxonomy.php'; + + return get_query_template( 'taxonomy', $templates ); +} + +/** + * Retrieve path of date template in current or parent template. + * + * @since 1.5.0 + * + * @return string + */ +function get_date_template() { + return get_query_template('date'); +} + +/** + * Retrieve path of home template in current or parent template. + * + * This is the template used for the page containing the blog posts + * + * Attempts to locate 'home.php' first before falling back to 'index.php'. + * + * @since 1.5.0 + * @uses apply_filters() Calls 'home_template' on file path of home template. + * + * @return string + */ +function get_home_template() { + $templates = array( 'home.php', 'index.php' ); + + return get_query_template( 'home', $templates ); +} + +/** + * Retrieve path of front-page template in current or parent template. + * + * Looks for 'front-page.php'. + * + * @since 3.0.0 + * @uses apply_filters() Calls 'front_page_template' on file path of template. + * + * @return string + */ +function get_front_page_template() { + $templates = array('front-page.php'); + + return get_query_template( 'front_page', $templates ); +} + +/** + * Retrieve path of page template in current or parent template. + * + * Will first look for the specifically assigned page template + * The will search for 'page-{slug}.php' followed by 'page-id.php' + * and finally 'page.php' + * + * @since 1.5.0 + * + * @return string + */ +function get_page_template() { + $id = get_queried_object_id(); + $template = get_page_template_slug(); + $pagename = get_query_var('pagename'); + + if ( ! $pagename && $id ) { + // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object + $post = get_queried_object(); + $pagename = $post->post_name; + } + + $templates = array(); + if ( $template && 0 === validate_file( $template ) ) + $templates[] = $template; + if ( $pagename ) + $templates[] = "page-$pagename.php"; + if ( $id ) + $templates[] = "page-$id.php"; + $templates[] = 'page.php'; + + return get_query_template( 'page', $templates ); +} + +/** + * Retrieve path of paged template in current or parent template. + * + * @since 1.5.0 + * + * @return string + */ +function get_paged_template() { + return get_query_template('paged'); +} + +/** + * Retrieve path of search template in current or parent template. + * + * @since 1.5.0 + * + * @return string + */ +function get_search_template() { + return get_query_template('search'); +} + +/** + * Retrieve path of single template in current or parent template. + * + * @since 1.5.0 + * + * @return string + */ +function get_single_template() { + $object = get_queried_object(); + + $templates = array(); + + $templates[] = "single-{$object->post_type}.php"; + $templates[] = "single.php"; + + return get_query_template( 'single', $templates ); +} + +/** + * Retrieve path of attachment template in current or parent template. + * + * The attachment path first checks if the first part of the mime type exists. + * The second check is for the second part of the mime type. The last check is + * for both types separated by an underscore. If neither are found then the file + * 'attachment.php' is checked and returned. + * + * Some examples for the 'text/plain' mime type are 'text.php', 'plain.php', and + * finally 'text_plain.php'. + * + * @since 2.0.0 + * + * @return string + */ +function get_attachment_template() { + global $posts; + $type = explode('/', $posts[0]->post_mime_type); + if ( $template = get_query_template($type[0]) ) + return $template; + elseif ( $template = get_query_template($type[1]) ) + return $template; + elseif ( $template = get_query_template("$type[0]_$type[1]") ) + return $template; + else + return get_query_template('attachment'); +} + +/** + * Retrieve path of comment popup template in current or parent template. + * + * Checks for comment popup template in current template, if it exists or in the + * parent template. + * + * @since 1.5.0 + * @uses apply_filters() Calls 'comments_popup_template' filter on path. + * + * @return string + */ +function get_comments_popup_template() { + $template = get_query_template( 'comments_popup', array( 'comments-popup.php' ) ); + + // Backward compat code will be removed in a future release + if ('' == $template) + $template = ABSPATH . WPINC . '/theme-compat/comments-popup.php'; + + return $template; +} + +/** + * Retrieve the name of the highest priority template file that exists. + * + * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which + * inherit from a parent theme can just overload one file. + * + * @since 2.7.0 + * + * @param string|array $template_names Template file(s) to search for, in order. + * @param bool $load If true the template file will be loaded if it is found. + * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false. + * @return string The template filename if one is located. + */ +function locate_template($template_names, $load = false, $require_once = true ) { + $located = ''; + foreach ( (array) $template_names as $template_name ) { + if ( !$template_name ) + continue; + if ( file_exists(STYLESHEETPATH . '/' . $template_name)) { + $located = STYLESHEETPATH . '/' . $template_name; + break; + } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) { + $located = TEMPLATEPATH . '/' . $template_name; + break; + } + } + + if ( $load && '' != $located ) + load_template( $located, $require_once ); + + return $located; +} + +/** + * Require the template file with WordPress environment. + * + * The globals are set up for the template file to ensure that the WordPress + * environment is available from within the function. The query variables are + * also available. + * + * @since 1.5.0 + * + * @param string $_template_file Path to template file. + * @param bool $require_once Whether to require_once or require. Default true. + */ +function load_template( $_template_file, $require_once = true ) { + global $posts, $post, $wp_did_header, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID; + + if ( is_array( $wp_query->query_vars ) ) + extract( $wp_query->query_vars, EXTR_SKIP ); + + if ( $require_once ) + require_once( $_template_file ); + else + require( $_template_file ); +} + diff --git a/wp-includes/theme-compat/comments.php b/wp-includes/theme-compat/comments.php index 5bbfe1579..89a888c75 100644 --- a/wp-includes/theme-compat/comments.php +++ b/wp-includes/theme-compat/comments.php @@ -51,7 +51,6 @@ _deprecated_file( sprintf( __( 'Theme without %1$s' ), basename(__FILE__) ), '3. <?php endif; ?> <?php endif; ?> - <?php if ( comments_open() ) : ?> <div id="respond"> diff --git a/wp-includes/theme-compat/header.php b/wp-includes/theme-compat/header.php index 6795b1653..2758773b1 100644 --- a/wp-includes/theme-compat/header.php +++ b/wp-includes/theme-compat/header.php @@ -40,7 +40,6 @@ if ( empty($withcomments) && !is_single() ) { <body <?php body_class(); ?>> <div id="page"> - <div id="header" role="banner"> <div id="headerimg"> <h1><a href="<?php echo home_url(); ?>/"><?php bloginfo('name'); ?></a></h1> diff --git a/wp-includes/theme-compat/sidebar.php b/wp-includes/theme-compat/sidebar.php index c703949c1..7c0939b6b 100644 --- a/wp-includes/theme-compat/sidebar.php +++ b/wp-includes/theme-compat/sidebar.php @@ -81,4 +81,3 @@ _deprecated_file( sprintf( __( 'Theme without %1$s' ), basename(__FILE__) ), '3. <?php endif; ?> </ul> </div> - diff --git a/wp-includes/theme.php b/wp-includes/theme.php index b132364b4..db7b0a2c7 100644 --- a/wp-includes/theme.php +++ b/wp-includes/theme.php @@ -3,9 +3,109 @@ * Theme, template, and stylesheet functions. * * @package WordPress - * @subpackage Template + * @subpackage Theme */ +/** + * Returns an array of WP_Theme objects based on the arguments. + * + * Despite advances over get_themes(), this function is quite expensive, and grows + * linearly with additional themes. Stick to wp_get_theme() if possible. + * + * @since 3.4.0 + * + * @param array $args The search arguments. Optional. + * - errors mixed True to return themes with errors, false to return themes without errors, null + * to return all themes. Defaults to false. + * - allowed mixed (Multisite) True to return only allowed themes for a site. False to return only + * disallowed themes for a site. 'site' to return only site-allowed themes. 'network' + * to return only network-allowed themes. Null to return all themes. Defaults to null. + * - blog_id int (Multisite) The blog ID used to calculate which themes are allowed. Defaults to 0, + * synonymous for the current blog. + * @return Array of WP_Theme objects. + */ +function wp_get_themes( $args = array() ) { + global $wp_theme_directories; + + $defaults = array( 'errors' => false, 'allowed' => null, 'blog_id' => 0 ); + $args = wp_parse_args( $args, $defaults ); + + $theme_directories = search_theme_directories(); + + if ( count( $wp_theme_directories ) > 1 ) { + // Make sure the current theme wins out, in case search_theme_directories() picks the wrong + // one in the case of a conflict. (Normally, last registered theme root wins.) + $current_theme = get_stylesheet(); + if ( isset( $theme_directories[ $current_theme ] ) ) { + $root_of_current_theme = get_raw_theme_root( $current_theme ); + if ( ! in_array( $root_of_current_theme, $wp_theme_directories ) ) + $root_of_current_theme = WP_CONTENT_DIR . $root_of_current_theme; + $theme_directories[ $current_theme ]['theme_root'] = $root_of_current_theme; + } + } + + if ( empty( $theme_directories ) ) + return array(); + + if ( is_multisite() && null !== $args['allowed'] ) { + $allowed = $args['allowed']; + if ( 'network' === $allowed ) + $theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed_on_network() ); + elseif ( 'site' === $allowed ) + $theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed_on_site( $args['blog_id'] ) ); + elseif ( $allowed ) + $theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed( $args['blog_id'] ) ); + else + $theme_directories = array_diff_key( $theme_directories, WP_Theme::get_allowed( $args['blog_id'] ) ); + } + + $themes = array(); + static $_themes = array(); + + foreach ( $theme_directories as $theme => $theme_root ) { + if ( isset( $_themes[ $theme_root['theme_root'] . '/' . $theme ] ) ) + $themes[ $theme ] = $_themes[ $theme_root['theme_root'] . '/' . $theme ]; + else + $themes[ $theme ] = $_themes[ $theme_root['theme_root'] . '/' . $theme ] = new WP_Theme( $theme, $theme_root['theme_root'] ); + } + + if ( null !== $args['errors'] ) { + foreach ( $themes as $theme => $wp_theme ) { + if ( $wp_theme->errors() != $args['errors'] ) + unset( $themes[ $theme ] ); + } + } + + return $themes; +} + +/** + * Gets a WP_Theme object for a theme. + * + * @since 3.4.0 + * + * @param string $stylesheet Directory name for the theme. Optional. Defaults to current theme. + * @param string $theme_root Absolute path of the theme root to look in. Optional. If not specified, get_raw_theme_root() + * is used to calculate the theme root for the $stylesheet provided (or current theme). + * @return WP_Theme Theme object. Be sure to check the object's exists() method if you need to confirm the theme's existence. + */ +function wp_get_theme( $stylesheet = null, $theme_root = null ) { + global $wp_theme_directories; + + if ( empty( $stylesheet ) ) + $stylesheet = get_stylesheet(); + + if ( empty( $theme_root ) ) { + $theme_root = get_raw_theme_root( $stylesheet ); + if ( false === $theme_root ) + $theme_root = WP_CONTENT_DIR . '/themes'; + elseif ( ! in_array( $theme_root, (array) $wp_theme_directories ) ) + $theme_root = WP_CONTENT_DIR . $theme_root; + } + + return new WP_Theme( $stylesheet, $theme_root ); +} + /** * Whether a child theme is in use. * @@ -160,310 +260,6 @@ function get_template_directory_uri() { return apply_filters( 'template_directory_uri', $template_dir_uri, $template, $theme_root_uri ); } -/** - * Retrieve theme data from parsed theme file. - * - * The description will have the tags filtered with the following HTML elements - * whitelisted. The <b>'a'</b> element with the <em>href</em> and <em>title</em> - * attributes. The <b>abbr</b> element with the <em>title</em> attribute. The - * <b>acronym</b> element with the <em>title</em> attribute allowed. The - * <b>code</b>, <b>em</b>, and <b>strong</b> elements also allowed. - * - * The style.css file must contain theme name, theme URI, and description. The - * data can also contain author URI, author, template (parent template), - * version, status, and finally tags. Some of these are not used by WordPress - * administration panels, but are used by theme directory web sites which list - * the theme. - * - * @since 1.5.0 - * - * @param string $theme_file Theme file path. - * @return array Theme data. - */ -function get_theme_data( $theme_file ) { - $default_headers = array( - 'Name' => 'Theme Name', - 'URI' => 'Theme URI', - 'Description' => 'Description', - 'Author' => 'Author', - 'AuthorURI' => 'Author URI', - 'Version' => 'Version', - 'Template' => 'Template', - 'Status' => 'Status', - 'Tags' => 'Tags' - ); - - $themes_allowed_tags = array( - 'a' => array( - 'href' => array(),'title' => array() - ), - 'abbr' => array( - 'title' => array() - ), - 'acronym' => array( - 'title' => array() - ), - 'code' => array(), - 'em' => array(), - 'strong' => array() - ); - - $theme_data = get_file_data( $theme_file, $default_headers, 'theme' ); - - $theme_data['Name'] = $theme_data['Title'] = wp_kses( $theme_data['Name'], $themes_allowed_tags ); - - $theme_data['URI'] = esc_url( $theme_data['URI'] ); - - $theme_data['Description'] = wptexturize( wp_kses( $theme_data['Description'], $themes_allowed_tags ) ); - - $theme_data['AuthorURI'] = esc_url( $theme_data['AuthorURI'] ); - - $theme_data['Template'] = wp_kses( $theme_data['Template'], $themes_allowed_tags ); - - $theme_data['Version'] = wp_kses( $theme_data['Version'], $themes_allowed_tags ); - - if ( $theme_data['Status'] == '' ) - $theme_data['Status'] = 'publish'; - else - $theme_data['Status'] = wp_kses( $theme_data['Status'], $themes_allowed_tags ); - - if ( $theme_data['Tags'] == '' ) - $theme_data['Tags'] = array(); - else - $theme_data['Tags'] = array_map( 'trim', explode( ',', wp_kses( $theme_data['Tags'], array() ) ) ); - - if ( $theme_data['Author'] == '' ) { - $theme_data['Author'] = $theme_data['AuthorName'] = __('Anonymous'); - } else { - $theme_data['AuthorName'] = wp_kses( $theme_data['Author'], $themes_allowed_tags ); - if ( empty( $theme_data['AuthorURI'] ) ) { - $theme_data['Author'] = $theme_data['AuthorName']; - } else { - $theme_data['Author'] = sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', $theme_data['AuthorURI'], esc_attr__( 'Visit author homepage' ), $theme_data['AuthorName'] ); - } - } - - return $theme_data; -} - -/** - * Retrieve list of themes with theme data in theme directory. - * - * The theme is broken, if it doesn't have a parent theme and is missing either - * style.css and, or index.php. If the theme has a parent theme then it is - * broken, if it is missing style.css; index.php is optional. The broken theme - * list is saved in the {@link $wp_broken_themes} global, which is displayed on - * the theme list in the administration panels. - * - * @since 1.5.0 - * @global array $wp_broken_themes Stores the broken themes. - * @global array $wp_themes Stores the working themes. - * - * @return array Theme list with theme data. - */ -function get_themes() { - global $wp_themes, $wp_broken_themes; - - if ( isset($wp_themes) ) - return $wp_themes; - - if ( !$theme_files = search_theme_directories() ) - return false; - - asort( $theme_files ); - - $wp_themes = array(); - - foreach ( (array) $theme_files as $theme_file ) { - $theme_root = $theme_file['theme_root']; - $theme_file = $theme_file['theme_file']; - - if ( !is_readable("$theme_root/$theme_file") ) { - $wp_broken_themes[$theme_file] = array('Name' => $theme_file, 'Title' => $theme_file, 'Description' => __('File not readable.')); - continue; - } - - $theme_data = get_theme_data("$theme_root/$theme_file"); - - $name = $theme_data['Name']; - $title = $theme_data['Title']; - $description = wptexturize($theme_data['Description']); - $version = $theme_data['Version']; - $author = $theme_data['Author']; - $template = $theme_data['Template']; - $stylesheet = dirname($theme_file); - - $screenshot = false; - foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) { - if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) { - $screenshot = "screenshot.$ext"; - break; - } - } - - if ( empty($name) ) { - $name = dirname($theme_file); - $title = $name; - } - - $parent_template = $template; - - if ( empty($template) ) { - if ( file_exists("$theme_root/$stylesheet/index.php") ) - $template = $stylesheet; - else - continue; - } - - $template = trim( $template ); - - if ( !file_exists("$theme_root/$template/index.php") ) { - $parent_dir = dirname(dirname($theme_file)); - if ( file_exists("$theme_root/$parent_dir/$template/index.php") ) { - $template = "$parent_dir/$template"; - $template_directory = "$theme_root/$template"; - } else { - /** - * The parent theme doesn't exist in the current theme's folder or sub folder - * so lets use the theme root for the parent template. - */ - if ( isset($theme_files[$template]) && file_exists( $theme_files[$template]['theme_root'] . "/$template/index.php" ) ) { - $template_directory = $theme_files[$template]['theme_root'] . "/$template"; - } else { - if ( empty( $parent_template) ) - $wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => __('Template is missing.'), 'error' => 'no_template'); - else - $wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => sprintf( __('The parent theme is missing. Please install the "%s" parent theme.'), $parent_template ), 'error' => 'no_parent', 'parent' => $parent_template ); - continue; - } - - } - } else { - $template_directory = trim( $theme_root . '/' . $template ); - } - - $stylesheet_files = array(); - $template_files = array(); - - $stylesheet_dir = @ dir("$theme_root/$stylesheet"); - if ( $stylesheet_dir ) { - while ( ($file = $stylesheet_dir->read()) !== false ) { - if ( !preg_match('|^\.+$|', $file) ) { - if ( preg_match('|\.css$|', $file) ) - $stylesheet_files[] = "$theme_root/$stylesheet/$file"; - elseif ( preg_match('|\.php$|', $file) ) - $template_files[] = "$theme_root/$stylesheet/$file"; - } - } - @ $stylesheet_dir->close(); - } - - $template_dir = @ dir("$template_directory"); - if ( $template_dir ) { - while ( ($file = $template_dir->read()) !== false ) { - if ( preg_match('|^\.+$|', $file) ) - continue; - if ( preg_match('|\.php$|', $file) ) { - $template_files[] = "$template_directory/$file"; - } elseif ( is_dir("$template_directory/$file") ) { - $template_subdir = @ dir("$template_directory/$file"); - if ( !$template_subdir ) - continue; - while ( ($subfile = $template_subdir->read()) !== false ) { - if ( preg_match('|^\.+$|', $subfile) ) - continue; - if ( preg_match('|\.php$|', $subfile) ) - $template_files[] = "$template_directory/$file/$subfile"; - } - @ $template_subdir->close(); - } - } - @ $template_dir->close(); - } - - //Make unique and remove duplicates when stylesheet and template are the same i.e. most themes - $template_files = array_unique($template_files); - $stylesheet_files = array_unique($stylesheet_files); - - $template_dir = $template_directory; - $stylesheet_dir = $theme_root . '/' . $stylesheet; - - if ( empty($template_dir) ) - $template_dir = '/'; - if ( empty($stylesheet_dir) ) - $stylesheet_dir = '/'; - - // Check for theme name collision. This occurs if a theme is copied to - // a new theme directory and the theme header is not updated. Whichever - // theme is first keeps the name. Subsequent themes get a suffix applied. - // The Twenty Eleven, Twenty Ten, Default and Classic themes always trump - // their pretenders. - if ( isset($wp_themes[$name]) ) { - $trump_cards = array( - 'classic' => 'WordPress Classic', - 'default' => 'WordPress Default', - 'twentyten' => 'Twenty Ten', - 'twentyeleven' => 'Twenty Eleven', - ); - if ( isset( $trump_cards[ $stylesheet ] ) && $name == $trump_cards[ $stylesheet ] ) { - // If another theme has claimed to be one of our default themes, move - // them aside. - $suffix = $wp_themes[$name]['Stylesheet']; - $new_name = "$name/$suffix"; - $wp_themes[$new_name] = $wp_themes[$name]; - $wp_themes[$new_name]['Name'] = $new_name; - } else { - $name = "$name/$stylesheet"; - } - } - - $theme_roots[$stylesheet] = str_replace( WP_CONTENT_DIR, '', $theme_root ); - $wp_themes[$name] = array( - 'Name' => $name, - 'Title' => $title, - 'Description' => $description, - 'Author' => $author, - 'Author Name' => $theme_data['AuthorName'], - 'Author URI' => $theme_data['AuthorURI'], - 'Version' => $version, - 'Template' => $template, - 'Stylesheet' => $stylesheet, - 'Template Files' => $template_files, - 'Stylesheet Files' => $stylesheet_files, - 'Template Dir' => $template_dir, - 'Stylesheet Dir' => $stylesheet_dir, - 'Status' => $theme_data['Status'], - 'Screenshot' => $screenshot, - 'Tags' => $theme_data['Tags'], - 'Theme Root' => $theme_root, - 'Theme Root URI' => str_replace( WP_CONTENT_DIR, content_url(), $theme_root ), - ); - } - - unset($theme_files); - - /* Store theme roots in the DB */ - if ( get_site_transient( 'theme_roots' ) != $theme_roots ) - set_site_transient( 'theme_roots', $theme_roots, 7200 ); // cache for two hours - unset($theme_roots); - - /* Resolve theme dependencies. */ - $theme_names = array_keys( $wp_themes ); - foreach ( (array) $theme_names as $theme_name ) { - $wp_themes[$theme_name]['Parent Theme'] = ''; - if ( $wp_themes[$theme_name]['Stylesheet'] != $wp_themes[$theme_name]['Template'] ) { - foreach ( (array) $theme_names as $parent_theme_name ) { - if ( ($wp_themes[$parent_theme_name]['Stylesheet'] == $wp_themes[$parent_theme_name]['Template']) && ($wp_themes[$parent_theme_name]['Template'] == $wp_themes[$theme_name]['Template']) ) { - $wp_themes[$theme_name]['Parent Theme'] = $wp_themes[$parent_theme_name]['Name']; - break; - } - } - } - } - - return $wp_themes; -} - /** * Retrieve theme roots. * @@ -479,66 +275,12 @@ function get_theme_roots() { $theme_roots = get_site_transient( 'theme_roots' ); if ( false === $theme_roots ) { - get_themes(); - $theme_roots = get_site_transient( 'theme_roots' ); // this is set in get_theme() + search_theme_directories( true ); // Regenerate the transient. + $theme_roots = get_site_transient( 'theme_roots' ); } return $theme_roots; } -/** - * Retrieve theme data. - * - * @since 1.5.0 - * - * @param string $theme Theme name. - * @return array|null Null, if theme name does not exist. Theme data, if exists. - */ -function get_theme($theme) { - $themes = get_themes(); - - if ( is_array( $themes ) && array_key_exists( $theme, $themes ) ) - return $themes[$theme]; - - return null; -} - -/** - * Retrieve current theme display name. - * - * If the 'current_theme' option has already been set, then it will be returned - * instead. If it is not set, then each theme will be iterated over until both - * the current stylesheet and current template name. - * - * @since 1.5.0 - * - * @return string - */ -function get_current_theme() { - if ( $theme = get_option('current_theme') ) - return $theme; - - $themes = get_themes(); - $current_theme = 'Twenty Eleven'; - - if ( $themes ) { - $theme_names = array_keys( $themes ); - $current_template = get_option( 'template' ); - $current_stylesheet = get_option( 'stylesheet' ); - - foreach ( (array) $theme_names as $theme_name ) { - if ( $themes[$theme_name]['Stylesheet'] == $current_stylesheet && - $themes[$theme_name]['Template'] == $current_template ) { - $current_theme = $themes[$theme_name]['Name']; - break; - } - } - } - - update_option('current_theme', $current_theme); - - return $current_theme; -} - /** * Register a directory that contains themes. * @@ -547,21 +289,18 @@ function get_current_theme() { * @param string $directory Either the full filesystem path to a theme folder or a folder within WP_CONTENT_DIR * @return bool */ -function register_theme_directory( $directory) { +function register_theme_directory( $directory ) { global $wp_theme_directories; - /* If this folder does not exist, return and do not register */ - if ( !file_exists( $directory ) ) - /* Try prepending as the theme directory could be relative to the content directory */ - $registered_directory = WP_CONTENT_DIR . '/' . $directory; - else - $registered_directory = $directory; - - /* If this folder does not exist, return and do not register */ - if ( !file_exists( $registered_directory ) ) - return false; + if ( ! file_exists( $directory ) ) { + // Try prepending as the theme directory could be relative to the content directory + $directory = WP_CONTENT_DIR . '/' . $directory; + // If this directory does not exist, return and do not register + if ( ! file_exists( $directory ) ) + return false; + } - $wp_theme_directories[] = $registered_directory; + $wp_theme_directories[] = $directory; return true; } @@ -571,550 +310,211 @@ function register_theme_directory( $directory) { * * @since 2.9.0 * + * @param bool $force Optional. Whether to force a new directory scan. Defaults to false. * @return array Valid themes found */ -function search_theme_directories() { - global $wp_theme_directories, $wp_broken_themes; +function search_theme_directories( $force = false ) { + global $wp_theme_directories; if ( empty( $wp_theme_directories ) ) return false; - $theme_files = array(); - $wp_broken_themes = array(); - - /* Loop the registered theme directories and extract all themes */ - foreach ( (array) $wp_theme_directories as $theme_root ) { - $theme_loc = $theme_root; + static $found_themes; + if ( ! $force && isset( $found_themes ) ) + return $found_themes; - /* We don't want to replace all forward slashes, see Trac #4541 */ - if ( '/' != WP_CONTENT_DIR ) - $theme_loc = str_replace(WP_CONTENT_DIR, '', $theme_root); + $found_themes = array(); - /* Files in the root of the current theme directory and one subdir down */ - $themes_dir = @ opendir($theme_root); + $wp_theme_directories = (array) $wp_theme_directories; - if ( !$themes_dir ) - return false; + // Set up maybe-relative, maybe-absolute array of theme directories. + // We always want to return absolute, but we need to cache relative + // use in for get_theme_root(). + foreach ( $wp_theme_directories as $theme_root ) { + if ( 0 === strpos( $theme_root, WP_CONTENT_DIR ) ) + $relative_theme_roots[ str_replace( WP_CONTENT_DIR, '', $theme_root ) ] = $theme_root; + else + $relative_theme_roots[ $theme_root ] = $theme_root; + } - while ( ($theme_dir = readdir($themes_dir)) !== false ) { - if ( is_dir($theme_root . '/' . $theme_dir) && is_readable($theme_root . '/' . $theme_dir) ) { - if ( $theme_dir[0] == '.' || $theme_dir == 'CVS' ) + if ( $cache_expiration = apply_filters( 'wp_cache_themes_persistently', false, 'search_theme_directories' ) ) { + $cached_roots = get_site_transient( 'theme_roots' ); + if ( is_array( $cached_roots ) ) { + foreach ( $cached_roots as $theme_dir => $theme_root ) { + // A cached theme root is no longer around, so skip it. + if ( ! isset( $relative_theme_roots[ $theme_root ] ) ) continue; - - $stylish_dir = @opendir($theme_root . '/' . $theme_dir); - $found_stylesheet = false; - - while ( ($theme_file = readdir($stylish_dir)) !== false ) { - if ( $theme_file == 'style.css' ) { - $theme_files[$theme_dir] = array( 'theme_file' => $theme_dir . '/' . $theme_file, 'theme_root' => $theme_root ); - $found_stylesheet = true; - break; - } - } - @closedir($stylish_dir); - - if ( !$found_stylesheet ) { // look for themes in that dir - $subdir = "$theme_root/$theme_dir"; - $subdir_name = $theme_dir; - $theme_subdirs = @opendir( $subdir ); - - $found_subdir_themes = false; - while ( ($theme_subdir = readdir($theme_subdirs)) !== false ) { - if ( is_dir( $subdir . '/' . $theme_subdir) && is_readable($subdir . '/' . $theme_subdir) ) { - if ( $theme_subdir[0] == '.' || $theme_subdir == 'CVS' ) - continue; - - $stylish_dir = @opendir($subdir . '/' . $theme_subdir); - $found_stylesheet = false; - - while ( ($theme_file = readdir($stylish_dir)) !== false ) { - if ( $theme_file == 'style.css' ) { - $theme_files["$theme_dir/$theme_subdir"] = array( 'theme_file' => $subdir_name . '/' . $theme_subdir . '/' . $theme_file, 'theme_root' => $theme_root ); - $found_stylesheet = true; - $found_subdir_themes = true; - break; - } - } - @closedir($stylish_dir); - } - } - @closedir($theme_subdirs); - if ( !$found_subdir_themes ) - $wp_broken_themes[$theme_dir] = array('Name' => $theme_dir, 'Title' => $theme_dir, 'Description' => __('Stylesheet is missing.')); - } + $found_themes[ $theme_dir ] = array( + 'theme_file' => $theme_dir . '/style.css', + 'theme_root' => $relative_theme_roots[ $theme_root ], // Convert relative to absolute. + ); } + return $found_themes; } - @closedir( $themes_dir ); - } - return $theme_files; -} - -/** - * Retrieve path to themes directory. - * - * Does not have trailing slash. - * - * @since 1.5.0 - * @uses apply_filters() Calls 'theme_root' filter on path. - * - * @param string $stylesheet_or_template The stylesheet or template name of the theme - * @return string Theme path. - */ -function get_theme_root( $stylesheet_or_template = false ) { - if ( $stylesheet_or_template ) { - if ( $theme_root = get_raw_theme_root($stylesheet_or_template) ) - $theme_root = WP_CONTENT_DIR . $theme_root; - else - $theme_root = WP_CONTENT_DIR . '/themes'; + if ( ! is_int( $cache_expiration ) ) + $cache_expiration = 1800; // half hour } else { - $theme_root = WP_CONTENT_DIR . '/themes'; + $cache_expiration = 1800; // half hour } - return apply_filters( 'theme_root', $theme_root ); -} - -/** - * Retrieve URI for themes directory. - * - * Does not have trailing slash. - * - * @since 1.5.0 - * - * @param string $stylesheet_or_template The stylesheet or template name of the theme - * @return string Themes URI. - */ -function get_theme_root_uri( $stylesheet_or_template = false ) { - if ( $stylesheet_or_template ) { - if ( $theme_root = get_raw_theme_root($stylesheet_or_template) ) - $theme_root_uri = content_url( $theme_root ); - else - $theme_root_uri = content_url( 'themes' ); - } else { - $theme_root_uri = content_url( 'themes' ); - } - - return apply_filters( 'theme_root_uri', $theme_root_uri, get_option('siteurl'), $stylesheet_or_template ); -} - -/** - * Get the raw theme root relative to the content directory with no filters applied. - * - * @since 3.1.0 - * - * @param string $stylesheet_or_template The stylesheet or template name of the theme - * @return string Theme root - */ -function get_raw_theme_root( $stylesheet_or_template, $no_cache = false ) { - global $wp_theme_directories; - - if ( count($wp_theme_directories) <= 1 ) - return '/themes'; - - $theme_root = false; - - // If requesting the root for the current theme, consult options to avoid calling get_theme_roots() - if ( !$no_cache ) { - if ( get_option('stylesheet') == $stylesheet_or_template ) - $theme_root = get_option('stylesheet_root'); - elseif ( get_option('template') == $stylesheet_or_template ) - $theme_root = get_option('template_root'); - } - - if ( empty($theme_root) ) { - $theme_roots = get_theme_roots(); - if ( !empty($theme_roots[$stylesheet_or_template]) ) - $theme_root = $theme_roots[$stylesheet_or_template]; - } - - return $theme_root; -} - -/** - * Retrieve path to a template - * - * Used to quickly retrieve the path of a template without including the file - * extension. It will also check the parent theme, if the file exists, with - * the use of {@link locate_template()}. Allows for more generic template location - * without the use of the other get_*_template() functions. - * - * @since 1.5.0 - * - * @param string $type Filename without extension. - * @param array $templates An optional list of template candidates - * @return string Full path to file. - */ -function get_query_template( $type, $templates = array() ) { - $type = preg_replace( '|[^a-z0-9-]+|', '', $type ); - - if ( empty( $templates ) ) - $templates = array("{$type}.php"); - - return apply_filters( "{$type}_template", locate_template( $templates ) ); -} - -/** - * Retrieve path of index template in current or parent template. - * - * @since 3.0.0 - * - * @return string - */ -function get_index_template() { - return get_query_template('index'); -} - -/** - * Retrieve path of 404 template in current or parent template. - * - * @since 1.5.0 - * - * @return string - */ -function get_404_template() { - return get_query_template('404'); -} - -/** - * Retrieve path of archive template in current or parent template. - * - * @since 1.5.0 - * - * @return string - */ -function get_archive_template() { - $post_type = get_query_var( 'post_type' ); - - $templates = array(); - - if ( $post_type ) - $templates[] = "archive-{$post_type}.php"; - $templates[] = 'archive.php'; - - return get_query_template( 'archive', $templates ); -} - -/** - * Retrieve path of author template in current or parent template. - * - * @since 1.5.0 - * - * @return string - */ -function get_author_template() { - $author = get_queried_object(); - - $templates = array(); - - $templates[] = "author-{$author->user_nicename}.php"; - $templates[] = "author-{$author->ID}.php"; - $templates[] = 'author.php'; - - return get_query_template( 'author', $templates ); -} - -/** - * Retrieve path of category template in current or parent template. - * - * Works by first retrieving the current slug for example 'category-default.php' and then - * trying category ID, for example 'category-1.php' and will finally fallback to category.php - * template, if those files don't exist. - * - * @since 1.5.0 - * @uses apply_filters() Calls 'category_template' on file path of category template. - * - * @return string - */ -function get_category_template() { - $category = get_queried_object(); - - $templates = array(); - - $templates[] = "category-{$category->slug}.php"; - $templates[] = "category-{$category->term_id}.php"; - $templates[] = 'category.php'; - - return get_query_template( 'category', $templates ); -} - -/** - * Retrieve path of tag template in current or parent template. - * - * Works by first retrieving the current tag name, for example 'tag-wordpress.php' and then - * trying tag ID, for example 'tag-1.php' and will finally fallback to tag.php - * template, if those files don't exist. - * - * @since 2.3.0 - * @uses apply_filters() Calls 'tag_template' on file path of tag template. - * - * @return string - */ -function get_tag_template() { - $tag = get_queried_object(); - - $templates = array(); - - $templates[] = "tag-{$tag->slug}.php"; - $templates[] = "tag-{$tag->term_id}.php"; - $templates[] = 'tag.php'; - - return get_query_template( 'tag', $templates ); -} - -/** - * Retrieve path of taxonomy template in current or parent template. - * - * Retrieves the taxonomy and term, if term is available. The template is - * prepended with 'taxonomy-' and followed by both the taxonomy string and - * the taxonomy string followed by a dash and then followed by the term. - * - * The taxonomy and term template is checked and used first, if it exists. - * Second, just the taxonomy template is checked, and then finally, taxonomy.php - * template is used. If none of the files exist, then it will fall back on to - * index.php. - * - * @since 2.5.0 - * @uses apply_filters() Calls 'taxonomy_template' filter on found path. - * - * @return string - */ -function get_taxonomy_template() { - $term = get_queried_object(); - $taxonomy = $term->taxonomy; - - $templates = array(); - - $templates[] = "taxonomy-$taxonomy-{$term->slug}.php"; - $templates[] = "taxonomy-$taxonomy.php"; - $templates[] = 'taxonomy.php'; - - return get_query_template( 'taxonomy', $templates ); -} - -/** - * Retrieve path of date template in current or parent template. - * - * @since 1.5.0 - * - * @return string - */ -function get_date_template() { - return get_query_template('date'); -} - -/** - * Retrieve path of home template in current or parent template. - * - * This is the template used for the page containing the blog posts - * - * Attempts to locate 'home.php' first before falling back to 'index.php'. - * - * @since 1.5.0 - * @uses apply_filters() Calls 'home_template' on file path of home template. - * - * @return string - */ -function get_home_template() { - $templates = array( 'home.php', 'index.php' ); - - return get_query_template( 'home', $templates ); -} - -/** - * Retrieve path of front-page template in current or parent template. - * - * Looks for 'front-page.php'. - * - * @since 3.0.0 - * @uses apply_filters() Calls 'front_page_template' on file path of template. - * - * @return string - */ -function get_front_page_template() { - $templates = array('front-page.php'); - - return get_query_template( 'front_page', $templates ); -} - -/** - * Retrieve path of page template in current or parent template. - * - * Will first look for the specifically assigned page template - * The will search for 'page-{slug}.php' followed by 'page-id.php' - * and finally 'page.php' - * - * @since 1.5.0 - * - * @return string - */ -function get_page_template() { - $id = get_queried_object_id(); - $template = get_post_meta($id, '_wp_page_template', true); - $pagename = get_query_var('pagename'); - - if ( !$pagename && $id > 0 ) { - // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object - $post = get_queried_object(); - $pagename = $post->post_name; - } - - if ( 'default' == $template ) - $template = ''; - - $templates = array(); - if ( !empty($template) && !validate_file($template) ) - $templates[] = $template; - if ( $pagename ) - $templates[] = "page-$pagename.php"; - if ( $id ) - $templates[] = "page-$id.php"; - $templates[] = 'page.php'; - - return get_query_template( 'page', $templates ); -} - -/** - * Retrieve path of paged template in current or parent template. - * - * @since 1.5.0 - * - * @return string - */ -function get_paged_template() { - return get_query_template('paged'); -} - -/** - * Retrieve path of search template in current or parent template. - * - * @since 1.5.0 - * - * @return string - */ -function get_search_template() { - return get_query_template('search'); -} - -/** - * Retrieve path of single template in current or parent template. - * - * @since 1.5.0 - * - * @return string - */ -function get_single_template() { - $object = get_queried_object(); - - $templates = array(); - - $templates[] = "single-{$object->post_type}.php"; - $templates[] = "single.php"; - - return get_query_template( 'single', $templates ); -} + /* Loop the registered theme directories and extract all themes */ + foreach ( $wp_theme_directories as $theme_root ) { -/** - * Retrieve path of attachment template in current or parent template. - * - * The attachment path first checks if the first part of the mime type exists. - * The second check is for the second part of the mime type. The last check is - * for both types separated by an underscore. If neither are found then the file - * 'attachment.php' is checked and returned. - * - * Some examples for the 'text/plain' mime type are 'text.php', 'plain.php', and - * finally 'text_plain.php'. - * - * @since 2.0.0 - * - * @return string - */ -function get_attachment_template() { - global $posts; - $type = explode('/', $posts[0]->post_mime_type); - if ( $template = get_query_template($type[0]) ) - return $template; - elseif ( $template = get_query_template($type[1]) ) - return $template; - elseif ( $template = get_query_template("$type[0]_$type[1]") ) - return $template; - else - return get_query_template('attachment'); + // Start with directories in the root of the current theme directory. + $dirs = @ scandir( $theme_root ); + if ( ! $dirs ) + return false; + foreach ( $dirs as $dir ) { + if ( ! is_dir( $theme_root . '/' . $dir ) || $dir[0] == '.' || $dir == 'CVS' ) + continue; + if ( file_exists( $theme_root . '/' . $dir . '/style.css' ) ) { + // wp-content/themes/a-single-theme + // wp-content/themes is $theme_root, a-single-theme is $dir + $found_themes[ $dir ] = array( + 'theme_file' => $dir . '/style.css', + 'theme_root' => $theme_root, + ); + } else { + $found_theme = false; + // wp-content/themes/a-folder-of-themes/* + // wp-content/themes is $theme_root, a-folder-of-themes is $dir, then themes are $sub_dirs + $sub_dirs = @ scandir( $theme_root . '/' . $dir ); + if ( ! $sub_dirs ) + return false; + foreach ( $sub_dirs as $sub_dir ) { + if ( ! is_dir( $theme_root . '/' . $dir ) || $dir[0] == '.' || $dir == 'CVS' ) + continue; + if ( ! file_exists( $theme_root . '/' . $dir . '/' . $sub_dir . '/style.css' ) ) + continue; + $found_themes[ $dir . '/' . $sub_dir ] = array( + 'theme_file' => $dir . '/' . $sub_dir . '/style.css', + 'theme_root' => $theme_root, + ); + $found_theme = true; + } + // Never mind the above, it's just a theme missing a style.css. + // Return it; WP_Theme will catch the error. + if ( ! $found_theme ) + $found_themes[ $dir ] = array( + 'theme_file' => $dir . '/style.css', + 'theme_root' => $theme_root, + ); + } + } + } + + asort( $found_themes ); + + $theme_roots = array(); + $relative_theme_roots = array_flip( $relative_theme_roots ); + + foreach ( $found_themes as $theme_dir => $theme_data ) { + $theme_roots[ $theme_dir ] = $relative_theme_roots[ $theme_data['theme_root'] ]; // Convert absolute to relative. + } + + if ( $theme_roots != get_site_transient( 'theme_roots' ) ) + set_site_transient( 'theme_roots', $theme_roots, $cache_expiration ); + + return $found_themes; } /** - * Retrieve path of comment popup template in current or parent template. + * Retrieve path to themes directory. * - * Checks for comment popup template in current template, if it exists or in the - * parent template. + * Does not have trailing slash. * * @since 1.5.0 - * @uses apply_filters() Calls 'comments_popup_template' filter on path. + * @uses apply_filters() Calls 'theme_root' filter on path. * - * @return string + * @param string $stylesheet_or_template The stylesheet or template name of the theme + * @return string Theme path. */ -function get_comments_popup_template() { - $template = get_query_template( 'comments_popup', array( 'comments-popup.php' ) ); +function get_theme_root( $stylesheet_or_template = false ) { + global $wp_theme_directories; - // Backward compat code will be removed in a future release - if ('' == $template) - $template = ABSPATH . WPINC . '/theme-compat/comments-popup.php'; + if ( $stylesheet_or_template && $theme_root = get_raw_theme_root( $stylesheet_or_template ) ) { + // Always prepend WP_CONTENT_DIR unless the root currently registered as a theme directory. + // This gives relative theme roots the benefit of the doubt when things go haywire. + if ( ! in_array( $theme_root, (array) $wp_theme_directories ) ) + $theme_root = WP_CONTENT_DIR . $theme_root; + } else { + $theme_root = WP_CONTENT_DIR . '/themes'; + } - return $template; + return apply_filters( 'theme_root', $theme_root ); } /** - * Retrieve the name of the highest priority template file that exists. + * Retrieve URI for themes directory. * - * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which - * inherit from a parent theme can just overload one file. + * Does not have trailing slash. * - * @since 2.7.0 + * @since 1.5.0 * - * @param string|array $template_names Template file(s) to search for, in order. - * @param bool $load If true the template file will be loaded if it is found. - * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false. - * @return string The template filename if one is located. + * @param string $stylesheet_or_template Optional. The stylesheet or template name of the theme. + * Default is to leverage the main theme root. + * @param string $theme_root Optional. The theme root for which calculations will be based, preventing + * the need for a get_raw_theme_root() call. + * @return string Themes URI. */ -function locate_template($template_names, $load = false, $require_once = true ) { - $located = ''; - foreach ( (array) $template_names as $template_name ) { - if ( !$template_name ) - continue; - if ( file_exists(STYLESHEETPATH . '/' . $template_name)) { - $located = STYLESHEETPATH . '/' . $template_name; - break; - } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) { - $located = TEMPLATEPATH . '/' . $template_name; - break; +function get_theme_root_uri( $stylesheet_or_template = false, $theme_root = false ) { + global $wp_theme_directories; + + if ( $stylesheet_or_template && ! $theme_root ) + $theme_root = get_raw_theme_root( $stylesheet_or_template ); + + if ( $stylesheet_or_template && $theme_root ) { + if ( in_array( $theme_root, (array) $wp_theme_directories ) ) { + // Absolute path. Make an educated guess. YMMV -- but note the filter below. + if ( 0 === strpos( $theme_root, WP_CONTENT_DIR ) ) + $theme_root_uri = content_url( str_replace( WP_CONTENT_DIR, '', $theme_root ) ); + elseif ( 0 === strpos( $theme_root, ABSPATH ) ) + $theme_root_uri = site_url( str_replace( ABSPATH, '', $theme_root ) ); + elseif ( 0 === strpos( $theme_root, WP_PLUGIN_DIR ) || 0 === strpos( $theme_root, WPMU_PLUGIN_DIR ) ) + $theme_root_uri = plugins_url( basename( $theme_root ), $theme_root ); + else + $theme_root_uri = $theme_root; + } else { + $theme_root_uri = content_url( $theme_root ); } + } else { + $theme_root_uri = content_url( 'themes' ); } - if ( $load && '' != $located ) - load_template( $located, $require_once ); - - return $located; + return apply_filters( 'theme_root_uri', $theme_root_uri, get_option('siteurl'), $stylesheet_or_template ); } /** - * Require the template file with WordPress environment. - * - * The globals are set up for the template file to ensure that the WordPress - * environment is available from within the function. The query variables are - * also available. + * Get the raw theme root relative to the content directory with no filters applied. * - * @since 1.5.0 + * @since 3.1.0 * - * @param string $_template_file Path to template file. - * @param bool $require_once Whether to require_once or require. Default true. + * @param string $stylesheet_or_template The stylesheet or template name of the theme + * @param bool $skip_cache Optional. Whether to skip the cache. Defaults to false, meaning the cache is used. + * @return string Theme root */ -function load_template( $_template_file, $require_once = true ) { - global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID; +function get_raw_theme_root( $stylesheet_or_template, $skip_cache = false ) { + global $wp_theme_directories; + + if ( count($wp_theme_directories) <= 1 ) + return '/themes'; - if ( is_array( $wp_query->query_vars ) ) - extract( $wp_query->query_vars, EXTR_SKIP ); + $theme_root = false; - if ( $require_once ) - require_once( $_template_file ); - else - require( $_template_file ); + // If requesting the root for the current theme, consult options to avoid calling get_theme_roots() + if ( ! $skip_cache ) { + if ( get_option('stylesheet') == $stylesheet_or_template ) + $theme_root = get_option('stylesheet_root'); + elseif ( get_option('template') == $stylesheet_or_template ) + $theme_root = get_option('template_root'); + } + + if ( empty($theme_root) ) { + $theme_roots = get_theme_roots(); + if ( !empty($theme_roots[$stylesheet_or_template]) ) + $theme_root = $theme_roots[$stylesheet_or_template]; + } + + return $theme_root; } /** @@ -1163,7 +563,7 @@ function preview_theme() { } // Prevent theme mods to current theme being used on theme being previewed - add_filter( 'pre_option_mods_' . get_current_theme(), '__return_empty_array' ); + add_filter( 'pre_option_theme_mods_' . get_option( 'stylesheet' ), '__return_empty_array' ); ob_start( 'preview_theme_ob_filter' ); } @@ -1231,7 +631,7 @@ function preview_theme_ob_filter_callback( $matches ) { ) return $matches[1] . "#$matches[2] onclick=$matches[2]return false;" . $matches[4]; - $link = add_query_arg( array('preview' => 1, 'template' => $_GET['template'], 'stylesheet' => @$_GET['stylesheet'] ), $matches[3] ); + $link = add_query_arg( array( 'preview' => 1, 'template' => $_GET['template'], 'stylesheet' => @$_GET['stylesheet'], 'preview_iframe' => 1 ), $matches[3] ); if ( 0 === strpos($link, 'preview=1') ) $link = "?$link"; return $matches[1] . esc_attr( $link ) . $matches[4]; @@ -1241,37 +641,38 @@ function preview_theme_ob_filter_callback( $matches ) { * Switches current theme to new template and stylesheet names. * * @since 2.5.0 - * @uses do_action() Calls 'switch_theme' action on updated theme display name. + * @uses do_action() Calls 'switch_theme' action, passing the new theme. * * @param string $template Template name * @param string $stylesheet Stylesheet name. */ -function switch_theme($template, $stylesheet) { +function switch_theme( $template, $stylesheet ) { global $wp_theme_directories, $sidebars_widgets; if ( is_array( $sidebars_widgets ) ) set_theme_mod( 'sidebars_widgets', array( 'time' => time(), 'data' => $sidebars_widgets ) ); - $old_theme = get_current_theme(); + $old_theme = wp_get_theme(); + $new_theme = wp_get_theme( $stylesheet ); + $new_name = $new_theme->get('Name'); - update_option('template', $template); - update_option('stylesheet', $stylesheet); + update_option( 'template', $template ); + update_option( 'stylesheet', $stylesheet ); - if ( count($wp_theme_directories) > 1 ) { - update_option('template_root', get_raw_theme_root($template, true)); - update_option('stylesheet_root', get_raw_theme_root($stylesheet, true)); + if ( count( $wp_theme_directories ) > 1 ) { + update_option( 'template_root', get_raw_theme_root( $template, true ) ); + update_option( 'stylesheet_root', get_raw_theme_root( $stylesheet, true ) ); } - delete_option('current_theme'); - $theme = get_current_theme(); + update_option( 'current_theme', $new_name ); - if ( is_admin() && false === get_option( "theme_mods_$stylesheet" ) ) { - $default_theme_mods = (array) get_option( "mods_$theme" ); + if ( is_admin() && false === get_option( 'theme_mods_' . $stylesheet ) ) { + $default_theme_mods = (array) get_option( 'mods_' . $new_name ); add_option( "theme_mods_$stylesheet", $default_theme_mods ); } - update_option( 'theme_switched', $old_theme ); - do_action( 'switch_theme', $theme ); + update_option( 'theme_switched', $old_theme->get_stylesheet() ); + do_action( 'switch_theme', $new_name, $new_theme ); } /** @@ -1279,7 +680,7 @@ function switch_theme($template, $stylesheet) { * * Does not check the default theme, which is the fallback and should always exist. * Will switch theme to the fallback theme if current theme does not validate. - * You can use the 'validate_current_theme' filter to return FALSE to + * You can use the 'validate_current_theme' filter to return false to * disable this functionality. * * @since 1.5.0 @@ -1320,7 +721,9 @@ function validate_current_theme() { function get_theme_mods() { $theme_slug = get_option( 'stylesheet' ); if ( false === ( $mods = get_option( "theme_mods_$theme_slug" ) ) ) { - $theme_name = get_current_theme(); + $theme_name = get_option( 'current_theme' ); + if ( false === $theme_name ) + $theme_name = wp_get_theme()->get('Name'); $mods = get_option( "mods_$theme_name" ); // Deprecated location. if ( is_admin() && false !== $mods ) { update_option( "theme_mods_$theme_slug", $mods ); @@ -1351,7 +754,10 @@ function get_theme_mod( $name, $default = false ) { if ( isset( $mods[ $name ] ) ) return apply_filters( "theme_mod_$name", $mods[ $name ] ); - return apply_filters( "theme_mod_$name", sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() ) ); + if ( is_string( $default ) ) + $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() ); + + return apply_filters( "theme_mod_$name", $default ); } /** @@ -1404,21 +810,23 @@ function remove_theme_mod( $name ) { */ function remove_theme_mods() { delete_option( 'theme_mods_' . get_option( 'stylesheet' ) ); - delete_option( 'mods_' . get_current_theme() ); + + // Old style. + $theme_name = get_option( 'current_theme' ); + if ( false === $theme_name ) + $theme_name = wp_get_theme()->get('Name'); + delete_option( 'mods_' . $theme_name ); } /** * Retrieve text color for custom header. * * @since 2.1.0 - * @uses HEADER_TEXTCOLOR * * @return string */ function get_header_textcolor() { - $default = defined('HEADER_TEXTCOLOR') ? HEADER_TEXTCOLOR : ''; - - return get_theme_mod('header_textcolor', $default); + return get_theme_mod('header_textcolor', get_theme_support( 'custom-header', 'default-text-color' ) ); } /** @@ -1430,17 +838,30 @@ function header_textcolor() { echo get_header_textcolor(); } +/** + * Whether to display the header text. + * + * @since 3.4.0 + * + * @return bool + */ +function display_header_text() { + if ( ! current_theme_supports( 'custom-header', 'header-text' ) ) + return false; + + $text_color = get_theme_mod( 'header_textcolor', get_theme_support( 'custom-header', 'default-text-color' ) ); + return 'blank' != $text_color; +} + /** * Retrieve header image for custom header. * * @since 2.1.0 - * @uses HEADER_IMAGE * * @return string */ function get_header_image() { - $default = defined( 'HEADER_IMAGE' ) ? HEADER_IMAGE : ''; - $url = get_theme_mod( 'header_image', $default ); + $url = get_theme_mod( 'header_image', get_theme_support( 'custom-header', 'default-image' ) ); if ( 'remove-header' == $url ) return false; @@ -1457,37 +878,58 @@ function get_header_image() { } /** - * Get random header image from registered images in theme. + * Get random header image data from registered images in theme. * - * @since 3.2.0 + * @since 3.4.0 + * + * @access private * * @return string Path to header image */ -function get_random_header_image() { - global $_wp_default_headers; - $header_image_mod = get_theme_mod( 'header_image', '' ); - $headers = array(); +function _get_random_header_data() { + static $_wp_random_header; - if ( 'random-uploaded-image' == $header_image_mod ) - $headers = get_uploaded_header_images(); - elseif ( ! empty( $_wp_default_headers ) ) { - if ( 'random-default-image' == $header_image_mod ) { - $headers = $_wp_default_headers; - } else { - $is_random = get_theme_support( 'custom-header' ); - if ( isset( $is_random[ 0 ] ) && !empty( $is_random[ 0 ][ 'random-default' ] ) ) + if ( empty( $_wp_random_header ) ) { + global $_wp_default_headers; + $header_image_mod = get_theme_mod( 'header_image', '' ); + $headers = array(); + + if ( 'random-uploaded-image' == $header_image_mod ) + $headers = get_uploaded_header_images(); + elseif ( ! empty( $_wp_default_headers ) ) { + if ( 'random-default-image' == $header_image_mod ) { $headers = $_wp_default_headers; + } else { + if ( current_theme_supports( 'custom-header', 'random-default' ) ) + $headers = $_wp_default_headers; + } } - } - if ( empty( $headers ) ) - return ''; + if ( empty( $headers ) ) + return new stdClass; + + $_wp_random_header = (object) $headers[ array_rand( $headers ) ]; + + $_wp_random_header->url = sprintf( $_wp_random_header->url, get_template_directory_uri(), get_stylesheet_directory_uri() ); + $_wp_random_header->thumbnail_url = sprintf( $_wp_random_header->thumbnail_url, get_template_directory_uri(), get_stylesheet_directory_uri() ); + } + return $_wp_random_header; +} - $random_image = array_rand( $headers ); - $header_url = sprintf( $headers[$random_image]['url'], get_template_directory_uri(), get_stylesheet_directory_uri() ); +/** + * Get random header image url from registered images in theme. + * + * @since 3.2.0 + * + * @return string Path to header image + */ - return $header_url; +function get_random_header_image() { + $random_image = _get_random_header_data(); + if ( empty( $random_image->url ) ) + return ''; + return $random_image->url; } /** @@ -1498,14 +940,12 @@ function get_random_header_image() { * is chosen, and theme turns on random headers with add_theme_support(). * * @since 3.2.0 - * @uses HEADER_IMAGE * * @param string $type The random pool to use. any|default|uploaded * @return boolean */ function is_random_header_image( $type = 'any' ) { - $default = defined( 'HEADER_IMAGE' ) ? HEADER_IMAGE : ''; - $header_image_mod = get_theme_mod( 'header_image', $default ); + $header_image_mod = get_theme_mod( 'header_image', get_theme_support( 'custom-header', 'default-image' ) ); if ( 'any' == $type ) { if ( 'random-default-image' == $header_image_mod || 'random-uploaded-image' == $header_image_mod || ( '' != get_random_header_image() && empty( $header_image_mod ) ) ) @@ -1547,75 +987,35 @@ function get_uploaded_header_images() { foreach ( (array) $headers as $header ) { $url = esc_url_raw( $header->guid ); - $header = basename($url); - $header_images[$header] = array(); - $header_images[$header]['url'] = $url; - $header_images[$header]['thumbnail_url'] = $url; - $header_images[$header]['uploaded'] = true; + $header_data = wp_get_attachment_metadata( $header->ID ); + $header_index = basename($url); + $header_images[$header_index] = array(); + $header_images[$header_index]['attachment_id'] = $header->ID; + $header_images[$header_index]['url'] = $url; + $header_images[$header_index]['thumbnail_url'] = $url; + $header_images[$header_index]['width'] = $header_data['width']; + $header_images[$header_index]['height'] = $header_data['height']; } return $header_images; } /** - * Add callbacks for image header display. - * - * The parameter $header_callback callback will be required to display the - * content for the 'wp_head' action. The parameter $admin_header_callback - * callback will be added to Custom_Image_Header class and that will be added - * to the 'admin_menu' action. - * - * @since 2.1.0 - * @uses Custom_Image_Header Sets up for $admin_header_callback for administration panel display. - * - * @param callback $header_callback Call on 'wp_head' action. - * @param callback $admin_header_callback Call on custom header administration screen. - * @param callback $admin_image_div_callback Output a custom header image div on the custom header administration screen. Optional. - */ -function add_custom_image_header( $header_callback, $admin_header_callback, $admin_image_div_callback = '' ) { - if ( ! empty( $header_callback ) ) - add_action('wp_head', $header_callback); - - $support = array( 'callback' => $header_callback ); - $theme_support = get_theme_support( 'custom-header' ); - if ( ! empty( $theme_support ) && is_array( $theme_support[ 0 ] ) ) - $support = array_merge( $theme_support[ 0 ], $support ); - add_theme_support( 'custom-header', $support ); - add_theme_support( 'custom-header-uploads' ); - - if ( ! is_admin() ) - return; - - global $custom_image_header; - - require_once( ABSPATH . 'wp-admin/custom-header.php' ); - $custom_image_header = new Custom_Image_Header( $admin_header_callback, $admin_image_div_callback ); - add_action( 'admin_menu', array( &$custom_image_header, 'init' ) ); -} - -/** - * Remove image header support. + * Get the header image data. * - * @since 3.1.0 - * @see add_custom_image_header() + * @since 3.4.0 * - * @return bool Whether support was removed. + * @return object */ -function remove_custom_image_header() { - if ( ! current_theme_supports( 'custom-header' ) ) - return false; - - $callback = get_theme_support( 'custom-header' ); - remove_action( 'wp_head', $callback[0]['callback'] ); - _remove_theme_support( 'custom-header' ); - remove_theme_support( 'custom-header-uploads' ); - - if ( is_admin() ) { - remove_action( 'admin_menu', array( &$GLOBALS['custom_image_header'], 'init' ) ); - unset( $GLOBALS['custom_image_header'] ); - } - - return true; +function get_custom_header() { + $data = is_random_header_image()? _get_random_header_data() : get_theme_mod( 'header_image_data' ); + $default = array( + 'url' => '', + 'thumbnail_url' => '', + 'width' => get_theme_support( 'custom-header', 'width' ), + 'height' => get_theme_support( 'custom-header', 'height' ), + ); + return (object) wp_parse_args( $data, $default ); } /** @@ -1663,9 +1063,7 @@ function unregister_default_headers( $header ) { * @return string */ function get_background_image() { - $default = defined('BACKGROUND_IMAGE') ? BACKGROUND_IMAGE : ''; - - return get_theme_mod('background_image', $default); + return get_theme_mod('background_image', get_theme_support( 'custom-background', 'default-image' ) ); } /** @@ -1681,14 +1079,11 @@ function background_image() { * Retrieve value for custom background color. * * @since 3.0.0 - * @uses BACKGROUND_COLOR * * @return string */ function get_background_color() { - $default = defined('BACKGROUND_COLOR') ? BACKGROUND_COLOR : ''; - - return get_theme_mod('background_color', $default); + return get_theme_mod('background_color', get_theme_support( 'custom-background', 'default-color' ) ); } /** @@ -1700,73 +1095,20 @@ function background_color() { echo get_background_color(); } -/** - * Add callbacks for background image display. - * - * The parameter $header_callback callback will be required to display the - * content for the 'wp_head' action. The parameter $admin_header_callback - * callback will be added to Custom_Background class and that will be added - * to the 'admin_menu' action. - * - * @since 3.0.0 - * @uses Custom_Background Sets up for $admin_header_callback for administration panel display. - * - * @param callback $header_callback Call on 'wp_head' action. - * @param callback $admin_header_callback Call on custom background administration screen. - * @param callback $admin_image_div_callback Output a custom background image div on the custom background administration screen. Optional. - */ -function add_custom_background( $header_callback = '', $admin_header_callback = '', $admin_image_div_callback = '' ) { - if ( isset( $GLOBALS['custom_background'] ) ) - return; - - if ( empty( $header_callback ) ) - $header_callback = '_custom_background_cb'; - - add_action( 'wp_head', $header_callback ); - - add_theme_support( 'custom-background', array( 'callback' => $header_callback ) ); - - if ( ! is_admin() ) - return; - require_once( ABSPATH . 'wp-admin/custom-background.php' ); - $GLOBALS['custom_background'] = new Custom_Background( $admin_header_callback, $admin_image_div_callback ); - add_action( 'admin_menu', array( &$GLOBALS['custom_background'], 'init' ) ); -} - -/** - * Remove custom background support. - * - * @since 3.1.0 - * @see add_custom_background() - * - * @return bool Whether support was removed. - */ -function remove_custom_background() { - if ( ! current_theme_supports( 'custom-background' ) ) - return false; - - $callback = get_theme_support( 'custom-background' ); - remove_action( 'wp_head', $callback[0]['callback'] ); - _remove_theme_support( 'custom-background' ); - - if ( is_admin() ) { - remove_action( 'admin_menu', array( &$GLOBALS['custom_background'], 'init' ) ); - unset( $GLOBALS['custom_background'] ); - } - - return true; -} - /** * Default custom background callback. * * @since 3.0.0 - * @see add_custom_background() * @access protected */ function _custom_background_cb() { + // $background is the saved custom image, or the default image. $background = get_background_image(); - $color = get_background_color(); + + // $color is the saved custom color. + // A default has to be specified in style.css. It will not be printed here. + $color = get_theme_mod( 'background_color' ); + if ( ! $background && ! $color ) return; @@ -1793,7 +1135,7 @@ function _custom_background_cb() { $style .= $image . $repeat . $position . $attachment; } ?> -<style type="text/css"> +<style type="text/css" id="custom-background-css"> body.custom-background { <?php echo trim( $style ); ?> } </style> <?php @@ -1806,10 +1148,14 @@ body.custom-background { <?php echo trim( $style ); ?> } * the theme root. It also accepts an array of stylesheets. * It is optional and defaults to 'editor-style.css'. * - * Supports RTL stylesheets automatically by searching for the -rtl prefix, e.g. - * editor-style-rtl.css. If an array of stylesheets is passed to add_editor_style(), + * This function automatically adds another stylesheet with -rtl prefix, e.g. editor-style-rtl.css. + * If that file doesn't exist, it is removed before adding the stylesheet(s) to TinyMCE. + * If an array of stylesheets is passed to add_editor_style(), * RTL is only added for the first stylesheet. * + * Since version 3.4 the TinyMCE body has .rtl CSS class. + * It is a better option to use that class and add any RTL styles to the main stylesheet. + * * @since 3.0.0 * * @param mixed $stylesheet Optional. Stylesheet name or array thereof, relative to theme root. @@ -1863,13 +1209,172 @@ function add_theme_support( $feature ) { global $_wp_theme_features; if ( func_num_args() == 1 ) - $_wp_theme_features[$feature] = true; + $args = true; else - $_wp_theme_features[$feature] = array_slice( func_get_args(), 1 ); + $args = array_slice( func_get_args(), 1 ); + + switch ( $feature ) { + case 'post-formats' : + if ( is_array( $args[0] ) ) + $args[0] = array_intersect( $args[0], array_keys( get_post_format_slugs() ) ); + break; + + case 'custom-header-uploads' : + return add_theme_support( 'custom-header', array( 'uploads' => true ) ); + break; + + case 'custom-header' : + if ( ! is_array( $args ) ) + $args = array( 0 => array() ); + + $defaults = array( + 'default-image' => '', + 'random-default' => false, + 'width' => 0, + 'height' => 0, + 'flex-height' => false, + 'flex-width' => false, + 'default-text-color' => '', + 'header-text' => true, + 'uploads' => true, + 'wp-head-callback' => '', + 'admin-head-callback' => '', + 'admin-preview-callback' => '', + ); + + $jit = isset( $args[0]['__jit'] ); + unset( $args[0]['__jit'] ); + + // Merge in data from previous add_theme_support() calls. + // The first value registered wins. (A child theme is set up first.) + if ( isset( $_wp_theme_features['custom-header'] ) ) + $args[0] = wp_parse_args( $_wp_theme_features['custom-header'][0], $args[0] ); + + // Load in the defaults at the end, as we need to insure first one wins. + // This will cause all constants to be defined, as each arg will then be set to the default. + if ( $jit ) + $args[0] = wp_parse_args( $args[0], $defaults ); + + // If a constant was defined, use that value. Otherwise, define the constant to ensure + // the constant is always accurate (and is not defined later, overriding our value). + // As stated above, the first value wins. + // Once we get to wp_loaded (just-in-time), define any constants we haven't already. + // Constants are lame. Don't reference them. This is just for backwards compatibility. + + if ( defined( 'NO_HEADER_TEXT' ) ) + $args[0]['header-text'] = ! NO_HEADER_TEXT; + elseif ( isset( $args[0]['header-text'] ) ) + define( 'NO_HEADER_TEXT', empty( $args[0]['header-text'] ) ); + + if ( defined( 'HEADER_IMAGE_WIDTH' ) ) + $args[0]['width'] = (int) HEADER_IMAGE_WIDTH; + elseif ( isset( $args[0]['width'] ) ) + define( 'HEADER_IMAGE_WIDTH', (int) $args[0]['width'] ); + + if ( defined( 'HEADER_IMAGE_HEIGHT' ) ) + $args[0]['height'] = (int) HEADER_IMAGE_HEIGHT; + elseif ( isset( $args[0]['height'] ) ) + define( 'HEADER_IMAGE_HEIGHT', (int) $args[0]['height'] ); + + if ( defined( 'HEADER_TEXTCOLOR' ) ) + $args[0]['default-text-color'] = HEADER_TEXTCOLOR; + elseif ( isset( $args[0]['default-text-color'] ) ) + define( 'HEADER_TEXTCOLOR', $args[0]['default-text-color'] ); + + if ( defined( 'HEADER_IMAGE' ) ) + $args[0]['default-image'] = HEADER_IMAGE; + elseif ( isset( $args[0]['default-image'] ) ) + define( 'HEADER_IMAGE', $args[0]['default-image'] ); + + if ( $jit && ! empty( $args[0]['default-image'] ) ) + $args[0]['random-default'] = false; + + // If headers are supported, and we still don't have a defined width or height, + // we have implicit flex sizes. + if ( $jit ) { + if ( empty( $args[0]['width'] ) && empty( $args[0]['flex-width'] ) ) + $args[0]['flex-width'] = true; + if ( empty( $args[0]['height'] ) && empty( $args[0]['flex-height'] ) ) + $args[0]['flex-height'] = true; + } + + break; + + case 'custom-background' : + if ( ! is_array( $args ) ) + $args = array( 0 => array() ); + + $defaults = array( + 'default-image' => '', + 'default-color' => '', + 'wp-head-callback' => '_custom_background_cb', + 'admin-head-callback' => '', + 'admin-preview-callback' => '', + ); + + $jit = isset( $args[0]['__jit'] ); + unset( $args[0]['__jit'] ); + + // Merge in data from previous add_theme_support() calls. The first value registered wins. + if ( isset( $_wp_theme_features['custom-background'] ) ) + $args[0] = wp_parse_args( $_wp_theme_features['custom-background'][0], $args[0] ); + + if ( $jit ) + $args[0] = wp_parse_args( $args[0], $defaults ); + + if ( defined( 'BACKGROUND_COLOR' ) ) + $args[0]['default-color'] = BACKGROUND_COLOR; + elseif ( isset( $args[0]['default-color'] ) || $jit ) + define( 'BACKGROUND_COLOR', $args[0]['default-color'] ); + + if ( defined( 'BACKGROUND_IMAGE' ) ) + $args[0]['default-image'] = BACKGROUND_IMAGE; + elseif ( isset( $args[0]['default-image'] ) || $jit ) + define( 'BACKGROUND_IMAGE', $args[0]['default-image'] ); + + break; + } + + $_wp_theme_features[ $feature ] = $args; +} - if ( $feature == 'post-formats' && is_array( $_wp_theme_features[$feature][0] ) ) - $_wp_theme_features[$feature][0] = array_intersect( $_wp_theme_features[$feature][0], array_keys( get_post_format_slugs() ) ); +/** + * Registers the internal custom header and background routines. + * + * @since 3.4.0 + * @access private + */ +function _custom_header_background_just_in_time() { + global $custom_image_header, $custom_background; + + if ( current_theme_supports( 'custom-header' ) ) { + // In case any constants were defined after an add_custom_image_header() call, re-run. + add_theme_support( 'custom-header', array( '__jit' => true ) ); + + $args = get_theme_support( 'custom-header' ); + if ( $args[0]['wp-head-callback'] ) + add_action( 'wp_head', $args[0]['wp-head-callback'] ); + + if ( is_admin() ) { + require_once( ABSPATH . 'wp-admin/custom-header.php' ); + $custom_image_header = new Custom_Image_Header( $args[0]['admin-head-callback'], $args[0]['admin-preview-callback'] ); + } + } + + if ( current_theme_supports( 'custom-background' ) ) { + // In case any constants were defined after an add_custom_background() call, re-run. + add_theme_support( 'custom-background', array( '__jit' => true ) ); + + $args = get_theme_support( 'custom-background' ); + add_action( 'wp_head', $args[0]['wp-head-callback'] ); + + if ( is_admin() ) { + require_once( ABSPATH . 'wp-admin/custom-background.php' ); + $custom_background = new Custom_Background( $args[0]['admin-head-callback'], $args[0]['admin-preview-callback'] ); + } + } } +add_action( 'wp_loaded', '_custom_header_background_just_in_time' ); /** * Gets the theme support arguments passed when registering that support @@ -1880,10 +1385,24 @@ function add_theme_support( $feature ) { */ function get_theme_support( $feature ) { global $_wp_theme_features; - if ( !isset( $_wp_theme_features[$feature] ) ) + if ( ! isset( $_wp_theme_features[ $feature ] ) ) return false; - else - return $_wp_theme_features[$feature]; + + if ( func_num_args() <= 1 ) + return $_wp_theme_features[ $feature ]; + + $args = array_slice( func_get_args(), 1 ); + switch ( $feature ) { + case 'custom-header' : + case 'custom-background' : + if ( isset( $_wp_theme_features[ $feature ][0][ $args[0] ] ) ) + return $_wp_theme_features[ $feature ][0][ $args[0] ]; + return false; + break; + default : + return $_wp_theme_features[ $feature ]; + break; + } } /** @@ -1899,8 +1418,9 @@ function get_theme_support( $feature ) { */ function remove_theme_support( $feature ) { // Blacklist: for internal registrations not used directly by themes. - if ( in_array( $feature, array( 'custom-background', 'custom-header', 'editor-style', 'widgets', 'menus' ) ) ) + if ( in_array( $feature, array( 'editor-style', 'widgets', 'menus' ) ) ) return false; + return _remove_theme_support( $feature ); } @@ -1913,9 +1433,35 @@ function remove_theme_support( $feature ) { function _remove_theme_support( $feature ) { global $_wp_theme_features; - if ( ! isset( $_wp_theme_features[$feature] ) ) + switch ( $feature ) { + case 'custom-header-uploads' : + if ( ! isset( $_wp_theme_features['custom-header'] ) ) + return false; + add_theme_support( 'custom-header', array( 'uploads' => false ) ); + return; // Do not continue - custom-header-uploads no longer exists. + } + + if ( ! isset( $_wp_theme_features[ $feature ] ) ) return false; - unset( $_wp_theme_features[$feature] ); + + switch ( $feature ) { + case 'custom-header' : + $support = get_theme_support( 'custom-header' ); + if ( $support[0]['wp-head-callback'] ) + remove_action( 'wp_head', $support[0]['wp-head-callback'] ); + remove_action( 'admin_menu', array( $GLOBALS['custom_image_header'], 'init' ) ); + unset( $GLOBALS['custom_image_header'] ); + break; + + case 'custom-background' : + $support = get_theme_support( 'custom-background' ); + remove_action( 'wp_head', $support[0]['wp-head-callback'] ); + remove_action( 'admin_menu', array( $GLOBALS['custom_background'], 'init' ) ); + unset( $GLOBALS['custom_background'] ); + break; + } + + unset( $_wp_theme_features[ $feature ] ); return true; } @@ -1929,6 +1475,9 @@ function _remove_theme_support( $feature ) { function current_theme_supports( $feature ) { global $_wp_theme_features; + if ( 'custom-header-uploads' == $feature ) + return current_theme_supports( 'custom-header', 'uploads' ); + if ( !isset( $_wp_theme_features[$feature] ) ) return false; @@ -1938,11 +1487,10 @@ function current_theme_supports( $feature ) { $args = array_slice( func_get_args(), 1 ); - // @todo Allow pluggable arg checking switch ( $feature ) { case 'post-thumbnails': // post-thumbnails can be registered for only certain content/post types by passing - // an array of types to add_theme_support(). If no array was passed, then + // an array of types to add_theme_support(). If no array was passed, then // any type is accepted if ( true === $_wp_theme_features[$feature] ) // Registered for all types return true; @@ -1956,9 +1504,17 @@ function current_theme_supports( $feature ) { $post_format = $args[0]; return in_array( $post_format, $_wp_theme_features[$feature][0] ); break; + + case 'custom-header': + case 'custom-background' : + // specific custom header and background capabilities can be registered by passing + // an array to add_theme_support() + $header_support = $args[0]; + return ( isset( $_wp_theme_features[$feature][0][$header_support] ) && $_wp_theme_features[$feature][0][$header_support] ); + break; } - return true; + return apply_filters('current_theme_supports-' . $feature, true, $args, $_wp_theme_features[$feature]); } /** @@ -2000,11 +1556,121 @@ add_action( 'delete_attachment', '_delete_attachment_theme_mod' ); /** * Checks if a theme has been changed and runs 'after_switch_theme' hook on the next WP load * - * @since 3.3 + * @since 3.3.0 */ function check_theme_switched() { - if ( false !== ( $old_theme = get_option( 'theme_switched' ) ) && !empty( $old_theme ) ) { - do_action( 'after_switch_theme', $old_theme ); + if ( $stylesheet = get_option( 'theme_switched' ) ) { + $old_theme = wp_get_theme( $stylesheet ); + + if ( $old_theme->exists() ) + do_action( 'after_switch_theme', $old_theme->get('Name'), $old_theme ); + else + do_action( 'after_switch_theme', $stylesheet ); + update_option( 'theme_switched', false ); } } + +/** + * Includes and instantiates the WP_Customize_Manager class. + * + * Fires when ?wp_customize=on or on wp-admin/customize.php. + * + * @since 3.4.0 + */ +function _wp_customize_include() { + if ( ! ( ( isset( $_REQUEST['wp_customize'] ) && 'on' == $_REQUEST['wp_customize'] ) + || ( is_admin() && 'customize.php' == basename( $_SERVER['PHP_SELF'] ) ) + ) ) + return; + + require( ABSPATH . WPINC . '/class-wp-customize-manager.php' ); + // Init Customize class + $GLOBALS['wp_customize'] = new WP_Customize_Manager; +} +add_action( 'plugins_loaded', '_wp_customize_include' ); + +/** + * Adds settings for the customize-loader script. + * + * @since 3.4.0 + */ +function _wp_customize_loader_settings() { + global $wp_scripts; + + $admin_origin = parse_url( admin_url() ); + $home_origin = parse_url( home_url() ); + $cross_domain = ( strtolower( $admin_origin[ 'host' ] ) != strtolower( $home_origin[ 'host' ] ) ); + + $browser = array( + 'mobile' => wp_is_mobile(), + 'ios' => wp_is_mobile() && preg_match( '/iPad|iPod|iPhone/', $_SERVER['HTTP_USER_AGENT'] ), + ); + + $settings = array( + 'url' => esc_url( admin_url( 'customize.php' ) ), + 'isCrossDomain' => $cross_domain, + 'browser' => $browser, + ); + + $script = 'var _wpCustomizeLoaderSettings = ' . json_encode( $settings ) . ';'; + + $data = $wp_scripts->get_data( 'customize-loader', 'data' ); + if ( $data ) + $script = "$data\n$script"; + + $wp_scripts->add_data( 'customize-loader', 'data', $script ); +} +add_action( 'admin_enqueue_scripts', '_wp_customize_loader_settings' ); + +/** + * Returns a URL to load the theme customizer. + * + * @since 3.4.0 + * + * @param string $stylesheet Optional. Theme to customize. Defaults to current theme. + */ +function wp_customize_url( $stylesheet = null ) { + $url = admin_url( 'customize.php' ); + if ( $stylesheet ) + $url .= '?theme=' . $stylesheet; + return esc_url( $url ); +} + +/** + * Prints a script to check whether or not the customizer is supported, + * and apply either the no-customize-support or customize-support class + * to the body. + * + * This function MUST be called inside the body tag. + * + * Ideally, call this function immediately after the body tag is opened. + * This prevents a flash of unstyled content. + * + * It is also recommended that you add the "no-customize-support" class + * to the body tag by default. + * + * @since 3.4.0 + */ +function wp_customize_support_script() { + $admin_origin = parse_url( admin_url() ); + $home_origin = parse_url( home_url() ); + $cross_domain = ( strtolower( $admin_origin[ 'host' ] ) != strtolower( $home_origin[ 'host' ] ) ); + + ?> + <script type="text/javascript"> + (function() { + var request, b = document.body, c = 'className', cs = 'customize-support', rcs = new RegExp('(^|\\s+)(no-)?'+cs+'(\\s+|$)'); + +<?php if ( $cross_domain ): ?> + request = (function(){ var xhr = new XMLHttpRequest(); return ('withCredentials' in xhr); })(); +<?php else: ?> + request = true; +<?php endif; ?> + + b[c] = b[c].replace( rcs, '' ); + b[c] += ( window.postMessage && request ? ' ' : ' no-' ) + cs; + }()); + </script> + <?php +} \ No newline at end of file diff --git a/wp-includes/update.php b/wp-includes/update.php index f832dc285..7fdaede33 100644 --- a/wp-includes/update.php +++ b/wp-includes/update.php @@ -34,6 +34,12 @@ function wp_version_check() { $current->version_checked = $wp_version; } + // Wait 60 seconds between multiple version check requests + $timeout = 60; + $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); + if ( $time_not_changed ) + return false; + $locale = apply_filters( 'core_version_check_locale', get_locale() ); // Update last_checked for current to prevent multiple blocking requests if request hangs @@ -85,10 +91,11 @@ function wp_version_check() { return false; $body = trim( wp_remote_retrieve_body( $response ) ); - if ( ! $body = maybe_unserialize( $body ) ) - return false; - if ( ! isset( $body['offers'] ) ) + $body = maybe_unserialize( $body ); + + if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) return false; + $offers = $body['offers']; foreach ( $offers as &$offer ) { @@ -143,30 +150,44 @@ function wp_update_plugins() { $new_option = new stdClass; $new_option->last_checked = time(); - // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours. - $timeout = in_array( current_filter(), array( 'load-plugins.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200; - $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); - - $plugin_changed = false; - foreach ( $plugins as $file => $p ) { - $new_option->checked[ $file ] = $p['Version']; - if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) ) - $plugin_changed = true; + // Check for update on a different schedule, depending on the page. + switch ( current_filter() ) { + case 'load-update-core.php' : + $timeout = 60; // 1 min + break; + case 'load-plugins.php' : + case 'load-update.php' : + $timeout = 3600; // 1 hour + break; + default : + $timeout = 43200; // 12 hours } - if ( isset ( $current->response ) && is_array( $current->response ) ) { - foreach ( $current->response as $plugin_file => $update_details ) { - if ( ! isset($plugins[ $plugin_file ]) ) { + $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); + + if ( $time_not_changed ) { + $plugin_changed = false; + foreach ( $plugins as $file => $p ) { + $new_option->checked[ $file ] = $p['Version']; + + if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) ) $plugin_changed = true; - break; + } + + if ( isset ( $current->response ) && is_array( $current->response ) ) { + foreach ( $current->response as $plugin_file => $update_details ) { + if ( ! isset($plugins[ $plugin_file ]) ) { + $plugin_changed = true; + break; + } } } - } - // Bail if we've checked in the last 12 hours and if nothing has changed - if ( $time_not_changed && !$plugin_changed ) - return false; + // Bail if we've checked recently and if nothing has changed + if ( ! $plugin_changed ) + return false; + } // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); @@ -185,9 +206,9 @@ function wp_update_plugins() { if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; - $response = unserialize( wp_remote_retrieve_body( $raw_response ) ); + $response = maybe_unserialize( wp_remote_retrieve_body( $raw_response ) ); - if ( false !== $response ) + if ( is_array( $response ) ) $new_option->response = $response; else $new_option->response = array(); @@ -214,57 +235,68 @@ function wp_update_themes() { if ( defined( 'WP_INSTALLING' ) ) return false; - if ( !function_exists( 'get_themes' ) ) - require_once( ABSPATH . 'wp-includes/theme.php' ); - - $installed_themes = get_themes( ); + $installed_themes = wp_get_themes(); $last_update = get_site_transient( 'update_themes' ); if ( ! is_object($last_update) ) $last_update = new stdClass; - // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours. - $timeout = in_array( current_filter(), array( 'load-themes.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200; - $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked ); - $themes = array(); $checked = array(); - $exclude_fields = array('Template Files', 'Stylesheet Files', 'Status', 'Theme Root', 'Theme Root URI', 'Template Dir', 'Stylesheet Dir', 'Description', 'Tags', 'Screenshot'); // Put slug of current theme into request. $themes['current_theme'] = get_option( 'stylesheet' ); - foreach ( (array) $installed_themes as $theme_title => $theme ) { - $themes[$theme['Stylesheet']] = array(); - $checked[$theme['Stylesheet']] = $theme['Version']; - - $themes[$theme['Stylesheet']]['Name'] = $theme['Name']; - $themes[$theme['Stylesheet']]['Version'] = $theme['Version']; + foreach ( $installed_themes as $theme ) { + $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); + + $themes[ $theme->get_stylesheet() ] = array( + 'Name' => $theme->get('Name'), + 'Title' => $theme->get('Name'), + 'Version' => $theme->get('Version'), + 'Author' => $theme->get('Author'), + 'Author URI' => $theme->get('AuthorURI'), + 'Template' => $theme->get_template(), + 'Stylesheet' => $theme->get_stylesheet(), + ); + } - foreach ( (array) $theme as $key => $value ) { - if ( !in_array($key, $exclude_fields) ) - $themes[$theme['Stylesheet']][$key] = $value; - } + // Check for update on a different schedule, depending on the page. + switch ( current_filter() ) { + case 'load-update-core.php' : + $timeout = 60; // 1 min + break; + case 'load-themes.php' : + case 'load-update.php' : + $timeout = 3600; // 1 hour + break; + default : + $timeout = 43200; // 12 hours } - $theme_changed = false; - foreach ( $checked as $slug => $v ) { - $update_request->checked[ $slug ] = $v; + $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked ); - if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) ) - $theme_changed = true; - } + if ( $time_not_changed ) { + $theme_changed = false; + foreach ( $checked as $slug => $v ) { + $update_request->checked[ $slug ] = $v; - if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { - foreach ( $last_update->response as $slug => $update_details ) { - if ( ! isset($checked[ $slug ]) ) { + if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) ) $theme_changed = true; - break; + } + + if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { + foreach ( $last_update->response as $slug => $update_details ) { + if ( ! isset($checked[ $slug ]) ) { + $theme_changed = true; + break; + } } } - } - if ( $time_not_changed && !$theme_changed ) - return false; + // Bail if we've checked recently and if nothing has changed + if ( ! $theme_changed ) + return false; + } // Update last_checked for current to prevent multiple blocking requests if request hangs $last_update->last_checked = time(); @@ -285,8 +317,8 @@ function wp_update_themes() { $new_update->last_checked = time( ); $new_update->checked = $checked; - $response = unserialize( wp_remote_retrieve_body( $raw_response ) ); - if ( false !== $response ) + $response = maybe_unserialize( wp_remote_retrieve_body( $raw_response ) ); + if ( is_array( $response ) ) $new_update->response = $response; set_site_transient( 'update_themes', $new_update ); @@ -397,7 +429,7 @@ function wp_schedule_update_checks() { wp_schedule_event(time(), 'twicedaily', 'wp_update_themes'); } -if ( ! is_main_site() && ! is_network_admin() ) +if ( ( ! is_main_site() && ! is_network_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) return; add_action( 'admin_init', '_maybe_update_core' ); @@ -416,5 +448,3 @@ add_action( 'admin_init', '_maybe_update_themes' ); add_action( 'wp_update_themes', 'wp_update_themes' ); add_action('init', 'wp_schedule_update_checks'); - -?> diff --git a/wp-includes/user.php b/wp-includes/user.php index cdec57e2c..6b342c857 100644 --- a/wp-includes/user.php +++ b/wp-includes/user.php @@ -65,7 +65,6 @@ function wp_signon( $credentials = '', $secure_cookie = '' ) { return $user; } - /** * Authenticate the user using the username and password. */ @@ -154,7 +153,7 @@ function wp_authenticate_cookie($user, $username, $password) { function count_user_posts($userid) { global $wpdb; - $where = get_posts_by_author_sql('post', TRUE, $userid); + $where = get_posts_by_author_sql('post', true, $userid); $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" ); @@ -165,11 +164,12 @@ function count_user_posts($userid) { * Number of posts written by a list of users. * * @since 3.0.0 - * @param array $user_ids Array of user IDs. + * + * @param array $users Array of user IDs. * @param string|array $post_type Optional. Post type to check. Defaults to post. * @return array Amount of posts each user has written. */ -function count_many_users_posts($users, $post_type = 'post' ) { +function count_many_users_posts( $users, $post_type = 'post' ) { global $wpdb; $count = array(); @@ -259,7 +259,7 @@ function get_user_option( $option, $user = 0, $deprecated = '' ) { else $user = new WP_User( $user ); - if ( ! isset( $user->ID ) ) + if ( ! $user->exists() ) return false; if ( $user->has_prop( $wpdb->prefix . $option ) ) // Blog specific @@ -359,7 +359,6 @@ class WP_User_Query { var $query_orderby; var $query_limit; - /** * PHP5 constructor * @@ -379,6 +378,7 @@ class WP_User_Query { 'include' => array(), 'exclude' => array(), 'search' => '', + 'search_columns' => array(), 'orderby' => 'login', 'order' => 'ASC', 'offset' => '', @@ -477,14 +477,19 @@ class WP_User_Query { if ( $wild ) $search = trim($search, '*'); - if ( false !== strpos( $search, '@') ) - $search_columns = array('user_email'); - elseif ( is_numeric($search) ) - $search_columns = array('user_login', 'ID'); - elseif ( preg_match('|^https?://|', $search) ) - $search_columns = array('user_url'); - else - $search_columns = array('user_login', 'user_nicename'); + $search_columns = array(); + if ( $qv['search_columns'] ) + $search_columns = array_intersect( $qv['search_columns'], array( 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename' ) ); + if ( ! $search_columns ) { + if ( false !== strpos( $search, '@') ) + $search_columns = array('user_email'); + elseif ( is_numeric($search) ) + $search_columns = array('user_login', 'ID'); + elseif ( preg_match('|^https?://|', $search) && ! wp_is_large_network( 'users' ) ) + $search_columns = array('user_url'); + else + $search_columns = array('user_login', 'user_nicename'); + } $this->query_where .= $this->get_search_sql( $search, $search_columns, $wild ); } @@ -647,7 +652,7 @@ function get_users( $args = array() ) { * * @param int $user_id User ID * @param bool $all Whether to retrieve all blogs, or only blogs that are not marked as deleted, archived, or spam. - * @return array A list of the user's blogs. False if the user was not found or an empty array if the user has no blogs. + * @return array A list of the user's blogs. An empty array if the user doesn't exist or belongs to no blogs. */ function get_blogs_of_user( $user_id, $all = false ) { global $wpdb; @@ -656,11 +661,11 @@ function get_blogs_of_user( $user_id, $all = false ) { // Logged out users can't have blogs if ( empty( $user_id ) ) - return false; + return array(); $keys = get_user_meta( $user_id ); if ( empty( $keys ) ) - return false; + return array(); if ( ! is_multisite() ) { $blog_id = get_current_blog_id(); @@ -725,8 +730,8 @@ function get_blogs_of_user( $user_id, $all = false ) { * @since MU 1.1 * @uses get_blogs_of_user() * - * @param int $user_id The unique ID of the user - * @param int $blog Optional. If no blog_id is provided, current site is used + * @param int $user_id Optional. The unique ID of the user. Defaults to the current user. + * @param int $blog_id Optional. ID of the blog to check. Defaults to the current site. * @return bool */ function is_user_member_of_blog( $user_id = 0, $blog_id = 0 ) { @@ -740,10 +745,7 @@ function is_user_member_of_blog( $user_id = 0, $blog_id = 0 ) { $blog_id = get_current_blog_id(); $blogs = get_blogs_of_user( $user_id ); - if ( is_array( $blogs ) ) - return array_key_exists( $blog_id, $blogs ); - else - return false; + return array_key_exists( $blog_id, $blogs ); } /** @@ -793,7 +795,7 @@ function delete_user_meta($user_id, $meta_key, $meta_value = '') { * @link http://codex.wordpress.org/Function_Reference/get_user_meta * * @param int $user_id Post ID. - * @param string $key The meta key to retrieve. + * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys. * @param bool $single Whether to return a single value. * @return mixed Will be an array if $single is false. Will be value of meta data field if $single * is true. @@ -828,7 +830,7 @@ function update_user_meta($user_id, $meta_key, $meta_value, $prev_value = '') { * Count number of users who have each of the user roles. * * Assumes there are neither duplicated nor orphaned capabilities meta_values. - * Assumes role names are unique phrases. Same assumption made by WP_User_Query::prepare_query() + * Assumes role names are unique phrases. Same assumption made by WP_User_Query::prepare_query() * Using $strategy = 'time' this is CPU-intensive and should handle around 10^7 users. * Using $strategy = 'memory' this is memory-intensive and should handle around 10^5 users, but see WP Bug #12257. * @@ -855,7 +857,7 @@ function count_users($strategy = 'time') { // Build a CPU-intensive query that will return concise information. $select_count = array(); foreach ( $avail_roles as $this_role => $name ) { - $select_count[] = "COUNT(NULLIF(`meta_value` LIKE '%" . like_escape($this_role) . "%', FALSE))"; + $select_count[] = "COUNT(NULLIF(`meta_value` LIKE '%\"" . like_escape( $this_role ) . "\"%', false))"; } $select_count = implode(', ', $select_count); @@ -883,14 +885,14 @@ function count_users($strategy = 'time') { $users_of_blog = $wpdb->get_col( "SELECT meta_value FROM $wpdb->usermeta WHERE meta_key = '{$blog_prefix}capabilities'" ); foreach ( $users_of_blog as $caps_meta ) { - $b_roles = unserialize($caps_meta); - if ( is_array($b_roles) ) { - foreach ( $b_roles as $b_role => $val ) { - if ( isset($avail_roles[$b_role]) ) { - $avail_roles[$b_role]++; - } else { - $avail_roles[$b_role] = 1; - } + $b_roles = maybe_unserialize($caps_meta); + if ( ! is_array( $b_roles ) ) + continue; + foreach ( $b_roles as $b_role => $val ) { + if ( isset($avail_roles[$b_role]) ) { + $avail_roles[$b_role]++; + } else { + $avail_roles[$b_role] = 1; } } } @@ -935,17 +937,17 @@ function setup_userdata($for_user_id = '') { $user_ID = (int) $user->ID; $user_level = (int) isset($user->user_level) ? $user->user_level : 0; - if ( 0 == $user->ID ) { + if ( ! $user->exists() ) { $user_login = $user_email = $user_url = $user_pass_md5 = $user_identity = ''; return; } - $userdata = $user; - $user_login = $user->user_login; - $user_email = $user->user_email; - $user_url = $user->user_url; - $user_pass_md5 = md5($user->user_pass); - $user_identity = $user->display_name; + $userdata = $user; + $user_login = $user->user_login; + $user_email = $user->user_email; + $user_url = $user->user_url; + $user_pass_md5 = md5( $user->user_pass ); + $user_identity = $user->display_name; } /** @@ -974,7 +976,7 @@ function setup_userdata($for_user_id = '') { * <li>id - Default is the value of the 'name' parameter. ID attribute of select element.</li> * <li>class - Class attribute of select element.</li> * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.</li> - * <li>who - Which users to query. Currently only 'authors' is supported. Default is all users.</li> + * <li>who - Which users to query. Currently only 'authors' is supported. Default is all users.</li> * </ol> * * @since 2.3.0 @@ -1056,17 +1058,12 @@ function wp_dropdown_users( $args = '' ) { * when calling filters. * * @since 2.3.0 - * @uses apply_filters() Calls 'edit_$field' and '{$field_no_prefix}_edit_pre' passing $value and - * $user_id if $context == 'edit' and field name prefix == 'user_'. - * - * @uses apply_filters() Calls 'edit_user_$field' passing $value and $user_id if $context == 'db'. - * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db' and field name prefix == 'user_'. - * @uses apply_filters() Calls '{$field}_pre' passing $value if $context == 'db' and field name prefix != 'user_'. - * + * @uses apply_filters() Calls 'edit_$field' passing $value and $user_id if $context == 'edit'. + * $field is prefixed with 'user_' if it isn't already. + * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db'. $field is prefixed with + * 'user_' if it isn't already. * @uses apply_filters() Calls '$field' passing $value, $user_id and $context if $context == anything - * other than 'raw', 'edit' and 'db' and field name prefix == 'user_'. - * @uses apply_filters() Calls 'user_$field' passing $value if $context == anything other than 'raw', - * 'edit' and 'db' and field name prefix != 'user_'. + * other than 'raw', 'edit' and 'db'. $field is prefixed with 'user_' if it isn't already. * * @param string $field The user Object field name. * @param mixed $value The user Object value. @@ -1086,11 +1083,7 @@ function sanitize_user_field($field, $value, $user_id, $context) { if ( !is_string($value) && !is_numeric($value) ) return $value; - $prefixed = false; - if ( false !== strpos($field, 'user_') ) { - $prefixed = true; - $field_no_prefix = str_replace('user_', '', $field); - } + $prefixed = false !== strpos( $field, 'user_' ); if ( 'edit' == $context ) { if ( $prefixed ) { @@ -1147,15 +1140,19 @@ function update_user_caches($user) { * * @since 3.0.0 * - * @param int $id User ID + * @param WP_User|int $user User object or ID to be cleaned from the cache */ -function clean_user_cache($id) { - $user = WP_User::get_data_by( 'id', $id ); +function clean_user_cache( $user ) { + if ( is_numeric( $user ) ) + $user = new WP_User( $user ); - wp_cache_delete($id, 'users'); - wp_cache_delete($user->user_login, 'userlogins'); - wp_cache_delete($user->user_email, 'useremail'); - wp_cache_delete($user->user_nicename, 'userslugs'); + if ( ! $user->exists() ) + return; + + wp_cache_delete( $user->ID, 'users' ); + wp_cache_delete( $user->user_login, 'userlogins' ); + wp_cache_delete( $user->user_email, 'useremail' ); + wp_cache_delete( $user->user_nicename, 'userslugs' ); } /** @@ -1461,7 +1458,6 @@ function wp_create_user($username, $password, $email = '') { return wp_insert_user($userdata); } - /** * Return a list of meta keys that wp_insert_user() is supposed to set. * @@ -1493,5 +1489,3 @@ function _wp_get_user_contactmethods( $user = null ) { ); return apply_filters( 'user_contactmethods', $user_contactmethods, $user ); } - -?> diff --git a/wp-includes/vars.php b/wp-includes/vars.php index 3b824a959..7585793df 100644 --- a/wp-includes/vars.php +++ b/wp-includes/vars.php @@ -98,4 +98,29 @@ $is_IIS = !$is_apache && (strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') ! */ $is_iis7 = $is_IIS && (strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/7.') !== false); -?> +/** + * Test if the current browser runs on a mobile device (smart phone, tablet, etc.) + * + * @return bool true|false + */ +function wp_is_mobile() { + static $is_mobile; + + if ( isset($is_mobile) ) + return $is_mobile; + + if ( empty($_SERVER['HTTP_USER_AGENT']) ) { + $is_mobile = false; + } elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.) + || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false + || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false + || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false + || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false + || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false ) { + $is_mobile = true; + } else { + $is_mobile = false; + } + + return $is_mobile; +} diff --git a/wp-includes/version.php b/wp-includes/version.php index 67e53dcd0..e65b0c8dc 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,21 +4,21 @@ * * @global string $wp_version */ -$wp_version = '3.3.2'; +$wp_version = '3.4'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * * @global int $wp_db_version */ -$wp_db_version = 19470; +$wp_db_version = 20596; /** * Holds the TinyMCE version * * @global string $tinymce_version */ -$tinymce_version = '345-20111127'; +$tinymce_version = '349-20805'; /** * Holds the cache manifest version diff --git a/wp-includes/widgets.php b/wp-includes/widgets.php index 2dfafcb5d..765bbffcf 100644 --- a/wp-includes/widgets.php +++ b/wp-includes/widgets.php @@ -681,7 +681,6 @@ function wp_sidebar_description( $id ) { return esc_html( $wp_registered_sidebars[$id]['description'] ); } - /** * Remove widget from sidebar. * @@ -1149,7 +1148,7 @@ function _get_widget_id_base($id) { * Handle sidebars config after theme change * * @access private - * @since 3.3 + * @since 3.3.0 */ function _wp_sidebars_changed() { global $sidebars_widgets; diff --git a/wp-includes/wlwmanifest.xml b/wp-includes/wlwmanifest.xml index eb1314733..98504ee40 100644 --- a/wp-includes/wlwmanifest.xml +++ b/wp-includes/wlwmanifest.xml @@ -41,4 +41,3 @@ </buttons> </manifest> - diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php index e9ada84dc..f41874592 100644 --- a/wp-includes/wp-db.php +++ b/wp-includes/wp-db.php @@ -404,9 +404,10 @@ class wpdb { * Keys are column names, values are format types: 'ID' => '%d' * * @since 2.8.0 - * @see wpdb:prepare() - * @see wpdb:insert() - * @see wpdb:update() + * @see wpdb::prepare() + * @see wpdb::insert() + * @see wpdb::update() + * @see wpdb::delete() * @see wp_set_wpdb_vars() * @access public * @var array @@ -573,7 +574,7 @@ class wpdb { function set_prefix( $prefix, $set_table_names = true ) { if ( preg_match( '|[^a-z0-9_]|i', $prefix ) ) - return new WP_Error('invalid_db_prefix', /*WP_I18N_DB_BAD_PREFIX*/'Invalid database prefix'/*/WP_I18N_DB_BAD_PREFIX*/); + return new WP_Error('invalid_db_prefix', 'Invalid database prefix' ); $old_prefix = is_multisite() ? '' : $prefix; @@ -745,14 +746,15 @@ class wpdb { if ( !@mysql_select_db( $db, $dbh ) ) { $this->ready = false; - $this->bail( sprintf( /*WP_I18N_DB_SELECT_DB*/'<h1>Can’t select database</h1> + wp_load_translations_early(); + $this->bail( sprintf( __( '<h1>Can’t select database</h1> <p>We were able to connect to the database server (which means your username and password is okay) but not able to select the <code>%1$s</code> database.</p> <ul> <li>Are you sure it exists?</li> <li>Does the user <code>%2$s</code> have permission to use the <code>%1$s</code> database?</li> <li>On some systems the name of your database is prefixed with your username, so it would be like <code>username_%1$s</code>. Could that be the problem?</li> </ul> -<p>If you don\'t know how to set up a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href="http://wordpress.org/support/">WordPress Support Forums</a>.</p>'/*/WP_I18N_DB_SELECT_DB*/, htmlspecialchars( $db, ENT_QUOTES ), htmlspecialchars( $this->dbuser, ENT_QUOTES ) ), 'db_select_fail' ); +<p>If you don\'t know how to set up a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href="http://wordpress.org/support/">WordPress Support Forums</a>.</p>' ), htmlspecialchars( $db, ENT_QUOTES ), htmlspecialchars( $this->dbuser, ENT_QUOTES ) ), 'db_select_fail' ); return; } } @@ -923,10 +925,12 @@ class wpdb { if ( $this->suppress_errors ) return false; + wp_load_translations_early(); + if ( $caller = $this->get_caller() ) - $error_str = sprintf( /*WP_I18N_DB_QUERY_ERROR_FULL*/'WordPress database error %1$s for query %2$s made by %3$s'/*/WP_I18N_DB_QUERY_ERROR_FULL*/, $str, $this->last_query, $caller ); + $error_str = sprintf( __( 'WordPress database error %1$s for query %2$s made by %3$s' ), $str, $this->last_query, $caller ); else - $error_str = sprintf( /*WP_I18N_DB_QUERY_ERROR*/'WordPress database error %1$s for query %2$s'/*/WP_I18N_DB_QUERY_ERROR*/, $str, $this->last_query ); + $error_str = sprintf( __( 'WordPress database error %1$s for query %2$s' ), $str, $this->last_query ); if ( function_exists( 'error_log' ) && ( $log_file = @ini_get( 'error_log' ) ) @@ -1037,7 +1041,8 @@ class wpdb { } if ( !$this->dbh ) { - $this->bail( sprintf( /*WP_I18N_DB_CONN_ERROR*/" + wp_load_translations_early(); + $this->bail( sprintf( __( " <h1>Error establishing a database connection</h1> <p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>%s</code>. This could mean your host's database server is down.</p> <ul> @@ -1046,7 +1051,7 @@ class wpdb { <li>Are you sure that the database server is running?</li> </ul> <p>If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p> -"/*/WP_I18N_DB_CONN_ERROR*/, htmlspecialchars( $this->dbhost, ENT_QUOTES ) ), 'db_connect_fail' ); +" ), htmlspecialchars( $this->dbhost, ENT_QUOTES ) ), 'db_connect_fail' ); return; } @@ -1073,8 +1078,7 @@ class wpdb { return false; // some queries are made before the plugins have been loaded, and thus cannot be filtered with this method - if ( function_exists( 'apply_filters' ) ) - $query = apply_filters( 'query', $query ); + $query = apply_filters( 'query', $query ); $return_val = 0; $this->flush(); @@ -1191,7 +1195,7 @@ class wpdb { * @see wp_set_wpdb_vars() * * @param string $table table name - * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). + * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. * @param string $type Optional. What type of operation is this? INSERT or REPLACE. Defaults to INSERT. @@ -1212,7 +1216,7 @@ class wpdb { $form = '%s'; $formatted_fields[] = $form; } - $sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES ('" . implode( "','", $formatted_fields ) . "')"; + $sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES (" . implode( ",", $formatted_fields ) . ")"; return $this->query( $this->prepare( $sql, $data ) ); } @@ -1234,7 +1238,7 @@ class wpdb { * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be "raw". * @param array|string $format Optional. An array of formats to be mapped to each of the values in $data. If string, that format will be used for all of the values in $data. * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types. - * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings. + * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings. * @return int|false The number of rows updated, or false on error. */ function update( $table, $data, $where, $format = null, $where_format = null ) { @@ -1268,6 +1272,49 @@ class wpdb { return $this->query( $this->prepare( $sql, array_merge( array_values( $data ), array_values( $where ) ) ) ); } + /** + * Delete a row in the table + * + * <code> + * wpdb::delete( 'table', array( 'ID' => 1 ) ) + * wpdb::delete( 'table', array( 'ID' => 1 ), array( '%d' ) ) + * </code> + * + * @since 3.4.0 + * @see wpdb::prepare() + * @see wpdb::$field_types + * @see wp_set_wpdb_vars() + * + * @param string $table table name + * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be "raw". + * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings unless otherwise specified in wpdb::$field_types. + * @return int|false The number of rows updated, or false on error. + */ + function delete( $table, $where, $where_format = null ) { + if ( ! is_array( $where ) ) + return false; + + $bits = $wheres = array(); + + $where_formats = $where_format = (array) $where_format; + + foreach ( array_keys( $where ) as $field ) { + if ( !empty( $where_format ) ) { + $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0]; + } elseif ( isset( $this->field_types[ $field ] ) ) { + $form = $this->field_types[ $field ]; + } else { + $form = '%s'; + } + + $wheres[] = "$field = $form"; + } + + $sql = "DELETE FROM $table WHERE " . implode( ' AND ', $wheres ); + return $this->query( $this->prepare( $sql, $where ) ); + } + + /** * Retrieve one variable from the database. * @@ -1278,8 +1325,8 @@ class wpdb { * @since 0.71 * * @param string|null $query Optional. SQL query. Defaults to null, use the result from the previous query. - * @param int $x Optional. Column of value to return. Indexed from 0. - * @param int $y Optional. Row of value to return. Indexed from 0. + * @param int $x Optional. Column of value to return. Indexed from 0. + * @param int $y Optional. Row of value to return. Indexed from 0. * @return string|null Database query result (as string), or null on failure */ function get_var( $query = null, $x = 0, $y = 0 ) { @@ -1326,7 +1373,7 @@ class wpdb { } elseif ( $output == ARRAY_N ) { return $this->last_result[$y] ? array_values( get_object_vars( $this->last_result[$y] ) ) : null; } else { - $this->print_error(/*WP_I18N_DB_GETROW_ERROR*/" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"/*/WP_I18N_DB_GETROW_ERROR*/); + $this->print_error( " \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N" ); } } @@ -1365,7 +1412,7 @@ class wpdb { * @param string $query SQL query. * @param string $output Optional. Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K constants. With one of the first three, return an array of rows indexed from 0 by SQL result row number. * Each row is an associative array (column => value, ...), a numerically indexed array (0 => value, ...), or an object. ( ->column = value ), respectively. - * With OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value. Duplicate keys are discarded. + * With OBJECT_K, return an associative array of row objects keyed by the value of each row's first column's value. Duplicate keys are discarded. * @return mixed Database query results */ function get_results( $query = null, $output = OBJECT ) { @@ -1441,8 +1488,7 @@ class wpdb { * @return true */ function timer_start() { - $mtime = explode( ' ', microtime() ); - $this->time_start = $mtime[1] + $mtime[0]; + $this->time_start = microtime( true ); return true; } @@ -1451,13 +1497,10 @@ class wpdb { * * @since 1.5.0 * - * @return int Total time spent on the query, in milliseconds + * @return float Total time spent on the query, in seconds */ function timer_stop() { - $mtime = explode( ' ', microtime() ); - $time_end = $mtime[1] + $mtime[0]; - $time_total = $time_end - $this->time_start; - return $time_total; + return ( microtime( true ) - $this->time_start ); } /** @@ -1546,16 +1589,7 @@ class wpdb { * @return string The name of the calling function */ function get_caller() { - $trace = array_reverse( debug_backtrace() ); - $caller = array(); - - foreach ( $trace as $call ) { - if ( isset( $call['class'] ) && __CLASS__ == $call['class'] ) - continue; // Filter out wpdb calls. - $caller[] = isset( $call['class'] ) ? "{$call['class']}->{$call['function']}" : $call['function']; - } - - return join( ', ', $caller ); + return wp_debug_backtrace_summary( __CLASS__ ); } /** @@ -1569,5 +1603,3 @@ class wpdb { return preg_replace( '/[^0-9.].*/', '', mysql_get_server_info( $this->dbh ) ); } } - -?> diff --git a/wp-includes/wp-diff.php b/wp-includes/wp-diff.php index ed36ee908..052bf1334 100644 --- a/wp-includes/wp-diff.php +++ b/wp-includes/wp-diff.php @@ -202,15 +202,14 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { $r = ''; // Does the aforementioned additional processing - // *_matches tell what rows are "the same" in orig and final. Those pairs will be diffed to get word changes + // *_matches tell what rows are "the same" in orig and final. Those pairs will be diffed to get word changes // match is numeric: an index in other column - // match is 'X': no match. It is a new row + // match is 'X': no match. It is a new row // *_rows are column vectors for the orig column and the final column. // row >= 0: an indix of the $orig or $final array // row < 0: a blank row for that column list($orig_matches, $final_matches, $orig_rows, $final_rows) = $this->interleave_changed_lines( $orig, $final ); - // These will hold the word changes as determined by an inline diff $orig_diffs = array(); $final_diffs = array(); @@ -231,7 +230,7 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { $stripped_diff = strlen(strip_tags( $diff )) * 2 - $stripped_matches; $diff_ratio = $stripped_matches / $stripped_diff; if ( $diff_ratio > $this->_diff_threshold ) - continue; // Too different. Don't save diffs. + continue; // Too different. Don't save diffs. } // Un-inline the diffs by removing del or ins @@ -241,11 +240,11 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { } foreach ( array_keys($orig_rows) as $row ) { - // Both columns have blanks. Ignore them. + // Both columns have blanks. Ignore them. if ( $orig_rows[$row] < 0 && $final_rows[$row] < 0 ) continue; - // If we have a word based diff, use it. Otherwise, use the normal line. + // If we have a word based diff, use it. Otherwise, use the normal line. if ( isset( $orig_diffs[$orig_rows[$row]] ) ) $orig_line = $orig_diffs[$orig_rows[$row]]; elseif ( isset( $orig[$orig_rows[$row]] ) ) @@ -260,9 +259,9 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { else $final_line = ''; - if ( $orig_rows[$row] < 0 ) { // Orig is blank. This is really an added row. + if ( $orig_rows[$row] < 0 ) { // Orig is blank. This is really an added row. $r .= $this->_added( array($final_line), false ); - } elseif ( $final_rows[$row] < 0 ) { // Final is blank. This is really a deleted row. + } elseif ( $final_rows[$row] < 0 ) { // Final is blank. This is really a deleted row. $r .= $this->_deleted( array($orig_line), false ); } else { // A true changed row. $r .= '<tr>' . $this->deletedLine( $orig_line ) . $this->addedLine( $final_line ) . "</tr>\n"; @@ -288,7 +287,7 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { */ function interleave_changed_lines( $orig, $final ) { - // Contains all pairwise string comparisons. Keys are such that this need only be a one dimensional array. + // Contains all pairwise string comparisons. Keys are such that this need only be a one dimensional array. $matches = array(); foreach ( array_keys($orig) as $o ) { foreach ( array_keys($final) as $f ) { @@ -309,7 +308,7 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { if ( isset($orig_matches[$o]) && isset($final_matches[$f]) ) continue; - // First match for these guys. Must be best match + // First match for these guys. Must be best match if ( !isset($orig_matches[$o]) && !isset($final_matches[$f]) ) { $orig_matches[$o] = $f; $final_matches[$f] = $o; @@ -329,7 +328,6 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { ksort($orig_matches); ksort($final_matches); - // Stores rows and blanks for each column. $orig_rows = $orig_rows_copy = array_keys($orig_matches); $final_rows = array_keys($final_matches); @@ -342,18 +340,17 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { if ( false === $final_pos ) { // This orig is paired with a blank final. array_splice( $final_rows, $orig_pos, 0, -1 ); - } elseif ( $final_pos < $orig_pos ) { // This orig's match is up a ways. Pad final with blank rows. + } elseif ( $final_pos < $orig_pos ) { // This orig's match is up a ways. Pad final with blank rows. $diff_pos = $final_pos - $orig_pos; while ( $diff_pos < 0 ) array_splice( $final_rows, $orig_pos, 0, $diff_pos++ ); - } elseif ( $final_pos > $orig_pos ) { // This orig's match is down a ways. Pad orig with blank rows. + } elseif ( $final_pos > $orig_pos ) { // This orig's match is down a ways. Pad orig with blank rows. $diff_pos = $orig_pos - $final_pos; while ( $diff_pos < 0 ) array_splice( $orig_rows, $orig_pos, 0, $diff_pos++ ); } } - // Pad the ends with blank rows if the columns aren't the same length $diff_count = count($orig_rows) - count($final_rows); if ( $diff_count < 0 ) { @@ -427,7 +424,7 @@ class WP_Text_Diff_Renderer_Table extends Text_Diff_Renderer { // L1-norm of difference vector. $difference = array_sum( array_map( array(&$this, 'difference'), $chars1, $chars2 ) ); - // $string1 has zero length? Odd. Give huge penalty by not dividing. + // $string1 has zero length? Odd. Give huge penalty by not dividing. if ( !$string1 ) return $difference; @@ -473,5 +470,3 @@ class WP_Text_Diff_Renderer_inline extends Text_Diff_Renderer_inline { } } - -?> diff --git a/wp-load.php b/wp-load.php index b9ae7e8a0..600805a2d 100644 --- a/wp-load.php +++ b/wp-load.php @@ -18,7 +18,7 @@ * @package WordPress */ -/** Define ABSPATH as this files directory */ +/** Define ABSPATH as this file's directory */ define( 'ABSPATH', dirname(__FILE__) . '/' ); error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR ); @@ -30,7 +30,7 @@ if ( file_exists( ABSPATH . 'wp-config.php') ) { } elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) { - /** The config file resides one level above ABSPATH but is not part of another install*/ + /** The config file resides one level above ABSPATH but is not part of another install */ require_once( dirname(ABSPATH) . '/wp-config.php' ); } else { @@ -39,22 +39,23 @@ if ( file_exists( ABSPATH . 'wp-config.php') ) { // Set a path for the link to the installer if ( strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false ) - $path = ''; + $path = 'setup-config.php'; else - $path = 'wp-admin/'; + $path = 'wp-admin/setup-config.php'; - require_once( ABSPATH . '/wp-includes/load.php' ); - require_once( ABSPATH . '/wp-includes/version.php' ); + define( 'WPINC', 'wp-includes' ); define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); + require_once( ABSPATH . WPINC . '/load.php' ); + require_once( ABSPATH . WPINC . '/version.php' ); + + wp_load_translations_early(); wp_check_php_mysql_versions(); // Die with an error message - require_once( ABSPATH . '/wp-includes/class-wp-error.php' ); - require_once( ABSPATH . '/wp-includes/functions.php' ); - require_once( ABSPATH . '/wp-includes/plugin.php' ); - $text_direction = /*WP_I18N_TEXT_DIRECTION*/'ltr'/*/WP_I18N_TEXT_DIRECTION*/; - wp_die(sprintf(/*WP_I18N_NO_CONFIG*/"<p>There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started.</p> <p>Need more help? <a href='http://codex.wordpress.org/Editing_wp-config.php'>We got it</a>.</p> <p>You can create a <code>wp-config.php</code> file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file.</p><p><a href='%ssetup-config.php' class='button'>Create a Configuration File</a></p>"/*/WP_I18N_NO_CONFIG*/, $path), /*WP_I18N_ERROR_TITLE*/'WordPress › Error'/*/WP_I18N_ERROR_TITLE*/, array('text_direction' => $text_direction)); + $die = __( "There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started." ) . '</p>'; + $die .= '<p>' . __( "Need more help? <a href='http://codex.wordpress.org/Editing_wp-config.php'>We got it</a>." ) . '</p>'; + $die .= '<p>' . __( "You can create a <code>wp-config.php</code> file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ) . '</p>'; + $die .= '<p><a href="' . $path . '" class="button">' . __( "Create a Configuration File" ) . '</a>'; + wp_die( $die, __( 'WordPress › Error' ) ); } - -?> \ No newline at end of file diff --git a/wp-login.php b/wp-login.php index efd037365..0b1df6078 100644 --- a/wp-login.php +++ b/wp-login.php @@ -39,7 +39,7 @@ if ( force_ssl_admin() && !is_ssl() ) { * @param WP_Error $wp_error Optional. WordPress Error Object */ function login_header($title = 'Log In', $message = '', $wp_error = '') { - global $error, $is_iphone, $interim_login, $current_site; + global $error, $interim_login, $current_site, $customize_login; // Don't index any of these forms add_action( 'login_head', 'wp_no_robots' ); @@ -54,39 +54,53 @@ function login_header($title = 'Log In', $message = '', $wp_error = '') { if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) ) add_action( 'login_head', 'wp_shake_js', 12 ); - ?> -<!DOCTYPE html> -<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> -<head> + ?><!DOCTYPE html> + <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> + <head> <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> <title><?php bloginfo('name'); ?> › <?php echo $title; ?></title> -<?php + <?php + wp_admin_css( 'wp-admin', true ); wp_admin_css( 'colors-fresh', true ); - if ( $is_iphone ) { ?> - <meta name="viewport" content="width=320; initial-scale=0.9; maximum-scale=1.0; user-scalable=0;" /> - <style type="text/css" media="screen"> - .login form, .login .message, #login_error { margin-left: 0px; } - .login #nav, .login #backtoblog { margin-left: 8px; } - .login h1 a { width: auto; } - #login { padding: 20px 0; } - </style> -<?php + if ( wp_is_mobile() ) { ?> + <meta name="viewport" content="width=320; initial-scale=0.9; maximum-scale=1.0; user-scalable=0;" /><?php } + if ( $customize_login ) + wp_enqueue_script( 'customize-base' ); + do_action( 'login_enqueue_scripts' ); - do_action( 'login_head' ); ?> -</head> -<body class="login"> -<?php if ( !is_multisite() ) { ?> -<div id="login"><h1><a href="<?php echo esc_url( apply_filters('login_headerurl', 'http://wordpress.org/') ); ?>" title="<?php echo esc_attr( apply_filters('login_headertitle', __( 'Powered by WordPress' ) ) ); ?>"><?php bloginfo('name'); ?></a></h1> -<?php } else { ?> -<div id="login"><h1><a href="<?php echo esc_url( apply_filters('login_headerurl', network_home_url() ) ); ?>" title="<?php echo esc_attr( apply_filters('login_headertitle', $current_site->site_name ) ); ?>"><span class="hide"><?php bloginfo('name'); ?></span></a></h1> -<?php } + do_action( 'login_head' ); + + if ( is_multisite() ) { + $login_header_url = network_home_url(); + $login_header_title = $current_site->site_name; + } else { + $login_header_url = __( 'http://wordpress.org/' ); + $login_header_title = __( 'Powered by WordPress' ); + } + + $login_header_url = apply_filters( 'login_headerurl', $login_header_url ); + $login_header_title = apply_filters( 'login_headertitle', $login_header_title ); + + // Don't allow interim logins to navigate away from the page. + if ( $interim_login ) + $login_header_url = '#'; + + ?> + </head> + <body class="login<?php if ( wp_is_mobile() ) echo ' mobile'; ?>"> + <div id="login"> + <h1><a href="<?php echo esc_url( $login_header_url ); ?>" title="<?php echo esc_attr( $login_header_title ); ?>"><?php bloginfo( 'name' ); ?></a></h1> + <?php + + unset( $login_header_url, $login_header_title ); $message = apply_filters('login_message', $message); - if ( !empty( $message ) ) echo $message . "\n"; + if ( !empty( $message ) ) + echo $message . "\n"; // In case a plugin uses $error rather than the $wp_errors object if ( !empty( $error ) ) { @@ -119,27 +133,31 @@ function login_header($title = 'Log In', $message = '', $wp_error = '') { * @param string $input_id Which input to auto-focus */ function login_footer($input_id = '') { - ?> + global $interim_login; + + // Don't allow interim logins to navigate away from the page. + if ( ! $interim_login ): ?> <p id="backtoblog"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php esc_attr_e( 'Are you lost?' ); ?>"><?php printf( __( '← Back to %s' ), get_bloginfo( 'title', 'display' ) ); ?></a></p> - </div> + <?php endif; ?> -<?php if ( !empty($input_id) ) : ?> -<script type="text/javascript"> -try{document.getElementById('<?php echo $input_id; ?>').focus();}catch(e){} -if(typeof wpOnload=='function')wpOnload(); -</script> -<?php endif; ?> + </div> -<?php do_action('login_footer'); ?> -<div class="clear"></div> -</body> -</html> -<?php + <?php if ( !empty($input_id) ) : ?> + <script type="text/javascript"> + try{document.getElementById('<?php echo $input_id; ?>').focus();}catch(e){} + if(typeof wpOnload=='function')wpOnload(); + </script> + <?php endif; ?> + + <?php do_action('login_footer'); ?> + <div class="clear"></div> + </body> + </html> + <?php } function wp_shake_js() { - global $is_iphone; - if ( $is_iphone ) + if ( wp_is_mobile() ) return; ?> <script type="text/javascript"> @@ -208,7 +226,7 @@ function retrieve_password() { $wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login)); } $message = __('Someone requested that the password be reset for the following account:') . "\r\n\r\n"; - $message .= network_site_url() . "\r\n\r\n"; + $message .= network_home_url( '/' ) . "\r\n\r\n"; $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n"; $message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n"; $message .= __('To reset your password, visit the following address:') . "\r\n\r\n"; @@ -239,8 +257,7 @@ function retrieve_password() { * * @param string $key Hash to validate sending user's password * @param string $login The user login - * - * @return object|WP_Error + * @return object|WP_Error User's database row on success, error object for invalid keys */ function check_password_reset_key($key, $login) { global $wpdb; @@ -264,9 +281,8 @@ function check_password_reset_key($key, $login) { /** * Handles resetting the user's password. * - * @uses $wpdb WordPress Database object - * - * @param string $key Hash to validate sending user's password + * @param object $user The user + * @param string $new_pass New password for the user in plaintext */ function reset_password($user, $new_pass) { do_action('password_reset', $user, $new_pass); @@ -341,7 +357,7 @@ if ( isset($_GET['key']) ) $action = 'resetpass'; // validate action so as to default to the login screen -if ( !in_array($action, array('logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login'), true) && false === has_filter('login_form_' . $action) ) +if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login' ), true ) && false === has_filter( 'login_form_' . $action ) ) $action = 'login'; nocache_headers(); @@ -369,6 +385,21 @@ do_action( 'login_form_' . $action ); $http_post = ('POST' == $_SERVER['REQUEST_METHOD']); switch ($action) { +case 'postpass' : + if ( empty( $wp_hasher ) ) { + require_once( ABSPATH . 'wp-includes/class-phpass.php' ); + // By default, use the portable hash from phpass + $wp_hasher = new PasswordHash(8, true); + } + + // 10 days + setcookie( 'wp-postpass_' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $_POST['post_password'] ) ), time() + 864000, COOKIEPATH ); + + wp_safe_redirect( wp_get_referer() ); + exit(); + +break; + case 'logout' : check_admin_referer('log-out'); wp_logout(); @@ -536,6 +567,7 @@ case 'login' : default: $secure_cookie = ''; $interim_login = isset($_REQUEST['interim-login']); + $customize_login = isset( $_REQUEST['customize-login'] ); // If the user wants ssl but the session is not ssl, force a secure cookie. if ( !empty($_POST['log']) && !force_ssl_admin() ) { @@ -560,7 +592,7 @@ default: $reauth = empty($_REQUEST['reauth']) ? false : true; // If the user was redirected to a secure login form from a non-secure admin page, and secure login is required but secure admin is not, then don't use a secure - // cookie and redirect back to the referring non-secure admin page. This allows logins to always be POSTed over SSL while allowing the user to choose visiting + // cookie and redirect back to the referring non-secure admin page. This allows logins to always be POSTed over SSL while allowing the user to choose visiting // the admin via http or https. if ( !$secure_cookie && is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) ) $secure_cookie = false; @@ -572,11 +604,22 @@ default: if ( !is_wp_error($user) && !$reauth ) { if ( $interim_login ) { $message = '<p class="message">' . __('You have logged in successfully.') . '</p>'; - login_header( '', $message ); ?> - <script type="text/javascript">setTimeout( function(){window.close()}, 8000);</script> - <p class="alignright"> - <input type="button" class="button-primary" value="<?php esc_attr_e('Close'); ?>" onclick="window.close()" /></p> - </div></body></html> + login_header( '', $message ); + + if ( ! $customize_login ) : ?> + <script type="text/javascript">setTimeout( function(){window.close()}, 8000);</script> + <p class="alignright"> + <input type="button" class="button-primary" value="<?php esc_attr_e('Close'); ?>" onclick="window.close()" /></p> +<?php endif; + + ?></div><?php + + do_action('login_footer'); + + if ( $customize_login ) : ?> + <script type="text/javascript">setTimeout( function(){ new wp.customize.Messenger({ url: '<?php echo wp_customize_url(); ?>', channel: 'login' }).send('login') }, 1000 );</script> +<?php endif; ?> + </body></html> <?php exit; } @@ -603,7 +646,7 @@ default: $errors->add('test_cookie', __("<strong>ERROR</strong>: Cookies are blocked or not supported by your browser. You must <a href='http://www.google.com/cookies.html'>enable cookies</a> to use WordPress.")); // Some parts of this script use the main login form to display a message - if ( isset($_GET['loggedout']) && TRUE == $_GET['loggedout'] ) + if ( isset($_GET['loggedout']) && true == $_GET['loggedout'] ) $errors->add('loggedout', __('You are now logged out.'), 'message'); elseif ( isset($_GET['registration']) && 'disabled' == $_GET['registration'] ) $errors->add('registerdisabled', __('User registration is currently not allowed.')); @@ -615,6 +658,8 @@ default: $errors->add('registered', __('Registration complete. Please check your e-mail.'), 'message'); elseif ( $interim_login ) $errors->add('expired', __('Your session has expired. Please log-in again.'), 'message'); + elseif ( strpos( $redirect_to, 'about.php?updated' ) ) + $errors->add('updated', __( '<strong>You have successfully updated WordPress!</strong> Please log back in to experience the awesomeness.' ), 'message' ); // Clear any stale cookies. if ( $reauth ) @@ -645,6 +690,9 @@ default: <?php } else { ?> <input type="hidden" name="redirect_to" value="<?php echo esc_attr($redirect_to); ?>" /> <?php } ?> +<?php if ( $customize_login ) : ?> + <input type="hidden" name="customize-login" value="1" /> +<?php endif; ?> <input type="hidden" name="testcookie" value="1" /> </p> </form> @@ -691,4 +739,3 @@ if(typeof wpOnload=='function')wpOnload(); login_footer(); break; } // end action switch -?> diff --git a/wp-mail.php b/wp-mail.php index 4ecc9548e..7fc3967b6 100644 --- a/wp-mail.php +++ b/wp-mail.php @@ -105,7 +105,7 @@ for ( $i = 1; $i <= $count; $i++ ) { // Set the author using the email address (From or Reply-To, the last used) // otherwise use the site admin - if ( preg_match('/(From|Reply-To): /', $line) ) { + if ( ! $author_found && preg_match( '/^(From|Reply-To): /', $line ) ) { if ( preg_match('|[a-z0-9_.-]+@[a-z0-9_.-]+(?!.*<)|i', $line, $matches) ) $author = $matches[0]; else @@ -114,14 +114,10 @@ for ( $i = 1; $i <= $count; $i++ ) { if ( is_email($author) ) { echo '<p>' . sprintf(__('Author is %s'), $author) . '</p>'; $userdata = get_user_by('email', $author); - if ( empty($userdata) ) { - $author_found = false; - } else { + if ( ! empty( $userdata ) ) { $post_author = $userdata->ID; $author_found = true; } - } else { - $author_found = false; } } @@ -161,7 +157,7 @@ for ( $i = 1; $i <= $count; $i++ ) { $user = new WP_User($post_author); $post_status = ( $user->has_cap('publish_posts') ) ? 'publish' : 'pending'; } else { - // Author not found in DB, set status to pending. Author already set to admin. + // Author not found in DB, set status to pending. Author already set to admin. $post_status = 'pending'; } @@ -226,11 +222,9 @@ for ( $i = 1; $i <= $count; $i++ ) { $pop3->reset(); exit; } else { - echo '<p>' . sprintf(__('Mission complete. Message <strong>%s</strong> deleted.'), $i) . '</p>'; + echo '<p>' . sprintf(__('Mission complete. Message <strong>%s</strong> deleted.'), $i) . '</p>'; } } $pop3->quit(); - -?> diff --git a/wp-settings.php b/wp-settings.php index 7897e7347..cb950184f 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -70,6 +70,7 @@ require( ABSPATH . WPINC . '/functions.php' ); require( ABSPATH . WPINC . '/class-wp.php' ); require( ABSPATH . WPINC . '/class-wp-error.php' ); require( ABSPATH . WPINC . '/plugin.php' ); +require( ABSPATH . WPINC . '/pomo/mo.php' ); // Include the wpdb class and, if present, a db.php database drop-in. require_wp_db(); @@ -81,9 +82,8 @@ wp_set_wpdb_vars(); // Start the WordPress object cache, or an external object cache if the drop-in is present. wp_start_object_cache(); -// Load early WordPress files. +// Attach the default filters. require( ABSPATH . WPINC . '/default-filters.php' ); -require( ABSPATH . WPINC . '/pomo/mo.php' ); // Initialize multisite if enabled. if ( is_multisite() ) { @@ -99,13 +99,12 @@ register_shutdown_function( 'shutdown_action_hook' ); if ( SHORTINIT ) return false; -// Load the l18n library. -require( ABSPATH . WPINC . '/l10n.php' ); +// Load the L10n library. +require_once( ABSPATH . WPINC . '/l10n.php' ); // Run the installer if WordPress is not installed. wp_not_installed(); - // Load most of WordPress. require( ABSPATH . WPINC . '/class-wp-walker.php' ); require( ABSPATH . WPINC . '/class-wp-ajax-response.php' ); @@ -113,6 +112,8 @@ require( ABSPATH . WPINC . '/formatting.php' ); require( ABSPATH . WPINC . '/capabilities.php' ); require( ABSPATH . WPINC . '/query.php' ); require( ABSPATH . WPINC . '/theme.php' ); +require( ABSPATH . WPINC . '/class-wp-theme.php' ); +require( ABSPATH . WPINC . '/template.php' ); require( ABSPATH . WPINC . '/user.php' ); require( ABSPATH . WPINC . '/meta.php' ); require( ABSPATH . WPINC . '/general-template.php' ); @@ -120,6 +121,7 @@ require( ABSPATH . WPINC . '/link-template.php' ); require( ABSPATH . WPINC . '/author-template.php' ); require( ABSPATH . WPINC . '/post.php' ); require( ABSPATH . WPINC . '/post-template.php' ); +require( ABSPATH . WPINC . '/post-thumbnail-template.php' ); require( ABSPATH . WPINC . '/category.php' ); require( ABSPATH . WPINC . '/category-template.php' ); require( ABSPATH . WPINC . '/comment.php' ); @@ -237,7 +239,7 @@ $wp_query =& $wp_the_query; * @global object $wp_rewrite * @since 1.5.0 */ -$wp_rewrite = new WP_Rewrite(); +$GLOBALS['wp_rewrite'] = new WP_Rewrite(); /** * WordPress Object @@ -261,15 +263,14 @@ wp_templating_constants( ); // Load the default text localization domain. load_default_textdomain(); -// Find the blog locale. $locale = get_locale(); $locale_file = WP_LANG_DIR . "/$locale.php"; if ( ( 0 === validate_file( $locale ) ) && is_readable( $locale_file ) ) require( $locale_file ); -unset($locale_file); +unset( $locale_file ); // Pull in locale data after loading text domain. -require( ABSPATH . WPINC . '/locale.php' ); +require_once( ABSPATH . WPINC . '/locale.php' ); /** * WordPress Locale object for loading locale domain date and various strings. @@ -288,9 +289,6 @@ if ( ! defined( 'WP_INSTALLING' ) || 'wp-activate.php' === $pagenow ) { do_action( 'after_setup_theme' ); -// Load any template functions the theme supports. -require_if_theme_supports( 'post-thumbnails', ABSPATH . WPINC . '/post-thumbnail-template.php' ); - // Set up current user. $wp->init(); @@ -323,4 +321,3 @@ if ( is_multisite() ) { * @since 3.0.0 */ do_action('wp_loaded'); -?> diff --git a/wp-signup.php b/wp-signup.php index 6fa1742f0..2cd93c821 100644 --- a/wp-signup.php +++ b/wp-signup.php @@ -95,7 +95,7 @@ function show_blog_form($blogname = '', $blog_title = '', $errors = '') { <div id="privacy"> <p class="privacy-intro"> <label for="blog_public_on"><?php _e('Privacy:') ?></label> - <?php _e('Allow my site to appear in search engines like Google, Technorati, and in public listings around this network.'); ?> + <?php _e( 'Allow search engines to index this site.' ); ?> <br style="clear:both" /> <label class="checkbox" for="blog_public_on"> <input type="radio" id="blog_public_on" name="blog_public" value="1" <?php if ( !isset( $_POST['blog_public'] ) || $_POST['blog_public'] == '1' ) { ?>checked="checked"<?php } ?> /> @@ -218,7 +218,7 @@ function confirm_another_blog_signup($domain, $path, $blog_title, $user_name, $u ?> <h2><?php printf( __( 'The site %s is yours.' ), "<a href='http://{$domain}{$path}'>{$blog_title}</a>" ) ?></h2> <p> - <?php printf( __( '<a href="http://%1$s">http://%2$s</a> is your new site. <a href="%3$s">Log in</a> as “%4$s” using your existing password.' ), $domain.$path, $domain.$path, "http://" . $domain.$path . "wp-login.php", $user_name ) ?> + <?php printf( __( '<a href="http://%1$s">http://%2$s</a> is your new site. <a href="%3$s">Log in</a> as “%4$s” using your existing password.' ), $domain.$path, $domain.$path, "http://" . $domain.$path . "wp-login.php", $user_name ) ?> </p> <?php do_action( 'signup_finished' ); @@ -229,13 +229,8 @@ function signup_user($user_name = '', $user_email = '', $errors = '') { if ( !is_wp_error($errors) ) $errors = new WP_Error(); - if ( isset( $_POST[ 'signup_for' ] ) ) - $signup[ esc_html( $_POST[ 'signup_for' ] ) ] = 'checked="checked"'; - else - $signup[ 'blog' ] = 'checked="checked"'; - //TODO - This doesn't seem to do anything do we really need it? - $signup['user'] = isset( $signup['user'] ) ? $signup['user'] : ''; + $signup_for = isset( $_POST[ 'signup_for' ] ) ? esc_html( $_POST[ 'signup_for' ] ) : 'blog'; // allow definition of default variables $filtered_results = apply_filters('signup_user_init', array('user_name' => $user_name, 'user_email' => $user_email, 'errors' => $errors )); @@ -257,10 +252,10 @@ function signup_user($user_name = '', $user_email = '', $errors = '') { <?php } elseif ( $active_signup == 'user' ) { ?> <input id="signupblog" type="hidden" name="signup_for" value="user" /> <?php } else { ?> - <input id="signupblog" type="radio" name="signup_for" value="blog" <?php echo $signup['blog'] ?> /> + <input id="signupblog" type="radio" name="signup_for" value="blog" <?php checked( $signup_for, 'blog' ); ?> /> <label class="checkbox" for="signupblog"><?php _e('Gimme a site!') ?></label> <br /> - <input id="signupuser" type="radio" name="signup_for" value="user" <?php echo $signup['user'] ?> /> + <input id="signupuser" type="radio" name="signup_for" value="user" <?php checked( $signup_for, 'user' ); ?> /> <label class="checkbox" for="signupuser"><?php _e('Just a username, please.') ?></label> <?php } ?> </p> @@ -294,7 +289,7 @@ function confirm_user_signup($user_name, $user_email) { ?> <h2><?php printf( __( '%s is your new username' ), $user_name) ?></h2> <p><?php _e( 'But, before you can start using your new username, <strong>you must activate it</strong>.' ) ?></p> - <p><?php printf(__( 'Check your inbox at <strong>%1$s</strong> and click the link given.' ), $user_email) ?></p> + <p><?php printf( __( 'Check your inbox at <strong>%s</strong> and click the link given.' ), $user_email ); ?></p> <p><?php _e( 'If you do not activate your username within two days, you will have to sign up again.' ); ?></p> <?php do_action( 'signup_finished' ); diff --git a/wp-trackback.php b/wp-trackback.php index 737fbcecd..06e47507b 100644 --- a/wp-trackback.php +++ b/wp-trackback.php @@ -108,4 +108,3 @@ if ( !empty($tb_url) && !empty($title) ) { do_action('trackback_post', $wpdb->insert_id); trackback_response(0); } -?> \ No newline at end of file diff --git a/xmlrpc.php b/xmlrpc.php index ff7bfcde9..2d3822ca5 100644 --- a/xmlrpc.php +++ b/xmlrpc.php @@ -54,9 +54,6 @@ include_once(ABSPATH . 'wp-admin/includes/admin.php'); include_once(ABSPATH . WPINC . '/class-IXR.php'); include_once(ABSPATH . WPINC . '/class-wp-xmlrpc-server.php'); -// Turn off all warnings and errors. -// error_reporting(0); - /** * Posts submitted via the xmlrpc interface get that title * @name post_default_title @@ -64,47 +61,26 @@ include_once(ABSPATH . WPINC . '/class-wp-xmlrpc-server.php'); */ $post_default_title = ""; -/** - * Whether to enable XMLRPC Logging. - * - * @name xmlrpc_logging - * @var int|bool - */ -$xmlrpc_logging = 0; +// Allow for a plugin to insert a different class to handle requests. +$wp_xmlrpc_server_class = apply_filters('wp_xmlrpc_server_class', 'wp_xmlrpc_server'); +$wp_xmlrpc_server = new $wp_xmlrpc_server_class; + +// Fire off the request +$wp_xmlrpc_server->serve_request(); + +exit; /** * logIO() - Writes logging info to a file. * - * @uses $xmlrpc_logging - * @package WordPress - * @subpackage Logging + * @deprecated 3.4.0 + * @deprecated Use error_log() * * @param string $io Whether input or output * @param string $msg Information describing logging reason. - * @return bool Always return true */ -function logIO($io,$msg) { - global $xmlrpc_logging; - if ($xmlrpc_logging) { - $fp = fopen("../xmlrpc.log","a+"); - $date = gmdate("Y-m-d H:i:s "); - $iot = ($io == "I") ? " Input: " : " Output: "; - fwrite($fp, "\n\n".$date.$iot.$msg); - fclose($fp); - } - return true; -} - -if ( isset($HTTP_RAW_POST_DATA) ) - logIO("I", $HTTP_RAW_POST_DATA); - -// Make sure wp_die output is XML -add_filter( 'wp_die_handler', '_xmlrpc_wp_die_filter' ); - -// Allow for a plugin to insert a different class to handle requests. -$wp_xmlrpc_server_class = apply_filters('wp_xmlrpc_server_class', 'wp_xmlrpc_server'); -$wp_xmlrpc_server = new $wp_xmlrpc_server_class; - -// Fire off the request -$wp_xmlrpc_server->serve_request(); -?> \ No newline at end of file +function logIO( $io, $msg ) { + _deprecated_function( __FUNCTION__, '3.4', 'error_log()' ); + if ( ! empty( $GLOBALS['xmlrpc_logging'] ) ) + error_log( $io . ' - ' . $msg ); +} \ No newline at end of file -- GitLab